Repository navigation
Commit e8e82d1
fix(mcp): a write, pause or use tool with no action is an error, not a read
Every tool split from one resource shares that resource's handler, and the
handler fills in an omitted action with a read -- list or get. On a write,
pause or use tool, an omitted action therefore ran a sibling tool's read and
reported success:
hookdeck_projects_use {} returned the project list; switched nothing
gateway_connections_pause {} listed connections; paused nothing
An agent that forgot the argument was told the call worked. On projects_use
that means every later answer comes from the project it meant to leave.
rejectUnknownArgs already refused an action belonging to a sibling tool; it
never handled an omitted one. It now requires the action on every non-read
tool, with the actions that tool offers. The schema has always marked action
required; read tools keep their list/get default.
Nine tools gave the false success. A tenth, gateway_bulk_write, already
errored, but listed gateway_bulk_read's actions as its own; it now names only
create and cancel.
The test walks every registered tool with writes enabled rather than a list,
so a tool split in future is covered without anyone adding it. All ten fail
against v3.0.2. Verified on a built binary against a live project.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012XtSQ2kfpcRXXqweskgXkH1 parent 1b131fc commit e8e82d1
2 files changed
Lines changed: 90 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
631 | 631 | | |
632 | 632 | | |
633 | 633 | | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
634 | 649 | | |
635 | 650 | | |
636 | 651 | | |
| |||
0 commit comments