Passing a malformed body throws a 500 error instead of 400. Very hard to figure out what is incorrect in the request being issued by the caller
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Comienza por el mapeo del endpoint MapMcp("/mcp/environments/{environmentId}/servers/{serverName}") mostrado en Startup.cs y la acción Invoke del controlador. Reproduce el POST con la InitializeRequest incompleta y, a continuación, sigue la validación de la solicitud y el manejo de errores para determinar dónde se produce el 500. La tarea estará terminada cuando la ausencia de ClientInfo.Version se comunique mediante una respuesta 400 o un error JSON-RPC estructurado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
When sending an InitializeRequest to the MCP C# SDK server with a malformed or incomplete request body (e.g., missing required fields like clientInfo.Version, the server responds with a 500 Internal Server Error.
This behavior is problematic because:
- A 500 error implies a server-side failure, not a client-side input issue.
- According to MCP protocol expectations, the server should return a 400 Bad Request or a structured JSON-RPC error response indicating what was wrong with the request.
Steps to reproduce the behavior:
- Issue a POST mcp call with this request body:
{ "jsonrpc": "2.0", "id": "7", "method": "initialize", "params": { "protocolVersion": "2025-06-18", "clientInfo": { "name": "Insomnia" } } }
Expected behavior
A 400 error should be returned telling the user that the ClientInfo.Version property is missing
Additional Context
Our controllers are mapped like this in our Startup.cs file:
app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapMcp("/mcp/environments/{environmentId}/servers/{serverName}"); });
and controller is defined like this:
[HttpGet] [HttpPost] [HttpDelete] [Route("mcp/environments/{environmentId}/servers/{serverName}")] public IActionResult Invoke() { return this.Ok(); }
- Lenguaje dominante
- C#
- Estrellas
- 4.5k
- Forks
- 814
- Merge medio
- 9 d 19 h
- PR fusionados (30 d)
- 4
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 modelcontextprotocol/csharp-sdk
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
modelcontextprotocol/csharp-sdk#1867 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
modelcontextprotocol/csharp-sdk#1840 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
modelcontextprotocol/csharp-sdk#1836 ·
-
enhancement needs confirmation
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
modelcontextprotocol/csharp-sdk#678 · 1 comentario ·
-
enhancement needs confirmation P3 ready for work
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
modelcontextprotocol/csharp-sdk#515 · 6 comentarios · 3 reacciones ·
Todos los issues de modelcontextprotocol/csharp-sdk
Issues similares
-
core dependencies
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
-
bug frontend good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
NavigationViewItemAutomationPeer implements IInvokeProvider but never advertises the Invoke pattern Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
unoplatform/uno#24629 ·
-
agentic-workflows Needs: Triage :mag: State: In-PR
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Down / Waiting for removal
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100