Skip to content

Commit bea8ff1

Browse files
authored
Fix MCP tool names for Claude Desktop incompatibility (#2885)
* fixes #2884, rename tool names for claude to work * update dependencies
1 parent 85e0b0a commit bea8ff1

10 files changed

Lines changed: 544 additions & 228 deletions

File tree

docs/guides/using-the-mcp-server.mdx

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -207,25 +207,29 @@ If you're running a self-hosted Reactive Resume instance, replace `https://rxres
207207

208208
## Available Tools
209209

210-
Tool names use a hierarchical `reactive_resume.*` prefix ([SEP-986](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) style) so they stay distinct when multiple MCP servers are enabled in the same client.
210+
Tool names use a `reactive_resume_` prefix so they stay distinct when multiple MCP servers are enabled in the same client.
211211

212212
| Tool | Description |
213213
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
214-
| `reactive_resume.list_resumes` | List all resumes with IDs, names, tags, and status. Supports filtering by tags and sorting by last updated, creation date, or name |
215-
| `reactive_resume.get_resume` | Get the full data of a specific resume by ID |
216-
| `reactive_resume.create_resume` | Create a new, empty resume with a name and slug. Optionally pre-fill with sample data |
217-
| `reactive_resume.duplicate_resume` | Create a copy of an existing resume with a new name and slug |
218-
| `reactive_resume.patch_resume` | Apply JSON Patch (RFC 6902) operations to modify a resume's data |
219-
| `reactive_resume.delete_resume` | Permanently delete a resume and all associated files. **Irreversible** |
220-
| `reactive_resume.lock_resume` | Lock a resume to prevent edits, patches, and deletion |
221-
| `reactive_resume.unlock_resume` | Unlock a previously locked resume to re-enable editing |
222-
| `reactive_resume.export_resume_pdf` | Generate a PDF from the resume and return a download URL |
223-
| `reactive_resume.get_resume_screenshot` | Get a visual preview of the resume's first page as a WebP image URL |
224-
| `reactive_resume.get_resume_statistics` | Get view and download statistics for a resume |
214+
| `reactive_resume_list_resumes` | List all resumes with IDs, names, tags, and status. Supports filtering by tags and sorting by last updated, creation date, or name |
215+
| `reactive_resume_list_resume_tags` | List every distinct tag in use across your resumes (sorted) |
216+
| `reactive_resume_get_resume` | Get the full data of a specific resume by ID |
217+
| `reactive_resume_get_resume_analysis` | Get the latest saved AI analysis for a resume (from the web app), if any |
218+
| `reactive_resume_create_resume` | Create a new, empty resume with a name and slug. Optionally pre-fill with sample data |
219+
| `reactive_resume_import_resume` | Create a resume from a full ResumeData JSON export (random name/slug). Large files may exceed client limits |
220+
| `reactive_resume_duplicate_resume` | Create a copy of an existing resume with a new name and slug |
221+
| `reactive_resume_patch_resume` | Apply JSON Patch (RFC 6902) operations to modify a resume's data |
222+
| `reactive_resume_update_resume` | Update metadata only: name, slug, tags, `isPublic`. Returns canonical share URL; passwords are not managed via MCP |
223+
| `reactive_resume_delete_resume` | Permanently delete a resume and all associated files. **Irreversible** |
224+
| `reactive_resume_lock_resume` | Lock a resume to prevent edits, patches, and deletion |
225+
| `reactive_resume_unlock_resume` | Unlock a previously locked resume to re-enable editing |
226+
| `reactive_resume_export_resume_pdf` | Generate a PDF from the resume and return a download URL |
227+
| `reactive_resume_get_resume_screenshot` | Get a visual preview of the resume's first page as a WebP image URL |
228+
| `reactive_resume_get_resume_statistics` | Get view and download statistics for a resume |
225229

226230
### Breaking change (tool names)
227231

228-
Older clients may refer to unprefixed names (`list_resumes`, `get_resume`, …). Those names are no longer used; update automations and saved prompts to the `reactive_resume.*` names above.
232+
Older clients may refer to unprefixed names (`list_resumes`, `get_resume`, …) or dot-separated names (`reactive_resume.list_resumes`, …). Those names are no longer used; update automations and saved prompts to the `reactive_resume_*` names above.
229233

230234
## Available Resources
231235

@@ -235,12 +239,12 @@ Resources follow MCP conventions: **static** items appear in `resources/list`; *
235239
| ------------------------------------- | --------------------------------------------------------------------------------------------- |
236240
| `resources/list` | Static resources only — currently **`resume://_meta/schema`** (ResumeData JSON Schema) |
237241
| `resources/templates/list` | **`resume://{id}`** — template for reading full resume JSON by ID (not enumerated per resume) |
238-
| `reactive_resume.list_resumes` (tool) | **Primary way to discover resume IDs** — resumes are not listed as separate MCP resources |
242+
| `reactive_resume_list_resumes` (tool) | **Primary way to discover resume IDs** — resumes are not listed as separate MCP resources |
239243

240244
| URI | Description |
241245
| ----------------------- | ------------------------------------------------------------------------ |
242246
| `resume://_meta/schema` | ResumeData JSON Schema — use for valid JSON Patch paths and value types |
243-
| `resume://{id}` | Full resume data as JSON — use an ID from `reactive_resume.list_resumes` |
247+
| `resume://{id}` | Full resume data as JSON — use an ID from `reactive_resume_list_resumes` |
244248

245249
### Breaking change (schema URI)
246250

@@ -275,7 +279,10 @@ Once your MCP client is connected, you can use natural language to interact with
275279
### Creating & Managing
276280

277281
- "Create a new resume called 'Frontend Engineer 2026'"
282+
- "Import this exported ResumeData JSON as a new resume"
283+
- "What tags do I use across my resumes?"
278284
- "Duplicate my 'Software Engineer' resume for a product manager role"
285+
- "Make my resume public and give me the share link"
279286
- "Lock my finalized resume so it can't be accidentally edited"
280287
- "Delete my old draft resume"
281288

@@ -306,8 +313,9 @@ Once your MCP client is connected, you can use natural language to interact with
306313
- "Tailor my resume for this job description: ..." (uses `tailor_resume`)
307314

308315
<Tip>
309-
The AI will use `reactive_resume.get_resume` to inspect your current resume before making changes with
310-
`reactive_resume.patch_resume`. This ensures the correct JSON paths are used.
316+
The AI will use `reactive_resume_get_resume` to inspect your current resume before making changes with
317+
`reactive_resume_patch_resume`. This ensures the correct JSON paths are used. Use `reactive_resume_update_resume` for
318+
name, slug, tags, and public visibility (not for section content).
311319
</Tip>
312320

313321
## Troubleshooting
@@ -317,7 +325,7 @@ Once your MCP client is connected, you can use natural language to interact with
317325
| "Unauthorized" with no login prompt | Your client may not support MCP OAuth discovery. Use API key mode (`x-api-key`) |
318326
| OAuth login opens but fails redirect/callback | Confirm your client's MCP OAuth callback settings and retry the connection |
319327
| "API error (401)" | Your API key is invalid or expired. Create a new one in **Settings → API Keys** |
320-
| "API error (404)" | The resume ID doesn't exist. Use `reactive_resume.list_resumes` to find valid IDs |
328+
| "API error (404)" | The resume ID doesn't exist. Use `reactive_resume_list_resumes` to find valid IDs |
321329
| "API error (403)" | The resume is locked. Unlock it in the Reactive Resume dashboard |
322330
| Connection refused | Check that the URL is correct and the instance is running |
323331
| "ReferenceError: File is not defined" when using `mcp-remote` | You're running Node.js 18. `mcp-remote` requires **Node.js 20 or later** — upgrade with `nvm use 20` or `nvm alias default 20` |

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,17 @@
5353
"@lingui/react": "^5.9.5",
5454
"@modelcontextprotocol/sdk": "^1.29.0",
5555
"@monaco-editor/react": "4.8.0-rc.3",
56-
"@orpc/client": "^1.13.13",
57-
"@orpc/json-schema": "^1.13.13",
58-
"@orpc/openapi": "^1.13.13",
59-
"@orpc/server": "^1.13.13",
60-
"@orpc/tanstack-query": "^1.13.13",
61-
"@orpc/zod": "^1.13.13",
56+
"@orpc/client": "^1.13.14",
57+
"@orpc/json-schema": "^1.13.14",
58+
"@orpc/openapi": "^1.13.14",
59+
"@orpc/server": "^1.13.14",
60+
"@orpc/tanstack-query": "^1.13.14",
61+
"@orpc/zod": "^1.13.14",
6262
"@phosphor-icons/react": "^2.1.10",
6363
"@phosphor-icons/web": "^2.1.2",
6464
"@sindresorhus/slugify": "^3.0.0",
6565
"@t3-oss/env-core": "^0.13.11",
66-
"@tanstack/react-query": "^5.96.2",
66+
"@tanstack/react-query": "^5.97.0",
6767
"@tanstack/react-router": "^1.168.10",
6868
"@tanstack/react-router-ssr-query": "^1.166.10",
6969
"@tanstack/react-start": "^1.167.16",
@@ -138,9 +138,9 @@
138138
"@types/pg": "^8.20.0",
139139
"@types/react": "^19.2.14",
140140
"@types/react-dom": "^19.2.3",
141-
"@typescript/native-preview": "7.0.0-dev.20260408.1",
141+
"@typescript/native-preview": "7.0.0-dev.20260409.1",
142142
"@vitejs/plugin-react": "^6.0.1",
143-
"@vitest/coverage-v8": "^4.1.3",
143+
"@vitest/coverage-v8": "^4.1.4",
144144
"babel-plugin-macros": "^3.1.0",
145145
"drizzle-kit": "1.0.0-beta.21",
146146
"happy-dom": "^20.8.9",

0 commit comments

Comments
 (0)