MCP tool calls fail: invalid JSON when passing session_name / session_id (Cursor agent)
Nadie ha tomado este issue todavía.
- #25 de @tony — cerrado sin fusionar
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Start by reproducing the Cursor agent calls to list_windows and select_window with session_name or session_id, and capture the malformed payload. Compare this behavior with the existing _coerce_dict_arg and create_session.environment handling; done means determining whether a repository-side error or documentation change is possible, or whether the failure belongs upstream to Cursor or the MCP client.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
When driving libtmux-mcp from Cursor’s agent, some tool invocations fail before the Python server runs: the MCP layer rejects the request because the JSON payload for tool arguments is malformed.
This is not the same as the existing workaround for dict-shaped parameters sent as JSON strings (_coerce_dict_arg / Composer dict-stringification). Here, string values that must be JSON strings are emitted without quotes, producing invalid JSON.
Symptoms
Errors observed on the client/MCP bridge when calling tools that accept optional session targeting, for example:
Unexpected token '$', "{"session_id": $10}" is not valid JSONUnexpected token 'c', "{"session_name": cv}" is not valid JSON
Valid JSON would require:
"session_id": "$10""session_name": "cv"
Impact
- Tools such as
list_windows(withsession_name/session_id) andselect_windowfail entirely; the agent falls back to shelltmuxcommands. - Any tool parameter that is a string could theoretically hit the same class of bug if the serializer mishandles it.
Steps to reproduce (agent)
- Use Cursor with the libtmux MCP server configured (stdio).
- From the agent, call
list_windowswithsession_nameset to a bare session name (e.g.cv), orlist_windows/ related tools withsession_id(e.g.$10). - Observe MCP parse/validation errors instead of a normal tool result.
(Exact UI steps depend on Cursor version; the failure is visible in the agent tool-call error output.)
Expected behavior
Tool arguments are serialized as valid JSON. String parameters are JSON-encoded (quoted, with proper escaping).
Actual behavior
The serialized arguments are not valid JSON (unquoted $10, unquoted cv), so the request fails at parse time.
Nature of the bug
- Likely location: MCP client / Cursor’s tool-argument serialization for this model or code path—not libtmux-mcp’s Python handlers (they never run).
- Relation to existing work: The project already documents dict parameters arriving as JSON strings (Composer 1/1.5) in
_coerce_dict_argandcreate_session.environment. This issue is orthogonal: it is invalid JSON at the wire level, not a semantic coercion problem.
Suggestions
- Upstream: If reproducible only in Cursor, report or cross-link to Cursor with a minimal failing tool call payload.
- Docs: Optionally note in MCP/client docs that agents should prefer globally unique
pane_idtargeting where possible to reduce reliance on session filters. - Investigation: Confirm whether FastMCP / MCP server can surface a clearer error when the client sends malformed JSON (may be outside server control).
Environment (observed)
- OS: Linux (WSL2)
- Cursor agent + libtmux-mcp MCP server (stdio)
- tmux sessions present (e.g. session name
cv, id$10)
If maintainers prefer this tracked as documentation-only or upstream-meta, feel free to relabel; the goal is to capture the failure mode and distinguish it from _coerce_dict_arg-style workarounds.
- Lenguaje dominante
- Python
- Estrellas
- 13
- Forks
- 0
- Merge medio
- 22 min
- PR fusionados (30 d)
- 4
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de tmux-python/libtmux-mcp
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
tmux-python/libtmux-mcp#121 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tmux-python/libtmux-mcp#120 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tmux-python/libtmux-mcp#119 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
tmux-python/libtmux-mcp#118 ·
-
pytest filterwarnings suppresses the DeprecationWarnings this project needs to seePosiblemente ocupada @tony la tomó hace 87 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
tmux-python/libtmux-mcp#111 ·
Todos los issues de tmux-python/libtmux-mcp
Issues similares
-
Uninstall guide omits the CloudWatch log groups AWS CodeBuild creates for useCodeBuild pipelinesAbiertobug documentation
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
awslabs/visual-asset-management-system#552 ·
Los mantenedores suelen responder en 1 día
-
netbox status: needs triage type: documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 76/100
netbox-community/netbox#23460 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
awslabs/threat-composer#362 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ansys/pyansys-common-mcp#213 ·
Los mantenedores suelen responder en 3 días