get2knowio / get2knowio/airframe
Kimi ↔ Claude mcp version conflict blocks co-installation
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
## Summary
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:
1. **Upstream Moonshot** publishes a `kimi-agent-sdk` / `kimi-cli` that widens the `fastmcp` (and therefore `mcp`) range to admit `mcp>=1.23`.
2. **Upstream `claude-agent-sdk`** relaxes its `mcp>=1.23` floor to overlap with `<1.17` (unlikely — it moves forward, not back).
3. **`fastmcp`** ships a release Kimi adopts that supports `mcp>=1.23`.
## Acceptance criteria
- [ ] A single environment can `uv sync` with **both** `kimi` 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.
- Related: #17 (wire Kimi `$web_search` native tool) — separate work, but both touch the Kimi adapter.
- 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.
Contributor guide
Assessment
This issue has not been assessed yet.