eduframe-mcp
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., "@eduframe-mcp List my most recent leads"
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.
eduframe-mcp
Eduframe MCP server — exposes Eduframe resources as MCP tools.
Usage in VSCode
Add the following configuration to your .vscode/mcp.json file to use this MCP server with GitHub Copilot in agent mode.
Using npx (from GitHub)
{
"servers": {
"eduframe": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github:martijnpieters/eduframe-mcp"],
"env": {
"EDUFRAME_API_TOKEN": "${input:eduframe_api_token}"
}
}
},
"inputs": [
{
"id": "eduframe_api_token",
"type": "promptString",
"description": "Eduframe API token",
"password": true
}
]
}Development (from this repository)
First, build the project:
pnpm install && pnpm buildThen add the following to .vscode/mcp.json in this repository:
{
"servers": {
"eduframe": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/index.js"],
"env": {
"EDUFRAME_API_TOKEN": "${input:eduframe_api_token}"
}
}
},
"inputs": [
{
"id": "eduframe_api_token",
"type": "promptString",
"description": "Eduframe API token",
"password": true
}
]
}Related MCP server: OpenAI Ads MCP Server
Configuration
The server requires one environment variable:
Variable | Description |
| Your Eduframe API token (Bearer token) |
| (Optional) Base URL for the Eduframe API. Defaults to |
Debugging
When running the server locally, each successful tool call writes the raw API response to .last-response.json in the project root. This file can be inspected to see the complete JSON payload returned by the Eduframe API, independent of the formatted text output sent back to the MCP client.
The file is overwritten on every tool call and contains the tool name, the request parameters, and the full response:
{
"timestamp": "2024-01-01T00:00:00.000Z",
"tool": "get_lead",
"request": { "id": 1 },
"response": { "id": 1, "email": "lead@example.com", ... }
}Available Tools
189 toolsactivate_teacherAIdempotent
Mark teacher as active
Inputs: id (required).
add_label_to_orderBIdempotent
Add label to an order
Inputs: id (required), label_id (required).
add_option_to_custom_fieldBIdempotent
Add an option to a custom field
Inputs: object_type (required), field_slug (required), value (required), enabled (required).
approve_orderAIdempotent
Approve an order
Inputs: id (required).
award_certificate_to_program_enrollmentAIdempotent
Awards a certificate to a program enrollment
Inputs: id (required), certificate_template_id (required).
cancel_enrollmentCIdempotent
Cancel an enrollment
Inputs: id (required).
cancel_orderCIdempotent
Cancel an order
Inputs: id (required).
cancel_planned_courseBIdempotent
Cancel a planned course.
Inputs: id (required).
cancel_program_enrollmentBIdempotent
Cancel a program enrollment
Inputs: id (required).
create_accountD
Create an account
Inputs: name (required), email, phone, label_ids, +3 more.
create_affiliationC
Create an affiliation affiliations
Inputs: user_id (required), account_id (required), key_contact.
create_authenticationC
Create an authentication.
Inputs: uid (required), user_id (required), authentication_provider_type (required).
create_categoryC
Create a category.
Inputs: name (required), description, is_published, parent_id.
create_commentC
Create a comment.
Inputs: content (required), commentable_id (required), commentable_type (required).
create_courseC
Create a course.
Inputs: category_id (required), name (required), code (required), cost_scheme, +5 more.
create_course_locationC
Create a course location.
Inputs: name (required), address_attributes.
create_course_variantC
Create a course variant
Inputs: name (required).
create_custom_recordCIdempotent
Create a custom record
Inputs: object_slug (required), display_name (required), properties (required), active.
create_email_message_by_user_idBIdempotent
Create and send an email message to a user
Inputs: user_id (required), from (required), subject (required), body (required).
create_gradeD
Create a grade
Inputs: grade (required), score (required), gradeable_id (required), gradeable_type (required), +1 more.
create_invoiceC
Create an invoice.
Inputs: account_id (required), feature, footnote, invoice_items_attributes.
create_invoice_payment_by_invoice_idCIdempotent
Create a payment.
Inputs: invoice_id (required), amount (required), currency, date, +1 more.
create_invoice_vatC
Create an invoice vat.
Inputs: name (required), percentage (required).
create_labelC
Create a label
Inputs: name (required), model_type (required), color.
create_leadC
Create a lead.
Inputs: title, account_id, user_id, value, +14 more.
create_materialC
Create a material.
Inputs: name (required), material_group_id (required), use_type.
create_material_groupC
Create a material group.
Inputs: name (required).
create_meeting_locationC
Create a meeting location.
Inputs: name (required), course_location_id (required), capacity, address_attributes.
create_orderC
Create an order.
Inputs: catalog_variant_id (required), creator_id (required), cost, cost_scheme, +9 more.
create_organization_affiliationC
Create an organization affiliation record
Inputs: organization_id (required), user_id (required), key_contact.
create_planned_courseC
Create a planned course.
Inputs: course_id (required), type (required), cost (required), is_published, +11 more.
create_planning_attendeeB
Assign a teacher to a meeting or planning event.
Inputs: teacher_id (required), attendable_id (required), attendable_type (required), teacher_role_id.
create_planning_required_teacher_group_attendeeB
Assign a teacher to a required teacher group
Inputs: teacher_id (required), required_teacher_group_id (required).
create_programC
Create a program
Inputs: name (required), category_id (required), cost_scheme (required), cost, +5 more.
create_program_editionC
Create a program edition
Inputs: program_id (required), name (required), start_date, end_date, +7 more.
create_program_elementC
Create a program element
Inputs: course_id (required), edition_id (required), planned_course_id.
create_taskC
Create a task.
Inputs: name (required), description, due_date, starred, +4 more.
create_teacherD
Create a new teacher
Inputs: user_id.
create_teacher_enrollmentA
Enroll a teacher to a planned_course.
Inputs: planned_course_id (required), teacher_id (required), teacher_role_id.
create_teacher_enrollment_by_planned_course_idBIdempotent
Enroll a teacher to the given planned course.
Inputs: planned_course_id (required), teacher_id (required), teacher_role_id.
create_teacher_roleC
Create a teacher role.
Inputs: name (required).
create_userD
Create a user.
Inputs: first_name (required), last_name (required), email (required), middle_name, +7 more.
create_webhookC
Register a webhook.
Inputs: url (required), active, events.
deactivate_teacherAIdempotent
Mark teacher as inactive
Inputs: id (required).
delete_affiliationBDestructiveIdempotent
Delete an affiliation
Inputs: id (required).
delete_authentication_from_userCDestructiveIdempotent
Remove an authentication from a user.
Inputs: user_id (required), id (required).
delete_certificate_from_program_enrollmentAIdempotent
Deletes a certificate from a program enrollment
Inputs: id (required).
delete_commentCDestructiveIdempotent
Delete a comment.
Inputs: id (required).
delete_course_locationBDestructiveIdempotent
Delete a course location.
Inputs: id (required).
delete_custom_recordBDestructiveIdempotent
Delete a custom record
Inputs: object_slug (required), id (required).
delete_gradeBDestructiveIdempotent
Delete a grade.
Inputs: id (required).
delete_invoice_payment_by_id_and_invoice_idCDestructiveIdempotent
Delete a payment.
Inputs: invoice_id (required), id (required).
delete_labelBDestructiveIdempotent
Delete a label
Inputs: id (required).
delete_leadADestructiveIdempotent
Delete a lead.
Inputs: id (required).
delete_materialBDestructiveIdempotent
Delete a material.
Inputs: id (required).
delete_material_groupBDestructiveIdempotent
Delete a material group.
Inputs: id (required).
delete_meetingBDestructiveIdempotent
Delete a meeting.
Inputs: id (required).
delete_meeting_locationCDestructiveIdempotent
Delete a course location.
Inputs: id (required).
delete_option_of_custom_fieldCDestructiveIdempotent
Delete an option from custom field
Inputs: object_type (required), field_slug (required), id (required).
delete_organization_affiliationBDestructiveIdempotent
Delete an organization affiliation record
Inputs: id (required).
delete_planning_attendeeADestructiveIdempotent
Remove a teacher from a meeting or planning event.
Inputs: id (required).
delete_planning_eventBDestructiveIdempotent
Delete a planning event.
Inputs: id (required).
delete_programBDestructiveIdempotent
Delete a program
Inputs: id (required).
delete_program_editionADestructiveIdempotent
Delete a program edition
Inputs: id (required).
delete_program_elementCDestructiveIdempotent
Delete a element
Inputs: id (required).
delete_taskBDestructiveIdempotent
Delete a task.
Inputs: id (required).
delete_teacher_enrollmentBDestructiveIdempotent
Delete a teacher enrollment.
Inputs: id (required).
delete_teacher_roleBDestructiveIdempotent
Delete a teacher role.
Inputs: id (required).
delete_webhookADestructiveIdempotent
Delete a webhook.
Inputs: id (required).
deny_orderBIdempotent
Deny an order
Inputs: id (required).
get_accountBRead-onlyIdempotent
Get a single account
Inputs: id (required).
get_accountsBRead-onlyIdempotent
Get all accounts
Inputs: cursor, per_page, search, key_contact_user_id, +2 more.
get_affiliationsBRead-onlyIdempotent
Get all affiliations
Inputs: cursor, per_page, user_id, account_id.
get_associations_of_objectBRead-onlyIdempotent
Get all associations of a system object
Inputs: object_type (required), cursor, per_page.
get_attendancesBRead-onlyIdempotent
Get all attendance records
Inputs: cursor, per_page, meeting_id.
get_authentications_by_user_idBRead-onlyIdempotent
Get the authentications of an user
Inputs: user_id (required), cursor, per_page, provider.
get_catalog_productARead-onlyIdempotent
Get a catalog product record
Inputs: id (required).
get_catalog_productsCRead-onlyIdempotent
Get all catalog products
Inputs: cursor, per_page, published, category_id, +3 more.
get_catalog_variantBRead-onlyIdempotent
Get a catalog variant record
Inputs: id (required).
get_catalog_variantsBRead-onlyIdempotent
Get all catalog variants
Inputs: cursor, per_page, published_public, product_id, +2 more.
get_categoriesCRead-onlyIdempotent
Get all category records
Inputs: cursor, per_page, published, sort.
get_categoryBRead-onlyIdempotent
Get a category record
Inputs: id (required).
get_certificateBRead-onlyIdempotent
Get an awarded certificate
Inputs: id (required).
get_certificatesARead-onlyIdempotent
Get all awarded certificates
Inputs: cursor, per_page.
get_courseBRead-onlyIdempotent
Get a course record
Inputs: id (required).
get_course_locationARead-onlyIdempotent
Get a course location record
Inputs: id (required).
get_course_locationsARead-onlyIdempotent
Get all course location records
Inputs: cursor, per_page.
get_coursesBRead-onlyIdempotent
Get all course records
Inputs: cursor, per_page, published.
get_course_tabsBRead-onlyIdempotent
Get all course tab records
Inputs: cursor, per_page.
get_course_variantBRead-onlyIdempotent
Get a course variant record
Inputs: id (required).
get_course_variantsARead-onlyIdempotent
Get all course variant records
Inputs: cursor, per_page.
get_credit_categoriesBRead-onlyIdempotent
Get all credit category records
Inputs: cursor, per_page.
get_creditsBRead-onlyIdempotent
Get all credit records
Inputs: cursor, per_page, student_id.
get_current_educatorCRead-onlyIdempotent
Get an educator record
Inputs: cursor, per_page.
get_custom_object_by_object_slugCRead-onlyIdempotent
Get a custom object by the object slug
Inputs: id (required).
get_custom_objectsCRead-onlyIdempotent
Get all custom objects
Inputs: cursor, per_page.
get_custom_recordCRead-onlyIdempotent
Get a custom record
Inputs: object_slug (required), id (required).
get_custom_recordsBRead-onlyIdempotent
Get all custom records
Inputs: object_slug (required), cursor, per_page.
get_discount_codesBRead-onlyIdempotent
Get all discount codes
Inputs: cursor, per_page.
get_edition_description_sectionsBRead-onlyIdempotent
Get all edition description section records
Inputs: cursor, per_page.
get_elements_of_program_editionBRead-onlyIdempotent
Get the elements of a program edition
Inputs: id (required), cursor, per_page.
get_enrollmentARead-onlyIdempotent
Get an enrollment record
Inputs: id (required).
get_enrollmentsCRead-onlyIdempotent
Get all enrollment records
Inputs: cursor, per_page, student_id, planned_course_id, +2 more.
get_gradeBRead-onlyIdempotent
Get a grade record
Inputs: id (required).
get_invoiceCRead-onlyIdempotent
Get an invoice record
Inputs: id (required).
get_invoice_payments_by_invoice_idBRead-onlyIdempotent
Get all payment records of an invoice
Inputs: invoice_id (required), cursor, per_page.
get_invoice_pdfARead-onlyIdempotent
Get the base64 encoded version of the invoice PDF
Inputs: id (required), cursor, per_page.
get_invoice_vatsCRead-onlyIdempotent
Get all invoice vat records
Inputs: cursor, per_page.
get_labelCRead-onlyIdempotent
Get a label
Inputs: id (required).
get_labelsCRead-onlyIdempotent
Get all labels
Inputs: cursor, per_page, model_type, search, +1 more.
get_leadARead-onlyIdempotent
Get one lead record
Inputs: id (required).
get_leadsBRead-onlyIdempotent
Get all lead records
Inputs: cursor, per_page, email.
get_material_groupCRead-onlyIdempotent
Get a material group record
Inputs: id (required).
get_material_groupsARead-onlyIdempotent
Get all material group records
Inputs: cursor, per_page.
get_materialsCRead-onlyIdempotent
Get all material records
Inputs: cursor, per_page.
get_meetingBRead-onlyIdempotent
Get an meeting record
Inputs: id (required).
get_meeting_locationCRead-onlyIdempotent
Get an meeting location
Inputs: id (required).
get_meeting_locationsBRead-onlyIdempotent
Get all meeting location records
Inputs: cursor, per_page.
get_meetings_by_planned_course_idARead-onlyIdempotent
Get all meeting records of a planned course
Inputs: planned_course_id (required), cursor, per_page, sort.
get_option_of_custom_fieldBRead-onlyIdempotent
Get an option of a custom field
Inputs: object_type (required), field_slug (required), id (required).
get_options_of_custom_fieldBRead-onlyIdempotent
Get all options of a custom field
Inputs: object_type (required), field_slug (required), cursor, per_page.
get_orderBRead-onlyIdempotent
Get an order record
Inputs: id (required).
get_ordersCRead-onlyIdempotent
Get all order records
Inputs: cursor, per_page, creator_id, created_at_after, +2 more.
get_organizationCRead-onlyIdempotent
Get an organization record
Inputs: id (required).
get_organization_affiliationsBRead-onlyIdempotent
Get all organization affiliation records
Inputs: cursor, per_page, user_id.
get_paymentARead-onlyIdempotent
Get one payment record
Inputs: id (required).
get_payment_methodsBRead-onlyIdempotent
Get all payment method records available for customers
Inputs: cursor, per_page.
get_payment_optionsBRead-onlyIdempotent
Get all payment option records
Inputs: cursor, per_page.
get_planned_courses_by_course_idBRead-onlyIdempotent
Get all planned course records of a single course
Inputs: course_id (required), cursor, per_page, search, +8 more.
get_planned_courses_by_id_and_course_idARead-onlyIdempotent
Get a planned course record of a single course
Inputs: course_id (required), id (required).
get_planning_conflictsCRead-onlyIdempotent
Get all conflicts
Inputs: cursor, per_page.
get_planning_eventBRead-onlyIdempotent
Get an planning event record
Inputs: id (required).
get_planning_eventsARead-onlyIdempotent
Get all planning event records
Inputs: cursor, per_page.
get_planning_locationsBRead-onlyIdempotent
Get all locations that are available
Inputs: cursor, per_page.
get_planning_materials_of_planing_eventBRead-onlyIdempotent
Get all planning materials of a planning event
Inputs: id (required), cursor, per_page.
get_planning_teachersCRead-onlyIdempotent
Get all teachers that are available
Inputs: cursor, per_page.
get_programBRead-onlyIdempotent
Get a program
Inputs: id (required).
get_program_editionBRead-onlyIdempotent
Get a program edition
Inputs: id (required).
get_program_edition_of_elements_batchCIdempotent
Adds a set of elements to a program edition.
Inputs: id (required), elements (required).
get_program_elementCRead-onlyIdempotent
Get an element
Inputs: id (required).
get_program_elementsCRead-onlyIdempotent
Get all elements
Inputs: cursor, per_page, edition_id.
get_program_enrollmentBRead-onlyIdempotent
Get a program enrollment record
Inputs: id (required).
get_program_enrollmentsBRead-onlyIdempotent
Get all program enrollments
Inputs: cursor, per_page, student_id, edition_id.
get_program_personal_program_elementsCRead-onlyIdempotent
Get all program personal program elements
Inputs: cursor, per_page.
get_programsCRead-onlyIdempotent
Get all programs
Inputs: cursor, per_page.
get_referralsBRead-onlyIdempotent
Get all referral records
Inputs: cursor, per_page.
get_signup_questionsBRead-onlyIdempotent
Get all signup_question records
Inputs: cursor, per_page, for_user, for_account, +3 more.
get_taskBRead-onlyIdempotent
Get a task record
Inputs: id (required).
get_tasksCRead-onlyIdempotent
Get all task records
Inputs: cursor, per_page.
get_teacherCRead-onlyIdempotent
Get a teacher record
Inputs: id (required).
get_teacher_enrollments_by_planned_course_idBRead-onlyIdempotent
Get all teacher enrollments for given planned course.
Inputs: planned_course_id (required), cursor, per_page.
get_teacher_roleBRead-onlyIdempotent
Get a teacher role
Inputs: id (required).
get_teacher_rolesCRead-onlyIdempotent
Get all teacher roles
Inputs: cursor, per_page.
get_teachersCRead-onlyIdempotent
Get all teacher records
Inputs: cursor, per_page, search, label_id, +1 more.
get_thesesBRead-onlyIdempotent
Get all thesis records
Inputs: cursor, per_page.
get_userBRead-onlyIdempotent
Get an user record
Inputs: id (required).
get_usersBRead-onlyIdempotent
Get all user records
Inputs: cursor, per_page, role, email, +2 more.
get_webhookBRead-onlyIdempotent
Get a registered webhook
Inputs: id (required).
get_webhook_notifications_failedBRead-onlyIdempotent
Get the failed webhook notifications
Inputs: webhook_id (required), cursor, per_page, start, +1 more.
get_webhooksARead-onlyIdempotent
Get all registered webhooks
Inputs: cursor, per_page.
open_invoiceAIdempotent
Changes the state from concept to open. This will assign the actual invoice number so it's ready for sending. If the current state is not concept, this endpoint does nothing.
Inputs: id (required).
set_attendanceC
Set an attendance.
Inputs: meeting_id (required), enrollment_id (required), state, comment.
update_accountCIdempotent
Update an account
Inputs: id (required), name (required), email, phone, +3 more.
update_affiliationCIdempotent
Update an affiliation.
Inputs: id (required), key_contact, user_id, account_id.
update_catalog_productCIdempotent
Update a catalog product
Inputs: id (required), category_id, is_published, custom, +1 more.
update_catalog_variantCIdempotent
Update a catalog variant
Inputs: id (required), is_published, edition_description_section_contents_attributes.
update_categoryBIdempotent
Update a category.
Inputs: id (required), name, slug, description, +2 more.
update_commentCIdempotent
Update a comment.
Inputs: id (required), content.
update_courseCIdempotent
Update a course.
Inputs: id (required), category_id, name, code, +10 more.
update_course_locationCIdempotent
Update a course location.
Inputs: id (required), name, address_attributes.
update_custom_recordCIdempotent
Update a custom record
Inputs: object_slug (required), id (required), active, display_name, +1 more.
update_enrollmentCIdempotent
Update an enrollment
Inputs: id (required), end_date.
update_gradeCIdempotent
Update a grade
Inputs: id (required), grade, score, gradeable_id, +3 more.
update_labelBIdempotent
Update a label
Inputs: id (required), name, color, model_type.
update_leadCIdempotent
Update a lead
Inputs: id (required), status (required).
update_materialCIdempotent
Update a material.
Inputs: id (required), name, material_group_id.
update_material_groupCIdempotent
Update a material group.
Inputs: id (required), name.
update_meeting_locationCIdempotent
Update a meeting location.
Inputs: id (required), name, course_location_id, capacity, +1 more.
update_option_of_custom_fieldBIdempotent
Update an option of a custom field
Inputs: object_type (required), field_slug (required), id (required), value, +1 more.
update_organization_affiliationCIdempotent
Update an organization affiliation record
Inputs: id (required), key_contact.
update_planned_courseCIdempotent
Update a planned course.
Inputs: id (required), is_published, course_id, start_date, +11 more.
update_programCIdempotent
Update a program
Inputs: id (required), name, cost, cost_scheme, +7 more.
update_program_editionBIdempotent
Update a program edition
Inputs: id (required), name, start_date, end_date, +7 more.
update_program_elementCIdempotent
Update an element
Inputs: id (required), edition_id, planned_course_id.
update_taskCIdempotent
Update a task.
Inputs: id (required), name, description, due_date, +5 more.
update_teacher_enrollmentBIdempotent
Update a teacher enrollment.
Inputs: id (required), planned_course_id, teacher_id, teacher_role_id.
update_teacher_roleAIdempotent
Update a teacher role.
Inputs: id (required), name (required).
update_userCIdempotent
Update a user.
Inputs: id (required), first_name, middle_name, last_name, +8 more.
update_webhookCIdempotent
Update a webhook.
Inputs: id (required), url, active, events.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 189 tools
Most tools have distinct names combining verb and entity, but some could be confused, e.g., 'create_planning_attendee' vs 'create_planning_required_teacher_group_attendee'. Overall, the set is fairly clear.
The naming convention is consistently verb_noun in snake_case, with standard verbs like create, get, update, delete. Minor exceptions like 'add_label_to_order' still fit the pattern. Very consistent.
189 tools is excessive for an MCP server. Typical scopes are 3-15 tools. This set likely mirrors a full API, which overwhelms agents and reduces coherence.
CRUD is available for many entities, but gaps exist: no delete for orders, invoices, or updates for some objects. Tools like 'get_payment_methods' are read-only. Medium coverage.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that enables AI agents to discover and qualify B2B leads from Leadbay's knowledge base, with tools for lead research, enrichment, and outreach logging.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes the ChatGPT Ads API as tools an LLM host can call.4MIT
- AlicenseNot gradedqualityFmaintenanceMCP server that exposes Redtail CRM's TWAPI as tools, enabling CRM operations like contacts, activities, and onboarding via natural language.1MIT
- FlicenseCqualityDmaintenanceAn MCP server that exposes Discord bot actions as tools for LLM clients.291-