interview-prep-mcp
Serves as the default LLM provider for generating interview questions, scoring practice answers, and analyzing weak areas.
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-mcpStart interview prep for Acme, Python Developer"
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
An open-source Python MCP server for AI-assisted interview preparation. Runs in any MCP-compatible host — Claude Desktop, Cursor, Google Antigravity, Windsurf — and defaults to Google Gemini with optional OpenRouter for cross-provider model selection.
What it does
interview-prep-mcp exposes 17 tools that cover the full interview-prep loop:
Parse a job posting (URL or pasted text) and a CV (PDF or markdown).
Persist company and interviewer research collected by the host's other MCPs (e.g.
firecrawl,exa) — this server doesn't scrape itself.Generate personalized interview questions using the active LLM.
Submit practice answers and get scored evaluations.
Analyze weak areas across your practice history.
It also exposes:
A
interview-prep://interviews/{id}resource bundling the full prep state for one session.Two MCP prompts:
daily_prepandmock_interview.
Related MCP server: Aurai Advisor (上级顾问 MCP)
Install
The fastest way — no global pip install:
uvx interview-prep-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"interview-prep": {
"command": "uvx",
"args": ["interview-prep-mcp"],
"env": {
"GEMINI_API_KEY": "AIza...",
"OPENROUTER_API_KEY": "sk-or-..."
}
}
}
}OPENROUTER_API_KEY is optional — leave it out if you only want to use Gemini.
Google Antigravity
Antigravity uses the same mcpServers JSON in its MCP settings panel. Paste the same
block as above. Antigravity ships with Gemini already configured at the host level, so
you'll typically only need to add the MCP entry itself.
Cursor (~/.cursor/mcp.json)
Same mcpServers block as Claude Desktop.
Windsurf and other MCP-compatible hosts
Same mcpServers block; just paste it into whichever config path the host documents.
Required env
Variable | Required? | Purpose |
| Yes (default) | Direct Gemini API access. |
| No | Enables |
You can run with only one of them set. If neither is set, the server still starts — context tools (parsing, storage) work; smart tools will return a clear "no LLM provider configured" error when invoked.
Recommended companion MCPs
To research companies and interviewers, install these alongside:
firecrawl-mcp— scrape pages.exa-mcp-server— web search.
The host orchestrates all three. interview-prep-mcp exposes save_research_note for
the host to persist whatever those companion MCPs returned.
Quick start (5 minutes)
Set
GEMINI_API_KEYand install the server in your host (see snippets above).In a fresh chat:
parse_job_posting("https://example.com/jobs/123").parse_cv("/path/to/cv.pdf")— first CV becomes active automatically.start_interview_prep("Acme", "Senior Backend Engineer", job_id=1, cv_id=1).(Optional) Ask Claude to research the company via
firecrawl/exaand callsave_research_note(interview_id=1, kind="company", content="...").generate_questions(interview_id=1, count=10, types=["technical","behavioral"]).Answer questions; each answer goes to
submit_practice_answer.After several answers:
analyze_weak_areas(interview_id=1).
Tool reference
Tool | LLM? | Description |
| no | URL or text → structured JobPosting. |
| no | PDF/markdown → CVProfile. First CV is set active. |
| no | All CVs with their |
| no | Switch which CV other tools default to. |
| yes | Score + strengths + gaps. |
| no | New prep session. |
| no | Active prep sessions. |
| no | Persist markdown research. |
| no | Grouped by kind. |
| yes | Personalized Qs using job + cv + research. |
| no | Previously generated. |
| yes | Returns evaluation. |
| no | Past attempts. |
| yes | Recurring gaps + recommended topics. |
| no | Gemini (curated) + OpenRouter (24h cached). |
| no | Persist active model. |
| no | Current selection. |
Architecture
MCP Host
├── firecrawl-mcp ──────┐
├── exa-mcp ────────────┤
└── interview-prep-mcp ─┘
│
├── Tools layer
├── Service layer (parsers + storage + LLM router)
├── SQLite (~/.interview-prep/db.sqlite)
├── Config (~/.interview-prep/config.json)
└── LLM router ──┬── Gemini (default)
└── OpenRouter (optional)The MCP composes with companion MCPs — it does not scrape itself. The host's Claude
calls firecrawl/exa, then feeds findings into save_research_note.
Contributing
git clone https://github.com/shenmali/Interview-MCP-First
cd interview-prep-mcp
python3.11 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
ruff check .
mypy interview_prep_mcpCI runs ruff + mypy + pytest on every PR.
License
MIT — see LICENSE.
Available Tools
17 toolsanalyze_weak_areas_toolC
Summarize recurring gaps across practice sessions; recommends focus topics.
Inputs: interview_id (required). Returns: object
generate_questions_toolC
Generate count interview questions using job + cv + research as context.
Inputs: interview_id (required), count (required), types (required). Returns: result
get_active_model_toolA
Return the currently active model (provider + id) or None.
Inputs: no named parameters. Returns: result
get_practice_history_toolC
Return all practice sessions for an interview.
Inputs: interview_id (required). Returns: result
get_research_toolA
Return all research notes for an interview, grouped by kind.
Inputs: interview_id (required). Returns: object
list_cv_profiles_toolA
List all CVs with their is_active flag.
Inputs: no named parameters. Returns: result
list_interviews_toolA
Return all active interview prep sessions.
Inputs: no named parameters. Returns: result
list_models_toolC
List available models. Provider 'all' merges Gemini + OpenRouter (top 20).
Inputs: provider, min_context, supports_json_only, free_only, +1 more. Returns: result
list_questions_toolC
Return previously generated questions for an interview.
Inputs: interview_id (required). Returns: result
match_cv_to_job_toolB
Match a CV against a job posting. Returns score (0-100), strengths, gaps, summary.
Inputs: job_id (required), cv_id. Returns: object
parse_cv_toolB
Parse a CV from a PDF or markdown file path. First CV becomes active automatically.
Inputs: file_path (required). Returns: object
parse_job_posting_toolA
Parse a job posting from a URL, raw HTML, or pasted text. Returns id + parsed fields.
Inputs: source_or_text (required), is_html. Returns: object
save_research_note_toolC
Persist a research note for a prep session. Markdown content is fine.
Inputs: interview_id (required), kind (required), content (required), subject, +1 more. Returns: object
set_active_cv_toolB
Switch which CV other tools default to.
Inputs: cv_id (required). Returns: object
set_model_toolC
Set the active model (persists to config). Requires the matching API key.
Inputs: model_id (required), provider. Returns: object
start_interview_prep_toolC
Create a new interview prep session and return its id + metadata.
Inputs: company (required), role (required), job_id, cv_id. Returns: object
submit_practice_answer_toolC
Submit an answer; returns evaluation (score + strengths + gaps + suggestion).
Inputs: question_id (required), answer_text (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 17 tools
Each tool targets a distinct operation: CV parsing vs job parsing, question generation vs answer submission, session management vs research notes. No two tools have overlapping purposes; even similar verbs like 'list' and 'get' are applied to different resources (interviews vs practice history vs questions).
All tools follow a consistent verb_noun_tool pattern in snake_case (e.g., parse_cv_tool, list_interviews_tool, set_active_cv_tool). Verbs are descriptive and uniformly placed at the start. No mixing of conventions or cryptic abbreviations.
17 tools is well-scoped for a specialized interview preparation server. The count covers essential workflows (CV management, job parsing, question generation, practice, feedback, research, model config) without being overwhelming or sparse.
Core CRUD-like operations are present for key entities (create/list for interviews, parse/list for CVs and jobs, generate/list for questions). Minor gaps: no update or delete tools for CVs, job postings, or research notes, but the primary workflow (parse-match-practice-analyze) is fully covered.
Maintenance
Related MCP Connectors
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA specialized Model Context Protocol (MCP) server that enables AI-powered interview roleplay scenarios for practice with realistic conversational feedback.13 npm7Apache 2.0
- FlicenseAqualityDmaintenanceAn MCP server that enables local AI models to receive guidance from remote 'senior' AI providers like OpenAI, Anthropic, and Gemini to solve programming problems. It features intelligent multi-turn dialogue management, context synchronization, and automated session history tracking.411-
- FlicenseNot gradedqualityDmaintenanceAn educational MCP server that teaches implementing the Model Context Protocol from scratch, enabling AI models to discover and invoke tools via JSON-RPC over stdio.-
- FlicenseBqualityCmaintenanceA lightweight MCP server that enables AI assistants to interact with the local machine through terminal, filesystem, and Python execution tools.9-