nx_mcp_http_envelope_gate.nx source
↩ module page · 24 lines · 2170 B
1import "nx_tools_api.nx"
2import "nx_gate_verdict.nx"
3func nmhg_case(name: *u8, body: *u8, status: *u8, expected: *u8, ctr: *i64) -> i64 {
4 let req: *u8 = sys_mmap(TA_MAGIC_1048576)
5 let out: *u8 = sys_mmap(TA_MAGIC_1048576)
6 var n: i64 = ta_cat(req,0,"POST /mcp HTTP/1.1\r\nHost: nishifamily.com\r\nContent-Type: application/json\r\nContent-Length: ")
7 n=ta_catn(req,n,ta_slen(body))
8 n=ta_cat(req,n,"\r\n\r\n"); n=ta_cat(req,n,body)
9 let got: i64 = ta_handle(req,n,out)
10 gv_check_eq(name,gv_at(out,got,0,status),1,ctr)
11 let bo: i64 = ta_body_off(out,got)
12 if ta_slen(expected) == 0 { gv_check_eq("empty response body",got-bo,0,ctr) } else { gv_check_eq("response identity",gv_at(out,got,bo,expected),1,ctr) }
13 return 0
14}
15func main() -> i64 {
16 let ctr: *i64 = gv_ctr()
17 gv_head("MCP HTTP envelope response regression")
18 nmhg_case("initialized empty acknowledgement","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}","HTTP/1.1 202 Accepted","",ctr)
19 nmhg_case("nested id is not request identity","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\",\"params\":{\"id\":9}}","HTTP/1.1 202 Accepted","",ctr)
20 nmhg_case("missing id never dispatches","{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"argecho\",\"arguments\":{\"argv\":[\"must-not-run\"]}}}","HTTP/1.1 400 Bad Request","",ctr)
21 nmhg_case("initialize retains identity","{\"params\":{\"id\":42},\"jsonrpc\":\"2.0\",\"id\":-17,\"method\":\"initialize\"}","HTTP/1.1 200 OK","{\"jsonrpc\":\"2.0\",\"id\":-17,\"result\":",ctr)
22 nmhg_case("long request identity","{\"jsonrpc\":\"2.0\",\"id\":\"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\",\"method\":\"unknown\"}","HTTP/1.1 200 OK","{\"jsonrpc\":\"2.0\",\"id\":\"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\",\"error\":",ctr)
23 return gv_verdict("MCP-HTTP-ENVELOPE",ctr,"pure production handler; live transport pending")
24}