Commit 7065595
committed
Fix error behavior on unregistered handlers in stateless server handler
Backport of #800 to the 0.18.x line.
Instead of returning Mono.error with an McpError, DefaultMcpStatelessServerHandler
now returns a JSON-RPC method not found error (-32601), aligned with the stateful
server session handler.
The early return meant the error never reached the onErrorResume below it, so it
escaped to the transport. HttpServletStatelessServerTransport and the Spring
WebMvc/WebFlux stateless transports all map an escaping handler error to HTTP 500,
so any request for a method with no registered handler was answered with a server
error rather than a JSON-RPC error response. Clients probing for optional methods
-- OpenAI's hosted connector sends server/discover before tools/list -- therefore
drove 5xx traffic against otherwise healthy servers.
Adds the unit test from #800 and an integration test that asserts both the HTTP
status and the JSON-RPC error body, since the status is what regressed.
See #10851 parent 5ba88f6 commit 7065595
3 files changed
Lines changed: 83 additions & 1 deletion
File tree
- mcp-core/src
- main/java/io/modelcontextprotocol/server
- test/java/io/modelcontextprotocol/server
- mcp-test/src/test/java/io/modelcontextprotocol/server
Lines changed: 3 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
36 | 38 | | |
37 | 39 | | |
38 | 40 | | |
| |||
Lines changed: 40 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
Lines changed: 40 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
650 | 650 | | |
651 | 651 | | |
652 | 652 | | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
653 | 693 | | |
654 | 694 | | |
655 | 695 | | |
| |||
0 commit comments