summaryrefslogtreecommitdiff
path: root/src/mcp/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mcp/server.c')
-rw-r--r--src/mcp/server.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/mcp/server.c b/src/mcp/server.c
new file mode 100644
index 0000000..57d197d
--- /dev/null
+++ b/src/mcp/server.c
@@ -0,0 +1,52 @@
+#include "mcp/server.h"
+
+#include <mcpc/mcpc.h>
+#include "mcp/tools/health.h"
+
+int
+tiny_convmem_server_run(FILE *input, FILE *output)
+{
+ mcpc_server_t *server = mcpc_server_new_iostrm(input, output);
+ if (server == NULL)
+ {
+ return MCPC_EC_BUG;
+ }
+
+ mcpc_errcode_t result = mcpc_server_set_nament(
+ server,
+ (const char8_t *)"tiny-convmem-mcp"
+ );
+ if (result == MCPC_EC_0)
+ {
+ result = mcpc_server_capa_enable_tool(server);
+ }
+
+ mcpc_tool_t *health = NULL;
+ if (result == MCPC_EC_0)
+ {
+ health = tiny_convmem_health_tool_create();
+ if (health == NULL)
+ {
+ result = MCPC_EC_BUG;
+ }
+ }
+
+ if (result == MCPC_EC_0)
+ {
+ result = mcpc_server_add_tool(server, health);
+ }
+ if (result == MCPC_EC_0)
+ {
+ result = mcpc_server_start(server);
+ }
+
+ {
+ const mcpc_errcode_t close_result = mcpc_server_close(server);
+ if (result == MCPC_EC_0)
+ {
+ result = close_result;
+ }
+ }
+
+ return (int)result;
+}