| 1 | { |
| 2 | "description": "A stdio server (a real POSIX-shell child the dispatch spawns): catalog, a plain result, an isError result, a JSON-RPC error, then a server that dies after reading its call. Pins Rust McpConnection::call_method / McpPool::call_tool_with_decision: a call whose child exited mid-flight fails as outcome-unknown and is NOT replayed (the server saw it once), and the next call reconnects a fresh child.", |
| 3 | "transport": "stdio", |
| 4 | "server_name": "conformance", |
| 5 | "server": { |
| 6 | "initialize": { |
| 7 | "result": { |
| 8 | "protocolVersion": "2024-11-05", |
| 9 | "serverInfo": { |
| 10 | "name": "stdio-fixture", |
| 11 | "version": "1.0.0" |
| 12 | }, |
| 13 | "capabilities": { |
| 14 | "tools": {} |
| 15 | } |
| 16 | } |
| 17 | }, |
| 18 | "tools/list": { |
| 19 | "result": { |
| 20 | "tools": [ |
| 21 | { |
| 22 | "name": "echo", |
| 23 | "description": "Echo the text argument.", |
| 24 | "inputSchema": { |
| 25 | "type": "object", |
| 26 | "properties": { |
| 27 | "text": { |
| 28 | "type": "string" |
| 29 | } |
| 30 | } |
| 31 | } |
| 32 | }, |
| 33 | { |
| 34 | "name": "fails", |
| 35 | "description": "Always reports a tool-level error.", |
| 36 | "inputSchema": { |
| 37 | "type": "object" |
| 38 | } |
| 39 | }, |
| 40 | { |
| 41 | "name": "rpc-error", |
| 42 | "inputSchema": { |
| 43 | "type": "object" |
| 44 | } |
| 45 | }, |
| 46 | { |
| 47 | "name": "dies", |
| 48 | "description": "Exits after reading the call, without answering.", |
| 49 | "inputSchema": { |
| 50 | "type": "object" |
| 51 | } |
| 52 | } |
| 53 | ] |
| 54 | } |
| 55 | }, |
| 56 | "tools/call": [ |
| 57 | { |
| 58 | "match": { |
| 59 | "name": "echo" |
| 60 | }, |
| 61 | "result": { |
| 62 | "content": [ |
| 63 | { |
| 64 | "type": "text", |
| 65 | "text": "echo from stdio" |
| 66 | } |
| 67 | ] |
| 68 | } |
| 69 | }, |
| 70 | { |
| 71 | "match": { |
| 72 | "name": "fails" |
| 73 | }, |
| 74 | "result": { |
| 75 | "content": [ |
| 76 | { |
| 77 | "type": "text", |
| 78 | "text": "the stdio fixture tool failed on purpose" |
| 79 | } |
| 80 | ], |
| 81 | "isError": true |
| 82 | } |
| 83 | }, |
| 84 | { |
| 85 | "match": { |
| 86 | "name": "rpc-error" |
| 87 | }, |
| 88 | "error": { |
| 89 | "code": -32602, |
| 90 | "message": "invalid params: stdio" |
| 91 | } |
| 92 | }, |
| 93 | { |
| 94 | "match": { |
| 95 | "name": "dies" |
| 96 | }, |
| 97 | "exit": true |
| 98 | } |
| 99 | ] |
| 100 | }, |
| 101 | "steps": [ |
| 102 | { |
| 103 | "op": "catalog" |
| 104 | }, |
| 105 | { |
| 106 | "op": "call", |
| 107 | "tool": "mcp_conformance_echo", |
| 108 | "input": { |
| 109 | "text": "hi" |
| 110 | } |
| 111 | }, |
| 112 | { |
| 113 | "op": "call", |
| 114 | "tool": "mcp_conformance_fails", |
| 115 | "input": {} |
| 116 | }, |
| 117 | { |
| 118 | "op": "call", |
| 119 | "tool": "mcp_conformance_rpc-error", |
| 120 | "input": {} |
| 121 | }, |
| 122 | { |
| 123 | "op": "call", |
| 124 | "tool": "mcp_conformance_dies", |
| 125 | "input": {} |
| 126 | }, |
| 127 | { |
| 128 | "op": "call", |
| 129 | "tool": "mcp_conformance_echo", |
| 130 | "input": { |
| 131 | "text": "after the child died" |
| 132 | } |
| 133 | }, |
| 134 | { |
| 135 | "op": "catalog" |
| 136 | } |
| 137 | ] |
| 138 | } |
| 139 |