MCP server
Aceversity's Model Context Protocol server at https://api.aceversity.com/mcp exposes every API operation as a tool for Claude and other MCP clients.
| URL | https://api.aceversity.com/mcp |
| Transport | Streamable HTTP (POST JSON-RPC, JSON responses; no SSE stream or session needed) |
| Protocol versions | 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (negotiated in initialize) |
| Auth | OAuth 2.1 (discovered from the 401 challenge) or an API key as Authorization: Bearer ace_sk_… |
| Capabilities | tools |
The tools are generated from the same definitions as the REST API and openapi.json, so names, inputs and outputs always match the reference. Each tool returns its JSON result both as structuredContent (validated against the tool's outputSchema) and as text.
Tools
| Tool | What it does | Scope | Hints |
|---|---|---|---|
get_me |
Profile, today's date, membership, credential scopes | read | read-only |
get_agenda |
Items and unfinished milestones due in the next N days | read | read-only |
list_courses |
The member's courses | read | read-only |
get_course |
One course, next 5 items, optional syllabus text | read | read-only |
create_course |
Add a course | write | |
update_course |
Change course fields | write | idempotent |
delete_course |
Delete a course and everything in it | write | destructive |
list_items |
Deadlines, filterable by course/kind/date | read | read-only |
get_item |
One deadline | read | read-only |
create_item |
Add an exam/quiz/assignment/lab/paper/project | write | |
update_item |
Rename, re-kind or move a deadline | write | idempotent |
delete_item |
Delete a deadline and its milestones | write | destructive |
list_milestones |
Study-plan steps for a deadline | read | read-only |
create_milestone |
Add a step | write | |
update_milestone |
Edit or check off a step | write | idempotent |
delete_milestone |
Remove a step | write | destructive |
get_grades |
Categories, scores, weighted grade, letter | read | read-only |
set_grade_categories |
Replace category weights | write | destructive (removed categories lose scores) |
add_grade_score |
Record a score | write | |
delete_grade_score |
Remove a score | write | destructive |
get_practice_stats |
Accuracy by topic, weak topics, streak | read | read-only |
list_vocab_decks |
Flashcard decks | read | read-only |
list_vocab_terms |
Terms in a deck | read | read-only |
create_vocab_deck |
Create a deck of terms | write | |
delete_vocab_deck |
Delete a deck | write | destructive |
Every tool sets title, readOnlyHint, destructiveHint, idempotentHint and openWorldHint: false (tools only touch the member's own Aceversity data). Clients use these to decide when to ask the member for confirmation.
Errors come back as tool results with isError: true and text like not_found: Course not found. so the model can recover (e.g. list courses and retry). Unknown tools and malformed JSON-RPC get JSON-RPC errors.
How a client connects
POST https://api.aceversity.com/mcpwith no credentials →401andWWW-Authenticate: Bearer resource_metadata="https://api.aceversity.com/.well-known/oauth-protected-resource/mcp".- The client reads that document, finds the authorization server (
https://api.aceversity.com), fetches its metadata, registers itself at/oauth/register, and opens/oauth/authorizewith PKCE. - The member approves; the client exchanges the code and retries with
Authorization: Bearer ace_at_…. initialize→notifications/initialized(answered202) →tools/list→tools/call.
Try it by hand
curl -s https://api.aceversity.com/mcp \
-H "Authorization: Bearer $ACEVERSITY_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_agenda","arguments":{"days":7}}}'
MCP Inspector
npx @modelcontextprotocol/inspector
Choose Streamable HTTP, URL https://api.aceversity.com/mcp. Either use Open Auth Settings → Quick OAuth Flow to test the OAuth path, or add a header Authorization: Bearer ace_sk_…. Then Connect → List Tools and run a few. See Testing for the full checklist.