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 "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., "@Interview Prep MCP Server What 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.
Inputs: name (required).
create_subtopicA
Add a subtopic under a topic.
Inputs: name (required), topic_id (required), description.
create_topicA
Add a topic under a study.
Inputs: name (required), study_id (required).
delete_my_dataADestructiveIdempotent
Hard-delete all study data for the authenticated user after explicit confirmation.
Inputs: confirmation (required).
delete_studyBIdempotent
Soft-delete a study while preserving history.
Inputs: id (required).
delete_subtopicAIdempotent
Soft-delete a subtopic while preserving history.
Inputs: id (required).
delete_topicAIdempotent
Soft-delete a topic while preserving history.
Inputs: id (required).
export_my_dataARead-onlyIdempotent
Export all study data for the authenticated user.
Inputs: no named parameters.
get_due_subtopicsARead-onlyIdempotent
Return the spaced-repetition queue sorted by overdue-ness.
Inputs: limit, study_id.
get_subtopic_historyARead-onlyIdempotent
Return attempts, trend, and state for one subtopic.
Inputs: subtopic_id (required).
list_studiesBRead-onlyIdempotent
Return all active study areas.
Inputs: no named parameters.
list_subtopicsARead-onlyIdempotent
Return active subtopics within a topic with current mastery state.
Inputs: topic_id (required).
list_topicsARead-onlyIdempotent
Return active topics within a study.
Inputs: study_id (required).
log_attemptA
Record a quiz attempt and update SM-2 scheduling state.
Inputs: score (required), model_notes (required), subtopic_id (required), question_asked.
update_subtopicC
Edit a subtopic's name or description.
Inputs: subtopic_id (required), name, description.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
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
Related MCP Connectors
Your own memory inside ChatGPT and Claude, with the source of every note.
A second brain for Claude: remembers your work, plans your day, encrypted under a key only you hold.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Your SMB workspace in Claude or ChatGPT: tasks, notes, sales and Michèle's memory, via OAuth.
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.610 npm7MIT
- AlicenseAqualityDmaintenanceEnables Claude to remember conversations and learn over time by storing and recalling messages, memory abstracts, and recent history using a local SQLite database.441 npm70MIT
- FlicenseNot gradedqualityDmaintenanceEnables secure synchronization of ChatGPT, Claude, and Obsidian via Supabase as the source of truth, with OAuth protection and proposal-based AI changes.-