interview-prep-mcp
An open-source Python MCP server for AI-assisted interview preparation.
README
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.
Install
The fastest way — no global pip install:
uvx interview-prep-mcp
Claude 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 |
|---|---|---|
GEMINI_API_KEY |
Yes (default) | Direct Gemini API access. |
OPENROUTER_API_KEY |
No | Enables set_model to switch to any of 200+ OpenRouter models. |
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 |
|---|---|---|
parse_job_posting(source_or_text, is_html?) |
no | URL or text → structured JobPosting. |
parse_cv(file_path) |
no | PDF/markdown → CVProfile. First CV is set active. |
list_cv_profiles() |
no | All CVs with their is_active flag. |
set_active_cv(cv_id) |
no | Switch which CV other tools default to. |
match_cv_to_job(job_id, cv_id?) |
yes | Score + strengths + gaps. |
start_interview_prep(company, role, job_id?, cv_id?) |
no | New prep session. |
list_interviews() |
no | Active prep sessions. |
save_research_note(interview_id, kind, content, subject?, source_url?) |
no | Persist markdown research. kind ∈ {company, interviewer, other}. |
get_research(interview_id) |
no | Grouped by kind. |
generate_questions(interview_id, count, types) |
yes | Personalized Qs using job + cv + research. |
list_questions(interview_id) |
no | Previously generated. |
submit_practice_answer(question_id, answer_text) |
yes | Returns evaluation. |
get_practice_history(interview_id) |
no | Past attempts. |
analyze_weak_areas(interview_id) |
yes | Recurring gaps + recommended topics. |
list_models(provider?, ...filters) |
no | Gemini (curated) + OpenRouter (24h cached). |
set_model(model_id, provider?) |
no | Persist active model. |
get_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_mcp
CI runs ruff + mypy + pytest on every PR.
License
MIT — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.