What is MCP?
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.Prerequisites
Choose your authentication method
Reactive Resume MCP supports two authentication methods:
- OAuth2 (recommended): best user experience for clients that support MCP OAuth.
- API key (fallback): works in all clients that can send custom headers.
If using API key, create one
Head over to https://rxresu.me (or your self-hosted instance), sign in, and navigate to Settings → API Keys. Click Create a new API key, give it a name, and copy the secret — it’s only shown once.For the full walkthrough, see Using the API.
Configuration
There are two transport options, and each can use either OAuth2 or API key depending on your client capabilities.Method 1: Streamable HTTP (recommended)
If your client supports theurl field (e.g. Cursor, Codex, Claude custom connectors), use this.
Option A: OAuth2 (recommended)
Most OAuth-capable clients only need the MCP URL:Option B: API key (fallback)
If OAuth is not supported in your client, sendx-api-key:
Method 2: mcp-remote
If your client only supportscommand / 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:
Replace
your-api-key with the API key you created in the prerequisites step.Where to put the config
Authentication Details (How Reactive Resume MCP Works)
Reactive Resume MCP accepts authentication in this order:- Bearer token (OAuth2 access token) via
Authorization: Bearer <token> - API key fallback via
x-api-key: <key>
401 and advertises OAuth metadata using:
WWW-Authenticate: Bearer resource_metadata="<instance>/.well-known/oauth-protected-resource"
OAuth2 flow used by this server
Reactive Resume is configured as an OAuth authorization server for MCP clients:- The MCP endpoint is
https://rxresu.me/mcp. - OAuth discovery metadata is exposed under
/.well-known/*endpoints. - The login/authorization route is
/auth/oauth. - If the user is not signed in,
/auth/oauthredirects to/auth/login, then resumes OAuth. - If the user is signed in,
/auth/oauthvalidatesclient_idandredirect_uri, issues an authorization code, and redirects back to the client. - PKCE parameters (
code_challenge,code_challenge_method) are preserved in the authorization flow.
Popular Client Setup
Cursor
OAuth2 (recommended):Codex (CLI / IDE extension)
Add server:config.toml):
Claude (web app custom connector)
Addhttps://rxresu.me/mcp as a custom remote MCP connector, then connect with OAuth in Claude’s connector UI.
Claude Desktop (local config file)
Usemcp-remote bridge with API key (example shown above in Method 2).
External References
- Cursor MCP docs
- MCP quickstart for users (Claude Desktop example)
- OpenAI Codex MCP docs
- Claude custom connectors (remote MCP)
- MCP Authorization spec
Self-Hosting
If you’re running a self-hosted Reactive Resume instance, replacehttps://rxresu.me/mcp with your instance URL:
Available Tools
Tool names use areactive_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 |
Breaking change (tool names)
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.
Available Resources
Resources follow MCP conventions: static items appear inresources/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 |
Breaking change (schema URI)
The schema resource was previouslyresume://schema. It is now resume://_meta/schema. Update any saved prompts, automations, or client configs that referenced the old URI.
Static server card (/.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/.
Available Prompts
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 |
Usage Examples
Once your MCP client is connected, you can use natural language to interact with your resumes:Browsing
- “List my resumes”
- “Show me my resume named ‘Software Engineer’”
- “What skills are listed on my resume?”
- “Show me the stats for my resume”
Creating & Managing
- “Create a new resume called ‘Frontend Engineer 2026’”
- “Import this exported ResumeData JSON as a new resume”
- “What tags do I use across my resumes?”
- “Duplicate my ‘Software Engineer’ resume for a product manager role”
- “Make my resume public and give me the share link”
- “Lock my finalized resume so it can’t be accidentally edited”
- “Delete my old draft resume”
Editing
- “Update my name to Jane Doe”
- “Change my headline to Senior Software Engineer”
- “Add TypeScript to my skills with an Advanced proficiency level”
- “Add a new experience entry for my role as Staff Engineer at Acme Corp from Jan 2024 to Present”
- “Remove the third item from my skills section”
Styling
- “Change the template to bronzor”
- “Set the primary color to blue”
- “Hide the interests section”
Exporting
- “Export my resume as a PDF”
- “Show me a screenshot of my resume”
Using Prompts
- “Help me build my resume from scratch” (uses
build_resume) - “Review my resume and give me a score” (uses
review_resume) - “Improve the wording on my resume” (uses
improve_resume) - “Tailor my resume for this job description: …” (uses
tailor_resume)
Troubleshooting
| 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 |