feat(mcp): add MCP-027, MCP-028 TypeScript description quality rules - #91
feat(mcp): add MCP-027, MCP-028 TypeScript description quality rules#91bradAGI wants to merge 1 commit into
Conversation
The TypeScript counterpart to MCP-025/026. MCP-011 only checks that a description exists, so a registration described "TODO: describe this tool." or "Gets data." passes today while publishing no selection signal to connecting clients. Same protocol-boundary argument as the Python pair — the consumer has no fallback context, the server's authors never observe the mis-selection, and the model chooses across every connected server from these strings alone — plus the TypeScript-specific point that the Zod input schema constrains the arguments once the model has chosen this tool, not whether choosing it was right.
|
Thanks @bradAGI, this is a clean pack change. Both The one blocker is not yours. MCP-027 and MCP-028 are also claimed by #100 (with trustabl/trustabl#135) for unrelated rules covering idempotency keys and ambiguous names. Whichever pair lands first keeps the numbers and the other renumbers and rebases, so I will sequence those rather than ask you to change anything yet. One thing to carry forward: |
The TypeScript counterpart to MCP-025/026 (#88). MCP-011 only checks that a description exists, so a registration described
"TODO: describe this tool."or"Gets data."passes today while publishing no selection signal to connecting clients.Carries the same protocol-boundary argument as the Python pair, which is what makes this more than a lint:
Plus the TypeScript-specific point in MCP-028: the Zod input schema doesn't close the gap. It constrains the arguments once the model has chosen this tool, not whether choosing it was right.
Verification — engine built at
main:Fire (one
server.tooldescribed"TODO: describe this tool.", one"Gets data."):MCP-027, MCP-028Silent (full description naming when to prefer the neighboring tool): no findings
MCP-028 pairs
description_length_lt: 40withhas_docstring: trueso it doesn't double-report against MCP-011 on an empty description, same as CSDK-018.No new predicates, so no
schema_versionbump.Merge note: this and #88 both append to
mcp/tool_definition.yaml, so whichever lands second will need a trivial rebase — the two rule blocks are independent and the resolution is "keep both." Ping me and I'll rebase, or take them in either order and I'll follow up. This is the only pair among my open PRs that touches the same file; the rest are all distinct files.