You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Tool annotations: TFA and feedback tools carry none; invokeCapability write consent is a model-set parameter #562
I did a static review of the tool registrations at 76ff1891fc0c09e351efb71d051ab70abc9c44ec (v2.6.5). Two gaps mean MCP clients cannot use annotations to decide when to ask the user before a write or a cost-bearing call:
submitFeedback sends user-written text to BrowserStack.
With no readOnlyHint or destructiveHint, a client cannot tell them from reads. The read-only ones (getTfaTurnResult, listTestsInFailureTheme) would also benefit from readOnlyHint: true.
invokeCapability write consent is a model-set parameter.src/tools/capability-registry/register.ts:1132 annotates the tool readOnlyHint: false, destructiveHint: false. One tool serves every catalogue read and every catalogue write:
the bundled indexes hold 617 capabilities at this commit, 246 of them non-GET (deletes are refused, as the code comment says);
archive, close, merge and bulk edits go through it, and its description calls them writes.
Per-call consent is the optional user_permission: 'granted' argument, which the model fills in. A client therefore sees one non-destructive tool, and the only sign of user consent is a value the model can supply itself. Options:
split reads and writes into separate tools, with destructiveHint: true on the write tool for archive, close and merge;
confirm writes through MCP elicitation instead of a parameter;
at least document that clients should treat every invokeCapability call as a write and confirm it with the user.
The session-starting tools (runBrowserLiveSession, runAppLiveSession, runAppTestsOnBrowserStack, takeAppScreenshot, startAccessibilityScan) are annotated readOnlyHint: false, which is right.
Activity