summaryrefslogtreecommitdiff
path: root/src/mcp/server.c
blob: a0ff436d2819b3e732ad7372933c8205dbf3ed2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "mcp/server.h"

#include "mcp/tools/common/tools.h"

int
tiny_convmem_server_run(FILE *input, FILE *output, tiny_store_t *store)
{
  tiny_mcp_tools_context_t *context;
  mcpc_server_t *server;
  mcpc_errcode_t status;
  if (!input || !output || !store)
    {
      return 1;
    }
  context = tiny_mcp_tools_context_new(store);
  if (!context)
    {
      return 1;
    }
  server = mcpc_server_new_iostrm(input, output);
  if (!server || mcpc_server_set_nament(server, (const char8_t *)"tiny-convmem-mcp") != MCPC_EC_0
      || mcpc_server_capa_enable_tool(server) != MCPC_EC_0 || !tiny_mcp_tools_register(server)
      || !tiny_mcp_tools_context_activate(context))
    {
      if (server)
        {
          mcpc_server_close(server);
        }
      tiny_mcp_tools_context_free(context);
      return 1;
    }
  status = mcpc_server_start(server);
  tiny_mcp_tools_context_deactivate(context);
  mcpc_server_close(server);
  tiny_mcp_tools_context_free(context);
  return status == MCPC_EC_0 ? 0 : 1;
}