Interview Prep MCP Server
Allows ChatGPT to access the shared interview-prep study database, run due-review sessions, create study plans, and review progress.
Click on "Install 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., "@Interview Prep MCP ServerWhat interview prep topics are due for review today?"
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.
Interview Prep MCP Server
An MCP server that lets Claude and ChatGPT share the same study-progress database for interview prep, coursework, and spaced repetition. The current architecture supports multiple authenticated subjects in one database, with each user's tools scoped to their own study data.
The product source of truth is interview_prep_mcp_prd.md.
What It Implements
Study hierarchy: Study -> Topic -> Subtopic.
Append-only quiz attempts with score, model notes, and optional question text.
Subtopic state snapshots with mastery, ease factor, interval, next review date, and streak.
Server-side SM-2 scheduling so LLM clients never calculate intervals.
MCP tools for reads, writes, and hierarchy management.
Public-safe MCP initialization instructions that guide clients through the review loop and data boundaries.
MCP prompts for due reviews, study-plan creation, progress review, and account data requests.
Postgres persistence for production and SQLite fallback for local development.
Per-user data isolation using the authenticated token subject.
Repo-local Codex plugin packaging for development and workspace installs.
Related MCP server: acheron-mcp-server
Local Setup
python3.11 -m venv .venv
. .venv/bin/activate
python -m pip install -e ".[dev]"Run
interview-prep-mcpBy default the server uses stdio transport and stores data in data/interview_prep.sqlite3.
Useful environment variables:
Variable | Default | Description |
|
| SQLite database path. |
| unset | Postgres connection URL. Takes precedence over SQLite when set. |
|
| FastMCP transport, for example |
|
| Host for HTTP transports. |
|
| Port for HTTP transports. |
| unset | Enables approval-secret OAuth for ChatGPT Developer Mode when set. |
| unset | Enables static bearer-token auth when set and OAuth is unset. |
|
| Allows unauthenticated HTTP only for non-public development. |
| unset | Enables public OIDC/JWT bearer-token verification when set. |
|
| JWKS endpoint for validating OIDC access tokens. |
| unset | JWT audience required for public OIDC launch, usually |
|
| JWT claim used as the stable study owner subject. |
|
| Required access-token scopes for MCP tool calls. |
|
| Name shown on public informational pages. |
|
| Support/privacy contact shown on public pages. |
|
| In-memory per-subject MCP tool-call limit per service instance. |
|
| Owner subject used for local unauthenticated runs and simple single-subject auth. |
Multi-User Architecture
The public-ready data model scopes all studies by owner_subject, and all topic, subtopic, attempt, and review-state access is validated through that owning study. MCP tools do not accept a user_id; hosted requests derive the subject from the OAuth or bearer token so clients cannot select another account by passing an id.
For public deployments, configure OIDC_ISSUER_URL and related OIDC settings so access tokens are issued by a real identity provider and each user gets a stable owner_subject.
The included OAuth approval-secret flow remains best suited to private or invite-only deployments.
Remote HTTP transports refuse to start without OAuth or bearer auth unless MCP_ALLOW_UNAUTHENTICATED_HTTP=true is explicitly set for non-public development.
Tools
The server exposes the PRD tool surface:
Tool | Purpose |
| Return all active studies. |
| Return topics within a study. |
| Return subtopics within a topic with current mastery. |
| Return due review items, optionally scoped to a study. |
| Return attempts, trend, and scheduling state for one subtopic. |
| Export all studies, topics, subtopics, attempts, and review state for the authenticated user. |
| Hard-delete all study data for the authenticated user after explicit confirmation. |
| Record a score and notes, then update SM-2 scheduling. |
| Add a study. |
| Add a topic under a study. |
| Add a subtopic under a topic. |
| Edit subtopic name or description. |
| Soft-delete a study. |
| Soft-delete a topic. |
| Soft-delete a subtopic. |
Prompts
The server also exposes MCP prompts for common workflows:
Prompt | Purpose |
| Start a due-review session and log each attempt. |
| Create or extend a study hierarchy with approval before writes. |
| Summarize due work, weak spots, and trends using read tools. |
| Route export and deletion requests through the right account-data tools. |
Test
python -m unittest discover -s testsBefore packaging or submitting a public release, run the combined local gate:
python3 scripts/release_check.pyTo produce a shareable plugin archive for review or manual distribution:
python3 scripts/package_plugin.pyTo produce a machine-readable OpenAI app submission packet:
python3 scripts/build_submission_packet.pyTo produce a machine-readable MCP contract snapshot:
python3 scripts/build_mcp_contract_snapshot.pyTo compare a previous reviewed snapshot against a new build:
python3 scripts/diff_mcp_contract.py previous-mcp-contract-snapshot.json dist/mcp-contract-snapshot.jsonTo update plugin distribution metadata when moving to a custom domain:
python3 scripts/manage_public_urls.py --base-url https://interview-prep.example.com --write --checkThe same release gate runs in GitHub Actions on pull requests, pushes to main and public-facing-version, and manual workflow dispatch. The workflow uploads the plugin archive, OpenAI submission packet, MCP contract snapshot, and public launch docs as CI artifacts.
Deployment Notes
The PRD calls for one hosted remote MCP server reachable by Claude and ChatGPT. This repo supports that path through FastMCP and uses Postgres when DATABASE_URL is configured.
The included Dockerfile runs the server with MCP_TRANSPORT=streamable-http and binds to 0.0.0.0. SQLite remains available for local development or small single-volume deployments.
railway.json pins Railway deployment settings for the Dockerfile builder, /healthz platform healthcheck, and restart policy.
See docs/deployment.md for remote MCP URLs, OAuth, bearer-token auth, and client connection examples.
See docs/public-launch.md for the recommended public hosting, database, auth, OpenAI app submission, Claude connector, and Codex plugin plan.
See docs/public-auth.md, docs/oidc-provider-setup.md, and docs/production-env.example for the external OIDC provider contract, setup runbook, and production environment template.
The hosted service also serves public review/support pages:
/for a product overview and MCP endpoint./privacyfor privacy disclosures./termsfor service terms./supportfor contact and troubleshooting./healthzfor non-secret service health metadata.
See docs/openai-submission.md for app review metadata and test prompts.
After deploying, run the public endpoint verifier:
python3 scripts/release_check.py
python3 scripts/check_production_config.py
python3 scripts/verify_public_deployment.py https://your-app.example.com
MCP_AUTH_TOKEN=... python3 scripts/verify_authenticated_mcp.py https://your-app.example.com/mcpTo seed reviewer-safe demo data:
DATABASE_URL=... python3 scripts/seed_demo_data.py --subject reviewer-demo --with-attemptsCodex Plugin
This repo includes a Codex plugin bundle at plugins/interview-prep-mcp and a repo marketplace at .agents/plugins/marketplace.json. The plugin points Codex at the hosted Railway MCP endpoint and bundles a skill that guides study-review workflows.
If Codex does not discover the repo marketplace automatically, add it from the repo root:
codex plugin marketplace add .For a shareable archive, run python3 scripts/package_plugin.py. The generated dist/interview-prep-mcp-<version>.plugin.zip contains the plugin manifest, MCP server config, skill, assets folder, and folder indexes.
Available Tools
15 toolscreate_studyB
Add a new study area.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable study name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-idempotent, non-destructive operation, and the description confirms the creation effect with 'Add a new study area.' However, it adds little beyond this: no details about duplicate-name behavior, permissions, or return value are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundancy. The core action is front-loaded and appropriately sized for a simple one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter create operation, the description is minimally sufficient, but it leaves gaps around the study hierarchy and behavior on success. Since siblings include create_topic and create_subtopic, specifying that a study is the parent-level entity would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single required 'name' parameter with the description 'Human-readable study name.' The tool description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add') and resource ('study area'), matching the tool name. It clearly refers to creating a study-level entity, but it does not explicitly distinguish itself from the sibling create_topic and create_subtopic tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use create_study versus create_topic or create_subtopic. The description simply states the action and gives no exclusions, prerequisites, or routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subtopicA
Add a subtopic under a topic.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable subtopic name. | |
| topic_id | Yes | Topic id returned by list_topics or create_topic; never a user id. | |
| description | No | Optional description of what mastery looks like. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a write operation (readOnlyHint=false) and not idempotent or destructive. The description adds only the hierarchical relationship ('under a topic') and does not discuss failure behavior, uniqueness, whether the parent must exist, or what happens on success. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the core operation and hierarchy relationship in minimal words while remaining unambiguous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter creation tool with full schema coverage and annotations, the description is minimally viable. However, it omits helpful context such as the need for the parent topic to exist, any return behavior, and how duplicates are handled. This is not critical for invocation but leaves several edge-case questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-specific detail, which is acceptable because the schema already explains topic_id, name, and description sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add') and a specific resource ('a subtopic under a topic'), immediately establishing that this creates a child of a parent topic. This clearly differentiates it from sibling create_topic while remaining easy to understand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'under a topic' implies this should be used only when there is an existing parent topic, but the description gives no explicit when-to-use guidance or mention of alternatives like create_topic for top-level topics. The usage context is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_topicA
Add a topic under a study.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable topic name. | |
| study_id | Yes | Study id returned by list_studies or create_study; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a mutating, non-idempotent operation, so the description does not need to restate that. It adds the useful constraint that topics are parented to a study. It doesn't mention consequences like duplicate-name behavior or whether the study must already exist, but this is a minor gap for a simple create.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At seven words, the description is tightly scoped and front-loaded with the verb and object. There is no filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter creation tool, the description plus the fully documented schema is nearly sufficient. It supplies the parent relationship, while the schema supplies field semantics. It would be slightly stronger with an explicit note on uniqueness or an alternative-tool pointer, but nothing essential is missing to make the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters, including a helpful clarification on study_id ('never a user id'), so the description does not need to elaborate. It adds no param-level detail beyond the schema, earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Add') on a specific resource ('a topic') with an explicit parent scope ('under a study'). It is not a tautology and maps cleanly onto the required study_id parameter. It doesn't explicitly contrast with create_subtopic, but the hierarchical wording is enough to set it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys only that this tool is for adding topics under a study; it gives no explicit when-to-use or when-not-to-use guidance relative to siblings like create_subtopic or create_study. The correct usage is implied by the hierarchy in the wording, but no alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_my_dataADestructiveIdempotent
Hard-delete all study data for the authenticated user after explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmation | Yes | Must be exactly "DELETE MY STUDY DATA" to hard-delete all study data for the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds meaningful context by specifying hard-delete semantics (permanent removal) and requiring explicit confirmation. This goes beyond the structured hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence conveys scope, permanence, and the confirmation requirement without wasted wording. Every phrase earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive action with strong annotations and no output schema, the description is sufficiently complete. It explains what happens, to whom, with what permanence, and under what condition, leaving no critical gap for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single confirmation parameter already documents the exact required string. The description only echoes the need for explicit confirmation, adding no new parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('hard-delete'), a clear resource ('all study data for the authenticated user'), and a distinct scope that separates it from per-resource siblings like delete_study, delete_topic, and delete_subtopic. The phrase 'all study data' removes ambiguity about what gets removed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is the tool for deleting the entire authenticated user's study data, and the 'after explicit confirmation' qualifier sets the expected precondition. It does not explicitly name alternatives or say when not to use it, but the scope and sibling list make the intended usage inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_studyBIdempotent
Soft-delete a study while preserving history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id of the study, topic, or subtopic to soft-delete for the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive, idempotent operation. The description adds meaningful behavioral context by specifying that the deletion is a soft-delete and that history is preserved, which clarifies the tool's effect beyond the raw annotation flags. This is useful context for an agent deciding whether calling this tool is safe and what consequences to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, it sacrifices important scope information (topics/subtopics) for brevity, so it is concise but not optimally complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is underspecified. It omits that the id may reference a topic or subtopic, does not differentiate from sibling delete_topic and delete_subtopic, and does not clarify whether soft-deletion means the item disappears from listings or how history is surfaced. The schema covers the parameter, but the tool-level description leaves important selection and behavioral questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter description is already informative: 'Id of the study, topic, or subtopic to soft-delete for the authenticated user.' The tool description adds no additional parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear action and resource: 'Soft-delete a study while preserving history.' However, it understates the actual scope: the input schema says the id can be a study, topic, or subtopic, and sibling tools delete_topic and delete_subtopic exist, so the description does not distinguish which tool applies to which resource type. This creates ambiguity about whether delete_study is only for studies or also for topics/subtopics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus delete_topic, delete_subtopic, or delete_my_data. It does not explain whether topics/subtopics should be deleted through this tool or through their dedicated siblings. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_subtopicAIdempotent
Soft-delete a subtopic while preserving history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id of the study, topic, or subtopic to soft-delete for the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses that deletion is soft and history is preserved, adding meaningful context beyond the annotations' destructiveHint=false. It is consistent with idempotentHint=true, though it does not explain repeated-call behavior or downstream effects on related data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes: the action, the resource, and the key behavioral qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter soft-delete operation, the description is mostly adequate, especially with annotations covering safety and idempotency. But it leaves unresolved the schema's broader id description and the practical effects of soft deletion, such as visibility in list_subtopics or whether history remains queryable via get_subtopic_history.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description does not need to repeat parameter details. However, the schema's id description ambiguously mentions study, topic, or subtopic, and the description does not resolve this inconsistency or clarify whether only subtopic ids are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource, 'Soft-delete a subtopic,' and adds a meaningful qualifier, 'while preserving history,' which distinguishes it from hard-delete operations. However, the schema's id description says 'study, topic, or subtopic,' which muddies exactly what resource the tool deletes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus delete_topic, delete_study, or delete_my_data. The description does not state exclusions, prerequisites, or consequences such as whether soft-deleted subtopics disappear from listings or can be restored, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_topicAIdempotent
Soft-delete a topic while preserving history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id of the study, topic, or subtopic to soft-delete for the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey non-destructive and idempotent behavior, and the description adds valuable context by explicitly saying 'soft-delete' and 'preserving history.' This explains why destructiveHint is false and clarifies that history is retained, going beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word adds value, and the key behavioral qualifier 'while preserving history' is included without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one required parameter, full schema coverage, and annotations, the description is nearly sufficient. The only notable ambiguity is that the id accepts study, topic, or subtopic while the description says 'topic,' but the schema resolves this at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the id parameter. The tool description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation—'Soft-delete a topic while preserving history'—with a specific verb and resource. It does not explicitly differentiate from sibling delete_study/delete_subtopic, and the id schema's 'study, topic, or subtopic' scope introduces minor ambiguity, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool instead of delete_study or delete_subtopic, nor when not to use it. The resource name implies scope, but the broader id description makes the lack of explicit routing a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_my_dataARead-onlyIdempotent
Export all study data for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scope context ('all study data', 'authenticated user') but does not disclose behavioral details like output format, download behavior, or whether the export is synchronous or asynchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence with no filler. It front-loads the key information: the operation, the resource scope, and the user scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only export tool, the description is mostly complete. It could be improved by noting the output format or return behavior, but the annotations and low complexity reduce the need for extensive elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so there is no parameter meaning left to clarify. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on what the tool does rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Export'), a clear resource ('all study data'), and a scoping qualifier ('for the authenticated user'). This distinguishes it from sibling tools like list_studies, which only list a subset, and delete_my_data, which is destructive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as list_studies or get_subtopic_history. The description does not state whether this is for backups, data portability, or bulk retrieval, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_due_subtopicsARead-onlyIdempotent
Return the spaced-repetition queue sorted by overdue-ness.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional maximum number of due subtopics to return. | |
| study_id | No | Optional study id returned by list_studies or create_study; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds the meaningful trait that results are sorted by overdue-ness, but it does not disclose scope behavior when study_id is omitted or what fields the queue items contain. With annotations covering safety, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to the core purpose and ordering behavior, making it easy for an agent to process quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two optional, fully documented parameters and safety annotations, the description covers the essential purpose and ordering. The main omission is behavior when study_id is null (all studies vs. a default scope) and the absence of an output schema, but the low complexity and strong schema/annotation coverage make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already explains limit and study_id, including the warning that study_id is not a user id. The description adds no parameter-level detail beyond the fact that the returned queue is ordered by overdue-ness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: returning the spaced-repetition queue ordered by overdue-ness. It is understandable, though it relies on the tool name and the phrase 'spaced-repetition queue' to convey that it returns due subtopics, and it does not explicitly contrast with siblings like list_subtopics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving the review queue, so an agent can infer when to call it, but it provides no explicit when-to-use or when-not-to-use guidance and names no alternatives. The sibling tools are visible in context, yet the description does not route the agent to list_subtopics or get_subtopic_history when a different view is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subtopic_historyARead-onlyIdempotent
Return attempts, trend, and state for one subtopic.
| Name | Required | Description | Default |
|---|---|---|---|
| subtopic_id | Yes | Subtopic id returned by list_subtopics or create_subtopic; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds context about what data is returned (attempts, trend, state) but discloses no additional behavioral traits such as error conditions, empty result handling, or rate limits. It is consistent with annotations and adds modest value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action ('Return') and the resource ('attempts, trend, and state for one subtopic'). Every word earns its place, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only tool with one parameter and no output schema. The description names the three kinds of returned information, which is sufficient for an agent to understand the tool's purpose and basic expected output. It could be more detailed about the exact structure or semantics of 'attempts, trend, and state,' but for the low complexity, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with a clear description for subtopic_id: 'Subtopic id returned by list_subtopics or create_subtopic; never a user id.' The tool description adds no new meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return attempts, trend, and state for one subtopic.' It is unambiguous about what the tool does and clearly distinguishes itself from sibling list tools like list_subtopics or get_due_subtopics by targeting a single subtopic's history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one subtopic' gives clear context for when to use this tool: when attempting to retrieve historical data about a specific subtopic. It doesn't explicitly name alternatives or exclusion conditions, but the purpose is specific enough that an agent can infer appropriate usage relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_studiesBRead-onlyIdempotent
Return all active study areas.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safely profile. The description adds the 'active' scoping, which is useful, but it does not disclose return shape, ordering, or pagination details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action and resource, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument read-only list operation, the description is minimally sufficient. However, with no output schema it leaves the return-value structure unstated, and it does niot clarify how 'study areas' relate to the topic/subtopic sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so there is no parameter semantics for the description to add. The baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return all active study areas.' It is not a tautology and is clearly about listing studies rather than topics or subtopics, though it does not explicitly name sibling tools to differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided, and no alternative sibling tools are referenced. The intended usage is only implied by the purpose statement, so an agent must infer when this tool is preferred over list_topics or list_subtopics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subtopicsARead-onlyIdempotent
Return active subtopics within a topic with current mastery state.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Topic id returned by list_topics or create_topic; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish a safe, idempotent, read-only operation. The description adds useful context by restricting to 'active' subtopics and noting 'current mastery state', but it does not disclose additional behavior such as output shape, ordering, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every term ('Return', 'active', 'within a topic', 'current mastery state') adds signal and helps scope the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter, read-only list tool, the description plus annotations and schema are mostly sufficient. The only real gap is the lack of an explicit output structure or mention of whether inactive subtopics are excluded beyond the word 'active', but the tool's simplicity keeps this from being a major omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the only parameter, topic_id, including where it comes from and a caution that it is never a user id. Since schema description coverage is 100%, the description does not need to add parameter-level meaning, and the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a specific resource ('active subtopics within a topic'), and the distinguishing output ('current mastery state'). This clearly separates it from siblings like list_topics, get_due_subtopics, and get_subtopic_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when to call it: when listing active subtopics of a topic and needing current mastery state. It does not explicitly name alternatives like get_due_subtopics or get_subtopic_history, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_topicsARead-onlyIdempotent
Return active topics within a study.
| Name | Required | Description | Default |
|---|---|---|---|
| study_id | Yes | Study id returned by list_studies or create_study; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'active' scoping detail, which is useful, but it does not mention ordering, pagination, or the exact shape of returned topics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence contains the core action, the resource, and the active-topic filter. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, single-parameter tool, the description plus schema and annotations are mostly adequate. It could be more complete by explicitly noting what fields are returned for each topic, but nothing needed to safely invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter and already describes study_id as returned by list_studies or create_study, and warns it is never a user id. The description adds little beyond the word 'study,' but the schema is sufficient, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') plus a clear resource and scope: 'active topics within a study.' This immediately distinguishes it from siblings like list_studies (studies, not topics) and list_subtopics (subtopics, not topics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'within a study' implies the tool is for study-scoped topic listing, and the 'active' filter further narrows intent. However, there is no explicit statement about when to prefer this tool over list_subtopics or get_due_subtopics, nor any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_attemptA
Record a quiz attempt and update SM-2 scheduling state.
| Name | Required | Description | Default |
|---|---|---|---|
| score | Yes | SM-2 recall score: 1 blackout, 2 incorrect/familiar, 3 effortful correct, 4 mostly correct, 5 fluent. | |
| model_notes | Yes | Concise grading notes from the reviewing assistant. | |
| subtopic_id | Yes | Subtopic id returned by list_subtopics or create_subtopic; never a user id. | |
| question_asked | No | Optional exact question or prompt used for the attempt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description carries the burden of behavioral disclosure. It does disclose that the tool records data and mutates SM-2 state, which is useful. However, it does not say whether multiple attempts accumulate, whether prior attempts are overwritten, or what scheduling fields are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the primary action and the key side effect efficiently, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with four fully documented parameters, the description plus schema is largely sufficient for an agent to invoke it correctly. It does not detail the return value or exact scheduling changes, but those are secondary given the clear action and complete schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter, including the score rubric and subtopic_id clarification. The description adds no parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Record') and resource ('quiz attempt') and also names the side effect ('update SM-2 scheduling state'). This clearly differentiates it from sibling list/get/update tools and leaves no doubt about the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies clear usage context: call it when a quiz attempt has been graded and SM-2 scheduling state should be updated. It does not explicitly name alternatives or exclusions, but no sibling tool competes for this action, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_subtopicC
Edit a subtopic's name or description.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional replacement subtopic name. | |
| description | No | Optional description of what mastery looks like. | |
| subtopic_id | Yes | Subtopic id returned by list_subtopics or create_subtopic; never a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not explicitly destructive; the description's 'Edit' is consistent but adds no behavioral context beyond that. It does not disclose merge semantics for null fields, return value, permissions, or side effects, so it provides little transparency beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is concise, though slightly repetitive of the tool name and parameter names, so it does not reach the exceptional level of fully optimized descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with a fully documented schema and annotations, the description is minimally adequate. However, it omits useful context like partial-update behavior, whether null clears or preserves fields, and what the tool returns, so an agent would benefit from more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description only restates the field names 'name' and 'description' without adding new semantic meaning such as what omission or null means for each field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Edit') and resource ('subtopic') and names the editable fields ('name or description'). It is clear enough to be distinguished from create_subtopic, delete_subtopic, and list_subtopics, though it does not explicitly call out alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as create_subtopic, delete_subtopic, or list_subtopics. There are no prerequisites, exclusions, or alternative routing, so an agent must infer usage solely from the verb 'Edit'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v0.1.0- First observed
create_study - First observed
create_subtopic - First observed
create_topic - First observed
delete_my_data - First observed
delete_study - First observed
delete_subtopic - First observed
delete_topic - First observed
export_my_data - First observed
get_due_subtopics - First observed
get_subtopic_history - First observed
list_studies - First observed
list_subtopics - First observed
list_topics - First observed
log_attempt - First observed
update_subtopic
TDQS
Each tool targets a distinct resource or action: study hierarchy reads/creates/deletes, attempt logging, due queue, history, and data privacy. list_subtopics and get_due_subtopics are clearly different because one returns all subtopics while the other returns the spaced-repetition queue.
Tool names follow a consistent verb_noun pattern with hierarchical nouns: list_*, create_*, delete_*, and get_*. Pluralization is predictable, and no mixed casing or vague verbs are present.
15 tools is at the upper bound of the ideal range, but each tool earns its place by covering study hierarchy management, spaced-repetition workflow, history inspection, and user data controls. The scope matches the server's stated purpose without unnecessary redundancy.
The core hierarchy and spaced-repetition workflow are well covered, but update_study and update_topic are missing while update_subtopic exists. This creates an incomplete CRUD surface for higher-level resources; agents cannot rename or edit a study or topic without deleting and recreating it.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables conversation history sharing between ChatGPT and Claude with secure multi-user support. Allows users to save, load, search, and manage conversations across different AI platforms with cloud deployment options.5-
- AlicenseAqualityDmaintenanceCross-surface persistent memory for Claude. Bridges context between Claude Chat, Code, and Cowork via local SQLite with full-text search.6216MIT

MyAITwin MCPofficial
FlicenseNot gradedqualityDmaintenancePersonal RAG database and semantic search built from inside your AI chat. Store knowledge, voice, and skills; Claude and ChatGPT create work that sounds like you.-- AlicenseAqualityDmaintenanceEnables Claude to remember conversations and learn over time by storing and recalling messages, memory abstracts, and recent history using a local SQLite database.42172MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bemnetbeshah/interview-and-learning-data-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server