Examplary MCP Server
The Examplary MCP Server provides AI assistants with comprehensive access to Examplary's exam management platform through 60+ API endpoints.
Core capabilities include:
Exam Management - Create, read, update, delete, duplicate, export (PDF/Word), and import exams from various formats (Word, PDF, plain text, Moodle XML). Organize exams using folders and track metadata.
AI-Powered Question Generation - Generate new questions and update existing ones using AI prompts and source materials. Get context suggestions for exam generation and cancel ongoing generation jobs.
Question Operations - Browse public and custom question types, create organization-specific types, enable/disable types for workspaces, and manage grading instructions and generation parameters.
Question Bank - Store, manage, and organize reusable questions with tags for easy retrieval.
Source Materials - Upload and process documents (PDF, Word, etc.) with AI to extract facts, topics, and summaries. Create page slices from materials and track processing status.
Student Assessment & Grading - Create and manage student sessions, scan answers from uploaded documents, provide AI-powered automatic grading with suggestions, accept/reject grading suggestions individually or in bulk, and generate overall feedback.
Workspace & Collaboration - Create and manage organization workspaces, invite team members with role-based access, update workspace settings, and browse publisher libraries for public content.
Taxonomies & Standards - Access default taxonomies (e.g., Bloom's Taxonomy), create custom taxonomies for learning objectives, and define taxonomy levels with AI generation instructions.
User & Media Management - View and update user profiles, manage preferences and workspace memberships, generate signed upload URLs, and handle media files securely.
Additional Features - Import questions from multiple file formats, browse student levels for age-appropriate content, and filter by external IDs for system integration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Examplary MCP Server create a new exam about machine learning fundamentals"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Examplary MCP Server
A Model Context Protocol (MCP) server for Examplary, providing AI assistants with access to the Examplary exam management API.
Features
60+ API Endpoints - Full access to Examplary's exam management capabilities
Auto-generated Tools - All API operations automatically available as MCP tools via OpenAPI specification
Secure Authentication - User-specific API key authentication
Cross-platform - Works on macOS, Linux, and Windows via UV runtime
One-click Installation - Install as a .mcpb package in Claude Desktop
Related MCP server: MCPaeroedu
What is Examplary?
Examplary is an AI-powered exam management platform that helps educators:
Create and manage exams with AI assistance
Generate questions from source materials
Grade student responses automatically
Organize content in collaborative workspaces
Share resources via publisher libraries
Installation
Option 1: Claude Desktop (.mcpb package)
Download the latest
examplary-mcp.mcpbfrom the releases pageOpen Claude Desktop
Go to Settings → Extensions
Click "Install Extension" and select the downloaded .mcpb file
When prompted, enter your Examplary API key
Option 2: Manual Installation
Clone this repository:
git clone https://github.com/examplary-ai/mcp.git cd mcpInstall UV (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | shRun the server:
export EXAMPLARY_API_KEY="your-api-key-here" uv run src/server.py
Getting Your API Key
Log in to Examplary
Navigate to Account → Developer
Click "Generate New API Key"
Copy the API key and save it securely
Note: Keep your API key secret. Never commit it to version control or share it publicly.
Usage
Once installed in Claude Desktop, you can ask Claude to interact with Examplary:
"Create a new exam about Python programming"
"List all my exams"
"Generate questions from this document"
"Get the results for exam ID 12345"
"Create a new organization workspace"
The MCP server provides access to all Examplary API endpoints, including:
Exam Management
Create, read, update, and delete exams
Duplicate exams
Export to PDF or Word
AI-powered question generation
Question Bank
Store and organize reusable questions
Public and private question types
Bulk import from various formats
Student Sessions
Create grading sessions
Scan documents for answers
AI-powered grading and feedback
Accept or reject grading suggestions
Organizations & Collaboration
Manage workspaces
Invite team members
Organize exams in folders
Publisher Library
Browse public content
Share exam templates
Discover featured resources
Development
Project Structure
examplary-mcp/
├── manifest.json # MCPB manifest configuration
├── pyproject.toml # Python dependencies
├── src/
│ ├── __init__.py
│ └── server.py # Main MCP server
├── .mcpbignore # Files excluded from .mcpb package
└── .github/
└── workflows/
└── release.yml # Automated release workflowLocal Development
Install dependencies:
uv pip install -e .Set your API key:
export EXAMPLARY_API_KEY="your-api-key"Run the server:
uv run src/server.py
Building the .mcpb Package
To build the .mcpb package manually:
zip -r examplary-mcp.mcpb \
manifest.json \
pyproject.toml \
src/ \
icon.png \
-x "*.pyc" -x "__pycache__/*" -x ".git/*"Testing
The server uses stdio transport for communication with Claude Desktop. To test locally:
Run the server with your API key set
The server will start and listen for MCP protocol messages on stdin
Send MCP requests via stdin and receive responses on stdout
API Rate Limits
Examplary enforces rate limits on certain operations:
Exam generation: 3 requests per 60 seconds
Question operations: 10 requests per 60 seconds
Other endpoints: Standard rate limiting applies
Security
API keys are stored securely by Claude Desktop
All communication uses HTTPS
API keys can be revoked at any time from the Examplary dashboard
Never share your API key or commit it to version control
Support
Examplary Documentation: https://developers.examplary.ai
Examplary Support: support@examplary.ai
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Credits
Built with:
FastMCP - Python framework for MCP servers
Model Context Protocol - Open protocol for AI-application integration
Examplary API - Exam management platform
Available Tools
115 toolsattributes_createC
Create a new custom attribute in the current workspace.
Inputs: name, attributeType, options, showInStudentDashboard, +3 more.
attributes_deleteA
Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
Inputs: id (required).
attributes_listA
Get all custom attributes configured for the current workspace.
Inputs: no named parameters.
attributes_reorderC
Update the position of multiple attributes at once.
Inputs: order.
attributes_updateC
Update an existing attribute in the current workspace.
Inputs: id (required), name, attributeType, options, +4 more.
deleteRubricsidC
Delete a rubric from the current workspace.
Inputs: id (required).
embedSessions_createD
Create a new embed session. This allows you to embed the exam generation flow into your own application.
Inputs: body. Returns: id, status, embedUrl, flow, +9 more
embedSessions_getB
Retrieve an embed session by its ID.
Inputs: id (required). Returns: id, status, embedUrl, flow, +9 more
embedSessions_revokeB
Revoke access to an embed session by its ID.
Inputs: id (required).
exams_cancelGenerationC
Cancel an ongoing job to generate new questions for the exam using AI.
Inputs: id (required).
exams_createC
Create a new exam within your workspace.
Inputs: name, sourceMaterialIds, context, studentLevel, +8 more.
exams_deleteC
Delete the exam.
Inputs: id (required).
exams_duplicateC
Duplicate the exam's questions and settings to a new exam.
Inputs: id (required), name, includeSessions.
exams_export_qti21ZipB
Export an exam as a QTI 2.1 ZIP package.
Inputs: id (required). Returns: url
exams_export_qti3ZipB
Export an exam as a QTI 3 ZIP package.
Inputs: id (required). Returns: url
exams_getA
Get a single exam by its ID.
Inputs: id (required).
exams_getContextSuggestionsA
Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
Inputs: id (required).
exams_importC
Create an exam by importing one or more source materials (e.g. an existing exam).
Inputs: name, sourceMaterialIds.
exams_listB
Get a list of all exams within your workspace.
Inputs: folder, role.
exams_printB
Export an exam to a PDF file or Word document.
Inputs: id (required).
exams_questions_generateC
Generate a new question for the exam using an AI prompt.
Inputs: id (required), message, questionType.
exams_questions_getD
Retrieve a question by its ID.
Inputs: id (required), questionId (required), format.
exams_questions_importB
Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
Inputs: id (required), name, type, url, +2 more.
exams_questions_regenerateC
Update a question using an AI prompt.
Inputs: id (required), questionId (required), message.
exams_sessions_acceptAllSuggestionsC
Accept all AI-generated grading suggestions for the exam session.
Inputs: id (required), sessionId (required).
exams_sessions_acceptSuggestionC
Accept a single AI-generated grading suggestion for the exam session.
Inputs: id (required), sessionId (required), questionId (required).
exams_sessions_deleteC
Remove an exam session.
Inputs: id (required), sessionId (required).
exams_sessions_editAnswerC
Edit a single answer in an exam session.
Inputs: id (required), sessionId (required), questionId (required), answer, +1 more.
exams_sessions_generateOverallFeedbackC
Generate feedback for the test as a whole in an exam session.
Inputs: id (required), sessionId (required).
exams_sessions_getC
Get a single exam session by its ID, representing a set of answers from a student.
Inputs: id (required), sessionId (required).
exams_sessions_importC
Manually create a session, possibly from uploaded data.
Inputs: id (required), studentName, source, answers.
exams_sessions_listA
Get a list of all student sessions for an exam, representing a set of answers from a student.
Inputs: id (required).
exams_sessions_saveFeedbackB
Set teacher feedback and/or a grade for a specific question in an exam session.
Inputs: id (required), sessionId (required), question, pointsAwarded, +1 more.
exams_sessions_saveOverallFeedbackC
Set teacher feedback for the test as a whole in an exam session.
Inputs: id (required), sessionId (required), feedback.
exams_sessions_scanC
Scan student answers from a document.
Inputs: id (required).
exams_sessions_scanDocumentC
Start a background task to extract student answers from an uploaded PDF document.
Inputs: id (required), documentUrl.
exams_startGenerationC
Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
Inputs: id (required).
exams_updateC
Update an existing exam.
Inputs: id (required).
folders_createC
Create a new folder in the current workspace.
Inputs: name.
folders_deleteA
Delete a folder from the current workspace. If there are any exams in the folder, they will be moved out of the folder.
Inputs: id (required).
folders_listA
Get a list of folders for exam organisation that exist within the current workspace.
Inputs: no named parameters.
folders_updateC
Update an existing folder in the current workspace.
Inputs: id (required), name.
getRubricsB
Get a list of rubrics that exist within the current workspace.
Inputs: no named parameters.
groups_addMemberA
Add a member to a group. Requires group manager/owner role or org admin/owner.
Inputs: id (required), body.
groups_createA
Create a new group. Requires admin or owner org role.
Inputs: name.
groups_deleteA
Delete a group and revoke all associated permissions. Requires group manager/owner role or org admin/owner.
Inputs: id (required).
groups_listA
List all groups in the organization. When restricted group visibility is enabled, only returns groups the user belongs to.
Inputs: no named parameters.
groups_listMembersA
List all members of a group with resolved user info. Respects restricted group visibility.
Inputs: id (required).
groups_removeMemberA
Remove a member from the group. Requires group manager/owner role or org admin/owner. Cannot remove the owner.
Inputs: id (required), userId (required).
groups_updateA
Rename a group. Requires group manager/owner role or org admin/owner.
Inputs: id (required), name.
groups_updateMemberA
Change a member's role in the group. Requires group manager/owner role or org admin/owner.
Inputs: id (required), userId (required), role.
jobs_cancelC
Cancel a background job.
Inputs: id (required).
jobs_getC
Poll the status of a background job.
Inputs: id (required).
media_uploadC
Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
Inputs: filename, type, contentType. Returns: uploadUrl, publicUrl
me_getB
Get the current user's account details.
Inputs: no named parameters.
me_updateC
Update the current user's account details.
Inputs: name, preferences.
org_customDomain_getA
Get custom domain configuration
Inputs: no named parameters.
org_customDomain_updateC
Update custom domain configuration
Inputs: customDomain.
org_deleteB
Delete organization
Inputs: no named parameters.
org_getC
Get organization
Inputs: no named parameters.
orgs_createC
Create a new workspace to collaborate with others on exams.
Inputs: name.
orgs_listB
List all organizations
Inputs: no named parameters.
org_updateC
Update organization
Inputs: name, logoImageUrl, menuColor, accentColor, +2 more.
patchRubricsidC
Update an existing rubric in the current workspace.
Inputs: id (required), name, scoring.
permissions_assignB
Create a new permission for a specific resource, or update the role of an existing actor.
Inputs: resource (required), body. Returns: actor, role, createdAt, updatedAt, +1 more
permissions_autocompleteA
Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
Inputs: q (required), type.
permissions_deleteC
Remove a permission for a specific actor on a specific resource.
Inputs: resource (required), actor (required).
permissions_getActorRoleA
Get the role of a specific actor for a specific resource.
Inputs: actor (required), resource (required). Returns: actor, role, createdAt, updatedAt, +1 more
permissions_listB
Get a list of users, groups and orgs that have access to a specific resource.
Inputs: resource (required). Returns: result
postRubricsC
Add a rubric to the current workspace.
Inputs: name, scoring.
postRubricsGenerateC
Start a background job to generate a rubric using AI.
Inputs: message, sourceMaterialIds, language, context.
practiceSpaces_cancelGenerateTopicsB
Cancel an in-progress mastery topic generation job.
Inputs: id (required).
practiceSpaces_createC
Create a new practice space within your workspace.
Inputs: name, sourceMaterialIds, masteryTopics, settings, +5 more.
practiceSpaces_deleteC
Delete the practice space.
Inputs: id (required).
practiceSpaces_duplicateC
Duplicate the practice space's settings and topics to a new practice space.
Inputs: id (required), name.
practiceSpaces_generateTopicFeedbackC
Get feedback for a specific topic in a practice space.
Inputs: id (required), topicId, feedbackType.
practiceSpaces_generateTopicsC
Start generating mastery topics for a practice space.
Inputs: id (required).
practiceSpaces_getC
Get a single practice space by its ID.
Inputs: id (required).
practiceSpaces_getProgressC
Get the progress of a single practice space by its ID.
Inputs: id (required).
practiceSpaces_listA
Get a list of all practice spaces you have access to in this workspace.
Inputs: folder, role.
practiceSpaces_questionsPreviewC
Get a preview of the top practice space questions by quality score.
Inputs: id (required).
practiceSpaces_sessions_createC
Create a new practice space session.
Inputs: id (required), prompt.
practiceSpaces_sessions_getC
Get a practice space session by its ID.
Inputs: id (required), sessionId (required).
practiceSpaces_sessions_getMineC
Get the current user's past practice space session.
Inputs: id (required).
practiceSpaces_sessions_saveAnswerC
Save an answer for a specific question in a practice space session.
Inputs: id (required), sessionId (required), questionId (required), question, +3 more.
practiceSpaces_students_getC
Get details about a specific practice space student.
Inputs: id (required), studentId (required).
practiceSpaces_students_listC
Get a list of all students that practiced in a practice space.
Inputs: id (required).
practiceSpaces_updateC
Update an existing practice space.
Inputs: id (required), name, settings, folder, +5 more.
questionBank_createC
Add a question to the question bank in the current workspace.
Inputs: question.
questionBank_deleteC
Delete a question bank item from the current workspace.
Inputs: id (required).
questionBank_listA
Get a list of question bank items that exist within the current workspace.
Inputs: no named parameters.
questionBank_updateC
Update an existing question bank item in the current workspace.
Inputs: id (required), question.
questionTypes_deleteA
Deletes a specific question type by its ID. Note that only the owner organization of the question type can delete it, and only if it has not been used in an exam.
Inputs: id (required).
questionTypes_disableB
Disable a question type for the current workspace.
Inputs: id (required).
questionTypes_enableC
Enable a question type for the current workspace.
Inputs: id (required).
questionTypes_getB
Retrieves a specific question type by its ID.
Inputs: id (required).
questionTypes_getQti3PciC
Get JS module for a question type PCI for QTI 3 export.
Inputs: id (required).
questionTypes_listA
Lists all question types, either those available by default or those created within the user's organization.
Inputs: no named parameters.
questionTypes_listPublicA
Lists all public question types, which can be enabled in workspaces.
Inputs: no named parameters.
questionTypes_upsertA
Creates a new question type or updates an existing one. If the question type already exists, it will be updated; otherwise, a new one will be created.
Inputs: $schema, id, name, description, +26 more.
sourceMaterials_createC
Add a source material and start processing it for later use in an exam.
Inputs: url, type, name, size, +3 more. Returns: org, id, type, createdBy, +16 more
sourceMaterials_deleteB
Deletes the specified source material.
Inputs: id (required).
sourceMaterials_getB
Returns the current status and facts extracted from the specified source material.
Inputs: id (required). Returns: org, id, type, createdBy, +16 more
sourceMaterials_listB
Returns a list of source materials for the current organization.
Inputs: externalId. Returns: result
sourceMaterials_sliceA
Create a new source material based on a specific page range of an existing source material.
Inputs: id (required), startPage, endPage, name. Returns: org, id, type, createdBy, +16 more
sourceMaterials_updateC
Updates the specified source material.
Inputs: id (required), name.
studentLevels_listA
Get a list of available default student levels.
Inputs: no named parameters.
taxonomies_createC
Save a new taxonomy in the current workspace.
Inputs: name, description, instructions, levels.
taxonomies_deleteA
Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
Inputs: id (required).
taxonomies_listA
Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
Inputs: no named parameters.
taxonomies_updateC
Update an existing taxonomy in the current workspace.
Inputs: id (required), name, description, instructions, +1 more.
users_createC
Create a new user in the workspace.
Inputs: email, name, role, sendInvite.
users_deleteC
Delete a user from the workspace.
Inputs: id (required).
users_listA
Get a list of all users in the workspace.
Inputs: no named parameters.
users_updateD
Update a user's role within the workspace.
Inputs: id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 115 tools
Most tools are grouped by resource (e.g., exams_, groups_), making their purpose clear. However, some tool names like exams_import and sourceMaterials_create could be confused without descriptions, and the mix of singular/plural resource names (e.g., questionBank vs studentLevels) causes minor ambiguity.
Naming conventions are inconsistent: some use snake_case (attributes_create), some use camelCase for the resource prefix (embedSessions_create), and a few use no separator (deleteRubricsid). This mix of styles makes the set feel unpolished.
At 115 tools, the count is very high for an MCP server, likely overwhelming for agents. While the domain (exam management) is broad, many tools could be consolidated (e.g., separate tools for each exam session operation).
The tool surface covers the full lifecycle of exams, sessions, groups, rubrics, question banks, and more, including AI generation and export. Minor gaps exist (e.g., no bulk delete or analytics), but core workflows are well-supported.
Maintenance
Related MCP Connectors
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
Connect AI agents to 580+ APIs with OAuth or API-key auth. Hosted gateway; API pricing varies.
Find and call verified APIs from any AI assistant, with free trial calls and previewed writes.
Related MCP Servers
AlicenseBqualityBmaintenanceEnables AI assistants to interact with the EduBase educational platform to create quizzes, upload questions, schedule exams, manage educational content, and analyze user results through natural language.153567 npm28MIT
MCPaeroeduofficial
AlicenseAqualityCmaintenanceEnables AI assistants to interact with the AeroEduVision platform, allowing exam generation, course management, knowledge graph queries, and student progress tracking through natural language commands.24MIT- AlicenseBqualityCmaintenanceEnables AI assistants to manage Canvas LMS courses, announcements, rubrics, assignments, modules, pages, and student data via the Canvas API.6032 npm12MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with the Classavo education platform via natural language for course management, assignments, grading, attendance, polling, and discussions, with strict privacy controls for students.-