Repository navigation
feat(fetch): add tool annotations - #3580
nielskaspers wants to merge 7 commits into
Conversation
LLM clients (Claude Code, Augment.AI, etc.) intermittently send thoughtNumber, totalThoughts, and nextThoughtNeeded as strings instead of native JSON types. Using z.coerce gracefully handles both string and native inputs without breaking existing behavior. Fixes modelcontextprotocol#3428
olaservo
left a comment
There was a problem hiding this comment.
The fetch tool annotations are correct — especially openWorldHint: true, which is the key distinction since fetch makes outbound HTTP requests to arbitrary user-supplied URLs.
However, this PR also modifies src/time/src/mcp_server_time/server.py with time server annotations that were already merged via PR #3581. Please rebase and remove the time server changes so this PR is scoped to the fetch server only.
After rebase, the remaining fetch changes look good to approve.
Reviewed with the assistance of Claude Code (claude-opus-4-6).
…ocol#3515) fix(fetch): handle malformed input without crashing Changes `raise_exceptions=True` to `raise_exceptions=False` in the fetch server's `Server.run()` call, preventing the server from crashing on malformed JSON-RPC input. This aligns with the SDK's intended default behavior and is consistent with other reference servers. Fixes modelcontextprotocol#3359
…#3534) feat(sequential-thinking): add tool annotations Adds MCP ToolAnnotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to the sequential-thinking tool, bringing it in line with the annotation pattern established by the filesystem server. Fixes modelcontextprotocol#3403
…modelcontextprotocol#3574) (modelcontextprotocol#3581) feat(time): add tool annotations Adds MCP ToolAnnotations to both time server tools (get_current_time, convert_time). Both are read-only, non-destructive, idempotent, and closed-world. Fixes modelcontextprotocol#3574
…te_branch, git_log, and git_branch (modelcontextprotocol#3545) fix(git): add missing argument injection guards Extends existing startswith("-") input validation to git_show, git_create_branch, git_log, and git_branch, preventing user-supplied values from being interpreted as CLI flags by GitPython's subprocess calls to git.
feat(git): add tool annotations Adds MCP ToolAnnotations to all 12 git server tools, marking read-only operations (status, diff, log, show, branch) and distinguishing destructive (reset) from non-destructive write operations (add, commit, create_branch, checkout). Fixes modelcontextprotocol#3573
b6ca574 to
dd1e8a7
Compare
This comment was marked as abuse.
This comment was marked as abuse.
LuuOW
left a comment
There was a problem hiding this comment.
Technical audit: Verified MCP server implementation for consistency with current SDK patterns.
|
Thank you for this pull request. This repository now accepts issues, not pull requests, from anyone but its maintainers: design and implementation are done by the maintainers through a prompt-driven workflow, so outside PRs are closed rather than reviewed. The policy is in This change is tracked in #3572, which links back to this PR and credits you. It is being made in #5112 ( |
Summary
Adds MCP ToolAnnotations to the fetch tool, marking it as read-only, non-destructive, idempotent, and open-world — matching the annotation coverage already present in server-filesystem.
Issue
Fixes #3572
Changes
ToolAnnotationsfrommcp.typesannotationsparameter to theTool()declaration withreadOnlyHint=True,destructiveHint=False,idempotentHint=True,openWorldHint=TrueTesting
openWorldHint=Trueannotation is particularly important as the fetch tool makes outbound HTTP requests to arbitrary URLs