Koskamo

Fiveable MCP

A remote MCP server that allows AI agents to access Fiveable's AP exam prep content, including study guides, practice questions, FRQ scoring, and progress tracking, without scraping HTML pages.

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.

Fiveable MCP logo, by FiveableCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Fiveable
You need:Streamable HTTP, no install, OAuth 2.1 with dynamic client registrationYour account or workspace policy may affect availabilityWith a Fiveable account 5 full resources per month and saved practice across connected appsUnlimited scoring comes with a plan
MCP endpoint (Streamable HTTP)
https://fiveable.me/api/mcp
Vendor documentation

What its tools do

38 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

38 of 38 have a description · 38 of 38 declare behavior hints · 15 of 38 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Build a study plan and work through it using AP content
  • Quiz students on specific AP Biology units
  • Score and provide feedback on AP FRQ responses
  • Retrieve subject outlines and key terms

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
fiveable-for-ap-students 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
38 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
7 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "events": {},
  "prompts": {
    "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.

Fiveable is an AP study platform for high school students. Use these tools when a student asks to study with Fiveable content, practice, or saved work. Exams and assignments must be completed on the website, not through MCP. Do not submit reports or generate saved work without the student's request. Never invent scores, completion, or unavailable content. For FRQ grading, ask for missing prompt or rubric context. Until a scoring tool or saved result provides a score, do not estimate points or suggest full credit, even conditionally. You may explain the underlying concept without presenting that explanation as a grade. When a student asks for a diagnostic, readiness check, or broad survey, use start_diagnostic and submit_diagnostic_answer. A get_practice_questions batch is targeted practice, not a diagnostic, and must never be described as broadly surveying a unit or course. Never omit a required stimulus when presenting Fiveable questions. Show each returned stimulus image or Markdown image link before its dependent questions; if the student cannot see it, provide the returned website continuation instead of asking them to answer without the source. When a student sounds stressed, overwhelmed, or down on themselves, pause the task and respond in Fiveable's voice: warm, calm, and quiet, like "you're more prepared than you think" or "this is hard and you're still here." Keep it to three or four plain sentences. Acknowledge the feeling, point to the effort they are already making, and keep growth ahead of outcomes: an AP score is feedback on practice, never a measure of who they are. It is okay to find things hard, okay to be imperfect, and okay to rest; if they sound worn out, tell them a real break counts as studying too. Comfort them without performing: no lecture, no analyzing their word choice or reframing their fear back at them, and full gentle sentences rather than punchy fragments. Never pile on urgency and never frame studying as combat; students practice, build, and grow. Close with one small, doable next step and let them choose it. Suggested flow for a student: 1. list_subjects to resolve the subject slug. 2. get_subject_outline for the map of units and guides. 3. get_content_sections for a narrow question, or get_study_guide for a full review. 4. open_guided_practice for interactive targeted practice in a panel, or get_practice_questions for chat-only targeted practice. Neither is a diagnostic. Use start_diagnostic for an adaptive survey, or get_frq for original FRQ material. 5. score_frq_response for a Fiveable prompt, or score_external_frq_response after verifying a transcription. 6. get_my_study_progress when signed in so recommendations reflect durable Fiveable progress. Budget notes: list and search tools are cheap; full study guides run several thousand tokens; score_frq_response is slow and rate limited because it runs a scoring model — call it once per student response, never in a loop.

Tools

38 advertised

list_subjects — List AP subjects
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists every AP subject Fiveable covers, with its canonical subject slug and flags for which features exist for that subject (practice questions, key terms, score calculator). Suitable when a subject slug is not already known. Cheap — roughly 1-2k tokens.

list_subjects input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "search": {
      "type": "string",
      "description": "Optional case-insensitive filter on subject name, e.g. \"bio\" or \"history\"."
    }
  },
  "additionalProperties": false
}
list_subjects output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_subjects annotations
{
  "title": "List AP subjects",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_subject_outline — Get subject outline
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the full unit and topic outline for one AP subject, including every study guide slug in each unit. Provides the course map for study planning and individual guide retrieval. Moderate cost — roughly 2-5k tokens depending on subject size.

get_subject_outline input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it."
    }
  },
  "additionalProperties": false
}
get_subject_outline output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_subject_outline annotations
{
  "title": "Get subject outline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_study_guide — Get a study guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the full text of one Fiveable AP study guide as Markdown. Accepts the exact canonical guide reference or a close approximation of its title. Suitable when a student asks to learn or review a topic. It consumes one full-content preview for a caller unless existing access covers this subject and feature. Expensive — a full guide can be 3-8k tokens.

get_study_guide input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "guideSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "guideSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Canonical guide reference from get_subject_outline, content slug, document id, or title, e.g. \"/ap-bio/unit-2/cell-structure/study-guide/abc123\" or \"cell-structure\"."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it."
    }
  },
  "additionalProperties": false
}
get_study_guide output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_study_guide annotations
{
  "title": "Get a study guide",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_unit_overview — Get unit overview
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the overview page for one unit of an AP course: what it covers, how it is weighted on the exam, its topics and study plan. Suitable when a student is reviewing a whole unit. Moderate cost — roughly 1-3k tokens.

get_unit_overview input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "unitSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "unitSlug": {
      "type": "string",
      "minLength": 1,
      "description": "Unit slug from get_subject_outline, e.g. \"unit-1\"."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it."
    }
  },
  "additionalProperties": false
}
get_unit_overview output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_unit_overview annotations
{
  "title": "Get unit overview",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_key_terms — List key terms
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists the key vocabulary terms for an AP subject, paginated alphabetically. Suitable for building flashcards or checking what vocabulary a student should know; results include stable term slugs for full definitions. Cheap.

list_key_terms input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "page",
    "limit",
    "letter"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "1-indexed page number."
    },
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "Terms per page."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "letter": {
      "type": "string",
      "default": "ALL",
      "description": "Filter to terms starting with one letter, or \"ALL\" for every term."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it."
    }
  },
  "additionalProperties": false
}
list_key_terms output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_key_terms annotations
{
  "title": "List key terms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_key_term — Get a key term
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the full definition, context and related terms for one AP key term. Use when a student asks "what does X mean" for AP vocabulary. Cheap — usually under 1k tokens.

get_key_term input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "termSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "termSlug": {
      "type": "string",
      "minLength": 1,
      "description": "Key term slug or the term itself, e.g. \"natural-selection\"."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it."
    }
  },
  "additionalProperties": false
}
get_key_term output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_key_term annotations
{
  "title": "Get a key term",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_content — Search Fiveable content
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fiveable's site search across study guides, units, subject hubs, key terms, unit tests, unit vocab lists and practice pages. Handles typos, course names and requests like "apush unit 3 test". Suitable when the relevant subject or guide is not known. Returns titles and canonical references rather than full content, so it is cheap.

search_content input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query",
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum results to return."
    },
    "query": {
      "type": "string",
      "minLength": 2,
      "description": "What to search for, e.g. \"photosynthesis light reactions\"."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "subjectSlug": {
      "type": "string",
      "description": "Optional: restrict the search to one subject."
    }
  },
  "additionalProperties": false
}
search_content output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
search_content annotations
{
  "title": "Search Fiveable content",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_content_sections — Get relevant study guide sections
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns a small set of Fiveable study-guide passages relevant to one question. Suitable for narrow explanations, research questions and checking student notes. One call consumes one full-content preview for a caller without existing access.

get_content_sections input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "query",
    "maximumSections",
    "maximumTokens"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "description": "The concept or question the student needs help with."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "guideSlug": {
      "type": "string",
      "description": "Optional exact guide reference from get_subject_outline or search_content."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\". A course name such as \"AP Biology\" also resolves."
    },
    "maximumTokens": {
      "type": "integer",
      "default": 1800,
      "maximum": 4000,
      "minimum": 250
    },
    "maximumSections": {
      "type": "integer",
      "default": 3,
      "maximum": 5,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
get_content_sections output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_content_sections annotations
{
  "title": "Get relevant study guide sections",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_frqs — List free-response questions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists Fiveable's free-response (FRQ) practice prompts for an AP subject, optionally filtered by FRQ type, unit, and excluded IDs. Results use stable ID order; unchanged filters continue pagination. Returns prompt ids and summaries rather than full prompts. Cheap.

list_frqs input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "Maximum prompts to list."
    },
    "cursor": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,512}$"
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "unitId": {
      "type": "string",
      "maxLength": 100,
      "description": "Unit ID or public unit slug from get_subject_outline."
    },
    "frqType": {
      "type": "string",
      "description": "Optional FRQ type filter, e.g. \"DBQ\", \"LEQ\", \"SAQ\". Varies by subject."
    },
    "excludeIds": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100,
        "minLength": 1
      },
      "maxItems": 100
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\". A course name such as \"AP Biology\" also resolves."
    },
    "courseVariant": {
      "enum": [
        "ab",
        "bc"
      ],
      "type": "string",
      "description": "AP Calculus only (subject ap-calc): 'ab' hides BC-only units and topics; 'bc' includes them. Defaults to the student's saved Fiveable course when they are connected."
    }
  },
  "additionalProperties": false
}
list_frqs output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_frqs annotations
{
  "title": "List free-response questions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_frq — Get a free-response question
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns one full, original Fiveable FRQ prompt: stimulus, background and every lettered part with its point value. The returned prompt is eligible for Fiveable's saved scoring workflow after the student writes a response. It consumes one full-content preview unless existing access covers this FRQ. Moderate cost — 1-4k tokens.

get_frq input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "frqId"
  ],
  "properties": {
    "frqId": {
      "type": "string",
      "minLength": 1,
      "description": "FRQ id from list_frqs."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    }
  },
  "additionalProperties": false
}
get_frq output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_frq annotations
{
  "title": "Get a free-response question",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_practice_questions — Get multiple-choice practice questions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns original, course-specific multiple-choice practice questions. Free-text topics are matched against Fiveable's course map, so natural phrasing works. Omit topic to get balanced practice across the whole subject, with varied units, skills and stimulus formats. For history, science and language subjects this can return source-based sets — one stimulus with several questions off it — and stimulus images come back as viewable images. This is targeted or mixed practice, distinct from Fiveable's durable adaptive diagnostic. Every question carries a `Question id` that supports a saved answer submission for student progress. The recentCorrect and recentAnswered inputs allow the tool to drop to easier question types when a student is missing questions, helping find where understanding breaks down. A returned question set consumes one full-content preview unless existing access covers this practice feature. Moderate cost — roughly 300 tokens per question, more when images are attached.

get_practice_questions input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "limit",
    "includeAnswers",
    "questionFormat",
    "mode"
  ],
  "properties": {
    "mode": {
      "enum": [
        "auto",
        "exam",
        "topic"
      ],
      "type": "string",
      "default": "auto",
      "description": "\"exam\" requests Fiveable's balanced whole-course practice mix of units, skills and stimulus formats. \"topic\" drills one scope. \"auto\" picks exam when no topic is given."
    },
    "tier": {
      "enum": [
        "stimulus",
        "comprehension",
        "vocabulary"
      ],
      "type": "string",
      "description": "The tier the student was just working at — pass back the tier from the previous result, along with recentCorrect / recentAnswered, so a student who is still missing comprehension questions drops to vocabulary rather than being handed comprehension again. On its own it pins the level: stimulus = source-based application, comprehension = does the student know the content, vocabulary = does the student know the terms."
    },
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Exact maximum number of questions to return, including questions in a stimulus set."
    },
    "topic": {
      "type": "string",
      "description": "Free-text topic, e.g. \"photosynthesis\", \"the American Revolution\" or a CED topic number like \"3.3\". Matched against Fiveable course topics, then key terms. Omit for whole-subject mixed practice."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "unitId": {
      "type": "string",
      "description": "Exact unit id, public id, or slug from get_subject_outline. Use this for broad practice across a unit; do not substitute one topic id as a proxy for the entire unit."
    },
    "topicId": {
      "type": "string",
      "description": "Exact topic id from get_subject_outline, if known."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\". A course name such as \"AP Biology\" also resolves."
    },
    "courseVariant": {
      "enum": [
        "ab",
        "bc"
      ],
      "type": "string",
      "description": "AP Calculus only (subject ap-calc): 'ab' hides BC-only units and topics; 'bc' includes them. Defaults to the student's saved Fiveable course when they are connected."
    },
    "recentCorrect": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "How many of the student's recent answers were correct, for automatic tier adjustment."
    },
    "includeAnswers": {
      "type": "boolean",
      "default": false,
      "description": "Defaults false so students can attempt questions before seeing the key. Set true only when the student explicitly asks for answers. Use check_practice_answer anonymously or submit_practice_answer when signed in."
    },
    "questionFormat": {
      "enum": [
        "auto",
        "stimulus-set",
        "standalone"
      ],
      "type": "string",
      "default": "auto",
      "description": "\"auto\" matches what the subject's own practice UI leads with. \"stimulus-set\" requests source-based questions; \"standalone\" requests single questions with no shared source."
    },
    "recentAnswered": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "How many questions the student recently answered. Needs 3+ before the tier moves."
    }
  },
  "additionalProperties": false
}
get_practice_questions output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_practice_questions annotations
{
  "title": "Get multiple-choice practice questions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_ap_score — Predict an AP score
Advertised by the server during the last successful anonymous check.
Advertised read-only

Predicts a 1-5 AP score from raw section scores using Fiveable's per-subject score calculator, and explains the weighting. Call with no sectionScores to see which sections the subject has and their point maximums, then call again with the student's scores. Cheap.

calculate_ap_score input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\"."
    },
    "sectionScores": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "card",
          "score"
        ],
        "properties": {
          "card": {
            "type": "string",
            "description": "Card/section title exactly as returned by this tool."
          },
          "score": {
            "type": "number",
            "minimum": 0,
            "description": "Raw points the student earned on that card."
          }
        },
        "additionalProperties": false
      },
      "description": "Raw scores per card. Omit to discover the subject's card structure first."
    }
  },
  "additionalProperties": false
}
calculate_ap_score output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
calculate_ap_score annotations
{
  "title": "Predict an AP score",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_practice_answer — Check a practice answer
Advertised by the server during the last successful anonymous check.
Advertised read-only

Checks one multiple-choice practice answer and returns correctness plus the Fiveable explanation. Works during an anonymous preview but does not save progress. A signed-in answer submission is required for saved progress.

check_practice_answer input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "questionId",
    "answer"
  ],
  "properties": {
    "answer": {
      "type": "string",
      "minLength": 1,
      "description": "Displayed option label such as \"B\", or the full answer text."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "questionId": {
      "type": "string",
      "minLength": 1,
      "description": "Question id from get_practice_questions."
    }
  },
  "additionalProperties": false
}
check_practice_answer output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
check_practice_answer annotations
{
  "title": "Check a practice answer",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_study_progress — Get my study progress
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the signed-in student's durable Fiveable progress for one subject: multiple-choice accuracy, weak topics and units, FRQ performance, skill groups and recent activity, respecting the website progress reset. Also includes completed exams, plus assignment and study-plan summaries when their separate permissions are granted. Call this before choosing what to explain or practice so recommendations carry across conversations and AI clients.

get_my_study_progress input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\"."
    }
  },
  "additionalProperties": false
}
get_my_study_progress output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_my_study_progress annotations
{
  "title": "Get my study progress",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
score_external_frq_response — Score an uploaded or pasted FRQ
Advertised by the server during the last successful anonymous check.
Open-world

Scores a student's existing FRQ even when it did not come from Fiveable. If the student attached photos, the host AI must first transcribe the prompt and response, show the transcription for confirmation, then call this tool. Optional prompt images preserve graphs or artwork that text alone cannot represent. Fiveable scores it on the AP rubric for its exact question type, out of that type's AP point total. Requires sign-in; one scoring preview is included without a plan, with further scoring available to eligible accounts. The attempt is saved to the student's Fiveable progress. Returns a pending scoring job; poll get_scoring_result. Reuse requestId for retries.

score_external_frq_response input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "frqType",
    "promptText",
    "transcriptionConfirmed",
    "partResponses"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "frqType": {
      "type": "string",
      "maxLength": 120,
      "minLength": 2,
      "description": "The exact AP question type as Fiveable names it, e.g. \"Document-Based Question (DBQ)\". If it doesn't match, the tool lists this subject's types."
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Stable unique request ID. Reuse it only for retries of the same submission; a new response needs a new ID."
    },
    "promptText": {
      "type": "string",
      "maxLength": 30000,
      "minLength": 20,
      "description": "Verified transcription or pasted text of the complete prompt."
    },
    "promptLabel": {
      "type": "string",
      "maxLength": 160,
      "description": "Short label shown in attempt history."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Fiveable subject slug, e.g. \"ap-bio\"."
    },
    "promptImages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "data",
          "mediaType"
        ],
        "properties": {
          "data": {
            "type": "string",
            "maxLength": 3000000,
            "minLength": 100,
            "description": "Base64 image payload without a data-URI prefix."
          },
          "mediaType": {
            "enum": [
              "image/jpeg",
              "image/png",
              "image/webp"
            ],
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 4,
      "description": "Optional original prompt images for diagrams, graphs, maps, or artwork."
    },
    "partResponses": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "partLetter",
          "response"
        ],
        "properties": {
          "response": {
            "type": "string",
            "maxLength": 50000,
            "minLength": 1,
            "description": "Verified transcription or pasted response."
          },
          "partLetter": {
            "type": "string",
            "maxLength": 20,
            "minLength": 1,
            "description": "Part label, e.g. \"a\" or \"UNIFIED\"."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 30,
      "minItems": 1
    },
    "responseImages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "data",
          "mediaType",
          "partLetter"
        ],
        "properties": {
          "data": {
            "type": "string",
            "maxLength": 3000000,
            "minLength": 100,
            "description": "Base64 image payload without a data-URI prefix."
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "mediaType": {
            "enum": [
              "image/jpeg",
              "image/png",
              "image/webp"
            ],
            "type": "string"
          },
          "partLetter": {
            "type": "string",
            "maxLength": 20,
            "minLength": 1
          }
        },
        "additionalProperties": false
      },
      "maxItems": 8,
      "description": "Optional response images that must be evaluated visually, such as a student-drawn graph."
    },
    "transcriptionConfirmed": {
      "type": "boolean",
      "const": true,
      "description": "Must be true only after the student confirms the transcribed prompt and response text."
    }
  },
  "additionalProperties": false
}
score_external_frq_response output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
score_external_frq_response annotations
{
  "title": "Score an uploaded or pasted FRQ",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
start_diagnostic — Start an adaptive AP diagnostic
Advertised by the server during the last successful anonymous check.

Starts Fiveable's canonical adaptive diagnostic for the connected student. Without a unitId it covers the whole course; an exact unitId scopes the survey across that unit's available topics. Returns one adaptive question at a time and creates durable diagnostic progress.

start_diagnostic input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "unitId": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Reuse this ID for retries of the same operation; changed input returns a conflict."
    },
    "subjectSlug": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 100
    },
    "courseVariant": {
      "enum": [
        "ab",
        "bc"
      ],
      "type": "string",
      "description": "AP Calculus only (subject ap-calc): 'ab' hides BC-only units and topics; 'bc' includes them. Defaults to the student's saved Fiveable course when they are connected."
    }
  },
  "additionalProperties": false
}
start_diagnostic output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
start_diagnostic annotations
{
  "title": "Start an adaptive AP diagnostic",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_diagnostic_answer — Answer the current diagnostic question
Advertised by the server during the last successful anonymous check.

Saves one answer in the connected student's active Fiveable diagnostic and returns feedback plus exactly one next adaptive question. Accepts the option letter, full text, or answer id from the current diagnostic question. Handles one question per call.

submit_diagnostic_answer input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "sessionToken",
    "questionId",
    "answer"
  ],
  "properties": {
    "answer": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Reuse this ID for retries of the same operation; changed input returns a conflict."
    },
    "questionId": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "sessionToken": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "additionalProperties": false
}
submit_diagnostic_answer output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
submit_diagnostic_answer annotations
{
  "title": "Answer the current diagnostic question",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_diagnostic_results — Read my diagnostic status or results
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reads an owner-scoped Fiveable diagnostic. In-progress sessions return progress and the current question without answer keys; completed sessions return the adaptive diagnostic summary and recommendations.

get_diagnostic_results input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "sessionToken"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "sessionToken": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "additionalProperties": false
}
get_diagnostic_results output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_diagnostic_results annotations
{
  "title": "Read my diagnostic status or results",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_frq_progress — Get my FRQ progress
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the signed-in student's saved free-response attempts for one subject, including scores where they were graded and recent scoring-point weak areas. Use it to see what a student has already practiced and where they are losing points before recommending what to work on next.

get_my_frq_progress input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "subjectSlug": {
      "type": "string",
      "minLength": 2,
      "description": "Subject slug, e.g. \"ap-bio\"."
    }
  },
  "additionalProperties": false
}
get_my_frq_progress output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_my_frq_progress annotations
{
  "title": "Get my FRQ progress",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_frq_attempt_history — Get attempt history for one FRQ
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the signed-in student's previous attempts at a single FRQ, so you can compare a new response against what they wrote before and comment on improvement.

get_frq_attempt_history input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "frqId"
  ],
  "properties": {
    "frqId": {
      "type": "string",
      "minLength": 1,
      "description": "FRQ id from list_frqs."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    }
  },
  "additionalProperties": false
}
get_frq_attempt_history output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_frq_attempt_history annotations
{
  "title": "Get attempt history for one FRQ",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
score_frq_response — Score a free-response answer
Advertised by the server during the last successful anonymous check.
Open-world

Submits the student's own response to a Fiveable practice FRQ for saved, asynchronous scoring. Supports text, subparts, drawings/photos, LEQ selection, CSP program code and Business project references. Excludes teacher assignments and exams. Returns a scoring job id for status retrieval, and requestId provides idempotent retries. One included score is available to signed-in students.

score_frq_response input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "frqId",
    "partResponses"
  ],
  "properties": {
    "frqId": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Stable unique request ID. Reuse it only for retries of the same submission; a new response needs a new ID."
    },
    "programCode": {
      "type": "string",
      "maxLength": 100000
    },
    "partResponses": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "partLetter",
          "response"
        ],
        "properties": {
          "response": {
            "type": "string",
            "default": "",
            "maxLength": 50000,
            "description": "Student's own response, verbatim. May be empty for a drawing/photo-only response."
          },
          "partLetter": {
            "type": "string",
            "maxLength": 20,
            "minLength": 1
          },
          "drawingData": {
            "type": "object",
            "required": [
              "type",
              "data",
              "width",
              "height"
            ],
            "properties": {
              "data": {
                "type": "string",
                "maxLength": 3000100,
                "minLength": 16
              },
              "type": {
                "type": "string",
                "const": "canvas"
              },
              "width": {
                "type": "integer",
                "maximum": 10000,
                "minimum": 1
              },
              "height": {
                "type": "integer",
                "maximum": 10000,
                "minimum": 1
              },
              "source": {
                "enum": [
                  "drawing",
                  "uploaded_photo"
                ],
                "type": "string"
              },
              "mimeType": {
                "enum": [
                  "image/png",
                  "image/jpeg",
                  "image/webp"
                ],
                "type": "string"
              },
              "drawingLabel": {
                "type": "string",
                "maxLength": 200
              }
            },
            "additionalProperties": false
          },
          "subpartNumeral": {
            "type": "string",
            "maxLength": 20
          }
        },
        "additionalProperties": false
      },
      "maxItems": 30,
      "minItems": 1
    },
    "promptVariantId": {
      "type": "string",
      "const": "official_2026_v1"
    },
    "selectedLeqQuestion": {
      "type": "integer",
      "maximum": 4,
      "minimum": 2
    },
    "businessProjectReference": {
      "type": "object",
      "required": [
        "product",
        "target_customer",
        "customer_problem_or_need",
        "value_proposition",
        "pricing_decision",
        "tested_hypothesis",
        "research_method_and_evidence",
        "financing_assumptions"
      ],
      "properties": {
        "product": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1
        },
        "target_customer": {
          "type": "object",
          "required": [
            "profile"
          ],
          "properties": {
            "profile": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        "pricing_decision": {
          "type": "object",
          "required": [
            "strategy",
            "selected_price",
            "decision"
          ],
          "properties": {
            "decision": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "strategy": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "selected_price": {
              "type": "string",
              "maxLength": 300,
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        "tested_hypothesis": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1
        },
        "value_proposition": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1
        },
        "financing_assumptions": {
          "type": "object",
          "required": [
            "startup_costs",
            "operating_costs_until_break_even",
            "internal_financial_capital",
            "external_financial_capital_needed",
            "access_constraints"
          ],
          "properties": {
            "startup_costs": {
              "type": "string",
              "maxLength": 300,
              "minLength": 1
            },
            "access_constraints": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "internal_financial_capital": {
              "type": "string",
              "maxLength": 300,
              "minLength": 1
            },
            "operating_costs_until_break_even": {
              "type": "string",
              "maxLength": 300,
              "minLength": 1
            },
            "external_financial_capital_needed": {
              "type": "string",
              "maxLength": 300,
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        "customer_problem_or_need": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1
        },
        "research_method_and_evidence": {
          "type": "object",
          "required": [
            "method",
            "sample",
            "evidence"
          ],
          "properties": {
            "method": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "sample": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "evidence": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "businessProjectPracticeMode": {
      "enum": [
        "use_my_project",
        "use_a_sample_project"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
score_frq_response output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
score_frq_response annotations
{
  "title": "Score a free-response answer",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_scoring_result — Get a saved FRQ scoring result
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the status or saved result of your FRQ scoring request. This never starts or retries scoring.

get_scoring_result input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "scoringJobId"
  ],
  "properties": {
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "scoringJobId": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  "additionalProperties": false
}
get_scoring_result output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_scoring_result annotations
{
  "title": "Get a saved FRQ scoring result",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_practice_answer — Record a practice question answer
Advertised by the server during the last successful anonymous check.

Records the signed-in student's answer to a multiple-choice practice question so it counts toward their Fiveable progress. Accepts a question id previously served by Fiveable MCP and returns whether the answer was correct plus the explanation.

submit_practice_answer input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "questionId",
    "answer"
  ],
  "properties": {
    "answer": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "description": "The displayed option label (for example \"B\" or \"B.\") or the full answer text."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Reuse this ID for retries of the same answer; changed input returns a conflict."
    },
    "questionId": {
      "type": "string",
      "minLength": 1,
      "description": "The practice question id from get_practice_questions."
    }
  },
  "additionalProperties": false
}
submit_practice_answer output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
submit_practice_answer annotations
{
  "title": "Record a practice question answer",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_access — Check my Fiveable access
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explains which features this account can use for one subject and its remaining MCP previews. Does not return billing information or change access.

get_my_access input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug"
  ],
  "properties": {
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
get_my_access output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_my_access annotations
{
  "title": "Check my Fiveable access",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_practice_history — Review my practice answers
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reads a bounded page of your saved self-study MCQ answers with current question explanations. Honors practice resets. Does not save, score, or consume a content preview.

get_my_practice_history input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
get_my_practice_history output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_my_practice_history annotations
{
  "title": "Review my practice answers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_cheatsheets — List official Fiveable cheatsheets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find approved Fiveable course and unit PDFs, including course variants, academic year when known, source links and readable-artifact readiness. Does not include user galleries or generated personal visuals.

list_cheatsheets input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "pattern": "^cs_[a-f0-9]{24}$"
    },
    "unitNumber": {
      "type": "integer",
      "maximum": 30,
      "minimum": 0
    },
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    },
    "courseVariant": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
list_cheatsheets output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_cheatsheets annotations
{
  "title": "List official Fiveable cheatsheets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_cheatsheet — Read an official Fiveable cheatsheet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reads bounded pages from a prepared official Fiveable PDF, returning page citations, extracted text and actual page images for formulas and diagrams. Image-only pages have no guessed transcription. Unavailable artifacts return the approved PDF link. This read never starts processing.

get_cheatsheet input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "cheatsheetId",
    "page",
    "limit"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 32,
      "minimum": 1
    },
    "limit": {
      "type": "integer",
      "default": 1,
      "maximum": 3,
      "minimum": 1
    },
    "cheatsheetId": {
      "type": "string",
      "pattern": "^cs_[a-f0-9]{24}$"
    }
  },
  "additionalProperties": false
}
get_cheatsheet output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_cheatsheet annotations
{
  "title": "Read an official Fiveable cheatsheet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
report_content_issue — Report a content issue to Fiveable
Advertised by the server during the last successful anonymous check.
Open-world

Submits a caller-requested content issue to Fiveable support, which may lead to support follow-up. Requires explicit confirmReport approval. The description contains the reported issue only, excluding conversation history, unrelated notes and personal information. Fiveable resolves content and reporter identity. Matching requestId retries are idempotent.

report_content_issue input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "contentType",
    "contentId",
    "description",
    "requestId",
    "confirmReport"
  ],
  "properties": {
    "contentId": {
      "type": "string",
      "maxLength": 250,
      "minLength": 2,
      "description": "Exact guide/question/FRQ ID, or the exact canonical key-term path from Fiveable."
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$"
    },
    "contentType": {
      "enum": [
        "studyGuide",
        "keyTerm",
        "practiceQuestion",
        "frq"
      ],
      "type": "string"
    },
    "description": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 10,
      "description": "Only the issue the student wants reported; no conversation transcript or unrelated personal notes."
    },
    "confirmReport": {
      "type": "boolean",
      "const": true,
      "description": "True only after the student explicitly requests sending this issue to Fiveable."
    }
  },
  "additionalProperties": false
}
report_content_issue output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
report_content_issue annotations
{
  "title": "Report a content issue to Fiveable",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_study_plans — List my study plans
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists the connected student's saved Fiveable study plans, including website plans. Included for signed-in students. Cheap; paginated.

list_my_study_plans input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
list_my_study_plans output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_my_study_plans annotations
{
  "title": "List my study plans",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_study_plan — Get a study plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reads one owned study plan, stable task ids, completion state and revision. A plan that is still being built reports pending with a retry delay, so poll this after create_study_plan rather than creating again. Use its revision for task changes. Reading older plans never changes them.

get_study_plan input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "planId"
  ],
  "properties": {
    "planId": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    }
  },
  "additionalProperties": false
}
get_study_plan output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_study_plan annotations
{
  "title": "Get a study plan",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_study_plan — Create a study plan
Advertised by the server during the last successful anonymous check.
Open-world

Creates and saves a trackable Fiveable study plan from the student's topic and available time. Included for signed-in students; uses Fiveable's existing generator and verified resource catalog. Returns a plan id immediately while the plan builds, usually within two minutes — read it with get_study_plan, which reports whether it is still building. Reuse requestId with identical input to retry; never call this twice for the same plan.

create_study_plan input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "scope",
    "timeAmount",
    "timeUnit",
    "requestId"
  ],
  "properties": {
    "scope": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1
    },
    "timeUnit": {
      "enum": [
        "hours",
        "days"
      ],
      "type": "string"
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Unique id for this intended action. Reuse it with identical input on retries."
    },
    "timeAmount": {
      "type": "integer",
      "maximum": 90,
      "minimum": 1
    },
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
create_study_plan output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
create_study_plan annotations
{
  "title": "Create a study plan",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
update_study_plan_tasks — Update study plan tasks
Advertised by the server during the last successful anonymous check.

Marks specified owned plan tasks complete or incomplete at the student's request. This is self-reported planning, never a quiz score or practice submission. Supply the latest revision and a unique requestId; retry identical input safely.

update_study_plan_tasks input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "planId",
    "expectedRevision",
    "requestId",
    "tasks"
  ],
  "properties": {
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "taskId",
          "completed"
        ],
        "properties": {
          "taskId": {
            "type": "string",
            "pattern": "^session-\\d+-task-\\d+$"
          },
          "completed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 240,
      "minItems": 1
    },
    "planId": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "requestId": {
      "type": "string",
      "pattern": "^[\\w-]{8,128}$",
      "description": "Unique id for this intended action. Reuse it with identical input on retries."
    },
    "expectedRevision": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0
    }
  },
  "additionalProperties": false
}
update_study_plan_tasks output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
update_study_plan_tasks annotations
{
  "title": "Update study plan tasks",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_exam_options — Find practice exams and unit tests
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find Fiveable exam formats, access requirements and website links without questions or answer keys. Choose a subject for version choices; add unitNumber to verify that unit's current bank and standard format. With progress:read consent, includes only genuine server-saved continuation links. Browser-only progress is not remotely recoverable.

get_exam_options input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "unitNumber": {
      "type": "integer",
      "maximum": 99,
      "minimum": 1
    },
    "subjectSlug": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
get_exam_options output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_exam_options annotations
{
  "title": "Find practice exams and unit tests",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_exam_attempts — List my completed exams
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists only the connected student's completed full-length and unit-exam results. Honors the website progress reset, deduplicates retried submissions and paginates. Unit tests show points/percent, never an AP projection. Does not read browser-only or active exam state.

list_my_exam_attempts input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "subjectSlug": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
list_my_exam_attempts output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_my_exam_attempts annotations
{
  "title": "List my completed exams",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_exam_results — Review my completed exam results
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read an owned completed exam using attemptId, or safely check a submitted exam using submissionId. Supply exactly one. Pending or partial grading returns status only, never unfinished scores or feedback. Honors practice resets and cannot dispatch scoring, finalize submissions or retrieve active exam content.

get_exam_results input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "attemptId": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "submissionId": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    }
  },
  "additionalProperties": false
}
get_exam_results output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_exam_results annotations
{
  "title": "Review my completed exam results",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_assignments — List my student assignments
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists assignments delivered to the connected student's enrolled classes, signed-in submissions, and safely claimed guest work. Includes due dates, completion status and only released scores. No teacher roster or answer keys. Complete work on the website.

list_my_assignments input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    },
    "subjectSlug": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
list_my_assignments output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
list_my_assignments annotations
{
  "title": "List my student assignments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_assignment_summary — Read my assignment summary
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reads one student-accessible publication's instructions, section counts, timer/due-date settings and released feedback for the policy-selected owned attempt. Does not expose questions or answer keys, finalize timers, repair grading, start, autosave or submit work. Accepts a publicationId from the connected student's assignment listing.

get_assignment_summary input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "publicationId"
  ],
  "properties": {
    "publicationId": {
      "type": "string",
      "pattern": "^[a-f0-9]{24}$"
    }
  },
  "additionalProperties": false
}
get_assignment_summary output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
get_assignment_summary annotations
{
  "title": "Read my assignment summary",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
open_guided_practice — Open Fiveable Guided Practice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Opens Fiveable's interactive multiple-choice practice panel with existing question, answer and explanation components. Students select answers directly in the panel. Connected accounts can save answers to Fiveable progress; anonymous practice is an unsaved preview.

open_guided_practice input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subjectSlug",
    "limit",
    "questionFormat"
  ],
  "properties": {
    "tier": {
      "enum": [
        "stimulus",
        "comprehension",
        "vocabulary"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1
    },
    "topic": {
      "type": "string",
      "maxLength": 200,
      "description": "Free-text topic or a CED topic number like \"3.3\", matched against Fiveable course topics."
    },
    "intent": {
      "enum": [
        "explain",
        "quiz",
        "notes",
        "frq",
        "research"
      ],
      "type": "string",
      "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics."
    },
    "unitId": {
      "type": "string",
      "maxLength": 100
    },
    "topicId": {
      "type": "string",
      "maxLength": 100
    },
    "subjectSlug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    },
    "courseVariant": {
      "enum": [
        "ab",
        "bc"
      ],
      "type": "string",
      "description": "AP Calculus only (subject ap-calc): 'ab' hides BC-only units and topics; 'bc' includes them. Defaults to the student's saved Fiveable course when they are connected."
    },
    "questionFormat": {
      "enum": [
        "auto",
        "stimulus-set",
        "standalone"
      ],
      "type": "string",
      "default": "auto"
    }
  },
  "additionalProperties": false
}
open_guided_practice output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Readable tool result text for clients that consume structured output."
    },
    "status": {
      "type": "string",
      "description": "Operation status: completed, pending, partial, failed, unavailable, or a domain-specific outcome."
    }
  },
  "additionalProperties": {}
}
open_guided_practice annotations
{
  "title": "Open Fiveable Guided Practice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

7 advertised

study_plan — Build an AP study plan

Advertised by the server during the last successful anonymous check.

Builds a day-by-day AP study plan for one subject using Fiveable's unit outline and the student's own progress where available.

subject
AP subject, e.g. "AP Biology" or the slug "ap-bio". (required)
daysUntilExam
How many days the student has to prepare. (required)
quiz_me — Quiz me on a topic

Advertised by the server during the last successful anonymous check.

Runs an interactive multiple-choice quiz using Fiveable's original question library.

subject
AP subject, e.g. "AP Biology". (required)
topic
What to quiz on, e.g. "cellular respiration". (required)
diagnose_me — Run an AP diagnostic

Advertised by the server during the last successful anonymous check.

Runs Fiveable's adaptive course or unit diagnostic one question at a time and saves the results.

subject
AP subject, e.g. "AP Human Geography". (required)
unit
Optional unit, e.g. "Unit 1". Omit for a whole-course diagnostic.
grade_my_frq — Practice and grade an FRQ

Advertised by the server during the last successful anonymous check.

Serves a Fiveable free-response prompt or grades an existing prompt and response supplied by the student.

subject
AP subject, e.g. "AP US History". (required)
frqType
Optional FRQ type, e.g. "DBQ" or "LEQ".
explain_concept — Explain an AP concept

Advertised by the server during the last successful anonymous check.

Explains one concept using a focused passage from Fiveable's course-specific content.

subject
AP subject, e.g. "AP Biology". (required)
concept
Concept or question, e.g. "cellular respiration". (required)
notes_to_study_guide — Turn my notes into a study guide

Advertised by the server during the last successful anonymous check.

Organizes student notes and checks their coverage against relevant Fiveable content.

subject
AP subject, e.g. "AP Biology". (required)
pep_talk — Get a pep talk

Advertised by the server during the last successful anonymous check.

A short confidence reset for a stressed or overwhelmed student, grounded in their real Fiveable progress when they are signed in.

subject
Optional AP subject the student is stressed about, e.g. "AP Biology".

Resources

2 advertised

subject-catalog — Fiveable AP subject catalog

Advertised by the server during the last successful anonymous check.

Every AP subject Fiveable covers, with the slug used by all other tools.

subject-catalog URI
fiveable://subjects

MIME type: text/markdown

guided-practice-ui — Fiveable Guided Practice

Advertised by the server during the last successful anonymous check.

guided-practice-ui URI
ui://fiveable/guided-practice-v1.html

MIME type: text/html;profile=mcp-app

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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
1073 ms
95th percentile latency
1073 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1073 ms · metadata changed · 38 tool(s), 2 resource(s), 0 resource template(s), 7 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http fiveable-mcp https://fiveable.me/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add fiveable-mcp --url https://fiveable.me/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable fiveable-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "fiveable-mcp": {
      "url": "https://fiveable.me/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "fiveable-mcp": {
      "type": "streamableHttp",
      "url": "https://fiveable.me/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start fiveable-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "fiveable-mcp": {
      "type": "http",
      "url": "https://fiveable.me/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http fiveable-mcp https://fiveable.me/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://fiveable.me/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "fiveable-mcp": {
      "serverUrl": "https://fiveable.me/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Fiveable MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.