feat(mcp): add Kan registry validation slice #705
No reviewers
Labels
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/platform!705
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "codex/kan-mcp-registry-slice-a"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Canary status: missing — fire canary 3+3 manually before merge
Summary
Adds Slice A for the Kan MCP registry: a schema-backed, read-only registry contract plus
platformctl mcp-registry validate.This intentionally stops before any Infisical write, OpenClaw restart, or runtime MCP activation.
What changed
schema/mcp-registry.schema.jsonand schema docs.policies/mcp-registry/kan.yamlfor the Kan MCP registry entry.platformctl mcp-registry validatewith JSON output and schema validation.spec.dependencies.mcp_servers.openclaw-gatewaydependency on MCP registry idkan.Canary Context Pack
Product story
OpenClaw needs a safe, reviewable way to know which MCP servers are allowed before any runtime wiring happens. This gives Kan MCP a declarative registry entry and a validation command without changing runtime state.
What changed
A new policy schema, one Kan policy file, CLI validation, tests, and a module dependency reference.
Why it changed
This is the first safe Kan MCP slice before Infisical/runtime integration.
Files touched
control-plane/platformctl/cli.pycontrol-plane/platformctl/mcp_registry.pycontrol-plane/platformctl/tests/test_mcp_registry.pycontrol-plane/platformctl/tests/test_smoke.pymodules/openclaw-gateway/module.yamlpolicies/mcp-registry/kan.yamlschema/mcp-registry.schema.jsonschema/mcp-registry.schema.mdschema/module.schema.jsonschema/module.schema.mdRelevant context
kan-mcpmodule already describes the runtime bridge.mcp_servershad to be added explicitly.Runtime evidence
Not applicable. This PR does not restart services, write Infisical, or activate OpenClaw MCP configuration.
Known constraints
Explicit out-of-scope
Requested decision
Approve this as the declarative registry/validation foundation.
Merge blockers
Spec sources read
modules/kan-mcp/module.yaml— confirm existing runtime bridge module.modules/openclaw-gateway/module.yaml— add consumer dependency reference.schema/module.schema.json/schema/module.schema.md— extend strict dependency schema safely.control-plane/platformctl/cli.py— follow platformctl command conventions.control-plane/platformctl/tests/test_validate.py/test_smoke.py— follow test style.Validation
git diff --check— passed.UV_CACHE_DIR=/tmp/uv-cache PYTHONPATH=control-plane uv run --project control-plane pytest platformctl/tests/test_mcp_registry.py platformctl/tests/test_validate.py platformctl/tests/test_smoke.py— 19 passed.UV_CACHE_DIR=/tmp/uv-cache PYTHONPATH=control-plane uv run --project control-plane python -m platformctl.cli mcp-registry validate --json— passed, 1 valid registry file.UV_CACHE_DIR=/tmp/uv-cache PYTHONPATH=control-plane uv run --project control-plane python -m platformctl.cli validate all --json— passed, exitCode 0.Refs #131. Does not close #131; this is Slice A only.
Patchwarden PR sanity
advisory_findings70562c1f7528cdd9132b4997f85e39ca66312d52407missingDeterministic findings
infosensitive-path-touchedSensitive path touched —schema/mcp-registry.schema.jsonschema/mcp-registry.schema.jsoninfosensitive-path-touchedSensitive path touched —schema/mcp-registry.schema.mdschema/mcp-registry.schema.mdinfosensitive-path-touchedSensitive path touched —schema/module.schema.jsonschema/module.schema.jsoninfosensitive-path-touchedSensitive path touched —schema/module.schema.mdschema/module.schema.mdModel reviewers
global-glm/glm-5.1:cloudokOKglobal-deepseek/deepseek-v4-pro:cloudStatus:
okVerdict:
NOT_OKhighUndeclared dependencies: jsonschema and yamlcontrol-plane/platformctl/mcp_registry.py adds imports for jsonschema and yaml, but no corresponding dependency declaration (e.g., in pyproject.toml) is included in the diff.redteam/kimi-k2.6:cloudStatus:
okVerdict:
NOT_OKhighModule mcp_servers references are not validated against registry entriesschema/module.schema.json only validates mcp_servers items with a loose string pattern (^[a-z][a-z0-9-]*[a-z0-9]$); control-plane/platformctl/mcp_registry.py validates registry files in isolation with no cross-reference logic; modules/opencPolicy notes
PLATFORMCTL_PR_SANITY_REDTEAM_MODELis configured.