Five MCP-related upstream changes documented + one functional manifest restructure. Closes 8 cc-adoption issues (4 features × 2 dupe slugs each).
| Pair | Feature | CC | Category |
|---|---|---|---|
| #1637 + #1653 | workspace_reserved_mcp_name | 2.1.128 | breaking |
| #1640 + #1656 | mcp_shell_prefix_arg_corruption_fix | 2.1.128 | breaking |
| #1648 + #1667 | denied_mcp_wildcard_case_fix | 2.1.129 | breaking |
| #1662 | plugin_manifest_experimental_block | 2.1.129 | breaking |
| (no GH issue, gap=5) | mcp_tool_count_display | 2.1.128 | new_field |
{
"name": "ork",
"skills": "all",
"agents": "all",
"hooks": "all",
"monitors": "./monitors/monitors.json",
"userConfig": { ... }
}
{
"name": "ork",
"skills": "all",
"agents": "all",
"hooks": "all",
"experimental": {
"monitors": "./monitors/monitors.json"
},
"userConfig": { ... }
}
CC 2.1.129+ expects monitors and themes under experimental. Top-level still works but claude plugin validate warns. scripts/build-plugins.sh updated to emit the new shape; the built plugins/ork/.claude-plugin/plugin.json already verifies clean against claude plugin validate.
| Path | Change |
|---|---|
| manifests/ork.json | Move monitors under experimental |
| scripts/build-plugins.sh | Emit experimental.monitors (line 314 of jq codegen) |
| src/skills/configure/references/mcp-config.md | New section "CC 2.1.128/129 changes" — covers all 5 features |
| tests/security/test-mcp-deny-case.sh | New regression: documentation contract for case-insensitive deny rules |
| tests/security/run-security-tests.sh | Wire the new test into the suite |
| plugins/ork/... | (mirrored by build) — verifies new shape lands |
| Feature | What changes | Action |
|---|---|---|
workspace_reserved_mcp_name |
Reserved name; existing servers named workspace silently skipped |
Audit: confirmed no workspace server in our manifests; doc'd reserved-names rule |
mcp_shell_prefix_arg_corruption_fix |
CLAUDE_CODE_SHELL_PREFIX wrapping no longer corrupts MCP stdio argv |
Doc-only — note in mcp-config.md |
denied_mcp_wildcard_case_fix |
deniedMcpServers matches hostnames case-insensitively (RFC-correct) |
Doc + regression test asserting we don't recommend defensive case enumeration |
mcp_tool_count_display |
/mcp shows tool count and flags zero-tool servers |
Doc the new format; doctor checklist will use it for diagnostics |
plugin_manifest_experimental_block |
monitors + themes belong under experimental |
Manifest restructure + build script + doc for plugin authors |
npm run build — built plugin.json has the new experimental.monitors shapenpm run test:security — new test-mcp-deny-case.sh passes 2/2npm run test:skills — frontmatter + structure unchangednpm run test:manifests — manifest schema still valid (the experimental block is allowed)npm run typecheck — cleanGroup C next: security-adjacent fixes — subprocess OTel isolation, OAuth scope tightening, bash glob allow-rule fix. Then D (config/permission), then E (new distribution surfaces).