Problem
Several small public-surface gaps make the server less ergonomic and less accurate for MCP clients.
Grouped here because each fix is small and independently testable.
Items
-
snapshot_pane should include important tmux state:
pane_pid
pane_dead
alternate_on
-
WindowInfo should include active_pane_id, matching the convenience already present on SessionInfo.
-
The package advertises typed distribution but does not ship py.typed.
-
README's tool table is stale and misses current tools such as:
list_servers
wait_for_channel
signal_channel
- buffer tools
- hook inspection tools
-
Completion docs describe inherited completion behavior, but a real completion/complete request currently returns Method not found.
-
Pagination docs say protocol list calls return nextCursor, but this server does not configure list_page_size.
-
Prompt docs say run_and_wait preserves exit status, then later say it does not.
Upstream references
Minimal local recreation
Check current server surface:
$ uv run fastmcp inspect fastmcp.json
Check completion behavior:
$ uv run python - <<'PY'
import asyncio
from fastmcp import Client
from mcp import types
from libtmux_mcp.server import build_mcp_server
async def main():
async with Client(build_mcp_server()) as client:
await client.complete(
types.PromptReference(type="ref/prompt", name="run_and_wait"),
{"name": "command", "value": "py"},
)
asyncio.run(main())
PY
Expected today: McpError Method not found.
Minimal fix
- Add only the three snapshot fields listed above.
- Add
active_pane_id to WindowInfo.
- Add
src/libtmux_mcp/py.typed.
- Regenerate or manually update the README tool inventory.
- Rewrite completion and pagination docs to describe current behavior.
- Fix the
run_and_wait exit-status sentence.
Acceptance criteria
snapshot_pane returns pane_pid, pane_dead, and alternate_on.
create_window / WindowInfo includes active_pane_id.
- Built wheel/sdist includes
libtmux_mcp/py.typed.
- README tool inventory matches
tools/list.
- Completion docs no longer claim a working
completion/complete surface.
- Pagination docs distinguish FastMCP capability from this server's current configuration.
- Prompt docs consistently state that
run_and_wait does not preserve exit status.
Problem
Several small public-surface gaps make the server less ergonomic and less accurate for MCP clients.
Grouped here because each fix is small and independently testable.
Items
snapshot_paneshould include important tmux state:pane_pidpane_deadalternate_onWindowInfoshould includeactive_pane_id, matching the convenience already present onSessionInfo.The package advertises typed distribution but does not ship
py.typed.README's tool table is stale and misses current tools such as:
list_serverswait_for_channelsignal_channelCompletion docs describe inherited completion behavior, but a real
completion/completerequest currently returnsMethod not found.Pagination docs say protocol list calls return
nextCursor, but this server does not configurelist_page_size.Prompt docs say
run_and_waitpreserves exit status, then later say it does not.Upstream references
alternate_on: https://github.com/tmux/tmux/blob/3.6a/format.c#L3148-L3149pane_dead: https://github.com/tmux/tmux/blob/3.6a/format.c#L3391-L3392pane_pid: https://github.com/tmux/tmux/blob/3.6a/format.c#L3457-L3458list_page_size: https://github.com/jlowin/fastmcp/blob/v3.4.2/fastmcp_slim/fastmcp/server/server.py#L311-L368nextCursorwhen pagination is configured: https://github.com/jlowin/fastmcp/blob/v3.4.2/fastmcp_slim/fastmcp/server/mixins/mcp_operations.py#L117-L186Minimal local recreation
Check current server surface:
$ uv run fastmcp inspect fastmcp.jsonCheck completion behavior:
Expected today:
McpError Method not found.Minimal fix
active_pane_idtoWindowInfo.src/libtmux_mcp/py.typed.run_and_waitexit-status sentence.Acceptance criteria
snapshot_panereturnspane_pid,pane_dead, andalternate_on.create_window/WindowInfoincludesactive_pane_id.libtmux_mcp/py.typed.tools/list.completion/completesurface.run_and_waitdoes not preserve exit status.