Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Client accepts JSON-RPC response containing both result and error

Abierto
#1,283 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
rust
Área
api, backend

Línea de trabajo

Empieza rastreando el enum JsonRpcMessage sin etiqueta a través de JsonRpcResponse y la ruta de la solicitud call_tool. Reproduce la respuesta malformada descrita en el issue y, después, añade cobertura para una respuesta que contenga tanto result como error. Se considera terminado cuando la solicitud pendiente devuelve un error en lugar de Ok(CallToolResult), mientras se conserva el comportamiento de conexión indicado.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug P1 ready for work T-model T-service

Describe the bug

The rmcp 3.4.0 client accepts a malformed JSON-RPC response containing both result and error. It resolves the pending tools/call as Ok(CallToolResult), using the result and silently ignoring the error.

JSON-RPC responses must contain either result or error, not both.

Environment

  • rmcp: 3.4.0 (rmcp-v3.4.0, commit fd7811f)
  • rustc: 1.98.1
  • macOS arm64
  • Protocol: MCP 2026-07-28
  • Transports: stdio and Streamable HTTP

To reproduce

  1. Connect an rmcp client to an MCP server.
  2. Send a tools/call request.
  3. Have the server return a response shaped like:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { "content": [], "resultType": "complete" },
  "error": { "code": -32603, "message": "injected error" }
}

A minimal client call is:

let result = client
    .call_tool(
        CallToolRequestParams::new("malformed_message")
            .with_arguments(
                serde_json::json!({"variant": "result-with-error"})
                    .as_object()
                    .unwrap()
                    .clone(),
            ),
    )
    .await;

assert!(result.is_err());

This was found while testing MCP Failure Lab 0.9.0. The malformed_message tool intentionally returned a response containing both result and error.

I reproduced it with the mcp-failure-lab@0.9.0 package and the v0.9.0 Git tag over stdio and Streamable HTTP.

Expected behavior

The client rejects the response as an invalid JSON-RPC message and returns an error for the pending request. The connection may remain usable afterward.

Actual behavior

call_tool returns Ok(CallToolResult). A subsequent normal request succeeds.

Additional context

The likely parser path is the untagged JsonRpcMessage enum: JsonRpcResponse accepts the result shape while Serde ignores the unexpected error field.

Other tested official clients, including C# ModelContextProtocol 2.2.0, reject the same wire response.

Lenguaje dominante
Rust
Estrellas
3.9k
Forks
645
Merge medio
4 d 22 h
PR fusionados (30 d)
37

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de modelcontextprotocol/rust-sdk

Todos los issues de modelcontextprotocol/rust-sdk

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.