annotate npc/main.c @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents a2720eac50ce
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }