resumeai-mcp
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., "@resumeai-mcpstart a new resume scan and monitor its progress"
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.
resumeai-mcp
Local MCP server (stdio) that lets a Claude Code agent drive Big Interview ResumeAI. Spec: PLAN.md.
Setup
uv sync
cp .env.example .envThe default BROWSER_CHANNEL=chrome uses your installed Google Chrome (PLAN.md §6.3). Install it
if missing (uv run playwright install chrome), or use bundled Chromium instead:
uv run playwright install chromium and set BROWSER_CHANNEL= (empty) in .env.
Related MCP server: cv-job-assistant
Add to Claude Code
claude mcp add --scope user resumeai -- uv --directory /absolute/path/to/Biginterview-MCP run resumeai-mcp
claude mcp get resumeai # Status: ✔ ConnectedThe server exposes six tools (auth_status, list_scans, start_scan, get_scan_status, get_scan_feedback,
delete_scan); every call returns {"ok": true, "data": …} or {"ok": false, "error": {code, message, hint}}
(PLAN.md §7.0, §13). Log in first with uv run python scripts/login.py, and never run it while the server is
using the browser profile.
Troubleshooting and the full walkthrough land in Phase 6.
Available Tools
6 toolsauth_statusA
Check the Big Interview login and the remaining daily scan allowance before starting any work. Returns logged_in (false is data, not an error), scans_remaining (null when not shown — never guessed), account_email (null when not visible), checked_at. If logged_in=false: stop and ask the user to run scripts/login.py. Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses server-side pacing (random 2-5 s delays, one tool at a time, never parallel), null semantics ('never guessed'), that logged_in=false is data not an error, and a bounded retry policy. This is unusually rich behavioral context.
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?
Purpose and the pre-work trigger are front-loaded, then return fields, then failure handling and pacing. Every clause carries information, though the single dense paragraph packs several distinct concerns (returns, auth failure, pacing, retry policy) that would scan better as separated lines.
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 an auth/allowance gate with an output schema present, the description covers the return fields, the not-an-error case, the null cases, the prerequisite action on failure, concurrency constraints, and the retry matrix. Nothing an agent needs to call it correctly 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 tool takes no parameters, so there is no schema semantics to add; the baseline for a zero-param tool is 4. The description correctly spends its words on outputs and behavior instead.
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 and resource ('Check the Big Interview login and the remaining daily scan allowance') and clearly positions itself as a pre-flight check distinct from the scan-oriented siblings. An agent can tell immediately that this is the auth/allowance gate rather than a scan 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?
Explicitly says to run it 'before starting any work' and prescribes the exact action when logged_in=false (stop and ask the user to run scripts/login.py). It also routes error handling via error.hint and names which error states must never be blindly retried.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scanA
Delete a scan from My Scans (optional history tidying; NOT a way to get more scans — never plan on allowance_restored). Feedback is always backed up locally first; the deletion is aborted if that fails. Deleting the latest result of the current loop requires confirm=true. Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| scan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: feedback is locally backed up first and deletion aborts if backup fails (reversibility/safety), the server injects random 2-5 s delays and runs one tool at a time so tools must never be called in parallel, and a concrete retry policy distinguishes never-retry errors (auth_expired, site_changed, unknown_state, internal_error, profile_in_use) from transient ones bounded at two retries. This is unusually rich operational disclosure.
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?
Purpose and the key anti-misuse warning are front-loaded, and every following sentence carries operational weight (backup, confirm, pacing, retry policy) rather than filler. It is dense with long parenthetical clauses, which costs a little readability, but nothing is expendable.
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?
An output schema exists, so return values need not be described. Given a destructive mutation with no annotations, the description supplies the missing safety profile, concurrency constraints, confirmation rule, and error recovery guidance — everything needed to invoke it correctly and safely.
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 0%, so the description must compensate. It explains confirm meaningfully (required when deleting the latest result of the current loop, defaulting false in the schema) rather than restating the boolean, though scan_id's format/derivation is left to the agent (contextually obvious from list_scans). Strong compensation with a small remaining gap.
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+resource ('Delete a scan from My Scans') and immediately scopes it against a tempting but wrong interpretation ('NOT a way to get more scans'). This distinguishes it cleanly from siblings like list_scans and start_scan, which an agent could otherwise conflate with scan management.
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?
Explicitly frames the tool as 'optional history tidying' and warns when NOT to use it ('never plan on allowance_restored'), then adds a precondition (confirm=true for the latest result of the current loop) and an error-handling policy keyed to specific codes. When-to-use, when-not, and what to do on failure are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scan_feedbackA
Structured feedback for a completed scan: overall medal, the four category badges (readability, credibility, ats_fit, format), each criterion's status (perfect / needs_work / warning) with the site's advice, action items (flagged items are listed even under a Gold badge), and ATS keywords matched/unmatched. partial=true means only the summary badges were readable. A local backup is written. Honesty rule: unmatched keywords are verification candidates, not a shopping list. Only add a keyword to the resume when it is backed by real experience, project, or coursework. Never fabricate skills, metrics, dates, degrees, or employment. A truthful Silver beats a fabricated Gold. Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that partial=true means only badges were readable, that a local backup is written, that the server injects random 2-5 s delays and runs one tool at a time (never parallel), and how ok=false should be handled per error.hint with named non-retryable codes. This is far beyond what the schema conveys.
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?
Dense but front-loaded: content of the result comes first, then partial semantics, honesty rule, pacing, and error handling. Nearly every sentence carries operational information, though the honesty/pacing passages read as cross-tool boilerplate that lengthens the block.
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 tool with an output schema present, the description still explains the payload shape and adds the safety, pacing, and error-handling context an agent needs. Only the scan_id parameter and how to obtain it go unexplained, a small gap given the simple input.
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 0%, so the description should compensate, yet it never mentions scan_id. It is a single self-evident identifier whose intent is clear from the tool context, so the omission is minor rather than damaging, but it adds no semantic detail over the schema.
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?
Opens with a specific verb+resource and enumerates exactly what the resource contains (medal, four badges, per-criterion status, action items, ATS keywords), which is precisely what distinguishes it from get_scan_status or list_scans. An agent knows it is the post-completion feedback reader, not a status poller.
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?
Usage is implied (a 'completed scan', and partial=true for a truncated read), but the description never explicitly says when to call this versus get_scan_status, nor names an alternative. The rich error-retry guidance is about failure handling, not tool selection, so routing remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scan_statusA
Poll a scan's state: queued, scanning, complete, failed (the site explicitly reported failure) or unknown (unreadable — stop and investigate; it is NOT a failure; hint names the saved snapshot). Poll no more often than once every 20 s; give up after 10 minutes (treat as scan_timeout and keep the scan_id). Also returns scans_remaining. Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: it distinguishes 'unknown' (unreadable, investigate, NOT a failure) from 'failed' (site reported failure), documents the server's 2-5 s randomized pacing and one-tool-at-a-time execution, and specifies retry limits and the ok=false/error.hint protocol. This is far beyond what the schema conveys.
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?
Front-loaded with the state enumeration an agent most needs, followed by polling cadence and error handling. It is a dense paragraph with no filler, though the pacing/retry material could be split or bulleted for faster scanning.
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?
An output schema exists, so return-value detail isn't required, and the description still flags that scans_remaining is returned. Combined with the state semantics, timeout rule, retry policy, and the unknown-vs-failed distinction, an agent has everything needed to poll and branch 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?
Only scan_id is accepted and its schema description coverage is 0%, so the description must compensate. It implies scan_id identifies the scan being polled ('keep the scan_id') but gives no format, source, or validation detail. This is adequate but thin for the one parameter present.
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 opens with a specific verb+resource ('Poll a scan's state') and enumerates the full set of possible states, so an agent knows exactly what this tool returns. It doesn't explicitly name or contrast against siblings like list_scans or get_scan_feedback, so the differentiation is inferred rather than stated.
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?
It gives concrete when-to-use rules: poll no more than once every 20 s, give up after 10 minutes, treat timeout as scan_timeout while keeping the scan_id, never call tools in parallel. It also spells out the error.hint routing (auth_expired, site_changed, unknown_state, internal_error, profile_in_use never retried blindly; otherwise at most two retries), which is actionable conditional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scansA
List past scans (newest first) for reuse checks and deletion candidates. limit 1-50 (default 20); pass next_cursor from the previous response as cursor to continue; next_cursor=null means the last page. resume_sha256/jd_sha256 are only known for scans created by this server (null otherwise; such scans are never reused). Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses server pacing (random 2-5s delays, one tool at a time, never call in parallel), pagination semantics (next_cursor null = last page), and error handling (follow error.hint; auth_expired/site_changed/unknown_state/internal_error/profile_in_use never retried blindly; else retry at most twice). This is exactly the behavioral context an agent needs.
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?
Front-loaded with purpose, then parameters, then pacing and error rules; almost every clause earns its place. It is dense and slightly long, but there is no filler or repetition.
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?
Output schema exists (so return shape is documented), and the description still covers pagination, pacing constraints, and the full error/retry policy. Nothing an agent needs to call this correctly 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?
Schema coverage is 0% and the schema gives no descriptions, so the description must compensate — and it does: limit range 1-50 with default 20, cursor should carry next_cursor from the previous response, and null cursor means the final page. It also explains the meaning of resume_sha256/jd_sha256 nullability.
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 (List), resource (past scans), ordering (newest first), and the two concrete purposes (reuse checks and deletion candidates). An agent can immediately tell this apart from start_scan, get_scan_status, delete_scan, etc. without opening any schema.
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?
'for reuse checks and deletion candidates' implies when to use it, but no sibling is named as an alternative and no exclusion is given (e.g. when to prefer get_scan_status over listing). Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_scanA
Upload a resume + job description and start a scan (uses 1 of the 5 daily scans). Idempotent: if a completed scan exists for the same resume file, job description, scoring guide, job title and company, it is returned with reused=true and no allowance is used. resume_path must be an absolute path to a text-based .pdf/.docx (max 5 MB). Returns scan_id and state (queued/scanning; complete only when reused or already finished). Then poll get_scan_status no more often than every 20 s. Only one scan may be in flight; limit_reached means stop for the day. Pacing: the server adds random 2-5 s human-like delays between UI actions and runs one tool at a time; never call tools in parallel. On ok=false follow error.hint (PLAN.md §13): auth_expired, site_changed, unknown_state, internal_error and profile_in_use are never retried blindly; otherwise retry at most twice.
| Name | Required | Description | Default |
|---|---|---|---|
| company | Yes | ||
| job_title | Yes | ||
| resume_path | Yes | ||
| scoring_guide | No | Graduate - STEM Focus | |
| job_description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does: idempotency with reused=true and no quota consumption, the 5-daily-scan allowance, single in-flight constraint, server-side random 2-5 s delays, and per-error retry semantics. This is unusually complete behavioral disclosure for a mutation tool.
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?
Dense but well front-loaded: the core action and idempotency come first, then constraints, then polling and error guidance. Nearly every clause earns its place, though the error-policy sentence is packed tightly enough to be a little heavy.
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 no annotations and an output schema already present, the description still supplies what the schema cannot: quota, idempotency, concurrency, pacing, and the exact poll interval. Nothing an agent needs to call it correctly 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?
Schema coverage is 0%, so the description must compensate. It documents resume_path thoroughly (absolute path, text-based .pdf/.docx, max 5 MB) and ties job_description/job_title/company to the idempotency key, but it never explains what scoring_guide values are valid beyond the default. It covers the non-obvious parameters well and leaves only the self-evident ones implicit.
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 and resource ('Upload a resume + job description and start a scan') and distinguishes itself from the polling sibling by naming get_scan_status explicitly. An agent can tell exactly what this does versus list_scans or get_scan_feedback.
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?
Explicit routing: 'Then poll get_scan_status no more often than every 20 s', 'Only one scan may be in flight', 'limit_reached means stop for the day', and 'never call tools in parallel'. It also gives a concrete retry policy and lists which errors must not be retried blindly.
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.
6 tool updates
v0.0.1- First observed
auth_status - First observed
delete_scan - First observed
get_scan_feedback - First observed
get_scan_status - First observed
list_scans - First observed
start_scan
TDQS
Scored across 6 tools
Each tool maps to a distinct step in the scan lifecycle: auth_status (auth check), list_scans (history), start_scan (create), get_scan_status (poll), get_scan_feedback (results), delete_scan (remove). The boundaries between polling status, retrieving feedback, and starting a scan are clear and non-overlapping.
Most tools follow a clean verb_noun pattern (list_scans, start_scan, get_scan_status, get_scan_feedback, delete_scan). auth_status deviates slightly by leading with a noun-like token rather than an explicit verb, but it remains readable and consistent with the scan-status naming family.
Six tools is well-scoped for a scan-and-feedback workflow, with each tool earning its place across auth, listing, creation, polling, results, and deletion. Nothing feels padded or redundant.
The surface covers the full lifecycle: authentication, listing, starting, polling, fetching feedback, and deletion. Minor gaps exist (no explicit cancel/abort for an in-flight scan or resume-management operation), but these are workable given the one-scan-in-flight constraint and idempotent start.
Maintenance
Related MCP Connectors
Build, version and render resumes as PDFs from Claude or any MCP client.
Live SEO workflow tools for Claude Code, Codex, and AI agents.
AI resume triage for recruiters. Query your candidate pool from Claude or ChatGPT.
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceExposes a structured professional resume as a set of AI-queryable tools, enabling AI clients like Claude Desktop to query summary, experience, skills, projects, and tailor resumes to job descriptions.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables Claude to parse CVs, search job boards (Remotive, Arbeitnow, Adzuna, Greenhouse/Lever), tailor resumes and cover letters, and prepare application packages with direct apply links—without ever auto-submitting. It runs 100% locally and free, storing jobs and applications as JSON files.-
- AlicenseAqualityBmaintenanceEnables parsing a master resume, analyzing job descriptions for ATS/match scores, generating truthful tailored resumes, tracking applications, and producing PDF reports through Claude Desktop.17MIT
- AlicenseAqualityBmaintenanceEnables an AI agent to run local tools on the user's own machine via stdio, including command execution, workspace file read/write, and system status checks.52MIT