Every tool in the catalog must declare readOnlyHint and destructiveHint in its annotations block. Right now several write tools (add-issue-note, analyze-issue-with-seer, create-dsn, create-project, create-team) have no annotations at all, while others declare only one of the two hints. This creates ambiguity for any routing logic, client-side confirmation gates, or server-side filters that rely on these values.
Scope
- Audit all tools in
packages/mcp-core/src/tools/catalog/ and catalog-runtime/ for missing or partial annotations blocks.
- Add
readOnlyHint and destructiveHint to every tool that lacks them.
- Add a deterministic test or CI lint rule that fails if any registered tool is missing either hint — so gaps can't be reintroduced silently. Something like iterating
allTools and asserting both fields are explicitly true or false, not undefined.
Known gaps (as of reviewed commit 3705c15)
add-issue-note — no destructiveHint
analyze-issue-with-seer — no readOnlyHint or destructiveHint
create-dsn — no destructiveHint
create-project — no destructiveHint
create-team — no destructiveHint
update-dsn, update-issue, update-project — have destructiveHint: true but no explicit readOnlyHint: false
Related: sentry-geoffg/readOnlyHint-changes branch adds server-side filtering keyed on readOnlyHint; that filter is only as good as the annotations it reads.
--
View Junior Session in Sentry
Every tool in the catalog must declare
readOnlyHintanddestructiveHintin itsannotationsblock. Right now several write tools (add-issue-note,analyze-issue-with-seer,create-dsn,create-project,create-team) have no annotations at all, while others declare only one of the two hints. This creates ambiguity for any routing logic, client-side confirmation gates, or server-side filters that rely on these values.Scope
packages/mcp-core/src/tools/catalog/andcatalog-runtime/for missing or partialannotationsblocks.readOnlyHintanddestructiveHintto every tool that lacks them.allToolsand asserting both fields are explicitlytrueorfalse, notundefined.Known gaps (as of reviewed commit
3705c15)add-issue-note— nodestructiveHintanalyze-issue-with-seer— noreadOnlyHintordestructiveHintcreate-dsn— nodestructiveHintcreate-project— nodestructiveHintcreate-team— nodestructiveHintupdate-dsn,update-issue,update-project— havedestructiveHint: truebut no explicitreadOnlyHint: falseRelated:
sentry-geoffg/readOnlyHint-changesbranch adds server-side filtering keyed onreadOnlyHint; that filter is only as good as the annotations it reads.--
View Junior Session in Sentry