Cambridge, AQA and Edexcel past papers: questions, figures and mark schemes by part, and marking.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
For a teacher's own exam.now class: topic bands across the class with no pupil names, and how many pupils have started. Small groups are suppressed to protect pupils' privacy.
Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1.
The class id from exam.now. Leave it out for the teacher's own class.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http past-papers https://exam.now/mcp
For a teacher's own exam.now class: topic bands across the class with no pupil names, and how many pupils have started. Small groups are suppressed to protect pupils' privacy.
| Argument | Type | Description |
|---|---|---|
| class_id | string | The class id from exam.now. Leave it out for the teacher's own class. |
| subject_code* | string | Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1. |
{
"type": "object",
"required": [
"subject_code"
],
"properties": {
"class_id": {
"type": "string",
"maxLength": 64,
"description": "The class id from exam.now. Leave it out for the teacher's own class."
},
"subject_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
}
},
"additionalProperties": false
}Up to 5 exam.now write-ups of common mistakes in a subject, drawn from Cambridge examiner reports, each with a short summary and a link. Narrow them with a topic code or words.
| Argument | Type | Description |
|---|---|---|
| query | string | Words to match, e.g. "bounds". |
| topic | string | Topic code, e.g. E1.10. |
| subject_code* | string | Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1. |
{
"type": "object",
"required": [
"subject_code"
],
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"description": "Words to match, e.g. \"bounds\"."
},
"topic": {
"type": "string",
"maxLength": 24,
"description": "Topic code, e.g. E1.10."
},
"subject_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
}
},
"additionalProperties": false
}Cambridge exam dates for one or more syllabuses in the June or November 2026 series: component, date, morning or afternoon session and duration, with a link to the exam.now timetable. Zone defaults to the UK timetable.
| Argument | Type | Description |
|---|---|---|
| zone | string | Cambridge administrative zone. |
| series* | string | |
| subject_codes* | array |
{
"type": "object",
"required": [
"subject_codes",
"series"
],
"properties": {
"zone": {
"enum": [
"uk",
"1",
"2",
"3",
"4",
"5",
"6"
],
"type": "string",
"default": "uk",
"description": "Cambridge administrative zone."
},
"series": {
"enum": [
"june-2026",
"november-2026"
],
"type": "string"
},
"subject_codes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
},
"maxItems": 10,
"minItems": 1
}
},
"additionalProperties": false
}Find Cambridge, AQA or Edexcel past papers on exam.now from a free-text query such as "0580 june 2024 paper 4" or from structured fields. Returns up to 10 papers with their exam.now paper_id, title, session, duration, total marks, whether it can be answered on screen, and links to the question paper, mark scheme and examiner report. Use the paper_id with get_question, get_mark_scheme or get_paper.
| Argument | Type | Description |
|---|---|---|
| year | integer | |
| board | string | |
| limit | integer | |
| paper | integer | |
| query | string | Free text, e.g. "0625 w23 42" or "igcse physics november 2023 paper 4". |
| series | string | Exam series. |
| variant | integer | |
| subject_code | string | Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1. |
| qualification | string | e.g. "IGCSE", "O Level", "A Level", "GCSE". |
Past-paper questions on exam.now tagged with a syllabus topic, newest first. Pass the topic code (e.g. E2.5) or words (e.g. "simultaneous equations"). Returns question references with the start of each prompt, marks, whether it has a figure, and a link to the question.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| topic* | string | Topic code or words. |
| subject_code* | string | Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1. |
{
"type": "object",
"required": [
"subject_code",
"topic"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1
},
"topic": {
"type": "string",
"maxLength": 120,
"description": "Topic code or words."
},
"subject_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
}
},
"additionalProperties": false
}The official mark-scheme rows for one part of an exam.now past paper: each row's code (M1, A1, B1…), marks, answer, guidance and alternatives, the part's maximum marks, the paper's general marking principles, the mark-scheme PDF page and a link to it on exam.now.
| Argument | Type | Description |
|---|---|---|
| part* | string | Part id as the paper numbers it, e.g. "3", "3(a)" or "3(a)(i)". |
| paper_id* | string | exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component). |
| include_principles | boolean | Include the paper's general marking principles. |
{
"type": "object",
"required": [
"paper_id",
"part"
],
"properties": {
"part": {
"type": "string",
"maxLength": 24,
"description": "Part id as the paper numbers it, e.g. \"3\", \"3(a)\" or \"3(a)(i)\"."
},
"paper_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}_[a-z0-9]{2,8}_[A-Za-z0-9]{1,8}$",
"description": "exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component)."
},
"include_principles": {
"type": "boolean",
"default": false,
"description": "Include the paper's general marking principles."
}
},
"additionalProperties": false
}An exam.now past paper as structured JSON (metadata, questions, parts, prompts, marks, answer kinds, figure URLs), a few questions at a time. Use next_from to get the next page. include_mark_scheme adds the mark-scheme rows for the same questions and needs a linked exam.now account (a free one is fine).
| Argument | Type | Description |
|---|---|---|
| count | integer | How many questions to return. |
| paper_id* | string | exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component). |
| from_question | integer | First question to return (1-based position in the paper). |
| include_mark_scheme | boolean |
{
"type": "object",
"required": [
"paper_id"
],
"properties": {
"count": {
"type": "integer",
"default": 3,
"maximum": 5,
"minimum": 1,
"description": "How many questions to return."
},
"paper_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}_[a-z0-9]{2,8}_[A-Za-z0-9]{1,8}$",
"description": "exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component)."
},
"from_question": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "First question to return (1-based position in the paper)."
},
"include_mark_scheme": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}The text of one question or part from an exam.now past paper: context, prompt, marks, figures (with alt text), the answer surface (response kinds, tools, whether a calculator is allowed), topic codes and a link to the part on exam.now. Pass question for the whole question or part for one part.
| Argument | Type | Description |
|---|---|---|
| part | string | Part id as the paper numbers it, e.g. "3", "3(a)" or "3(a)(i)". |
| paper_id* | string | exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component). |
| question | string | Question number, e.g. "3". |
| include_images | boolean | Attach small figures as image content as well as URLs. |
{
"type": "object",
"required": [
"paper_id"
],
"properties": {
"part": {
"type": "string",
"maxLength": 24,
"description": "Part id as the paper numbers it, e.g. \"3\", \"3(a)\" or \"3(a)(i)\"."
},
"paper_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}_[a-z0-9]{2,8}_[A-Za-z0-9]{1,8}$",
"description": "exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component)."
},
"question": {
"type": "string",
"maxLength": 8,
"description": "Question number, e.g. \"3\"."
},
"include_images": {
"type": "boolean",
"default": true,
"description": "Attach small figures as image content as well as URLs."
}
},
"additionalProperties": false
}Mark a student's answer to one part against the official mark scheme with exam.now's marker. Returns marks awarded and available, the mark-scheme rows earned and missed, feedback and a common-mistake link, and saves the mark to the student's exam.now progress. Needs a linked exam.now account with marking.
| Argument | Type | Description |
|---|---|---|
| part* | string | Part id as the paper numbers it, e.g. "3", "3(a)" or "3(a)(i)". |
| answer* | string | The student's final answer, as they wrote it. |
| working | string | The student's working, if any. |
| paper_id* | string | exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component). |
{
"type": "object",
"required": [
"paper_id",
"part",
"answer"
],
"properties": {
"part": {
"type": "string",
"maxLength": 24,
"description": "Part id as the paper numbers it, e.g. \"3\", \"3(a)\" or \"3(a)(i)\"."
},
"answer": {
"type": "string",
"maxLength": 6000,
"minLength": 1,
"description": "The student's final answer, as they wrote it."
},
"working": {
"type": "string",
"maxLength": 6000,
"description": "The student's working, if any."
},
"paper_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}_[a-z0-9]{2,8}_[A-Za-z0-9]{1,8}$",
"description": "exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component)."
}
},
"additionalProperties": false
}Show one past-paper question as a practice card the student can answer, with its figures and answer surface. The model gets the full question so it can give hints without giving the answer away. Use mark_answer to mark the student's answer.
| Argument | Type | Description |
|---|---|---|
| part | string | Part id as the paper numbers it, e.g. "3", "3(a)" or "3(a)(i)". |
| paper_id* | string | exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component). |
| question | string | Question number, e.g. "3". |
{
"type": "object",
"required": [
"paper_id"
],
"properties": {
"part": {
"type": "string",
"maxLength": 24,
"description": "Part id as the paper numbers it, e.g. \"3\", \"3(a)\" or \"3(a)(i)\"."
},
"paper_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}_[a-z0-9]{2,8}_[A-Za-z0-9]{1,8}$",
"description": "exam.now paper id from find_past_paper, e.g. 0580_s24_42 (syllabus code, series letter s/w/m and two-digit year, component)."
},
"question": {
"type": "string",
"maxLength": 8,
"description": "Question number, e.g. \"3\"."
}
},
"additionalProperties": false
}The linked student's own progress in one subject on exam.now: each syllabus topic's band (secure, getting there, not yet), the next three topics to work on and links to practise them.
| Argument | Type | Description |
|---|---|---|
| subject_code* | string | Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1. |
{
"type": "object",
"required": [
"subject_code"
],
"properties": {
"subject_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"maximum": 2030,
"minimum": 2002
},
"board": {
"enum": [
"cambridge",
"aqa",
"edexcel"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1
},
"paper": {
"type": "integer",
"maximum": 9,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Free text, e.g. \"0625 w23 42\" or \"igcse physics november 2023 paper 4\"."
},
"series": {
"enum": [
"feb-march",
"may-june",
"oct-nov"
],
"type": "string",
"description": "Exam series."
},
"variant": {
"type": "integer",
"maximum": 9,
"minimum": 1
},
"subject_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{3,6}$",
"description": "Syllabus or specification code, e.g. 0580, 0625, 9709, 8300 or 1MA1."
},
"qualification": {
"type": "string",
"maxLength": 40,
"description": "e.g. \"IGCSE\", \"O Level\", \"A Level\", \"GCSE\"."
}
},
"additionalProperties": false
}