Skip to main content
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.

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

1

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.
Use OAuth2 whenever your MCP client supports it. Use API key only when OAuth is unavailable in that client.
2

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. 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).

Option B: API key (fallback)

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"
      }
    }
  }
}

Method 2: mcp-remote

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"]
    }
  }
}
Replace your-api-key with the API key you created in the prerequisites step.

Where to put the config

ClientConfig file
Cursor.cursor/mcp.json in your project or home directory
Claude Desktopclaude_desktop_config.json (docs)
Codex~/.codex/config.toml or .codex/config.toml (docs)
Other MCP clientsRefer to the client’s documentation

Authentication Details (How Reactive Resume MCP Works)

Reactive Resume MCP accepts authentication in this order:
  1. Bearer token (OAuth2 access token) via Authorization: Bearer <token>
  2. API key fallback via 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.

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/oauth redirects to /auth/login, then resumes OAuth.
  • If the user is signed in, /auth/oauth validates client_id and redirect_uri, issues an authorization code, and redirects back to the client.
  • PKCE parameters (code_challenge, code_challenge_method) are preserved in the authorization flow.

Cursor

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"
      }
    }
  }
}

Codex (CLI / IDE extension)

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" }

Claude (web app custom connector)

Add https://rxresu.me/mcp as a custom remote MCP connector, then connect with OAuth in Claude’s connector UI.

Claude Desktop (local config file)

Use mcp-remote bridge with API key (example shown above in Method 2).

External References

Self-Hosting

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"
  }
}

Available Tools

Tool names use a reactive_resume_ prefix so they stay distinct when multiple MCP servers are enabled in the same client.
ToolDescription
reactive_resume_list_resumesList 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_tagsList every distinct tag in use across your resumes (sorted)
reactive_resume_get_resumeGet the full data of a specific resume by ID
reactive_resume_get_resume_analysisGet the latest saved AI analysis for a resume (from the web app), if any
reactive_resume_create_resumeCreate a new, empty resume with a name and slug. Optionally pre-fill with sample data
reactive_resume_import_resumeCreate a resume from a full ResumeData JSON export (random name/slug). Large files may exceed client limits
reactive_resume_duplicate_resumeCreate a copy of an existing resume with a new name and slug
reactive_resume_patch_resumeApply JSON Patch (RFC 6902) operations to modify a resume’s data
reactive_resume_update_resumeUpdate metadata only: name, slug, tags, isPublic. Returns canonical share URL; passwords are not managed via MCP
reactive_resume_delete_resumePermanently delete a resume and all associated files. Irreversible
reactive_resume_lock_resumeLock a resume to prevent edits, patches, and deletion
reactive_resume_unlock_resumeUnlock a previously locked resume to re-enable editing
reactive_resume_export_resume_pdfGenerate a PDF from the resume and return a download URL
reactive_resume_get_resume_screenshotGet a visual preview of the resume’s first page as a WebP image URL
reactive_resume_get_resume_statisticsGet 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 in resources/list; parameterized access is declared in resources/templates/list and read via resources/read once you know the ID.
DiscoveryWhat you get
resources/listStatic resources only — currently resume://_meta/schema (ResumeData JSON Schema)
resources/templates/listresume://{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
URIDescription
resume://_meta/schemaResumeData 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 previously resume://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.
PromptDescription
build_resumeGuide you step-by-step through building a resume from scratch — basics, summary, experience, education, skills, and design
improve_resumeReview your resume and suggest concrete improvements to wording, impact, metrics, and structure
tailor_resumeAdapt your resume to match a specific job description with keyword optimization and ATS targeting. Requires the job description as input
review_resumeGet 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)
The AI will use reactive_resume_get_resume to inspect your current resume before making changes with reactive_resume_patch_resume. This ensures the correct JSON paths are used. Use reactive_resume_update_resume for name, slug, tags, and public visibility (not for section content).

Troubleshooting

IssueSolution
”Unauthorized” with no login promptYour client may not support MCP OAuth discovery. Use API key mode (x-api-key)
OAuth login opens but fails redirect/callbackConfirm 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 refusedCheck that the URL is correct and the instance is running
”ReferenceError: File is not defined” when using mcp-remoteYou’re running Node.js 18. mcp-remote requires Node.js 20 or later — upgrade with nvm use 20 or nvm alias default 20