#include "MCPServer.h" #include static int p=0,f=0; #define T(n) { std::cout<<" "<<#n<<"... "; } #define P() { std::cout<<"PASS\n"; ++p; } #define F(m) { std::cout<<"FAIL: "<()); C(!j["success"].get(),"f"); P();} void t3(){T(success); MCPServer s; auto r=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j=nlohmann::json::parse(r["result"]["content"][0]["text"].get()); C(j["success"].get(),"s"); P();} void t4(){T(has_data); MCPServer s; auto r=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j=nlohmann::json::parse(r["result"]["content"][0]["text"].get()); C(j.contains("data"),"d"); P();} void t5(){T(id_echo); MCPServer s; auto r=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j=nlohmann::json::parse(r["result"]["content"][0]["text"].get()); C(j["id"]=="x1","i"); P();} void t6(){T(tool_echo); MCPServer s; auto r=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j=nlohmann::json::parse(r["result"]["content"][0]["text"].get()); C(j["tool"]=="whetstone_publish_next_block_plan","t"); P();} void t7(){T(status_ok); MCPServer s; auto r=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j=nlohmann::json::parse(r["result"]["content"][0]["text"].get()); C(j["status"]=="ok","o"); P();} void t8(){T(deterministic); MCPServer s; auto r1=s.handleRequest({{"jsonrpc","2.0"},{"id",1},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto r2=s.handleRequest({{"jsonrpc","2.0"},{"id",2},{"method","tools/call"},{"params",{{"name","whetstone_publish_next_block_plan"},{"arguments",{{"id","x1"}}}}}}); auto j1=nlohmann::json::parse(r1["result"]["content"][0]["text"].get()); auto j2=nlohmann::json::parse(r2["result"]["content"][0]["text"].get()); C(j1["data"].dump()==j2["data"].dump(),"d"); P();} int main(){ std::cout<<"Step 1336: `whetstone_publish_next_block_plan` MCP tool\n"; t1();t2();t3();t4();t5();t6();t7();t8(); std::cout<<"\nResults: "<