July 2026
MCP Tool Annotations
Connect an MCP server to an agent and every tool arrives looking identical. list_contacts and delete_contact carry no risk signal at all, so approval policy collapses to all-or-nothing: force-approve every call and the guardrail is theatre, or block all writes and the agent can’t act. StackOne now emits standard MCP tool annotations on every tool we expose, derived from a new effects field on each action. Agents like Claude, ChatGPT Enterprise, Glean, and Copilot can use those hints to decide what runs unattended and what needs a human.
What’s new
effectson every action - each action declaresread,write,delete,search, orexecute.- Annotations derived automatically -
readOnlyHint,destructiveHint,openWorldHint, andtitleare computed fromeffectsat registration, so you don’t hand-author four flags per tool. - Catalog-wide coverage - backfilled across the connector catalog rather than shipped connector-by-connector, so approval policy works the same everywhere.
- Escape hatch for edge cases - set raw MCP hints directly on an action when a single effect can’t express it.
How the hints are derived
- actionId: list_tickets
effects:
- read # readOnlyHint: true
- actionId: create_ticket
effects:
- write # readOnlyHint: false, destructiveHint: false
- actionId: delete_issue
effects:
- delete # destructiveHint: true
- actionId: run_query
effects:
- execute
annotations:
idempotentHint: true # explicit override, merged last
readOnlyHint is true when every effect is read or search. destructiveHint is true when any effect is delete. openWorldHint is always true, since these actions call external provider APIs.
Authoring effects on your own connectors is covered in the connector YAML reference.
Things to know
idempotentHintis never inferred. HTTP method is a poor proxy once multi-step actions and dispatch are involved, so it can be set explicitly via the annotations override.- Annotations are hints, not enforcement. Per the MCP spec, clients use them for approval defaults and grouping, not as a security boundary.