StudentCenter over MCP
Point an AI agent at your institution over MCP (Model Context Protocol) and let it manage learners, credentials, curricula, and games, scoped to your institution only.
Compatibility
Works today with Claude Code and any MCP-compatible CLI that can speak streamable HTTP MCP with a Bearer token.
Claude.ai and ChatGPT custom connectors are not supported yet. Both require OAuth 2.1 plus RFC 7591 dynamic client registration, which is a later phase of this work.
Status
| Endpoint | Beta | https://www.studentcenter.io/api/mcp |
| Auth | Beta | Bearer token, SHA-256 hashed keys |
| Transport | Beta | JSON-RPC 2.0 over HTTP POST, with an optional SSE keepalive channel |
| Claude Code | Beta | Works today via a plain HTTP MCP server entry |
| MCP CLIs | Beta | Any client that speaks streamable HTTP MCP |
| Claude.ai connector | Not available | Needs OAuth 2.1 + dynamic client registration |
| OAuth DCR | Not available | RFC 7591, not built yet |
109 tools, by category
109 tools exist on the platform. 86 are available to an institution API key. The rest are superadmin-only and not exposed here.
Full tool catalog
Institution4 tools
sc_list_institutionsLists institutions, all of them for superadmin keys and only their own for institution keys.
sc_get_institutionGets a single institution by slug, scoped to the caller's own institution for institution keys.
sc_list_audit_logViews MCP audit log entries for retracing recent writes, filterable by tool name or error status.
sc_update_institutionUpdates patchable institution fields: logo, website, description, accent color, social links, support contact, and theme.
Learners8 tools
sc_list_learnersQueries verified and pending learners from institution_student_emails, auto-scoped for institution keys.
sc_get_member_statsAggregates learner stats: total, verified, active, inactive, and pending counts.
sc_get_learner_skill_progressGets skill mastery progress across learners for an institution, useful for spotting weak areas in the cohort.
sc_invite_learnerInvites a single learner or admin to the institution by email.
sc_bulk_invite_learnersInvites many learners at once, reporting per-email success.
sc_approve_enrollmentApproves or rejects a pending learner enrollment request.
sc_update_enrollment_statusUpdates a learner's enrollment status: active, inactive, or graduated.
sc_at_risk_learnersSurfaces learners who appear stuck: no recent skill progress activity.
Credentials10 tools
sc_list_credentialsLists minted credentials, auto-scoped to the institution key's own institution.
sc_get_credentialGets a single minted credential by ID, scoped to the caller's own institution.
sc_credential_statsAggregates credential stats: total minted, active templates, mint rate, and recent activity.
sc_list_templatesLists credential templates, auto-scoped to the institution key's own institution.
sc_create_credential_templateCreates a new credential template for an institution.
sc_update_credential_templateUpdates fields on an existing credential template.
sc_record_manual_issuanceRecords a manual credential issuance for a learner; NFT minting still completes via the institution dashboard.
sc_issue_credentialdestructiveIssues a credential to a single learner, looking up their wallet and minting the NFT on chain via thirdweb.
sc_bulk_issue_credentialsdestructiveIssues a template to many learners at once, minting in batch and reporting per-learner success.
sc_revoke_credential_institutiondestructiveRevokes a credential issued by this institution; cannot revoke credentials belonging to other institutions.
Curriculum9 tools
sc_list_skillsLists skills in the global taxonomy, optionally filtered by domain, for building curricula or tagging games.
sc_list_curriculaLists skill curricula for an institution.
sc_get_curriculumGets a curriculum with all of its ordered steps.
sc_create_curriculumCreates a new skill curriculum for an institution.
sc_add_curriculum_stepAdds one or many skill steps to a curriculum.
sc_remove_curriculum_stepdestructiveRemoves a step from a curriculum by step ID.
sc_publish_curriculumPublishes or unpublishes a curriculum.
sc_get_curriculum_progressReturns per-learner progress through a curriculum, including completed steps and percent complete.
sc_recommend_skills_for_curriculumSuggests skills to add to a curriculum based on a goal description, matched against the global skills taxonomy.
Badges7 tools
sc_list_badge_definitionsLists badge definitions for an institution: slug, level, linked credential template, and prerequisites.
sc_list_issued_badgesLists badges actually issued to learners, joined to badge name and learner email.
sc_get_learner_badge_progressReturns per-learner progress toward every badge path in the institution, including which learners are mint-ready.
sc_badge_system_healthDiagnoses the badge system for an institution: dangling mappings, unreachable point thresholds, and stuck learners.
sc_record_game_completionRecords a learner's game attempt in the badge system and recomputes their path progress idempotently.
sc_issue_badgeRecords that a badge has been issued to a learner and marks their path progress as issued; refuses to double-issue.
sc_upsert_badge_definitionCreates or updates a badge definition; omit badge_id to create a new one.
Games20 tools
sc_list_gamesLists gamified learning activities for an institution.
sc_create_gameCreates a game stub only: a row with title, slug, and description but no scenes, questions, or content yet.
sc_update_gameUpdates a game's metadata, mechanics config, status, and scene order.
sc_tag_game_skillLinks a skill to a game with a weight controlling how much it contributes to mastery.
sc_list_game_scenesLists all scenes in a game ordered by scene order.
sc_create_game_sceneCreates a scene in a game: intro, content, cutscene, or other scene types.
sc_create_scene_layerCreates a layer in a scene, with higher layer order rendering on top.
sc_create_scene_elementAdds a positioned element, such as text, character, or button, to a scene layer.
sc_create_element_triggerAdds a trigger to an element or scene defining when something happens, such as onClick.
sc_create_trigger_actionAdds an action to a trigger defining what happens when it fires.
sc_get_game_detailGets full detail of a game: metadata, scenes, questions, and skill tags, for auditing.
sc_create_game_questionCreates a quiz question for a game.
sc_create_question_optionAdds an answer option to an MCQ or true/false question, marking exactly one as correct.
sc_create_drag_itemAdds a draggable item to a drag-and-drop question.
sc_create_drop_zoneAdds a drop target zone to a drag-and-drop question.
sc_create_game_characterCreates a reusable character or narrator definition for a game.
sc_audit_gameRuns a read-only diagnostic on a scene-mode game and returns a structured report of issues by severity.
sc_audit_institution_gamesRuns sc_audit_game against every scene-mode game in an institution and returns a ranked rollup.
sc_repair_mcq_triggersRepairs legacy MCQ wiring, rebuilding onCorrect/onIncorrect triggers. Defaults to a dry run.
sc_scaffold_story_gameScaffolds a complete story-driven scene-mode game in one call, creating an intro scene and narrative content.
Game operations6 tools
sc_publish_gamePublishes a game, setting its status to published so learners can access it.
sc_unpublish_gameUnpublishes a game, setting its status back to draft so learners can no longer access it.
sc_clone_gameDuplicates an existing game, including scenes, questions, and skills, into a new draft.
sc_clone_templateDuplicates a credential template into a new inactive copy.
sc_clone_curriculumDuplicates a curriculum and all of its steps into a new unpublished copy.
sc_get_game_analyticsReturns per-game analytics: attempts, unique learners, completion rate, pass rate, and average score.
Marketplace7 tools
sc_search_marketplace_templatesFull-text searches the marketplace for published templates, filterable by category and difficulty.
sc_get_marketplace_templateFetches full details on a single marketplace template by slug.
sc_import_marketplace_templateImports a previously purchased marketplace template into this institution.
sc_search_marketplace_pathsFull-text searches the marketplace for published learning-path listings, filterable by category.
sc_get_marketplace_pathFetches full details on a single marketplace learning-path listing by slug.
sc_import_marketplace_pathImports a previously confirmed learning-path purchase into this institution; does not perform the purchase itself.
sc_create_path_listingCreates a draft marketplace listing from a curriculum, kicking off an async asset-freeze job.
Learning paths5 tools
sc_list_learning_pathsLists badge-system learning paths for an institution with points required and linked badges.
sc_get_learning_pathGets one learning path with its mapped games resolved to titles and required flags.
sc_upsert_learning_pathCreates or updates a badge-system learning path; omit path_id to create a new one.
sc_set_path_gamesReplaces the full game mapping for a learning path in one call, validating every game exists first.
sc_remove_path_gamedestructiveRemoves a single game from a learning path without rewriting the whole mapping.
Community4 tools
sc_create_community_postCreates a community post in the institution's feed.
sc_pin_community_postToggles the pinned state on a community post.
sc_list_subgroupsLists subgroups for the institution.
sc_create_subgroupCreates a new subgroup for the institution with an auto-generated slug.
Email1 tools
sc_send_learner_emailSends a templated email to a single learner, a list of learners, or every active verified learner in the institution.
Analytics5 tools
sc_get_institution_analyticsReturns a full analytics dashboard for an institution: learner, credential, game, and curriculum stats.
sc_export_csvExports institution data as CSV text for learners, credentials, templates, games, or the audit log.
sc_analytics_timeseriesReturns time-bucketed counts of credentials minted, learners joined, and game attempts.
sc_diagnose_institutionRuns a battery of health checks across an institution; call this first when connecting to a new one.
sc_get_next_best_actionReturns the top highest-leverage next actions for an institution.
Platform (superadmin)8 tools
sc_get_environmentReturns which environment the MCP server is targeting, staging or production.
sc_get_metricsReturns platform KPIs: members, credentials minted, mint rate, and active templates.
sc_list_employersLists companies from the employers table.
sc_get_gmail_statsReturns inbox stats for the StudentCenter operational email account.
sc_get_upcoming_tasksReturns items needing attention in the next 7 days: pending verifications and stalled onboarding.
sc_get_recent_activityReturns the last 10 notable platform events: new learners, minted credentials, and new institutions.
sc_check_institution_onboardingChecks an institution's onboarding status: wallet, contract, admin, and verification flags.
sc_get_user_by_emailResolves a user by email address, returning id, email, name, and created date.
Superadmin15 tools
sc_verify_institutionSets or clears the is_verified flag on an institution.
sc_update_institution_tierChanges an institution's subscription tier.
sc_create_skillAdds a new skill to the global taxonomy.
sc_revoke_credentialdestructiveRevokes a minted credential, flipping the StatusList bit and cascading to any composite credential built from it.
sc_create_api_keyProvisions a new tenant API key for an institution, returning the raw key once.
sc_create_institutionCreates a new institution row, auto-generating a slug from the name if not provided.
sc_setup_institution_walletProvisions a thirdweb Engine server wallet for an institution.
sc_deploy_institution_contractdestructiveDeploys an ERC-721 soulbound credential contract for an institution on chain.
sc_transfer_contract_ownershipdestructiveTransfers the admin role of an institution's credential contract to an external wallet. Irreversible.
sc_set_featured_institutionSets or clears the is_featured flag on an institution.
sc_add_institution_adminLinks a user as admin or owner of an institution.
sc_generate_game_thumbnailGenerates an AI image with Gemini and sets it as a game's thumbnail.
sc_generate_credential_imageGenerates an AI badge or credential image with Gemini and sets it on the credential template.
sc_generate_credential_videoAnimates a credential template's image into a short looping video with Google Veo 2.
sc_refund_curriculum_purchasedestructiveRefunds a confirmed Stripe learning-path purchase with explicit control over the Connect transfer and platform fee.
Scopes and permissions
Every tool falls into one of three scopes, and an API key is granted one or more of them at creation.
readViews data only. Never changes anything.
writeCreates or updates records: invites, templates, curricula, games.
issueMints or records a credential or badge issuance on a learner's behalf.
issue is kept separate from ordinary writes because it is the scope that mints an on-chain credential rather than just updating a row, so a key can be given write access without also being able to mint.
9 tools are marked destructive: revokes, hard deletes, and the on-chain contract mint/deploy tools. They are still scoped normally, but treat them as irreversible.
Get a key
As an institution admin, open your institution's dashboard, go to Automation, then the API Keys tab, and create a key:
/institutions/<your-institution-slug>/dashboard/automationPick Read only, Read + Write, or Issue credentials, set an optional expiry, and copy the key. It is shown once.
Copy-paste config
The transport is JSON-RPC 2.0 over HTTP POST, with an optional SSE channel for clients that expect one. That stream only emits keepalives; it does not push notifications between requests.
.mcp.json
{
"mcpServers": {
"studentcenter": {
"type": "http",
"url": "https://www.studentcenter.io/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}Smoke test
curl -X POST "https://www.studentcenter.io/api/mcp" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'Include the Accept: application/json, text/event-stream header. This is the only one of our apps that also normalizes a missing Accept header, but send it anyway for consistency across clients.
Rate limits
120 requests per minute per API key, burstable up to 120 and refilling at 2 requests per second (token bucket). Exceeding it returns HTTP 429 with a Retry-After header, so back off and batch your work rather than polling in a tight loop.
The partner issuance API (/api/v1/*) has a separate bucket: 300 requests per minute per key.
Included with your account. Read the integration guide