feat(mcp): add MCP-027, MCP-028, MCP-029 TypeScript and PHP parity rules - #100
feat(mcp): add MCP-027, MCP-028, MCP-029 TypeScript and PHP parity rules#100Paramjeet-singh-neu wants to merge 1 commit into
Conversation
Close the remaining MCP language gaps: TypeScript mutating tools without an idempotency key, TypeScript ambiguous names, and PHP mutating tools without an idempotency key. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Thanks @Paramjeet-singh-neu, this is a well-researched pack. MCP-029 is a faithful PHP analog of MCP-007 (same prefix list, same negated One coordination note before this can land: these IDs are also claimed by other open PRs. MCP-027 and MCP-028 appear in trustabl/trustabl#168 and #91, and MCP-029 appears in trustabl/trustabl#124, trustabl/trustabl#172, #80, and #94. Whichever lands first keeps the numbers and the others will need to renumber and rebase, so expect a possible renumber here. Separately, each shipped rule needs a rationale doc in trustabl-rulebook; I saw your note that one is opened on the same branch, and we can handle or pair on that side. |
Summary
name_has_prefixwithout a trailing_+ negatedparam_name_matchesoninputSchema), matching CSDK-016 / LC-016 / MCP-007.name_inonregisterTool/tool), matching MCP-003 / MCP-016 / MCP-018 / MCP-020 / MCP-022. TypeScript was the only MCP language surface with a description rule (MCP-011) but no ambiguous-name rule.name_has_prefixwith_+ negatedparam_name_matcheson the#[McpTool]signature), matching MCP-007.IDs MCP-023..026 were already claimed in open PRs (#80 PHP untyped, #82 stdout, #85 TS timeout, #88 description quality), so this pack starts at 027. Original Track A items that are already filed (TS HTTP timeout, PHP untyped params) are not re-filed here.
No new predicates and no
schema_versionbump — both matches are already used by other packs. Discovery already captures TSParamNamesfrom ZodinputSchemaand PHPParamNamesfrom method signatures.Paired PRs (same branch name
feat/mcp-ts-php-parity):Test plan
trustabl rules validate .on this packgo test ./internal/rules/ -run TestPolicyRules(fire + silent cases for all three IDs)Made with Cursor