#include #include #include #include "mcp/server.h" #include "storage/store.h" #include "sys/system.h" #include "base/allocator.h" static void usage(FILE *stream) { fprintf(stream, "Usage: tiny-convmem-mcp --data-dir \n"); } static int run(const tiny_sys_arguments_t *arguments) { char *absolute; tiny_store_t *store = NULL; tiny_store_status_t status; int result; if (arguments->count == 2 && strcmp(arguments->values[1], "--help") == 0) { usage(stdout); return 0; } if (arguments->count != 3 || strcmp(arguments->values[1], "--data-dir") != 0 || arguments->values[2][0] == '\0') { usage(stderr); return 2; } absolute = tiny_sys_path_absolute(arguments->values[2]); if (absolute == NULL) { fprintf(stderr, "unable to resolve --data-dir\n"); return 2; } status = tiny_store_open(&store, absolute); free(absolute); if (status != TINY_STORE_OK) { fprintf(stderr, "unable to open conversation store: %s\n", tiny_store_status_name(status)); return status == TINY_STORE_BUSY ? 3 : 1; } result = tiny_convmem_server_run(stdin, stdout, store); tiny_store_close(store); if (result != 0) { fprintf(stderr, "tiny-convmem-mcp stopped with error code %d\n", result); } return result; } int main(int argc, char **argv) { tiny_sys_arguments_t arguments; int result; if (!tiny_sys_arguments_init(&arguments, argc, argv)) { fprintf(stderr, "unable to read process arguments\n"); return 2; } result = run(&arguments); tiny_sys_arguments_free(&arguments); return result; }