docs/guides/using-the-mcp-server.mdx
The Reactive Resume MCP server lets you manage and modify your resumes through any MCP-compatible AI tool — Claude Desktop, Cursor, Codex, and more. It connects to the Reactive Resume API and exposes tools for listing, reading, and patching resumes using natural language.
The Model Context Protocol (MCP) is a standard that lets LLM-powered tools connect to external services. Instead of being limited to the built-in chat UI, you can use any MCP client to interact with your resumes.
- **OAuth2 (recommended):** best user experience for clients that support MCP OAuth.
- **API key (fallback):** works in all clients that can send custom headers.
Use OAuth2 whenever your MCP client supports it. Use API key only when OAuth is unavailable in that client.
For the full walkthrough, see [Using the API](/guides/using-the-api).
There are two transport options, and each can use either OAuth2 or API key depending on your client capabilities.
If your client supports the url field (e.g. Cursor, Codex, Claude custom connectors), use this.
Most OAuth-capable clients only need the MCP URL:
{
"mcpServers": {
"reactive-resume": {
"url": "https://rxresu.me/mcp"
}
}
}
Then connect/sign in from the client UI (or with the client's OAuth login command).
If OAuth is not supported in your client, send x-api-key:
{
"mcpServers": {
"reactive-resume": {
"url": "https://rxresu.me/mcp",
"headers": {
"x-api-key": "your-api-key"
}
}
}
}
If your client only supports command / args (for example, local-only Claude Desktop config), use mcp-remote as a bridge. This requires Node.js 20 or later.
mcp-remote is most commonly used with API keys:
{
"mcpServers": {
"reactive-resume": {
"command": "npx",
"args": ["mcp-remote", "https://rxresu.me/mcp", "--header", "x-api-key:your-api-key"]
}
}
}
<Info>Replace your-api-key with the API key you created in the prerequisites step.</Info>
| Client | Config file |
|---|---|
| Cursor | .cursor/mcp.json in your project or home directory |
| Claude Desktop | claude_desktop_config.json (docs) |
| Codex | ~/.codex/config.toml or .codex/config.toml (docs) |
| Other MCP clients | Refer to the client's documentation |
Reactive Resume MCP accepts authentication in this order:
Authorization: Bearer <token>x-api-key: <key>If neither is valid, the MCP endpoint responds with 401 and advertises OAuth metadata using:
WWW-Authenticate: Bearer resource_metadata="<instance>/.well-known/oauth-protected-resource"This lets OAuth-capable MCP clients discover and complete the OAuth flow automatically.
Reactive Resume is configured as an OAuth authorization server for MCP clients:
https://rxresu.me/mcp./.well-known/* endpoints./auth/oauth./auth/oauth redirects to /auth/login, then resumes OAuth./auth/oauth validates client_id and redirect_uri, issues an authorization code, and redirects back to the client.code_challenge, code_challenge_method) are preserved in the authorization flow.OAuth2 (recommended):
{
"mcpServers": {
"reactive-resume": {
"url": "https://rxresu.me/mcp"
}
}
}
API key fallback:
{
"mcpServers": {
"reactive-resume": {
"url": "https://rxresu.me/mcp",
"headers": {
"x-api-key": "your-api-key"
}
}
}
}
Add server:
codex mcp add reactive-resume --url https://rxresu.me/mcp
Then log in with OAuth:
codex mcp login reactive-resume
API key fallback (config.toml):
[mcp_servers."reactive-resume"]
url = "https://rxresu.me/mcp"
http_headers = { "x-api-key" = "your-api-key" }
Add https://rxresu.me/mcp as a custom remote MCP connector, then connect with OAuth in Claude's connector UI.
Use mcp-remote bridge with API key (example shown above in Method 2).
If you're running a self-hosted Reactive Resume instance, replace https://rxresu.me/mcp with your instance URL:
{
"url": "https://resume.example.com/mcp",
"headers": {
"x-api-key": "your-api-key"
}
}
Tool names use a reactive_resume_ prefix so they stay distinct when multiple MCP servers are enabled in the same client.
| Tool | Description |
|---|---|
reactive_resume_list_resumes | List all resumes with IDs, names, tags, and status. Supports filtering by tags and sorting by last updated, creation date, or name |
reactive_resume_list_resume_tags | List every distinct tag in use across your resumes (sorted) |
reactive_resume_get_resume | Get the full data of a specific resume by ID |
reactive_resume_get_resume_analysis | Get the latest saved AI analysis for a resume (from the web app), if any |
reactive_resume_create_resume | Create a new, empty resume with a name and slug. Optionally pre-fill with sample data |
reactive_resume_import_resume | Create a resume from a full ResumeData JSON export (random name/slug). Large files may exceed client limits |
reactive_resume_duplicate_resume | Create a copy of an existing resume with a new name and slug |
reactive_resume_patch_resume | Apply JSON Patch (RFC 6902) operations to modify a resume's data |
reactive_resume_update_resume | Update metadata only: name, slug, tags, isPublic. Returns canonical share URL; passwords are not managed via MCP |
reactive_resume_delete_resume | Permanently delete a resume and all associated files. Irreversible |
reactive_resume_lock_resume | Lock a resume to prevent edits, patches, and deletion |
reactive_resume_unlock_resume | Unlock a previously locked resume to re-enable editing |
reactive_resume_export_resume_pdf | Generate a PDF from the resume and return a download URL |
reactive_resume_get_resume_screenshot | Get a visual preview of the resume's first page as a WebP image URL |
reactive_resume_get_resume_statistics | Get view and download statistics for a resume |
Older clients may refer to unprefixed names (list_resumes, get_resume, …) or dot-separated names (reactive_resume.list_resumes, …). Those names are no longer used; update automations and saved prompts to the reactive_resume_* names above.
Resources follow MCP conventions: static items appear in resources/list; parameterized access is declared in resources/templates/list and read via resources/read once you know the ID.
| Discovery | What you get |
|---|---|
resources/list | Static resources only — currently resume://_meta/schema (ResumeData JSON Schema) |
resources/templates/list | resume://{id} — template for reading full resume JSON by ID (not enumerated per resume) |
reactive_resume_list_resumes (tool) | Primary way to discover resume IDs — resumes are not listed as separate MCP resources |
| URI | Description |
|---|---|
resume://_meta/schema | ResumeData JSON Schema — use for valid JSON Patch paths and value types |
resume://{id} | Full resume data as JSON — use an ID from reactive_resume_list_resumes |
The schema resource was previously resume://schema. It is now resume://_meta/schema. Update any saved prompts, automations, or client configs that referenced the old URI.
/.well-known/mcp/server-card.json)GET /.well-known/mcp/server-card.json returns a JSON document (SEP-1649) with serverInfo, optional authentication metadata, and summaries of tools, resources, resource templates, and prompts. It is generated to match the live MCP server and can be used for discovery when a client cannot run a full capability scan against /mcp/.
Prompts are pre-built workflows that provide the AI with structured instructions and context. Each prompt embeds the resume data and the schema resource (resume://_meta/schema) automatically.
| Prompt | Description |
|---|---|
build_resume | Guide you step-by-step through building a resume from scratch — basics, summary, experience, education, skills, and design |
improve_resume | Review your resume and suggest concrete improvements to wording, impact, metrics, and structure |
tailor_resume | Adapt your resume to match a specific job description with keyword optimization and ATS targeting. Requires the job description as input |
review_resume | Get a structured, professional critique with a scorecard (1–10 across seven dimensions) and prioritized recommendations. Read-only — no changes are made |
Once your MCP client is connected, you can use natural language to interact with your resumes:
build_resume)review_resume)improve_resume)tailor_resume)| Issue | Solution |
|---|---|
| "Unauthorized" with no login prompt | Your client may not support MCP OAuth discovery. Use API key mode (x-api-key) |
| OAuth login opens but fails redirect/callback | Confirm your client's MCP OAuth callback settings and retry the connection |
| "API error (401)" | Your API key is invalid or expired. Create a new one in Settings → API Keys |
| "API error (404)" | The resume ID doesn't exist. Use reactive_resume_list_resumes to find valid IDs |
| "API error (403)" | The resume is locked. Unlock it in the Reactive Resume dashboard |
| Connection refused | Check that the URL is correct and the instance is running |
"ReferenceError: File is not defined" when using mcp-remote | You're running Node.js 18. mcp-remote requires Node.js 20 or later — upgrade with nvm use 20 or nvm alias default 20 |