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
Commit 03c43b5
Browse filesBrowse the repository at this point in the historyBrowse files
Publish MCP ToolAnnotations on every tool + cut v0.6.7 (#221)
* Publish MCP ToolAnnotations on every tool, derived from the access gates
All 252 tools now carry readOnlyHint (185 read-only / 67 write-capable)
and openWorldHint on the wire. The hints are derived mechanically in
register_tools from the same READ/WRITE/DDL/SHELL/LISTEN capability
gates that already enforce access — a snapshot of registered names is
taken at the READ-gate boundary and _apply_tool_annotations stamps
every tool afterwards — so a tool moved between gates can never ship a
stale hint. openWorldHint is false everywhere except translate_nl_to_sql
(the one tool that calls an external LLM API). destructiveHint is left
unset for write-capable tools: the MCP default (true) is the cautious
reading.
Also adds wire-visible descriptions to all 7 prompt arguments across
the 3 MCP prompts (via Annotated[str, Field(description=...)] — the SDK
lifts them into PromptArgument.description).
New contract suite pins all of it, including the exhaustive
self-consistency check: the hinted read-only set must equal the tool
surface actually reachable in read-only access mode.
* Cut v0.6.7
Fold [Unreleased] into [0.6.7] - 2026-07-03 (tool annotations, prompt
argument descriptions, the mcpg --demo dataset, Python 3.14 runtime,
pydantic warning suppression, TestPyPI race fix — the last two were
merged without changelog entries, added here). Bump pyproject.toml,
mcpg.__version__, and uv.lock to 0.6.7; add docs/release-notes-0.6.7.md
and link it from the docs index.
* Address review: merge-don't-replace annotations, tighter tests, typo
- _apply_tool_annotations now merges instead of overwriting: explicitly
registered annotation fields always win; the derived readOnlyHint /
openWorldHint only fill fields still None (Gemini). No call site
passes annotations= today, but a future per-tool override must not be
silently clobbered. New contract test pins the preservation.
- Anchor spot-checks assert membership first, so a missing anchor tool
reads as a clear failure instead of a KeyError (Sourcery).
- Wire-level test also asserts openWorldHint propagation for
translate_nl_to_sql and a DB-only tool (Sourcery).
- Release-notes grammar fix: "warnings ... are suppressed" (Sourcery).
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments