Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.
Reactive Resume runs a Model Context Protocol (MCP) server, so AI clients such as Claude, Cursor and Codex can read and edit your resumes, cover letters and job applications when you ask them to in plain language. This guide shows you how to connect a client and lists everything the server offers.
The server address is your instance’s address followed by /mcp. On the hosted instance it’s https://rxresu.me/mcp. You can copy it from Settings → AI & developer, in the MCP server section.
Otherwise, add a remote MCP server with the address https://rxresu.me/mcp and no headers. Client-specific steps are in Set up popular clients.
2
Sign in to Reactive Resume
Your client opens a browser window. If you aren’t signed in, Reactive Resume asks you to sign in first.
3
Approve the connection
Check the application name under Connect an application, read what it will be able to do, and select Allow access. Select Deny access if you don’t recognize the application.
The consent screen for a new MCP client
4
Return to your client
The browser hands control back to your client, which can now use the Reactive Resume tools.
An API key in a config file grants its configured permissions. Choose read-only access when edits are unnecessary.
Keep the file private, and revoke the key in Settings if it leaks.
For coding agents, the open-source add-mcp CLI adds the server to each agent’s configuration in one step. It needs Node.js, detects the agents you use and lets you choose:
-a picks an agent, for example -a claude-code -a cursor -a codex. It supports over 20 agents, including Claude Code, Codex, Cursor, VS Code, Gemini CLI, OpenCode, Windsurf and Zed.
Without -g, it adds the server to the current project’s configuration; with -g, to your user configuration for every project.
-y skips the prompts.
Then sign in from your agent, as described below.
Claude (web, desktop and mobile)
Add a custom connector with the URL https://rxresu.me/mcp, then connect it and approve access in the browser. See Anthropic’s guide to custom connectors.
Claude Code
npx add-mcp https://rxresu.me/mcp --name reactive-resume -a claude-code -g
Then run /mcp inside Claude Code and choose reactive-resume to sign in. Leave out -g to add it to the project’s .mcp.json instead.
Cursor
npx add-mcp https://rxresu.me/mcp --name reactive-resume -a cursor
This adds the server to .cursor/mcp.json in your project; add -g for ~/.cursor/mcp.json and all projects. Cursor offers to sign in when it first connects. To use an API key instead, add --header "x-api-key: YOUR_API_KEY".
This adds the server to ~/.codex/config.toml. To use an API key instead of signing in, add --header "x-api-key: YOUR_API_KEY" and skip codex mcp login.
Other clients
Run npx add-mcp https://rxresu.me/mcp --name reactive-resume and choose your agent from the list. If your client isn’t listed, use the server address with its remote MCP (Streamable HTTP) option. If it asks for a transport, choose HTTP. If it can’t do OAuth, send the x-api-key header.
Self-hosting? Replace https://rxresu.me with your own address everywhere on this page, for example
https://resume.example.com/mcp.
“Change the headline on my Game Developer Resume to Senior Game Developer.”
“Add Unreal Engine 5 to my skills with the level Expert.”
“Make a copy of my Game Developer Resume for a technical designer role.”
“Review my resume and give me a score.” (uses the review_resume prompt)
Before it edits, the client reads the resume with read_resume, then changes it with apply_resume_patch. Every change it makes appears in the resume’s history as AI edit, so you can restore an earlier version. See Undoing changes and version history.For job applications, see Managing applications with MCP.
For guided workflows such as tailoring a resume or preparing for an interview, install the agent
skills. They use these tools when the server is connected.
The server keeps the original 43 tool names and adds API-derived tools for the remaining workflows. Each advertises input/output schemas, structured results and MCP annotations. Clients should use these hints to decide when to request confirmation; the server independently enforces authentication, permissions and ownership. Use tools/list or the server card for the current catalog.
Lists your resumes (ID, name, slug, tags, public and locked status, dates). Filter by tags, sort by lastUpdatedAt, createdAt or name.
list_resume_tags
Lists every tag used across your resumes.
read_resume
Returns full data, with ID, name and updatedAt in structuredContent.
download_resume_pdf
Returns a signed PDF download link that expires in 10 minutes.
create_resume
Creates a resume with a name and slug, empty or with sample content (withSampleData).
import_resume
Creates a resume from a full resume data object, such as a JSON export.
duplicate_resume
Copies a resume under a new name and slug.
apply_resume_patch
Changes content with JSON Patch; supply expectedUpdatedAt from read_resume to reject stale edits. See Using the patch API.
update_resume
Changes the name, slug, tags or public setting, and returns the public address. To set a share password, api_resume_set_password opens the resume in the editor.
delete_resume
Moves a resume to Trash, where it stays for 30 days.
lock_resume
Locks a resume so it can’t be edited or deleted.
unlock_resume
Unlocks a resume.
get_resume_statistics
Returns view and download counts, and when the resume was last viewed and downloaded.
Additional tools use api_ followed by the API router path in snake case. Inputs come from the same validated contracts as the API. Existing tool names remain available.
Read, add, rename, recolor, reorder and remove stages; list earlier unanswered applications at a company
Resume and letter exports return authenticated REST URLs. Download with your existing credentials or open in your signed-in browser. Letter localization words are encoded in the URL. No generated file is permanently copied into storage by the export tool.Lists default to 20 results and accept limit (up to 100) and offset; continue paging until no more results. Array results use { items: [...] } in structuredContent. Scalar results use { result: ... }. Dates use ISO 8601. Resume edits can use optimistic concurrency with expectedUpdatedAt; letter edits require expectedRevision. After a conflict, reread before retrying.Document listing never deletes expired Trash. Run api_documents_purge_expired explicitly to permanently remove documents trashed more than 30 days ago. Individual permanent deletion requires moving the document to Trash first.
The Streamable HTTP JSON request limit is 4 MiB. Inline base64 is limited to 3 MiB of encoded text (approximately 2.25 MiB of file bytes), leaving space for JSON metadata. Larger files use an owned storagePath returned by the REST file upload or assistant attachment endpoint:
The server reads storage directly and verifies the account prefix and path segments. External URLs and other users’ files cannot be used as references. The API still validates each operation’s file type and size: ordinary uploads/imports and application PDFs allow 10 MiB, PDF checking allows 25,000,000 bytes, and assistant attachments allow 25 MiB. Upload larger assistant attachments through their REST endpoint before referencing them. Small application attachments use fileName, contentType, and either dataBase64 or storagePath.
open_account_settings opens profile, security, API keys, preferences or account settings. Provider creation/update and web credential entry return their authenticated settings page. api_resume_set_password returns the resume’s editor link, where you set, change or remove its share password, and api_resume_verify_password returns a password-protected public resume’s link, where a visitor enters the password. Account deletion, password changes, passkeys, two-factor authentication and provider credentials require user interaction in that browser. Browser preferences, local undo and document selection remain browser workflows; durable edits and history are available through MCP.MCP is stateless and accepts POST requests with JSON responses. GET/DELETE return 405; there is no standalone SSE subscription. Draft/message streams are collected up to 500,000 characters; truncated identifies longer responses. Read the assistant thread for persisted replies. To watch a resume for changes, poll read_resume and compare updatedAt.The installed SDK uses its supported MCP 1.x protocol negotiation, including 2025-11-25. Protocol revisions beyond that require a separate SDK/compatibility upgrade; this server does not claim support for untested future versions.Browser requests must use the configured application Origin; native clients normally omit Origin. Responses are private and uncached. Request/user rate limits supplement each API operation’s own limits; signed PDF downloads share the renderer limit with REST exports.
The resume data JSON Schema, listed in resources/list and also served at /schema.json. Clients use it to build valid patches; tool schemas point to it instead of repeating it, for resume data and for a cover letter’s style. Tool results also summarize application timeline entries, posting sources and the account export; their full shapes are in /api/openapi/spec.json.
resume://{id}
One resume’s full data as JSON. This is a resource template (resources/templates/list); find IDs with list_resumes.
Your instance also publishes a server card at /.well-known/mcp/server-card.json that summarizes the tools, prompts and resources, for clients that discover servers without connecting. An Agentic Resource Discovery catalog at /.well-known/ard.json (also served at the older /.well-known/ai-catalog.json) points agent registries to that card.
This section is for client developers and self-hosters.
The server checks x-api-key: <key> first, then Authorization: Bearer <token>. MCP never accepts account session cookies. Invalid explicit credentials cannot borrow a browser session.
A request with neither gets 401 and a WWW-Authenticate: Bearer resource_metadata="<instance>/.well-known/oauth-protected-resource" header. OAuth clients use it to discover the authorization server.
Authorization server metadata is at /.well-known/oauth-authorization-server. The authorization server supports dynamic client registration and PKCE with S256.
New OAuth clients can request api:read, api:write and api:delete. The consent screen describes these permissions alongside identity scopes. Existing identity-only grants and legacy keys without permission statements retain account-wide access for compatibility.
The server checks the user, client and consent grant on every authenticated request. Tokens with offline_access outlive the browser session that approved them; other tokens remain bound to their login session. Disabled clients, banned accounts and revoked grants cannot continue using signed tokens. Proof-bound DPoP tokens are rejected: this endpoint supports ordinary bearer access tokens.
Revoking a refresh token or signing out in the app leaves already-issued JWT access tokens valid for up to 1 hour. Revoking consent under Connected applications blocks them immediately.
Revoke a connection under Settings → AI & developer → Connected applications. Revoking the application grant invalidates existing access and refresh tokens. The authorization provider does not support revoking one self-contained JWT independently of its grant.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Reactive Resume","description":"A privacy-minded resume builder that is customizable, portable, open-source, and free to use.","colors":{"primary":"#166534","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/reactiveresume/lsEa0V8tmq-7Vofb/logo/light.svg?fit=max\u0026auto=format\u0026n=lsEa0V8tmq-7Vofb\u0026q=85\u0026s=21a2f3c9b27509effa871b216e67c0ce","dark":"https://mintcdn.com/reactiveresume/lsEa0V8tmq-7Vofb/logo/dark.svg?fit=max\u0026auto=format\u0026n=lsEa0V8tmq-7Vofb\u0026q=85\u0026s=fe4e07f4f06411b0ad16fd4644a475de","href":"https://rxresu.me"},"favicon":"https://mintcdn.com/reactiveresume/lsEa0V8tmq-7Vofb/favicon.svg?fit=max\u0026auto=format\u0026n=lsEa0V8tmq-7Vofb\u0026q=85\u0026s=6d7f6f71f71340846e94142b357a89b7","background":{"decoration":"grid"},"navbar":{"links":[{"href":"https://rxresu.me/resume-templates","label":"Resume templates"},{"href":"https://github.com/reactive-resume/reactive-resume/issues","label":"Support"}],"primary":{"type":"button","label":"Build your resume","href":"https://rxresu.me/auth/register"}},"footer":{"socials":{"website":"https://rxresu.me","github":"https://github.com/reactive-resume/reactive-resume"}},"seo":{"metatags":{"canonical":"https://docs.rxresu.me","og:image":"https://rxresu.me/opengraph/banner.jpg"},"indexing":"navigable"},"fonts":{"heading":{"family":"IBM Plex Sans"},"body":{"family":"IBM Plex Sans"}},"icons":{"library":"lucide"},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Reactive Resume","icon":"link","href":"https://rxresu.me"},{"anchor":"Source Code","icon":"github","href":"https://github.com/reactive-resume/reactive-resume"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"reactiveresume","hasAudioNarration":false,"actualSubdomain":"reactiveresume","customDomains":["docs.rxresu.me"],"gitSource":{"type":"github","owner":"reactive-resume","repo":"reactive-resume","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae3ca469209a2fdac8a9086","collectionId":"3ecdb9fd-5f6d-41df-ab55-965cb557a545","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae3ca469209a2fdac8a9086"},"feedback":{"edits":true,"thumbs":false,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae477ec21d44d6b52dc8e6b","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API Reference","count":209},{"language":"default","tag":"Documentation","count":123},{"language":"default","tag":"Applications","count":42},{"language":"default","tag":"Career","count":31},{"language":"default","tag":"Resumes","count":26},{"language":"default","tag":"Documents","count":24},{"language":"default","tag":"Cover Letters","count":24},{"language":"default","tag":"Comparisons","count":17},{"language":"default","tag":"Agent","count":15},{"language":"default","tag":"Integrations","count":13}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"hello@amruthpillai.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"guides/using-the-mcp-server","slug":"/guides/using-the-mcp-server","pageMetadata":{"title":"Using the MCP server","description":"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.","href":"/guides/using-the-mcp-server"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Reactive Resume runs a `,_jsx(_components.a,{href:`https://modelcontextprotocol.io`,children:`Model Context Protocol (MCP)`}),` server, so AI clients such as Claude, Cursor and Codex can read and edit your resumes, cover letters and job applications when you ask them to in plain language. This guide shows you how to connect a client and lists everything the server offers.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You need a Reactive Resume account.`}),`\n`,_jsxs(_components.li,{children:[`Your MCP client must support remote servers over Streamable HTTP, or be able to run the `,_jsx(_components.a,{href:`https://www.npmjs.com/package/mcp-remote`,children:_jsx(_components.code,{children:`mcp-remote`})}),` bridge.`]}),`\n`,_jsxs(_components.li,{children:[`Decide how the client signs in:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`OAuth (recommended).`}),` You approve the client in your browser. No secret is copied anywhere.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`API key.`}),` For clients that can’t do OAuth but can send a custom header. Create a key first, as described in `,_jsx(_components.a,{href:`/guides/using-the-api`,children:`Using the API`}),`.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`find-your-server-address`,children:`Find your server address`}),`\n`,_jsxs(_components.p,{children:[`The server address is your instance’s address followed by `,_jsx(_components.code,{children:`/mcp`}),`. On the hosted instance it’s `,_jsx(_components.code,{children:`https://rxresu.me/mcp`}),`. You can copy it from `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`AI \u0026 developer`}),`, in the `,_jsx(_components.strong,{children:`MCP server`}),` section.`]}),`\n`,_jsx(Frame,{caption:`The MCP server section in AI \u0026 developer settings`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=ef3cfc67b954a9b65af6490411cd777c`,alt:`MCP server section showing the address https://rxresu.me/mcp with a Copy button and a Setup guide link`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`304`,height:`304`,\"data-path\":`images/guides/using-the-mcp-server/mcp-server-settings.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=09b1d8763db2d79c8a19390bf44be490 280w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=ad883f1c81f91eeda5fac625bc40a772 560w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=00e05ecbd6b5fb2db1db862e8fe88095 840w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=56a48f358a3f0cf0bb48931a2e6b23d7 1100w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=2313a836cd7399afccb2efae2b4a15a7 1650w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/mcp-server-settings.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=096cbab085ca9666064694c14901783d 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`connect-with-oauth`,children:`Connect with OAuth`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Add the server to your client`,children:[_jsx(_components.p,{children:`For coding agents, run:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Otherwise, add a remote MCP server with the address `,_jsx(_components.code,{children:`https://rxresu.me/mcp`}),` and no headers. Client-specific steps are in `,_jsx(_components.a,{href:`#set-up-popular-clients`,children:`Set up popular clients`}),`.`]})]}),_jsx(Step,{title:`Sign in to Reactive Resume`,children:_jsx(_components.p,{children:`Your client opens a browser window. If you aren’t signed in, Reactive Resume asks you to sign in first.`})}),_jsxs(Step,{title:`Approve the connection`,children:[_jsxs(_components.p,{children:[`Check the application name under `,_jsx(_components.strong,{children:`Connect an application`}),`, read what it will be able to do, and select `,_jsx(_components.strong,{children:`Allow access`}),`. Select `,_jsx(_components.strong,{children:`Deny access`}),` if you don’t recognize the application.`]}),_jsx(Frame,{caption:`The consent screen for a new MCP client`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=0369a367c28fc17ef555fe2c9a6be189`,alt:`Connect an application screen for a client named Claude, listing access to resumes and job applications, profile information, email address and offline access, with Deny and Allow access buttons`,\"data-og-width\":`816`,width:`816`,\"data-og-height\":`848`,height:`848`,\"data-path\":`images/guides/using-the-mcp-server/oauth-consent.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=d9a6eb6c897817cc1f0e48781c497db2 280w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=8aeb64e6e87287443156635e9a6942a8 560w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=e95ff37c94dbd599106f6e8c07638ffe 840w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=1a5231e2decebdde0a323dd7cf889e2b 1100w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=d5367a9ba52d85df351433bd79770578 1650w, https://mintcdn.com/reactiveresume/rtb73NdrPCUreUAd/images/guides/using-the-mcp-server/oauth-consent.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rtb73NdrPCUreUAd\u0026q=85\u0026s=4497cd95bf710878492dc01b38aa593a 2500w`})})]}),_jsx(Step,{title:`Return to your client`,children:_jsx(_components.p,{children:`The browser hands control back to your client, which can now use the Reactive Resume tools.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`connect-with-an-api-key`,children:`Connect with an API key`}),`\n`,_jsxs(_components.p,{children:[`If your client can’t do OAuth, send your API key in the `,_jsx(_components.code,{children:`x-api-key`}),` header. For coding agents, `,_jsx(_components.code,{children:`add-mcp`}),` writes the header for you:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"x-api-key: YOUR_API_KEY\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`To edit the configuration yourself:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mcpServers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"reactive-resume\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://rxresu.me/mcp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"headers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"x-api-key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If your client only runs local commands, use `,_jsx(_components.code,{children:`mcp-remote`}),` as a bridge. It needs a current version of `,_jsx(_components.a,{href:`https://nodejs.org`,children:`Node.js`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mcpServers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"reactive-resume\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"command\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"npx\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mcp-remote\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://rxresu.me/mcp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"--header\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x-api-key:YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`An API key in a config file grants its configured permissions. Choose read-only access when edits are unnecessary.\nKeep the file private, and revoke the key in Settings if it leaks.`})}),`\n`,_jsx(Heading,{level:`2`,id:`set-up-popular-clients`,children:`Set up popular clients`}),`\n`,_jsxs(_components.p,{children:[`For coding agents, the open-source `,_jsx(_components.a,{href:`https://github.com/neon-solutions/add-mcp`,children:_jsx(_components.code,{children:`add-mcp`})}),` CLI adds the server to each agent’s configuration in one step. It needs `,_jsx(_components.a,{href:`https://nodejs.org`,children:`Node.js`}),`, detects the agents you use and lets you choose:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`})]}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`-a`}),` picks an agent, for example `,_jsx(_components.code,{children:`-a claude-code -a cursor -a codex`}),`. It supports `,_jsx(_components.a,{href:`https://github.com/neon-solutions/add-mcp#supported-agents`,children:`over 20 agents`}),`, including Claude Code, Codex, Cursor, VS Code, Gemini CLI, OpenCode, Windsurf and Zed.`]}),`\n`,_jsxs(_components.li,{children:[`Without `,_jsx(_components.code,{children:`-g`}),`, it adds the server to the current project’s configuration; with `,_jsx(_components.code,{children:`-g`}),`, to your user configuration for every project.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`-y`}),` skips the prompts.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Then sign in from your agent, as described below.`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Claude (web, desktop and mobile)`,id:`claude-web-desktop-and-mobile`,children:_jsxs(_components.p,{children:[`Add a custom connector with the URL `,_jsx(_components.code,{children:`https://rxresu.me/mcp`}),`, then connect it and approve access in the browser. See Anthropic’s guide to `,_jsx(_components.a,{href:`https://claude.com/docs/connectors/custom/remote-mcp`,children:`custom connectors`}),`.`]})}),_jsxs(Accordion,{title:`Claude Code`,id:`claude-code`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` claude-code`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -g`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Then run `,_jsx(_components.code,{children:`/mcp`}),` inside Claude Code and choose `,_jsx(_components.strong,{children:`reactive-resume`}),` to sign in. Leave out `,_jsx(_components.code,{children:`-g`}),` to add it to the project’s `,_jsx(_components.code,{children:`.mcp.json`}),` instead.`]})]}),_jsxs(Accordion,{title:`Cursor`,id:`cursor`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cursor`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`This adds the server to `,_jsx(_components.code,{children:`.cursor/mcp.json`}),` in your project; add `,_jsx(_components.code,{children:`-g`}),` for `,_jsx(_components.code,{children:`~/.cursor/mcp.json`}),` and all projects. Cursor offers to sign in when it first connects. To use an API key instead, add `,_jsx(_components.code,{children:`--header \"x-api-key: YOUR_API_KEY\"`}),`.`]})]}),_jsxs(Accordion,{title:`Codex`,id:`codex`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://rxresu.me/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` codex`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -g`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`codex`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mcp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` login`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reactive-resume`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`This adds the server to `,_jsx(_components.code,{children:`~/.codex/config.toml`}),`. To use an API key instead of signing in, add `,_jsx(_components.code,{children:`--header \"x-api-key: YOUR_API_KEY\"`}),` and skip `,_jsx(_components.code,{children:`codex mcp login`}),`.`]})]}),_jsx(Accordion,{title:`Other clients`,id:`other-clients`,children:_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`npx add-mcp https://rxresu.me/mcp --name reactive-resume`}),` and choose your agent from the list. If your client isn’t listed, use the server address with its remote MCP (Streamable HTTP) option. If it asks for a transport, choose HTTP. If it can’t do OAuth, send the `,_jsx(_components.code,{children:`x-api-key`}),` header.`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Self-hosting? Replace `,_jsx(_components.code,{children:`https://rxresu.me`}),` with your own address everywhere on this page, for example\n`,_jsx(_components.code,{children:`https://resume.example.com/mcp`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`try-it`,children:`Try it`}),`\n`,_jsx(_components.p,{children:`Ask your client something like:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`“List my resumes.”`}),`\n`,_jsx(_components.li,{children:`“Change the headline on my Game Developer Resume to Senior Game Developer.”`}),`\n`,_jsx(_components.li,{children:`“Add Unreal Engine 5 to my skills with the level Expert.”`}),`\n`,_jsx(_components.li,{children:`“Make a copy of my Game Developer Resume for a technical designer role.”`}),`\n`,_jsxs(_components.li,{children:[`“Review my resume and give me a score.” (uses the `,_jsx(_components.code,{children:`review_resume`}),` prompt)`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Before it edits, the client reads the resume with `,_jsx(_components.code,{children:`read_resume`}),`, then changes it with `,_jsx(_components.code,{children:`apply_resume_patch`}),`. Every change it makes appears in the resume’s history as `,_jsx(_components.strong,{children:`AI edit`}),`, so you can restore an earlier version. See `,_jsx(_components.a,{href:`/guides/undoing-changes-and-version-history`,children:`Undoing changes and version history`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For job applications, see `,_jsx(_components.a,{href:`/guides/managing-applications-with-mcp`,children:`Managing applications with MCP`}),`.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`For guided workflows such as tailoring a resume or preparing for an interview, install the `,_jsx(_components.a,{href:`/guides/using-agent-skills`,children:`agent\nskills`}),`. They use these tools when the server is connected.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`tools`,children:`Tools`}),`\n`,_jsxs(_components.p,{children:[`The server keeps the original 43 tool names and adds API-derived tools for the remaining workflows. Each advertises input/output schemas, structured results and MCP annotations. Clients should use these hints to decide when to request confirmation; the server independently enforces authentication, permissions and ownership. Use `,_jsx(_components.code,{children:`tools/list`}),` or the server card for the current catalog.`]}),`\n`,_jsx(Heading,{level:`3`,id:`resumes`,children:`Resumes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`list_resumes`})}),_jsxs(_components.td,{children:[`Lists your resumes (ID, name, slug, tags, public and locked status, dates). Filter by `,_jsx(_components.code,{children:`tags`}),`, sort by `,_jsx(_components.code,{children:`lastUpdatedAt`}),`, `,_jsx(_components.code,{children:`createdAt`}),` or `,_jsx(_components.code,{children:`name`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`list_resume_tags`})}),_jsx(_components.td,{children:`Lists every tag used across your resumes.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`read_resume`})}),_jsxs(_components.td,{children:[`Returns full data, with ID, name and `,_jsx(_components.code,{children:`updatedAt`}),` in `,_jsx(_components.code,{children:`structuredContent`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`download_resume_pdf`})}),_jsx(_components.td,{children:`Returns a signed PDF download link that expires in 10 minutes.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`create_resume`})}),_jsxs(_components.td,{children:[`Creates a resume with a `,_jsx(_components.code,{children:`name`}),` and `,_jsx(_components.code,{children:`slug`}),`, empty or with sample content (`,_jsx(_components.code,{children:`withSampleData`}),`).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`import_resume`})}),_jsx(_components.td,{children:`Creates a resume from a full resume data object, such as a JSON export.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`duplicate_resume`})}),_jsxs(_components.td,{children:[`Copies a resume under a new `,_jsx(_components.code,{children:`name`}),` and `,_jsx(_components.code,{children:`slug`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`apply_resume_patch`})}),_jsxs(_components.td,{children:[`Changes content with JSON Patch; supply `,_jsx(_components.code,{children:`expectedUpdatedAt`}),` from `,_jsx(_components.code,{children:`read_resume`}),` to reject stale edits. See `,_jsx(_components.a,{href:`/guides/using-the-patch-api`,children:`Using the patch API`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`update_resume`})}),_jsxs(_components.td,{children:[`Changes the name, slug, tags or public setting, and returns the public address. To set a share password, `,_jsx(_components.code,{children:`api_resume_set_password`}),` opens the resume in the editor.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delete_resume`})}),_jsx(_components.td,{children:`Moves a resume to Trash, where it stays for 30 days.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lock_resume`})}),_jsx(_components.td,{children:`Locks a resume so it can’t be edited or deleted.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unlock_resume`})}),_jsx(_components.td,{children:`Unlocks a resume.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_resume_statistics`})}),_jsx(_components.td,{children:`Returns view and download counts, and when the resume was last viewed and downloaded.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`cover-letters`,children:`Cover letters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`list_cover_letters`})}),_jsxs(_components.td,{children:[`Lists your cover letters. Filter by name (`,_jsx(_components.code,{children:`search`}),`), `,_jsx(_components.code,{children:`resumeId`}),` or `,_jsx(_components.code,{children:`applicationId`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`read_cover_letter`})}),_jsxs(_components.td,{children:[`Returns one letter, including its `,_jsx(_components.code,{children:`revision`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`create_cover_letter`})}),_jsx(_components.td,{children:`Creates a letter, optionally linked to a resume (for its sender details and design) or an application.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`update_cover_letter`})}),_jsxs(_components.td,{children:[`Changes a letter’s text, recipient, template, links, or sender details when unlinked. Needs `,_jsx(_components.code,{children:`expectedRevision`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`refresh_cover_letter_style`})}),_jsxs(_components.td,{children:[`Copies a resume’s design and, if linked, its sender details. Keeps the text and template. Needs `,_jsx(_components.code,{children:`expectedRevision`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`duplicate_cover_letter`})}),_jsx(_components.td,{children:`Copies a letter.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delete_cover_letter`})}),_jsxs(_components.td,{children:[`Moves a letter to Trash for 30 days. Needs `,_jsx(_components.code,{children:`expectedRevision`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`export_cover_letter`})}),_jsx(_components.td,{children:`Returns a letter as versioned cover-letter JSON.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`import_cover_letter`})}),_jsxs(_components.td,{children:[`Creates a letter from cover-letter JSON produced by `,_jsx(_components.code,{children:`export_cover_letter`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`applications`,children:`Applications`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`list_applications`})}),_jsxs(_components.td,{children:[`Lists your applications with contacts, documents and timeline. Filter by stage (`,_jsx(_components.code,{children:`status`}),`), stage ID (`,_jsx(_components.code,{children:`laneId`}),`) or `,_jsx(_components.code,{children:`tags`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`read_application`})}),_jsx(_components.td,{children:`Returns one application in full.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`list_application_tags`})}),_jsx(_components.td,{children:`Lists every tag used across applications.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_application_stats`})}),_jsx(_components.td,{children:`Counts applications by stage and source.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`create_application`})}),_jsxs(_components.td,{children:[`Creates an application. `,_jsx(_components.code,{children:`company`}),` and `,_jsx(_components.code,{children:`role`}),` are required.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`update_application`})}),_jsx(_components.td,{children:`Changes fields, moves the stage, edits contacts, follow-up and tags, or links a resume and letter. Lists you send replace the old ones.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`add_application_note`})}),_jsx(_components.td,{children:`Adds a note to the activity timeline.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`add_application_interview`})}),_jsxs(_components.td,{children:[`Schedules an interview (`,_jsx(_components.code,{children:`screening`}),`, `,_jsx(_components.code,{children:`technical`}),`, `,_jsx(_components.code,{children:`behavioral`}),`, `,_jsx(_components.code,{children:`onsite`}),` or `,_jsx(_components.code,{children:`other`}),`).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`update_application_interview`})}),_jsx(_components.td,{children:`Reschedules or edits an interview.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`update_application_timeline_entry`})}),_jsx(_components.td,{children:`Changes the date of a stage or note entry, or a note’s text.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delete_application_timeline_entry`})}),_jsx(_components.td,{children:`Deletes a note, an interview or an older stage entry.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delete_application`})}),_jsx(_components.td,{children:`Permanently deletes an application and the PDFs uploaded to it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bulk_update_applications`})}),_jsx(_components.td,{children:`Moves several applications to a stage or adds tags to them.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bulk_delete_applications`})}),_jsx(_components.td,{children:`Permanently deletes several applications.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`import_applications`})}),_jsx(_components.td,{children:`Creates up to 500 applications from parsed rows.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attach_application_document`})}),_jsx(_components.td,{children:`Attaches a PDF using bounded inline base64 or an owned storage reference (up to 10 MiB).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`remove_application_document`})}),_jsx(_components.td,{children:`Removes an attached PDF.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`autofill_application_from_job`})}),_jsx(_components.td,{children:`Reads a pasted job posting with your AI provider and suggests company, role, location and salary.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`score_application_match`})}),_jsx(_components.td,{children:`Scores the linked resume against the job description with your AI provider.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tailor_resume_for_application`})}),_jsx(_components.td,{children:`Makes a private copy of the linked resume with a summary rewritten for the job by your AI provider, and links the copy to the application.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`draft_application_message`})}),_jsx(_components.td,{children:`Drafts a cover letter (saved as a new letter) or a recruiter follow-up with your AI provider.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The last four tools send data to the AI provider you set up in Reactive Resume and need a tested default provider. See `,_jsx(_components.a,{href:`/guides/using-ai`,children:`Connecting an AI provider`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`additional-api-workflows`,children:`Additional API workflows`}),`\n`,_jsxs(_components.p,{children:[`Additional tools use `,_jsx(_components.code,{children:`api_`}),` followed by the API router path in snake case. Inputs come from the same validated contracts as the API. Existing tool names remain available.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Examples`}),_jsx(_components.th,{children:`Coverage`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Resume history and sharing`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_resume_list_versions`}),`, `,_jsx(_components.code,{children:`api_resume_restore_version`}),`, `,_jsx(_components.code,{children:`api_resume_set_password`})]}),_jsx(_components.td,{children:`List/read/create/rename/delete/restore versions; password removal, slug availability, public reads and daily statistics`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Letter history and drafts`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_cover_letters_get_version`}),`, `,_jsx(_components.code,{children:`api_cover_letters_draft`})]}),_jsx(_components.td,{children:`All version actions; draft, shorter and personal variants; existing update tool accepts complete style fields`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Document library`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_documents_list`}),`, `,_jsx(_components.code,{children:`api_documents_copy_for_job`}),`, `,_jsx(_components.code,{children:`api_documents_purge_expired`})]}),_jsx(_components.td,{children:`Counts, names, tags, locks, application links, Trash, restore, permanent deletion and expired Trash cleanup`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Files and exports`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_rest_document_exports_resume`}),`, `,_jsx(_components.code,{children:`api_rest_document_exports_letter`}),`, `,_jsx(_components.code,{children:`api_rest_file_upload`})]}),_jsx(_components.td,{children:`PDF, DOCX, ODT, Markdown and JSON exports; file upload/delete and supported file imports`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Checks and AI`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_rest_check_resume`}),`, `,_jsx(_components.code,{children:`api_rest_check_pdf`}),`, `,_jsx(_components.code,{children:`api_rest_match_resume`}),`, `,_jsx(_components.code,{children:`api_ai_improve`})]}),_jsx(_components.td,{children:`Deterministic checks and matching; PDF/DOCX parsing, qualitative review, line rewrites, job search and posting extraction`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Assistant`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_agent_threads_start`}),`, `,_jsx(_components.code,{children:`api_agent_messages_send`}),`, `,_jsx(_components.code,{children:`api_agent_attachments_create`})]}),_jsx(_components.td,{children:`Threads, messages, cancellation, resumable replies, proposed edit status and attachments`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Account and instance`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_auth_export_data`}),`, `,_jsx(_components.code,{children:`api_auth_delete_account`}),`, `,_jsx(_components.code,{children:`api_flags_get`})]}),_jsx(_components.td,{children:`Account export, browser handoff for account deletion, enabled auth providers and platform statistics`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Integrations`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_ai_providers_list`}),`, `,_jsx(_components.code,{children:`api_web_access_status`})]}),_jsx(_components.td,{children:`Provider list/test/delete and web connection status/test/delete; credential entry uses browser handoffs`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Application stages`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`api_applications_lanes_get`}),`, `,_jsx(_components.code,{children:`api_applications_lanes_create`}),`, `,_jsx(_components.code,{children:`api_applications_lanes_retire`})]}),_jsx(_components.td,{children:`Read, add, rename, recolor, reorder and remove stages; list earlier unanswered applications at a company`})]})]})]}),`\n`,_jsx(_components.p,{children:`Resume and letter exports return authenticated REST URLs. Download with your existing credentials or open in your signed-in browser. Letter localization words are encoded in the URL. No generated file is permanently copied into storage by the export tool.`}),`\n`,_jsxs(_components.p,{children:[`Lists default to 20 results and accept `,_jsx(_components.code,{children:`limit`}),` (up to 100) and `,_jsx(_components.code,{children:`offset`}),`; continue paging until no more results. Array results use `,_jsx(_components.code,{children:`{ items: [...] }`}),` in `,_jsx(_components.code,{children:`structuredContent`}),`. Scalar results use `,_jsx(_components.code,{children:`{ result: ... }`}),`. Dates use ISO 8601. Resume edits can use optimistic concurrency with `,_jsx(_components.code,{children:`expectedUpdatedAt`}),`; letter edits require `,_jsx(_components.code,{children:`expectedRevision`}),`. After a conflict, reread before retrying.`]}),`\n`,_jsxs(_components.p,{children:[`Document listing never deletes expired Trash. Run `,_jsx(_components.code,{children:`api_documents_purge_expired`}),` explicitly to permanently remove documents trashed more than 30 days ago. Individual permanent deletion requires moving the document to Trash first.`]}),`\n`,_jsx(Heading,{level:`3`,id:`file-limits-and-references`,children:`File limits and references`}),`\n`,_jsxs(_components.p,{children:[`The Streamable HTTP JSON request limit is 4 MiB. Inline base64 is limited to 3 MiB of encoded text (approximately 2.25 MiB of file bytes), leaving space for JSON metadata. Larger files use an owned `,_jsx(_components.code,{children:`storagePath`}),` returned by the REST file upload or assistant attachment endpoint:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"file\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"resume.pdf\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contentType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"application/pdf\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"storagePath\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"uploads/YOUR_USER_ID/pictures/FILE_ID.pdf\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The server reads storage directly and verifies the account prefix and path segments. External URLs and other users’ files cannot be used as references. The API still validates each operation’s file type and size: ordinary uploads/imports and application PDFs allow 10 MiB, PDF checking allows 25,000,000 bytes, and assistant attachments allow 25 MiB. Upload larger assistant attachments through their REST endpoint before referencing them. Small application attachments use `,_jsx(_components.code,{children:`fileName`}),`, `,_jsx(_components.code,{children:`contentType`}),`, and either `,_jsx(_components.code,{children:`dataBase64`}),` or `,_jsx(_components.code,{children:`storagePath`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`browser-and-streaming-workflows`,children:`Browser and streaming workflows`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`open_account_settings`}),` opens profile, security, API keys, preferences or account settings. Provider creation/update and web credential entry return their authenticated settings page. `,_jsx(_components.code,{children:`api_resume_set_password`}),` returns the resume’s editor link, where you set, change or remove its share password, and `,_jsx(_components.code,{children:`api_resume_verify_password`}),` returns a password-protected public resume’s link, where a visitor enters the password. Account deletion, password changes, passkeys, two-factor authentication and provider credentials require user interaction in that browser. Browser preferences, local undo and document selection remain browser workflows; durable edits and history are available through MCP.`]}),`\n`,_jsxs(_components.p,{children:[`MCP is stateless and accepts POST requests with JSON responses. GET/DELETE return 405; there is no standalone SSE subscription. Draft/message streams are collected up to 500,000 characters; `,_jsx(_components.code,{children:`truncated`}),` identifies longer responses. Read the assistant thread for persisted replies. To watch a resume for changes, poll `,_jsx(_components.code,{children:`read_resume`}),` and compare `,_jsx(_components.code,{children:`updatedAt`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The installed SDK uses its supported MCP 1.x protocol negotiation, including `,_jsx(_components.code,{children:`2025-11-25`}),`. Protocol revisions beyond that require a separate SDK/compatibility upgrade; this server does not claim support for untested future versions.`]}),`\n`,_jsx(_components.p,{children:`Browser requests must use the configured application Origin; native clients normally omit Origin. Responses are private and uncached. Request/user rate limits supplement each API operation’s own limits; signed PDF downloads share the renderer limit with REST exports.`}),`\n`,_jsx(Heading,{level:`2`,id:`prompts`,children:`Prompts`}),`\n`,_jsxs(_components.p,{children:[`Prompts are ready-made instructions your client can start from. Each takes a resume `,_jsx(_components.code,{children:`id`}),` and includes that resume and the schema.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Prompt`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`build_resume`})}),_jsx(_components.td,{children:`Walks you through building a resume section by section.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`improve_resume`})}),_jsx(_components.td,{children:`Suggests concrete improvements to wording, impact and structure.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`review_resume`})}),_jsx(_components.td,{children:`Gives a structured critique with a scorecard and prioritized recommendations, without changing anything.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`resources`,children:`Resources`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`URI`}),_jsx(_components.th,{children:`Contents`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resume://_meta/schema`})}),_jsxs(_components.td,{children:[`The resume data JSON Schema, listed in `,_jsx(_components.code,{children:`resources/list`}),` and also served at `,_jsx(_components.code,{children:`/schema.json`}),`. Clients use it to build valid patches; tool schemas point to it instead of repeating it, for resume data and for a cover letter’s style. Tool results also summarize application timeline entries, posting sources and the account export; their full shapes are in `,_jsx(_components.code,{children:`/api/openapi/spec.json`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resume://{id}`})}),_jsxs(_components.td,{children:[`One resume’s full data as JSON. This is a resource template (`,_jsx(_components.code,{children:`resources/templates/list`}),`); find IDs with `,_jsx(_components.code,{children:`list_resumes`}),`.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Your instance also publishes a server card at `,_jsx(_components.code,{children:`/.well-known/mcp/server-card.json`}),` that summarizes the tools, prompts and resources, for clients that discover servers without connecting. An `,_jsx(_components.a,{href:`https://agenticresourcediscovery.org/spec/`,children:`Agentic Resource Discovery`}),` catalog at `,_jsx(_components.code,{children:`/.well-known/ard.json`}),` (also served at the older `,_jsx(_components.code,{children:`/.well-known/ai-catalog.json`}),`) points agent registries to that card.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-authentication-works`,children:`How authentication works`}),`\n`,_jsx(_components.p,{children:`This section is for client developers and self-hosters.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The server checks `,_jsx(_components.code,{children:`x-api-key: \u003ckey>`}),` first, then `,_jsx(_components.code,{children:`Authorization: Bearer \u003ctoken>`}),`. MCP never accepts account session cookies. Invalid explicit credentials cannot borrow a browser session.`]}),`\n`,_jsxs(_components.li,{children:[`A request with neither gets `,_jsx(_components.code,{children:`401`}),` and a `,_jsx(_components.code,{children:`WWW-Authenticate: Bearer resource_metadata=\"\u003cinstance>/.well-known/oauth-protected-resource\"`}),` header. OAuth clients use it to discover the authorization server.`]}),`\n`,_jsxs(_components.li,{children:[`Authorization server metadata is at `,_jsx(_components.code,{children:`/.well-known/oauth-authorization-server`}),`. The authorization server supports dynamic client registration and PKCE with `,_jsx(_components.code,{children:`S256`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`New OAuth clients can request `,_jsx(_components.code,{children:`api:read`}),`, `,_jsx(_components.code,{children:`api:write`}),` and `,_jsx(_components.code,{children:`api:delete`}),`. The consent screen describes these permissions alongside identity scopes. Existing identity-only grants and legacy keys without permission statements retain account-wide access for compatibility.`]}),`\n`,_jsxs(_components.li,{children:[`The server checks the user, client and consent grant on every authenticated request. Tokens with `,_jsx(_components.code,{children:`offline_access`}),` outlive the browser session that approved them; other tokens remain bound to their login session. Disabled clients, banned accounts and revoked grants cannot continue using signed tokens. Proof-bound DPoP tokens are rejected: this endpoint supports ordinary bearer access tokens.`]}),`\n`,_jsx(_components.li,{children:`Revoking a refresh token or signing out in the app leaves already-issued JWT access tokens valid for up to 1 hour. Revoking consent under Connected applications blocks them immediately.`}),`\n`,_jsx(_components.li,{children:`Revoke a connection under Settings → AI \u0026 developer → Connected applications. Revoking the application grant invalidates existing access and refresh tokens. The authorization provider does not support revoking one self-contained JWT independently of its grant.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Problem`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”Unauthorized” and no sign-in window`}),_jsx(_components.td,{children:`Your client doesn’t support MCP OAuth. Connect with an API key.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The sign-in window says the request is invalid or has expired`}),_jsx(_components.td,{children:`Start the connection again from your client.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`401`}),` with an API key`]}),_jsxs(_components.td,{children:[`The key is wrong, revoked or expired. Create a new one in `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`AI \u0026 developer`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A tool says the resume is locked`}),_jsxs(_components.td,{children:[`Unlock it in the app, or ask the client to run `,_jsx(_components.code,{children:`unlock_resume`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A tool says an ID wasn’t found`}),_jsx(_components.td,{children:`Ask the client to list resumes, letters or applications first to get valid IDs.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`An edit to dates doesn’t stick`}),_jsxs(_components.td,{children:[`The client changed the `,_jsx(_components.code,{children:`period`}),` or `,_jsx(_components.code,{children:`date`}),` text. Ask it to write the `,_jsx(_components.code,{children:`dates`}),` object instead.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A tool rejects a large file`}),_jsx(_components.td,{children:`Upload through the REST file/attachment endpoint and pass an owned storage reference.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A self-hosted connection made before an upgrade stops working`}),_jsx(_components.td,{children:`Remove the server from your client and add it again, so it registers afresh and you approve it again.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`related-guides`,children:`Related guides`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/managing-applications-with-mcp`,children:`Managing applications with MCP`}),`: prompts for tracking your job search from an AI client.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/using-the-patch-api`,children:`Using the patch API`}),`: how resume edits are expressed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/using-the-api`,children:`Using the API`}),`: API keys and the REST API.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/using-agent-skills`,children:`Using agent skills`}),`: guided workflows that use these tools.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/using-webmcp`,children:`Using WebMCP`}),`: tools for the AI agent in your browser, on the document you have open.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Using the MCP server","description":"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.","href":"/guides/using-the-mcp-server"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Find your server address","slug":"find-your-server-address","depth":2,"children":[]},{"title":"Connect with OAuth","slug":"connect-with-oauth","depth":2,"children":[]},{"title":"Connect with an API key","slug":"connect-with-an-api-key","depth":2,"children":[]},{"title":"Set up popular clients","slug":"set-up-popular-clients","depth":2,"children":[]},{"title":"Try it","slug":"try-it","depth":2,"children":[]},{"title":"Tools","slug":"tools","depth":2,"children":[{"title":"Resumes","slug":"resumes","depth":3,"children":[]},{"title":"Cover letters","slug":"cover-letters","depth":3,"children":[]},{"title":"Applications","slug":"applications","depth":3,"children":[]},{"title":"Additional API workflows","slug":"additional-api-workflows","depth":3,"children":[]},{"title":"File limits and references","slug":"file-limits-and-references","depth":3,"children":[]},{"title":"Browser and streaming workflows","slug":"browser-and-streaming-workflows","depth":3,"children":[]}]},{"title":"Prompts","slug":"prompts","depth":2,"children":[]},{"title":"Resources","slug":"resources","depth":2,"children":[]},{"title":"How authentication works","slug":"how-authentication-works","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Related guides","slug":"related-guides","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"reactiveresume","siteName":"Reactive Resume","title":"Using the MCP server - Reactive Resume","contextualStarterQuestions":[{"_id":"6ae478009ceaf6dc1ecad909","deploymentId":"696550c78205dc150ed83107","questionText":"How do I connect Claude to my resume?","status":"active","generatedBy":"contextual","path":"guides/using-the-mcp-server","createdAt":"2026-10-30T10:57:04.960Z","updatedAt":"2026-10-30T10:57:04.960Z","__v":0},{"_id":"6ae478009ceaf6dc1ecad90a","deploymentId":"696550c78205dc150ed83107","questionText":"What auth methods does MCP support?","status":"active","generatedBy":"contextual","path":"guides/using-the-mcp-server","createdAt":"2026-10-30T10:57:04.960Z","updatedAt":"2026-10-30T10:57:04.960Z","__v":0},{"_id":"6ae478009ceaf6dc1ecad90b","deploymentId":"696550c78205dc150ed83107","questionText":"Where is my MCP server address?","status":"active","generatedBy":"contextual","path":"guides/using-the-mcp-server","createdAt":"2026-10-30T10:57:04.960Z","updatedAt":"2026-10-30T10:57:04.960Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T10:57:01.197Z","originalFileLocation":"guides/using-the-mcp-server.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Reactive Resume\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Using the MCP server - Reactive Resume\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Reactive Resume\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rxresu.me/guides/using-the-mcp-server\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rxresu.me/opengraph/banner.jpg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Using the MCP server - Reactive Resume\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rxresu.me/opengraph/banner.jpg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/reactiveresume/m9TtW-C9R_eefHpI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Reactive Resume\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#166534\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rxresu.me/guides/using-the-mcp-server\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/using-the-mcp-server.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rxresu.me/#organization\",\"name\":\"Reactive Resume\",\"url\":\"https://docs.rxresu.me\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/reactiveresume/lsEa0V8tmq-7Vofb/logo/light.svg?fit=max\u0026auto=format\u0026n=lsEa0V8tmq-7Vofb\u0026q=85\u0026s=21a2f3c9b27509effa871b216e67c0ce\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rxresu.me#website\",\"name\":\"Reactive Resume\",\"url\":\"https://docs.rxresu.me\",\"publisher\":{\"@id\":\"https://docs.rxresu.me/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rxresu.me/guides/using-the-mcp-server#webpage\",\"url\":\"https://docs.rxresu.me/guides/using-the-mcp-server\",\"name\":\"Using the MCP server\",\"description\":\"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\",\"dateModified\":\"2026-10-30T10:57:01.197Z\",\"isPartOf\":{\"@id\":\"https://docs.rxresu.me#website\"},\"breadcrumb\":{\"@id\":\"https://docs.rxresu.me/guides/using-the-mcp-server#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.rxresu.me/guides/using-the-mcp-server#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.rxresu.me/guides/using-the-api\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using the MCP server\",\"item\":\"https://docs.rxresu.me/guides/using-the-mcp-server\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.rxresu.me/guides/using-the-mcp-server#article\",\"headline\":\"Using the MCP server\",\"name\":\"Using the MCP server\",\"description\":\"Connect Claude, Cursor, Codex or any MCP client to Reactive Resume with OAuth or an API key, and see every tool, prompt and resource it offers.\",\"url\":\"https://docs.rxresu.me/guides/using-the-mcp-server\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rxresu.me/guides/using-the-mcp-server#webpage\"},\"image\":\"https://rxresu.me/opengraph/banner.jpg\",\"dateModified\":\"2026-10-30T10:57:01.197Z\",\"publisher\":{\"@id\":\"https://docs.rxresu.me/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rxresu.me#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Reactive Resume\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Reactive Resume","nav":{"global":{"anchors":[{"anchor":"Reactive Resume","icon":"link","href":"https://rxresu.me"},{"anchor":"Source Code","icon":"github","href":"https://github.com/reactive-resume/reactive-resume"}]},"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","href":"/getting-started"},{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"Video Guides","icon":"circle-play","href":"/guides/video-guides"},{"title":"What's new in v6","href":"/guides/whats-new-in-v6"},{"title":"Using the command bar","href":"/guides/using-the-command-bar"},{"title":"Keyboard shortcuts","href":"/guides/keyboard-shortcuts"},{"title":"Checking service status","href":"/guides/checking-service-status"},{"title":"Accessing the previous version","href":"/guides/accessing-the-previous-version"}]},{"group":"Account","pages":[{"title":"Creating an account","href":"/guides/creating-an-account"},{"title":"Signing in","href":"/guides/signing-in"},{"title":"Updating your profile","href":"/guides/updating-your-profile"},{"title":"Changing appearance and language","href":"/guides/changing-appearance-and-language"},{"title":"Linking social accounts","href":"/guides/linking-social-accounts"},{"title":"Setting up two-step verification","href":"/guides/setting-up-two-factor-authentication"},{"title":"Setting up passkeys","href":"/guides/setting-up-passkeys"},{"title":"Exporting your data","href":"/guides/exporting-your-data"},{"title":"Deleting your account","href":"/guides/deleting-your-account"}]},{"group":"Documents","pages":[{"title":"Creating your first resume","href":"/guides/creating-your-first-resume"},{"title":"Managing your documents","href":"/guides/managing-documents"},{"title":"Organizing documents with tags","href":"/guides/organizing-with-tags"},{"title":"Using the Trash","href":"/guides/using-the-trash"},{"title":"Importing a resume","href":"/guides/importing-resumes"}]},{"group":"Resume Editor","pages":[{"title":"Getting to know the resume editor","href":"/guides/editor-overview"},{"title":"Filling in your details","href":"/guides/filling-in-your-details"},{"title":"Formatting text","href":"/guides/formatting-text"},{"title":"Managing sections","href":"/guides/managing-sections"},{"title":"Editing entries","href":"/guides/editing-entries"},{"title":"Entering dates","href":"/guides/entering-dates"},{"title":"Undoing changes and version history","href":"/guides/undoing-changes-and-version-history"},{"title":"Using private notes","href":"/guides/using-private-notes"},{"title":"Editing on a phone or tablet","href":"/guides/editing-on-mobile"}]},{"group":"Design","pages":[{"title":"Choosing a template","href":"/guides/choosing-a-template"},{"title":"Changing how entries look","href":"/guides/changing-how-entries-look"},{"title":"Customizing typography","href":"/guides/customizing-typography"},{"title":"Choosing colors","href":"/guides/choosing-colors"},{"title":"Choosing paper size, margins and language","href":"/guides/selecting-page-format"},{"title":"Arranging the layout","href":"/guides/arranging-the-layout"},{"title":"Fitting content on a page","href":"/guides/fitting-content-on-a-page"},{"title":"Applying custom styles","href":"/applying-custom-styles"}]},{"group":"Checking Your Resume","pages":[{"title":"Checking your resume before you apply","href":"/guides/checking-your-resume"},{"title":"Checking any resume PDF with the ATS checker","href":"/guides/using-the-ats-checker"}]},{"group":"Cover Letters","pages":[{"title":"Writing a cover letter","href":"/guides/writing-a-cover-letter"}]},{"group":"Sharing and Exporting","pages":[{"title":"Sharing your resume as a web page","href":"/guides/sharing-your-resume-publicly"},{"title":"Downloading your resume","href":"/guides/exporting-your-resume"},{"title":"Exporting a resume to Markdown","href":"/guides/exporting-resume-to-markdown"}]},{"group":"AI Assistant","pages":[{"title":"Connecting an AI provider","href":"/guides/using-ai"},{"title":"Using the assistant","href":"/guides/using-the-assistant"},{"title":"Assistant tools","href":"/guides/ai-agent-tools"}]},{"group":"Career and Application Workspaces","pages":[{"title":"Your career, in one place","href":"/guides/career-overview"},{"title":"Prepare your first application","href":"/guides/first-career-application"},{"title":"Tell your story once","href":"/guides/building-career-knowledge"},{"title":"Apply when your experience is different","href":"/guides/checking-job-fit"},{"title":"Answer another application form","href":"/guides/writing-application-answers"},{"title":"Get ready for interview day","href":"/guides/preparing-for-interview-day"},{"title":"Find roles while you are busy","href":"/guides/finding-roles-automatically"},{"title":"Reply to a recruiter","href":"/guides/replying-to-recruiters"},{"title":"Choose between two offers","href":"/guides/comparing-job-offers"},{"title":"Career and workspace controls","href":"/guides/career-workspace-reference"}]},{"group":"Application Tracker","pages":[{"title":"Tracking job applications","href":"/guides/tracking-job-applications"},{"title":"Adding an application","href":"/guides/adding-an-application"},{"title":"Managing an application","href":"/guides/managing-an-application"},{"title":"Customizing application stages","href":"/guides/customizing-application-stages"},{"title":"Scheduling interviews","href":"/guides/scheduling-interviews"},{"title":"Tailoring a resume for a job","href":"/guides/tailoring-a-resume-for-a-job"},{"title":"Viewing application insights","href":"/guides/viewing-application-insights"},{"title":"Importing applications from CSV","href":"/guides/importing-applications-from-csv"}]},{"group":"Integrations","pages":[{"title":"Using the API","href":"/guides/using-the-api"},{"title":"Using the patch API","href":"/guides/using-the-patch-api"},{"title":"JSON resume schema","description":"The Reactive Resume JSON Schema published at /schema.json: what it covers, how resume data is structured, and how to validate files against it.","href":"/guides/json-resume-schema"},{"title":"Using the MCP server","href":"/guides/using-the-mcp-server"},{"title":"Using WebMCP","description":"Let the AI agent in your browser read, check and edit the resume or cover letter open in Reactive Resume, through the tools the page offers with WebMCP.","href":"/guides/using-webmcp"},{"title":"Managing applications with MCP","href":"/guides/managing-applications-with-mcp"},{"title":"Using agent skills","href":"/guides/using-agent-skills"},{"title":"Large RPC requests","href":"/guides/large-rpc-requests"}]},{"group":"Use Cases","pages":[{"title":"Free resume builder","href":"/use-cases/free-resume-builder"},{"title":"Open-source resume builder","href":"/use-cases/open-source-resume-builder"},{"title":"Privacy-focused resume builder","href":"/use-cases/privacy-focused-resume-builder"},{"title":"Self-hosted resume builder","href":"/use-cases/self-hosted-resume-builder"},{"title":"API and MCP resume automation","href":"/use-cases/api-mcp-resume-automation"},{"title":"Export and share resumes","href":"/use-cases/export-and-share-resumes"},{"title":"AI resume builder","href":"/use-cases/ai-resume-builder"}]},{"group":"Comparisons","pages":[{"title":"Reactive Resume vs Canva","href":"/comparisons/reactive-resume-vs-canva"},{"title":"Reactive Resume vs Adobe Express","href":"/comparisons/reactive-resume-vs-adobe-express"},{"title":"Reactive Resume vs Overleaf","href":"/comparisons/reactive-resume-vs-overleaf"},{"title":"Reactive Resume vs Resume.com","href":"/comparisons/reactive-resume-vs-resume-com"},{"title":"Reactive Resume vs MyPerfectResume","href":"/comparisons/reactive-resume-vs-myperfectresume"},{"title":"Reactive Resume vs Resume-Now","href":"/comparisons/reactive-resume-vs-resume-now"},{"title":"Reactive Resume vs Resume.io","href":"/comparisons/reactive-resume-vs-resume-io"},{"title":"Reactive Resume vs Zety","href":"/comparisons/reactive-resume-vs-zety"},{"title":"Reactive Resume vs Kickresume","href":"/comparisons/reactive-resume-vs-kickresume"},{"title":"Reactive Resume vs ResumeGemini","href":"/comparisons/reactive-resume-vs-resumegemini"},{"title":"Reactive Resume vs Jobscan","href":"/comparisons/reactive-resume-vs-jobscan"},{"title":"Reactive Resume vs Resumod","href":"/comparisons/reactive-resume-vs-resumod"},{"title":"Reactive Resume vs Rezi","href":"/comparisons/reactive-resume-vs-rezi"},{"title":"Reactive Resume vs CareerCircle","href":"/comparisons/reactive-resume-vs-careercircle"},{"title":"Reactive Resume vs Novorésumé","href":"/comparisons/reactive-resume-vs-novoresume"},{"title":"Reactive Resume vs LiveCareer","href":"/comparisons/reactive-resume-vs-livecareer"},{"title":"Reactive Resume vs Freesumes","href":"/comparisons/reactive-resume-vs-freesumes"}]},{"group":"Self-Hosting","pages":[{"title":"Self-hosting with Docker","href":"/self-hosting/docker"},{"title":"Self-hosting with Kubernetes","href":"/self-hosting/kubernetes"},{"title":"Self-hosting on Vercel","href":"/self-hosting/vercel"},{"title":"Self-hosting on Hostinger","href":"/self-hosting/hostinger"},{"title":"Self-hosting on Cloudflare","href":"/self-hosting/cloudflare"},{"title":"Self-hosting on your NAS","href":"/self-hosting/nas"}]},{"group":"Server Configuration","pages":[{"title":"Environment variables","href":"/self-hosting/environment-variables"},{"title":"Sharing domains","href":"/self-hosting/sharing-domains"},{"title":"Mirror Computer Modern fonts","href":"/self-hosting/fonts"},{"title":"Deployment examples","href":"/self-hosting/examples"},{"title":"Job search and AI","href":"/self-hosting/job-search-and-ai"},{"title":"Single sign-on (SSO)","href":"/self-hosting/sso"}]},{"group":"Upgrade Guides","pages":[{"title":"Migrating from v5","href":"/self-hosting/upgrading-to-v6"},{"title":"Migrating from v4","href":"/self-hosting/migration"}]},{"group":"Contributing","pages":[{"title":"Development setup","href":"/contributing/development"},{"title":"Project architecture","href":"/contributing/architecture"},{"title":"Web access adapters","href":"/contributing/web-access"},{"title":"Career platform rollout","href":"/contributing/career-platform"},{"title":"Contributing translations","href":"/contributing/translations"},{"title":"Deployment checks","href":"/contributing/deployment-checks"}]},{"group":"Community","pages":[{"title":"Sponsors","href":"/community/sponsors"},{"title":"Spotlight","href":"/community/spotlight"}]},{"group":"Legal","pages":[{"title":"License","href":"/legal/license"},{"title":"Privacy Policy","href":"/legal/privacy-policy"},{"title":"Terms of Service","href":"/legal/terms-of-service"}]}]},{"tab":"Changelog","icon":"clock","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/system/get-application-health-and-version"}]}]},"title":"Using the MCP server - Reactive Resume","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-CIbhtp2j.js","DynamicMarkdown-CtpgKJwj.js","zoom-image-lightbox-CVZVK4hN.js","lightbox-handle-r17bVUz3.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}