Full technical interview prep: company briefing, concepts, code deep-dive, mock interviews.
A technical interviewer that has actually read your repos — teaches you your own code, drills you on it, and remembers every answer you flubbed.
Install · Demo · Tools · Architecture · llms.txt
AI agents / LLMs: read /llms.txt for a machine-readable index of this project.
Interviewers ask about your projects: why this library, what happens when this request fails, walk me through the auth flow. LeetCode can't prep you for that, and a plain chat session forgets everything between sessions. Interviewer MCP indexes your GitHub repo into a teachable code map, walks you through it Socratically, mock-interviews you in character — and keeps a persistent, per-section record of what you couldn't explain, so the next session re-attacks exactly those spots. It teaches and tests, and the test gets smarter every time. Not a stateless quiz.
"Walk me through this function." Every candidate has frozen on that question about code they wrote months ago — or that AI wrote for them. This makes sure it never happens in the real interview.
You Test me again on soundofspace — last week went badly.
Claude [get_progress] Welcome back. Coverage: 9/14 sections. Three questions
logged weak, the worst: "why is the JWT verified server-side?"
Let's start exactly there. [get_code_section auth.ts:verifyToken]
Here's your own code. Line 12 verifies the signature before touching
the payload. Why can't the client just send the decoded claims?
You Because... the client could edit them?
Claude Right instinct — be precise. What stops an attacker who edits the
payload AND re-signs it? Where does the signing secret live?
[log_interview_result: okay — "knows tampering risk, fuzzy on
why the secret never leaves the server"]
Two ways to run it — pick per surface:
claude mcp add interviewer -- npx -y interviewer-mcp
# optional: private repos + 5,000 req/hr instead of 60
claude mcp add interviewer --env GITHUB_TOKEN=github_pat_... -- npx -y interviewer-mcp
Claude Desktop — add to the config file instead:
{
"mcpServers": {
"interviewer": {
"command": "npx",
"args": ["-y", "interviewer-mcp"],
"env": { "GITHUB_TOKEN": "github_pat_optional_but_recommended" }
}
}
}
Both classic and fine-grained tokens work (read-only Contents permission is enough). Then:
Prep me for my interview — my repo is github.com/you/your-project
Agent-driven install: point Claude at SETUP_GUIDE.md and it configures everything itself.
SKILL.md, put it in a folder named interview-prepper/, zip the folderThe honest difference: the MCP server keeps a durable local database of your coverage and weak spots — return in three weeks and it remembers. The Skill runs entirely inside claude.ai: it clones your repo per session and recalls prior sessions via conversation search, which is best-effort, not guaranteed. Same curriculum and teaching format either way; the MCP path is the one that makes "it remembered" a hard promise.
~/.interviewer-mcp/ and every returning session opens from your weakest point.Five phases, picked in your order from a menu: ① company briefing → ② concept bootcamp (JD ∪ CV ∪ repo stack) → ③ code deep-dive → ④ mock interview → ⑤ debrief.
ingest_repo ──▶ briefing ──▶ bootcamp ──▶ code deep-dive ──▶ mock interview ──▶ debrief
▲ │
└──── "test me again" (days later)
the interviewer REMEMBERS ◀┘
| Tool | What it does |
|---|---|
ingest_repo | Fetch + index a GitHub repo into a teachable code map |
list_sections | Sections in teaching order, with covered status + weakness scores |
get_code_section | One section's code with file context |
mark_covered | Mark a section learned (only after you explain it back) |
get_interview_targets | Probe-worthy code, weakest spots first |
log_interview_result | Score an answer; powers cross-session memory |
set_job_description | Store JD + company + CV; powers briefing, bootcamp, and gap questions |
get_progress | Coverage, history, top weaknesses — the "welcome back" tool |
Great fit if you…
Skip it if you…
Local-first and dependency-light by design: plain TypeScript, native fetch, and a JSON store — no native modules, so npx interviewer-mcp boots on every OS with zero build tooling. Your code cache and interview history live in ~/.interviewer-mcp/ (override with INTERVIEWER_DATA_DIR) and never leave your machine; the only network calls are to GitHub. Sectioning is regex-based per language family (JS/TS, Python, Go, Java/C#/Kotlin) with chunking fallback — tree-sitter AST parsing is on the roadmap.
Full pipeline, store layout, and design-decision rationale: ARCHITECTURE.md.
PRs welcome — the core is small, pure, and tested (npm install && npm test). See CONTRIBUTING.md. Vulnerabilities: SECURITY.md.
MIT © Girik Chadha
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y interviewer-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-girik-chadha-interviewer-mcp": {
"command": "npx",
"args": [
"-y",
"interviewer-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceinterviewer-mcpnpmio.github.girik-chadha/interviewer-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.