code wiki / (root) / nx_mcp_http_envelope_gate.nx

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}