ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
mcp.h
Go to the documentation of this file.
1#pragma once
2
3/* Storage capacities in elements; text buffers include the terminating NUL. */
4#define MCP_SERVER_MCP_ERROR_BUFFER_SIZE 2048
5
6#include <ascii-chat/common.h>
7#include <libplatform/atomic.h>
8#include <ascii-chat/otel.h>
9#include <libplatform/filesystem.h>
10#include <libplatform/mutex.h>
11#include <libplatform/system.h>
16#include <yyjson.h>
17#include <string.h>
18
19// Avoid yyjson's intentional unsigned wraparound in object lookup under integer sanitizers.
20static inline yyjson_val *mcp_get(yyjson_val *obj, const char *name) {
21 if (!yyjson_is_obj(obj) || !yyjson_obj_size(obj))
22 return NULL;
23 size_t i, count;
24 yyjson_val *key, *value;
25 yyjson_obj_foreach(obj, i, count, key, value) if (yyjson_equals_str(key, name)) return value;
26 return NULL;
27}
28
29#define MCP_MAX_INPUT (24u * 1024u * 1024u)
30#define MCP_MAX_OUTPUT (8u * 1024u * 1024u)
31#define MCP_MAX_DOWNLOAD (64u * 1024u * 1024u)
32#define MCP_SESSION_ID_LENGTH 32
33
35typedef struct {
36 bool hosted;
38 const char *address;
39 const char *address6;
40 const char *tls_cert, *tls_key, *tls_password;
41 unsigned max_jobs;
42 const char *origin;
43 int port;
49
71
88
89int mcp_server_main(void);
91void mcp_stdio_release(void);
92yyjson_mut_val *mcp_tools_schema(yyjson_mut_doc *doc, const mcp_policy_t *policy);
93asciichat_error_t mcp_request_parse(const mcp_policy_t *policy, mcp_tool_t tool, yyjson_val *arguments,
96yyjson_mut_doc *mcp_dispatch(mcp_server_t *server, yyjson_doc *message, void *connection, const char *session_id,
97 bool *pending);
98yyjson_mut_doc *mcp_error(yyjson_val *id, int code, const char *message);
99void mcp_jobs_reap(mcp_server_t *server, bool all);
100void mcp_stdio_send(mcp_server_t *server, yyjson_mut_doc *response);
103void mcp_http_wake(mcp_server_t *server);
104extern const char *const mcp_output_formats[];
105const char *mcp_output_mime(const char *extension);
106bool mcp_download_name(const char *name, int64_t *expires);
107void mcp_download_prune(const char *directory, int64_t now);
108asciichat_error_t mcp_download_finalize(const mcp_policy_t *policy, yyjson_mut_doc *doc, int64_t now);
⚙️ Common definitions, error codes, macros, and types shared throughout the application
const char *const mcp_output_formats[]
Definition downloads.c:7
#define PLATFORM_MAX_PATH_LENGTH
Definition common.h:95
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
struct http_renderer_job http_renderer_job_t
Backend-neutral HTTP request/response contract.
void mcp_request_destroy(http_renderer_process_request_t *request)
Definition request.c:678
yyjson_mut_val * mcp_tools_schema(yyjson_mut_doc *doc, const mcp_policy_t *policy)
Definition request.c:158
mcp_tool_t
Definition mcp.h:34
@ MCP_VISUALIZATION
Definition mcp.h:34
@ MCP_URL
Definition mcp.h:34
@ MCP_FILE
Definition mcp.h:34
@ MCP_WEBCAM
Definition mcp.h:34
yyjson_mut_doc * mcp_error(yyjson_val *id, int code, const char *message)
asciichat_error_t mcp_stdio_reserve(void)
Definition stdio.c:7
yyjson_mut_doc * mcp_dispatch(mcp_server_t *server, yyjson_doc *message, void *connection, const char *session_id, bool *pending)
struct mcp_server mcp_server_t
The useful part of mcp job is in server, message, response, request: together they describe what is p...
struct mcp_job mcp_job_t
When code needs to work with mcp policy, it keeps hosted, restricted, address, address6 here instead ...
void mcp_download_prune(const char *directory, int64_t now)
Definition downloads.c:52
asciichat_error_t mcp_download_finalize(const mcp_policy_t *policy, yyjson_mut_doc *doc, int64_t now)
Definition downloads.c:74
#define MCP_SESSION_ID_LENGTH
Definition mcp.h:32
bool mcp_download_name(const char *name, int64_t *expires)
Definition downloads.c:22
asciichat_error_t mcp_http_run(mcp_server_t *server)
Definition http.c:233
const char * mcp_output_mime(const char *extension)
Definition downloads.c:10
void mcp_jobs_reap(mcp_server_t *server, bool all)
void mcp_http_wake(mcp_server_t *server)
Definition http.c:30
asciichat_error_t mcp_stdio_run(mcp_server_t *server)
Definition stdio.c:31
void mcp_stdio_release(void)
Definition stdio.c:13
int mcp_server_main(void)
asciichat_error_t mcp_request_parse(const mcp_policy_t *policy, mcp_tool_t tool, yyjson_val *arguments, http_renderer_process_request_t *out)
Definition request.c:416
void mcp_stdio_send(mcp_server_t *server, yyjson_mut_doc *response)
Definition stdio.c:19
static bool size_t gotel_query_t * out
Definition queries.h:8
uint8_t session_id[SESSION_ID_SIZE]
🔤 String Manipulation and Shell Escaping Utilities
When code needs to work with mcp policy, it keeps hosted, restricted, address, address6 here instead ...
Definition mcp.h:60
yyjson_doc * message
Definition mcp.h:62
mcp_tool_t tool
Definition mcp.h:65
void * connection
Definition mcp.h:68
gotel_context_t telemetry_parent
Definition mcp.h:66
yyjson_mut_doc * response
Definition mcp.h:63
http_renderer_job_t renderer_job
Definition mcp.h:67
char session_id[32+1]
Definition mcp.h:69
struct mcp_server * server
Definition mcp.h:61
http_renderer_process_request_t request
Definition mcp.h:64
const char * tls_key
Definition mcp.h:40
const char * tls_password
Definition mcp.h:40
const char * address
Definition mcp.h:38
unsigned max_jobs
Definition mcp.h:41
const char * tls_cert
Definition mcp.h:40
char downloads_dir[PLATFORM_MAX_PATH_LENGTH]
Definition mcp.h:44
const char * address6
Definition mcp.h:39
const char * downloads_url_prefix
Definition mcp.h:45
const char * origin
Definition mcp.h:42
int port
Definition mcp.h:43
bool restricted
Definition mcp.h:37
bool hosted
Definition mcp.h:36
The useful part of mcp job is in server, message, response, request: together they describe what is p...
Definition mcp.h:80
bool initialized
Definition mcp.h:86
mutex_t output_mutex
Definition mcp.h:83
http_server_t * shared_http
Definition mcp.h:84
atomic_t stopping
Definition mcp.h:85
mcp_job_t * jobs
Definition mcp.h:82
mcp_policy_t policy
Definition mcp.h:81
struct http_server http_server_t
Definition tls.h:8