feat(mcp): complete the safety-hint trio on every manifest tool - #103
Merged
Conversation
OpenAI's ChatGPT/Codex plugin review requires explicit readOnlyHint, openWorldHint, and destructiveHint values on every tool. Widen ToolAnnotations from the one-hint union to a required trio and stamp every MCP_TOOLS entry with the completed values (matching the hosted app's TRI_HINTS completion map from senderkit-app#312, which this change makes redundant). The send tools are the only open-world ones; the CLI-bundled server inherits the trio via the shared manifest with no other behavior change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
OpenAI's ChatGPT/Codex plugin review requires explicit
readOnlyHint,openWorldHint, anddestructiveHintvalues on every MCP tool. The manifest previously declared exactly one hint per tool, and theToolAnnotationsunion forbade holding all three — so the hosted app papered over it with an app-sideTRI_HINTScompletion map (senderkit/senderkit-app#312).This moves the completed trio into the shared manifest, where both servers inherit it:
ToolAnnotationsis now an interface requiring all three hints, so the compiler enforces completeness on every future tool.MCP_TOOLSentry carries the exact values from the app'sTRI_HINTSmap:senderkit_send/senderkit_send_raware the onlyopenWorldHint: truetools (they deliver to recipients outside SenderKit); reads are{true, false, false};inbound_addresses_createstays an additive non-destructive write.tools/listvia the shared manifest — no other behavior change (descriptions, schemas, handlers untouched).Type note: this widens the previous one-hint union, so external code constructing a partial
ToolAnnotationsmust now state all three hints — hence the minor changeset for both packages.Follow-up: senderkit-app#312 will drop its
TRI_HINTSmerge and consume the trio straight from the manifest once this releases.🤖 Generated with Claude Code