You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The kimi and claude extras cannot be installed in the same environment because their transitive mcp pins are mutually exclusive. Users who want both Kimi and Claude must split into separate virtualenvs.
The conflict chain
kimi extra → kimi-agent-sdk → kimi-cli 1.12.0 → fastmcp 2.12.5 → mcp<1.17
claude extra → claude-agent-sdk 0.2.x → mcp>=1.23
mcp<1.17 and mcp>=1.23 have no overlapping solution, so a single resolution can't satisfy both.
Current handling (workaround, not a fix)
[tool.uv].conflicts in pyproject.toml declares kimi as mutually exclusive with claude, all, and the test/dev groups, so uv sync --all-extras succeeds by picking one side and the lockfile splits the environments.
kimi-agent-sdk is deliberately excluded from the [all] extra.
CI installs with --no-extra kimi and exercises the Kimi adapter against a mocked SDK surface, so unit coverage isn't blocked.
Consequence: KimiRuntime is auto-hidden from list_providers() in [all]-only environments (its REQUIRES_PACKAGE check finds kimi_agent_sdk missing), and anyone wanting Kimi + Claude together needs two venvs.
What would resolve it
Any one of:
Upstream Moonshot publishes a kimi-agent-sdk / kimi-cli that widens the fastmcp (and therefore mcp) range to admit mcp>=1.23.
Upstream claude-agent-sdk relaxes its mcp>=1.23 floor to overlap with <1.17 (unlikely — it moves forward, not back).
fastmcp ships a release Kimi adopts that supports mcp>=1.23.
Acceptance criteria
A single environment can uv sync with bothkimi and claude extras (no conflict declaration needed).
Remove the kimi↔claude/all/test/dev entries from [tool.uv].conflicts once the upstream pins overlap.
Add kimi-agent-sdk back into the [all] extra.
list_providers() surfaces kimi in an [all] install.
An integration smoke (e.g. examples/smoke_providers.py) can exercise Kimi alongside Claude in one venv.
Notes
This is upstream-gated — nothing in airframe can fix the version math today; the task is to monitor the upstream pins and unwind the workarounds when they overlap.
Context for the floor alignment that motivated filing this: the repo just raised its own minimum to Python 3.12 (matching Kimi's), which removed the Python-version half of the Kimi-install friction. The mcp conflict tracked here is the remaining, independent half.
Summary
The
kimiandclaudeextras cannot be installed in the same environment because their transitivemcppins are mutually exclusive. Users who want both Kimi and Claude must split into separate virtualenvs.The conflict chain
kimiextra →kimi-agent-sdk→kimi-cli1.12.0 →fastmcp2.12.5 →mcp<1.17claudeextra →claude-agent-sdk0.2.x →mcp>=1.23mcp<1.17andmcp>=1.23have no overlapping solution, so a single resolution can't satisfy both.Current handling (workaround, not a fix)
[tool.uv].conflictsinpyproject.tomldeclareskimias mutually exclusive withclaude,all, and thetest/devgroups, souv sync --all-extrassucceeds by picking one side and the lockfile splits the environments.kimi-agent-sdkis deliberately excluded from the[all]extra.--no-extra kimiand exercises the Kimi adapter against a mocked SDK surface, so unit coverage isn't blocked.KimiRuntimeis auto-hidden fromlist_providers()in[all]-only environments (itsREQUIRES_PACKAGEcheck findskimi_agent_sdkmissing), and anyone wanting Kimi + Claude together needs two venvs.What would resolve it
Any one of:
kimi-agent-sdk/kimi-clithat widens thefastmcp(and thereforemcp) range to admitmcp>=1.23.claude-agent-sdkrelaxes itsmcp>=1.23floor to overlap with<1.17(unlikely — it moves forward, not back).fastmcpships a release Kimi adopts that supportsmcp>=1.23.Acceptance criteria
uv syncwith bothkimiandclaudeextras (no conflict declaration needed).kimi↔claude/all/test/deventries from[tool.uv].conflictsonce the upstream pins overlap.kimi-agent-sdkback into the[all]extra.list_providers()surfaceskimiin an[all]install.examples/smoke_providers.py) can exercise Kimi alongside Claude in one venv.Notes
$web_searchnative tool) — separate work, but both touch the Kimi adapter.mcpconflict tracked here is the remaining, independent half.