feat(mcp): serve tools from the Ix CLI instead of shipping a server - #24
Open
KageBinary wants to merge 1 commit into
Open
feat(mcp): serve tools from the Ix CLI instead of shipping a server#24KageBinary wants to merge 1 commit into
KageBinary wants to merge 1 commit into
Conversation
This plugin installed `mcp/server.py`, a 468-line FastMCP server whose 23 tools each shelled out to the `ix` CLI. The CLI now serves the same 23 tools itself as `ix mcp`, so the copy here was a second implementation of one surface, maintained separately and drifting independently of the other five plugins' servers. `--mcp` now registers the CLI's server rather than copying one, delegating to `ix mcp install --host codex` so per-host detail lives in one place. That includes resolving the launcher on Windows: npm ships no `ix.exe`, only `ix.CMD`, and a host spawning the bare name through CreateProcess never consults PATHEXT — the fix this repo made in #13, now made once in the CLI for all seven hosts it knows about. Registration is gated on `ix >= 0.9.3`, the first release carrying the subcommand. Below that the installer says so and does nothing rather than writing a registration that cannot start. Tool parity is exact: the CLI serves the same 23 names this server did, so nothing an agent could call before is gone. Removed with the server: tests/test_mcp_cli_invocation.py, which drove all 23 tools against a stub `ix`, and the test-local.sh checks that imported the module to count its tools. Replaced by checks that the installer delegates and that the version floor is not below the subcommand.
KageBinary
force-pushed
the
feat/mcp-delegate-to-ix-cli
branch
from
August 12, 2026 00:28
90390f1 to
e060586
Compare
Collaborator
Author
|
The version gate is satisfied —
Nothing further is needed here — the floor this PR gates on now exists. Ready to merge; the repo ruleset means it needs someone with bypass rights. |
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.
Replaces this plugin's own MCP server with the one the Ix CLI now ships.
What changed
mcp/server.pywas a 468-line FastMCP server whose 23 tools each shelled out to theixCLI. The CLI serves the same 23 tools itself asix mcp, so this was a second implementation of one surface — maintained here, and drifting independently of the other five plugins' servers.--mcpnow registers the CLI's server instead of copying one, delegating toix mcp install --host codex.Tool parity is exact.
ix mcpserves the same 23 names this server did, verified by diffing the two surfaces. Nothing an agent could call before is gone.Windows
Registration goes through
ix mcp installrather than a hand-builtcodex mcp add, so the launcher is resolved once in the CLI. npm ships noix.exe— onlyix.CMD— and a host spawning the bare name through CreateProcess never consults PATHEXT. That is the failure #13 fixed here; the CLI now makes the same fix once for all seven hosts it knows about.Version floor
Gated on
ix >= 0.9.3, the first release carryingix mcp. Below that the installer says so and does nothing, rather than writing a registration that cannot start.This PR cannot land before that release exists. It is opened now so the migration is reviewable, not because it is ready to merge.
Tests
Removed with the server:
tests/test_mcp_cli_invocation.py(431 lines, drove all 23 tools against a stubix)tests/test_llm_fastpath.pyandmcp/ix_llm.py— added by feat(mcp): use --format llm where the installed CLI supports it #23 after this branch was cut.ix_llm.pywas imported only byserver.py; the CLI does its own--format llmselection internally, so the fast-path is not lost, just no longer this repo's to gate.test-local.shchecks that imported the module to count its toolsReplaced by checks that the installer copies nothing and that the version floor is not below the subcommand.
bash test-local.shpasses, and CI is green on ubuntu and windows.Not in scope
Agents, hooks and skills stay exactly as they are. MCP standardizes tools, not hooks or skills, so they cannot move — see
docs/mcp-plugin-consolidation.mdin the Ix repo for the full matrix.