Skip to content
This repository was archived by the owner on Aug 3, 2026. It is now read-only.

docs(mcp): audit mcp-* tool docs against current implementation - #421

Merged
ankitk-me merged 3 commits into
support/2.xfrom
claude/mcp-tools-audit-support2x
Aug 3, 2026
Merged

docs(mcp): audit mcp-* tool docs against current implementation#421
ankitk-me merged 3 commits into
support/2.xfrom
claude/mcp-tools-audit-support2x

Conversation

@jfallows

@jfallows jfallows commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #419: a systematic audit of the mcp-* binding reference docs (as they'll stand once #419 merges) against the actual current zilla implementation on its develop branch, focused on the tools sections for each binding that has tools. This branch was based on #419's tip and has since been rebased onto support/2.x post-merge, so its diff is scoped to audit fixes only.

Every finding below was verified directly against origin/develop source in the zilla repo (OpenAPI spec JSON, config classes, the composite generator, K3PO specs) before being fixed — not taken on faith from an initial pass.

Fixes

  • mcp-kafka: binding-mcp-kafka renamed its tool constants (produceproduce_message, consumeconsume_messages) after these docs were written. Fixed in tools.md/routes.md/options.md/client.yaml. Every other mcp-kafka tool name already matched.
  • mcp-openapi: fixed a broken cross-link to mcp-kafka-connect/mcp-schema-registry in the x-zilla-mcp callout — @include'd partials resolve relative links from the partial file's own path (mcp-openapi/.partials/), so reaching a sibling binding directory needs two ../, not one. This was failing the linkChecker CI job.
  • mcp-openapi: resources.description has no fallback to the operation's native description/operation id (unlike tools.description) — corrected the doc, which claimed a fallback chain McpOpenapiCompositeGenerator doesn't implement.
  • mcp-openapi: removed when[].capability from routes.md — no such field exists on McpOpenapiConditionConfig, and the JSON schema patch would reject it outright (additionalProperties: false).
  • mcp-http: documented tools.title and tools.annotations (with its 4 hint fields) — both exist and are fully wired in McpHttpToolConfig/McpHttpOptionsConfigAdapter but were never written up.
  • mcp-kafka-connect / mcp-schema-registry: corrected required/optional status for every request-body-derived tool argument (7 fields across 6 tools). Neither bundled OpenAPI spec declares a JSON-Schema required array on any request body, and McpOpenapiCompositeGenerator only required-flags a body property when one exists — so these arguments are actually optional in the generated tool, despite being documented as required.
  • mcp (base): eager.policy's none/all semantics were exactly swapped in the docs. none (the default) disables cache partitioning entirely, so every tool stays eager; all marks every tool cold. Confirmed against McpProxyCache.eager()/eagerConfigured() and the binding's own K3PO specs (cache.serve.tools.list.eager.{none,all,explicit}).

Verification

  • pnpm lint — zero new violations.
  • pnpm link-checker (full VuePress build + lychee-equivalent local check) — 0 errors, confirming the mcp-openapi link fix.

Known pre-existing CI gap (not fixed here, out of scope)

schemaChecker fails on this branch, but the drift it reports spans the entire binding catalog — amqp, asyncapi, kafka, kafka-proxy, mqtt, openapi, several vaults/guards, and mcp all show the same "missing prompts[].name-style fields entirely" pattern. .check-schema/zilla-schema.json is a point-in-time snapshot (per this repo's own CLAUDE.md, it needs periodic regeneration from a live Docker container) and is stale well beyond anything this PR touches. Fixing it would mean regenerating that snapshot against a live Zilla build and reconciling the whole reference tree — a separate, much larger effort, not a side effect of an mcp tools audit. Confirmed this isn't something introduced by this diff: the same failure mode reproduces locally with pnpm check-schema on this branch.

Test plan

  • pnpm lint
  • pnpm link-checker (local)
  • pnpm check-schema — fails on pre-existing, repo-wide schema drift unrelated to this PR (see above)
  • Visual check via pnpm dev (not run in this environment)

@jfallows
jfallows marked this pull request as ready for review August 3, 2026 17:23
claude added 3 commits August 3, 2026 17:28
…onsume_messages

binding-mcp-kafka's TOOL_PRODUCE/TOOL_CONSUME constants were renamed to
produce_message/consume_messages on develop after these docs were
written. Verified against origin/develop's McpKafkaProxyFactory.java:
all other mcp-kafka tool names already match the implementation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ikToCpeJTceYRhdyZNGRw
…entation

Systematic audit of every mcp-* binding's tools documentation against
zilla's current develop implementation, beyond the produce/consume
rename already fixed:

- mcp-openapi: fix the cross-link to mcp-kafka-connect/mcp-schema-registry
  in the x-zilla-mcp callout — @include'd partials resolve relative links
  from the partial file's own path (mcp-openapi/.partials/), so reaching a
  sibling binding directory needs two levels up, not one. This was
  breaking the linkChecker CI job.
- mcp-openapi: resources.description has no fallback to the operation's
  native description/operation id (unlike tools.description) — the doc
  claimed one that McpOpenapiCompositeGenerator doesn't implement.
- mcp-openapi: remove when[].capability from routes.md — no such field
  exists on McpOpenapiConditionConfig, and the JSON schema patch would
  reject it outright.
- mcp-http: document tools.title and tools.annotations (with its 4 hint
  fields) — both exist and are fully wired in McpHttpToolConfig /
  McpHttpOptionsConfigAdapter but were never documented.
- mcp-kafka-connect / mcp-schema-registry: correct required/optional
  status for every request-body-derived tool argument. Neither bundled
  OpenAPI spec declares a JSON-Schema `required` array on any request
  body, and McpOpenapiCompositeGenerator only required-flags a body
  property when one exists, so these arguments are actually optional in
  the generated tool despite being documented as required.
- mcp (base): eager.policy's none/all semantics were exactly swapped —
  none (default) disables partitioning entirely so every tool stays
  eager, and all marks every tool cold, per McpProxyCache.eager()/
  eagerConfigured() and confirmed against the binding's own K3PO specs.

Verified every finding directly against origin/develop source in the
zilla repo before fixing (OpenAPI spec JSON, config classes, composite
generator, K3PO scripts) rather than trusting audit-agent output blind.
Re-ran pnpm lint and a full pnpm link-checker build locally: 0 errors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ikToCpeJTceYRhdyZNGRw
… commit

Same @include relative-link resolution rule as the mcp-openapi fix
earlier in this branch: a link from within mcp-http/.partials/options.md
needs two levels up to reach a sibling binding directory, not one.
Verified with a full local pnpm link-checker build: 0 errors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ikToCpeJTceYRhdyZNGRw
@jfallows
jfallows force-pushed the claude/mcp-tools-audit-support2x branch from 1c2e603 to d778132 Compare August 3, 2026 17:31
@jfallows
jfallows requested a review from ankitk-me August 3, 2026 17:32
@jfallows jfallows self-assigned this Aug 3, 2026
@ankitk-me
ankitk-me merged commit 98d1ede into support/2.x Aug 3, 2026
2 of 3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants