Mercurial
annotate npc/main.c @ 190:a2725419f988 hg-web
Updated so that bun builds will with already existing js files.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sat, 24 Jan 2026 21:06:42 -0800 |
| parents | a2720eac50ce |
| children |
| rev | line source |
|---|---|
|
181
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
1 #include "seobeo/seobeo.h" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
2 #include <string.h> |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
3 #include <time.h> |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
4 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
5 static _Atomic uint32_t counter = 0; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
6 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
7 static void build_response(char *out, size_t size, const char *id, const char *result) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
8 snprintf(out, size, "{\"jsonrpc\":\"2.0\",\"id\":%s,\"result\":%s}", id, result); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
9 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
10 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
11 static void build_error(char *out, size_t size, const char *id, int code, const char *msg) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
12 snprintf(out, size, |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
13 "{\"jsonrpc\":\"2.0\",\"id\":%s,\"error\":{\"code\":%d,\"message\":\"%s\"}}", |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
14 id, code, msg); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
15 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
16 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
17 static void handle_initialize(char *out, size_t size, const char *id) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
18 const char *result = "{" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
19 "\"protocolVersion\":\"2024-11-05\"," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
20 "\"capabilities\":{\"tools\":{}}," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
21 "\"serverInfo\":{\"name\":\"simple-mcp\",\"version\":\"1.0.0\"}" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
22 "}"; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
23 build_response(out, size, id, result); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
24 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
25 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
26 static void handle_tools_list(char *out, size_t size, const char *id) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
27 const char *result = "{" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
28 "\"tools\":[" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
29 "{" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
30 "\"name\":\"get_time\"," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
31 "\"description\":\"Get current Unix timestamp\"," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
32 "\"inputSchema\":{\"type\":\"object\",\"properties\":{}}" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
33 "}," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
34 "{" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
35 "\"name\":\"get_counter\"," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
36 "\"description\":\"Get and increment a counter\"," |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
37 "\"inputSchema\":{\"type\":\"object\",\"properties\":{}}" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
38 "}" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
39 "]" |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
40 "}"; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
41 build_response(out, size, id, result); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
42 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
43 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
44 static void handle_tools_call(char *out, size_t size, const char *id, Dowa_JSON_Entry *json) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
45 Dowa_JSON_Value *params_val = Dowa_JSON_Get(json, "params"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
46 if (!params_val || params_val->type != DOWA_JSON_OBJECT) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
47 { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
48 build_error(out, size, id, -32602, "Missing params"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
49 return; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
50 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
51 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
52 Dowa_JSON_Entry *params = (Dowa_JSON_Entry *)params_val->object_val; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
53 char *tool_name = Dowa_JSON_Get_String(params, "name"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
54 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
55 if (!tool_name) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
56 build_error(out, size, id, -32602, "Missing tool name"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
57 return; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
58 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
59 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
60 char result[256]; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
61 if (strcmp(tool_name, "get_time") == 0) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
62 time_t now = time(NULL); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
63 snprintf(result, sizeof(result), |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
64 "{\"content\":[{\"type\":\"text\",\"text\":\"Current timestamp: %ld\"}]}", |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
65 (long)now); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
66 } else if (strcmp(tool_name, "get_counter") == 0) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
67 uint32_t val = ++counter; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
68 snprintf(result, sizeof(result), |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
69 "{\"content\":[{\"type\":\"text\",\"text\":\"Counter value: %u\"}]}", |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
70 val); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
71 } else { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
72 build_error(out, size, id, -32601, "Unknown tool"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
73 return; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
74 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
75 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
76 build_response(out, size, id, result); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
77 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
78 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
79 Seobeo_Request_Entry* HandleMCP(Seobeo_Request_Entry *req, Dowa_Arena *arena) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
80 { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
81 Seobeo_Request_Entry *resp = NULL; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
82 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
83 void *body_kv = Dowa_HashMap_Get_Ptr(req, "Body"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
84 if (!body_kv) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
85 { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
86 char *err = "{\"jsonrpc\":\"2.0\",\"id\":null,\"error\":{\"code\":-32700,\"message\":\"No body\"}}"; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
87 Dowa_HashMap_Push_Arena(resp, "status", "400", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
88 Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
89 Dowa_HashMap_Push_Arena(resp, "body", err, arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
90 return resp; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
91 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
92 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
93 const char *body = ((Seobeo_Request_Entry*)body_kv)->value; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
94 int32 body_len = strlen(body); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
95 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
96 Dowa_JSON_Value parsed = Dowa_JSON_Parse(body, body_len, arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
97 if (parsed.type != DOWA_JSON_OBJECT || !parsed.object_val) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
98 { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
99 char *err = "{\"jsonrpc\":\"2.0\",\"id\":null,\"error\":{\"code\":-32700,\"message\":\"Parse error\"}}"; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
100 Dowa_HashMap_Push_Arena(resp, "status", "400", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
101 Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
102 Dowa_HashMap_Push_Arena(resp, "body", err, arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
103 return resp; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
104 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
105 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
106 Dowa_JSON_Entry *json = (Dowa_JSON_Entry *)parsed.object_val; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
107 char *method = Dowa_JSON_Get_String(json, "method"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
108 Dowa_JSON_Value *id_val = Dowa_JSON_Get(json, "id"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
109 char id_buf[32] = "null"; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
110 if (id_val) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
111 { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
112 if (id_val->type == DOWA_JSON_NUMBER) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
113 snprintf(id_buf, sizeof(id_buf), "%.0f", id_val->num_val); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
114 else if (id_val->type == DOWA_JSON_STRING) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
115 snprintf(id_buf, sizeof(id_buf), "\"%s\"", id_val->str_val); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
116 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
117 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
118 char *response = Dowa_Arena_Allocate(arena, 2048); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
119 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
120 if (!method) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
121 build_error(response, 2048, id_buf, -32600, "Missing method"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
122 else if (strcmp(method, "initialize") == 0) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
123 handle_initialize(response, 2048, id_buf); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
124 else if (strcmp(method, "tools/list") == 0) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
125 handle_tools_list(response, 2048, id_buf); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
126 else if (strcmp(method, "tools/call") == 0) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
127 handle_tools_call(response, 2048, id_buf, json); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
128 else if (strcmp(method, "notifications/initialized") == 0) |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
129 snprintf(response, 2048, "{\"jsonrpc\":\"2.0\",\"id\":%s,\"result\":{}}", id_buf); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
130 else |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
131 build_error(response, 2048, id_buf, -32601, "Method not found"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
132 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
133 Dowa_HashMap_Push_Arena(resp, "status", "200", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
134 Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
135 Dowa_HashMap_Push_Arena(resp, "body", response, arena); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
136 return resp; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
137 } |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
138 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
139 int main(void) { |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
140 Seobeo_Router_Init(); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
141 Seobeo_Router_Register("POST", "/mcp", HandleMCP); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
142 |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
143 Seobeo_Log(SEOBEO_INFO, "MCP server running on http://localhost:8080/mcp\n"); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
144 Seobeo_Web_Server_Start(NULL, "8080", SEOBEO_MODE_FORK, 0); |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
145 return 0; |
|
a2720eac50ce
[NPC] Adding JSON RPC protocol for MPC endpoints
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
146 } |