exam.now MCP
An official MCP server providing access to Cambridge, AQA, and Edexcel past papers, mark schemes, and AI marking tools. It allows agents to search for papers, retrieve questions and mark schemes, practice questions, and mark student answers against official schemes, requiring an account for marking features.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://exam.now/mcpWhat its tools do
11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (10)
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to exam.now ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Find past papers by subject, year, or paper code
- Retrieve specific questions and mark scheme lines
- Mark student answers against official mark schemes
- View topic progress and exam timetables
Source and maintenance
Protocol and capabilities
- Server
- exam-now 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 11 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
11 advertised
find_past_paper — Find a past paper
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 exam.now can show it on screen to answer (answer_on_screen, with the parts that need a graph or drawing and so can only be answered there), and links to the question paper, insert, mark scheme and examiner report where they exist. Use the paper_id with get_question, get_mark_scheme or get_paper.
{
"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
}{
"title": "Find a past paper",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_question — Get a question
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. answer.onSite is true when the part needs a graph or drawing, so it can only be answered on exam.now; otherwise the student can type the answer in chat and mark_answer marks it. Pass question for the whole question or part for one part.
{
"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
}{
"title": "Get a question",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_mark_scheme — Get a mark scheme
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.
{
"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
}{
"title": "Get a mark scheme",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_paper — Get a whole paper
An exam.now past paper as structured JSON (metadata, questions, parts, prompts, marks, answer kinds, figure URLs), a few questions at a time. Each part's answer.onSite is true when it needs a graph or drawing and can only be answered on exam.now; the other parts can be typed in chat for mark_answer. 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).
{
"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
}{
"title": "Get a whole paper",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_questions_by_topic — Find questions by topic
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.
{
"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
}{
"title": "Find questions by topic",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}practise_question — Practise a question
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.
{
"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
}{
"title": "Practise a question",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}mark_answer — Mark an answer
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.
{
"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, as they wrote it. Send it whenever they showed any: without it the marker judges the final answer only and can't give method marks."
},
"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
}{
"title": "Mark an answer",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}topic_progress — Topic progress
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 (weak topics first, then topics with too few marks to band and untried topics that are ready to start, each with a reason) and links to practise them.
{
"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
}{
"title": "Topic progress",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}exam_timetable — Exam timetable
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.
{
"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
}{
"title": "Exam timetable",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}common_mistakes — Common mistakes
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.
{
"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
}{
"title": "Common mistakes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}class_summary — Class summary
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.
{
"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
}{
"title": "Class summary",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
2 advertised
Practice card — Practice card
Shows one past-paper question as a practice card: its context, figures and prompt, the marks, and a box for the student's answer. Parts that need a graph, table or drawing link to exam.now instead. The student can check their answer against the mark scheme from the card.
ui://exam-now/practice-card-v1.htmlMark result — Mark result
Shows a marked answer: marks awarded out of marks available, each mark-scheme row earned or missed with its code, the marker's feedback, a common-mistake link and links to the mark scheme and the paper on exam.now.
ui://exam-now/mark-result-v1.html90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 379 ms
- 95th percentile latency
- 379 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 379 ms · metadata changed · 11 tool(s), 2 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http exam-now-mcp https://exam.now/mcpCodex
codex mcp add exam-now-mcp --url https://exam.now/mcpCursor
{
"mcpServers": {
"exam-now-mcp": {
"url": "https://exam.now/mcp"
}
}
}Cline
{
"mcpServers": {
"exam-now-mcp": {
"type": "streamableHttp",
"url": "https://exam.now/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"exam-now-mcp": {
"type": "http",
"url": "https://exam.now/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http exam-now-mcp https://exam.now/mcpClaude Desktop
https://exam.now/mcpWindsurf
{
"mcpServers": {
"exam-now-mcp": {
"serverUrl": "https://exam.now/mcp"
}
}
}Let your agent find its tools
Find servers like exam.now MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other documentation and reference servers
Do you run exam.now MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.