feat(mcp): add Takt MCP transport-allowlist adapter#2095
Merged
Conversation
Takt gained MCP support in v0.21.0 but rulesync had no TaktMcp adapter, so `--targets takt --features mcp` errored with "does not support the feature 'mcp'".
Takt has no project/global registry of MCP server definitions: the concrete mcp_servers map (command/args/env or type/url/headers) is declared per workflow step inside workflow YAML files. config.yaml exposes only the default-deny transport allowlist workflow_mcp_servers: { stdio, sse, http }, and its loader hard-rejects unknown top-level keys, so a server map cannot be written there.
TaktMcp therefore emits only that allowlist into the shared .takt/config.yaml (project) / ~/.takt/config.yaml (global), enabling exactly the transports the rulesync servers use (local/stdio->stdio, sse->sse, http/streamable-http/ws->http). The merge is in place (provider/provider_profiles and all other keys preserved); the file is never deleted. Per-server names/commands/env/URLs/headers are intentionally not written (not representable), and import yields an empty mcpServers map.
Registers takt in mcpProcessorToolTargetTuple and the McpProcessor factory (project + global), regenerates the supported-tools tables, syncs skill docs, documents the surface and lossiness in docs/tools/takt.md and docs/reference/file-formats.md, corrects the stale references/takt.md map, and adds unit + e2e coverage (generate, global, non-deletable check).
Refs #2068
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Address PR review (mid DRY): the identical parseTaktConfig YAML reader was duplicated in takt-mcp.ts and takt-permissions.ts. Extract it to src/features/shared/takt-config.ts (with tests) so future Takt features that read .takt/config.yaml reuse one implementation. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 30, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up for Takt MCP support (#2068). rulesync had no TaktMcp adapter, so
--targets takt --features mcperrored.Chosen surface
Takt has no project/global registry of MCP server definitions — the concrete
mcp_serversmap is declared per workflow step inside workflow YAML files. The only MCP knob.takt/config.yamlexposes is the default-deny transport allowlistworkflow_mcp_servers, and Takt hard-rejects unknown top-level config keys. So TaktMcp faithfully emits only theworkflow_mcp_serverstransport allowlist into the shared.takt/config.yaml(project) /~/.takt/config.yaml(global), read-modify-write preserving sibling keys (mirroring TaktPermissions), deriving permitted transports from the rulesync servers (stdio/sse/http). This opens the default-deny gate that permits workflow-defined servers.Documented lossiness
Per-server names/commands/env/URLs/headers are not representable in a shared config (per-step scoping only), so they are not written; import yields an empty mcpServers map. This is inherent to Takt design.
Changes
Verification
pnpm cicheck fully green: 297 test files, 6614 tests; e2e mcp 93/93.
References
Refs #2068