cMCP 0.4.1
Model Context Protocol library in pure C11
Loading...
Searching...
No Matches
Data Structures | Typedefs | Functions
cmcp_server.h File Reference

Server API: lifecycle, tool/resource/prompt registry, dispatch, notifications. More...

#include "cmcp_json.h"
#include "cmcp_types.h"
#include "cmcp_transport.h"

Go to the source code of this file.

Data Structures

struct  cmcp_tool_t
 
struct  cmcp_resource_t
 
struct  cmcp_prompt_t
 

Typedefs

typedef struct cmcp_server cmcp_server_t
 
typedef struct cmcp_handler_ctx cmcp_handler_ctx_t
 
typedef int(* cmcp_tool_handler_fn) (const cmcp_json_t *arguments, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_content, int *out_is_error)
 
typedef int(* cmcp_resource_read_fn) (const char *uri, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_contents, int *out_is_error)
 
typedef int(* cmcp_prompt_handler_fn) (const cmcp_json_t *arguments, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_messages)
 

Functions

cmcp_server_tcmcp_server_new (const char *name, const char *version)
 
void cmcp_server_free (cmcp_server_t *s)
 
void cmcp_server_set_capabilities (cmcp_server_t *s, const cmcp_server_capabilities_t *caps)
 
int cmcp_server_set_description (cmcp_server_t *s, const char *description)
 
const char * cmcp_server_client_description (const cmcp_server_t *s)
 
int cmcp_handler_cancelled (const cmcp_handler_ctx_t *hctx)
 
int cmcp_handler_progress (cmcp_handler_ctx_t *hctx, double progress, double total, const char *message)
 
const char * cmcp_handler_get_header (const cmcp_handler_ctx_t *hctx, const char *name)
 
void cmcp_handler_set_structured (cmcp_handler_ctx_t *hctx, cmcp_json_t *value)
 
int cmcp_server_add_tool (cmcp_server_t *s, const cmcp_tool_t *tool)
 
cmcp_json_t * cmcp_tool_text_content (const char *text)
 
cmcp_json_t * cmcp_tool_resource_link_content (const char *uri, const char *name, const char *description, const char *mime_type)
 
int cmcp_server_add_resource (cmcp_server_t *s, const cmcp_resource_t *r)
 
cmcp_json_t * cmcp_resource_text_contents (const char *uri, const char *mime_type, const char *text)
 
int cmcp_server_add_prompt (cmcp_server_t *s, const cmcp_prompt_t *p)
 
cmcp_json_t * cmcp_prompt_text_messages (const char *role, const char *text)
 
int cmcp_server_run (cmcp_server_t *s, cmcp_transport_t *t)
 
int cmcp_server_run_stdio (cmcp_server_t *s)
 
const cmcp_client_capabilities_tcmcp_server_client_caps (const cmcp_server_t *s)
 
const char * cmcp_server_client_name (const cmcp_server_t *s)
 
const char * cmcp_server_client_version (const cmcp_server_t *s)
 
int cmcp_server_notify (cmcp_server_t *s, const char *method, cmcp_json_t *params)
 
int cmcp_server_notify_tools_changed (cmcp_server_t *s)
 
int cmcp_server_notify_resources_changed (cmcp_server_t *s)
 
int cmcp_server_notify_prompts_changed (cmcp_server_t *s)
 
int cmcp_server_notify_resource_updated (cmcp_server_t *s, const char *uri)
 
int cmcp_server_log (cmcp_server_t *s, cmcp_log_level_t level, const char *logger, cmcp_json_t *data)
 
int cmcp_server_send_request (cmcp_server_t *s, cmcp_handler_ctx_t *hctx, const char *method, cmcp_json_t *params, cmcp_rpc_message_t *out_response)
 
int cmcp_handler_elicit (cmcp_handler_ctx_t *hctx, const char *message, cmcp_json_t *requested_schema, cmcp_json_t **out_result)
 
int cmcp_handler_elicit_url (cmcp_handler_ctx_t *hctx, const char *message, const char *url, cmcp_json_t **out_result)
 

Detailed Description

Server API: lifecycle, tool/resource/prompt registry, dispatch, notifications.

A cmcp_server_t owns:

Capabilities (tools, resources, prompts) are auto-advertised when at least one matching primitive is registered. Server-initiated notifications go via cmcp_server_notify (generic) and the capability-gated convenience wrappers. Handlers run on a small worker-pool thread; they get a per-call cmcp_handler_ctx_t for cooperative cancellation, progress reporting, and (in 2025-11-25) elicitation/create round-trips back to the host.

See examples/echo-server.c for a complete minimal server and tools/filesystem-mcp/main.c for a production-shaped one.

Definition in file cmcp_server.h.

Typedef Documentation

◆ cmcp_server_t

typedef struct cmcp_server cmcp_server_t

Definition at line 31 of file cmcp_server.h.

◆ cmcp_handler_ctx_t

typedef struct cmcp_handler_ctx cmcp_handler_ctx_t

Definition at line 67 of file cmcp_server.h.

◆ cmcp_tool_handler_fn

typedef int(* cmcp_tool_handler_fn) (const cmcp_json_t *arguments, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_content, int *out_is_error)

Definition at line 144 of file cmcp_server.h.

◆ cmcp_resource_read_fn

typedef int(* cmcp_resource_read_fn) (const char *uri, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_contents, int *out_is_error)

Definition at line 262 of file cmcp_server.h.

◆ cmcp_prompt_handler_fn

typedef int(* cmcp_prompt_handler_fn) (const cmcp_json_t *arguments, void *userdata, cmcp_handler_ctx_t *hctx, cmcp_json_t **out_messages)

Definition at line 315 of file cmcp_server.h.

Function Documentation

◆ cmcp_server_new()

cmcp_server_t * cmcp_server_new ( const char *  name,
const char *  version 
)

◆ cmcp_server_free()

void cmcp_server_free ( cmcp_server_t s)

◆ cmcp_server_set_capabilities()

void cmcp_server_set_capabilities ( cmcp_server_t s,
const cmcp_server_capabilities_t caps 
)

◆ cmcp_server_set_description()

int cmcp_server_set_description ( cmcp_server_t s,
const char *  description 
)

◆ cmcp_server_client_description()

const char * cmcp_server_client_description ( const cmcp_server_t s)

◆ cmcp_handler_cancelled()

int cmcp_handler_cancelled ( const cmcp_handler_ctx_t hctx)

◆ cmcp_handler_progress()

int cmcp_handler_progress ( cmcp_handler_ctx_t hctx,
double  progress,
double  total,
const char *  message 
)

◆ cmcp_handler_get_header()

const char * cmcp_handler_get_header ( const cmcp_handler_ctx_t hctx,
const char *  name 
)

◆ cmcp_handler_set_structured()

void cmcp_handler_set_structured ( cmcp_handler_ctx_t hctx,
cmcp_json_t *  value 
)

◆ cmcp_server_add_tool()

int cmcp_server_add_tool ( cmcp_server_t s,
const cmcp_tool_t tool 
)

◆ cmcp_tool_text_content()

cmcp_json_t * cmcp_tool_text_content ( const char *  text)

◆ cmcp_tool_resource_link_content()

cmcp_json_t * cmcp_tool_resource_link_content ( const char *  uri,
const char *  name,
const char *  description,
const char *  mime_type 
)

◆ cmcp_server_add_resource()

int cmcp_server_add_resource ( cmcp_server_t s,
const cmcp_resource_t r 
)

◆ cmcp_resource_text_contents()

cmcp_json_t * cmcp_resource_text_contents ( const char *  uri,
const char *  mime_type,
const char *  text 
)

◆ cmcp_server_add_prompt()

int cmcp_server_add_prompt ( cmcp_server_t s,
const cmcp_prompt_t p 
)

◆ cmcp_prompt_text_messages()

cmcp_json_t * cmcp_prompt_text_messages ( const char *  role,
const char *  text 
)

◆ cmcp_server_run()

int cmcp_server_run ( cmcp_server_t s,
cmcp_transport_t *  t 
)

◆ cmcp_server_run_stdio()

int cmcp_server_run_stdio ( cmcp_server_t s)

◆ cmcp_server_client_caps()

const cmcp_client_capabilities_t * cmcp_server_client_caps ( const cmcp_server_t s)

◆ cmcp_server_client_name()

const char * cmcp_server_client_name ( const cmcp_server_t s)

◆ cmcp_server_client_version()

const char * cmcp_server_client_version ( const cmcp_server_t s)

◆ cmcp_server_notify()

int cmcp_server_notify ( cmcp_server_t s,
const char *  method,
cmcp_json_t *  params 
)

◆ cmcp_server_notify_tools_changed()

int cmcp_server_notify_tools_changed ( cmcp_server_t s)

◆ cmcp_server_notify_resources_changed()

int cmcp_server_notify_resources_changed ( cmcp_server_t s)

◆ cmcp_server_notify_prompts_changed()

int cmcp_server_notify_prompts_changed ( cmcp_server_t s)

◆ cmcp_server_notify_resource_updated()

int cmcp_server_notify_resource_updated ( cmcp_server_t s,
const char *  uri 
)

◆ cmcp_server_log()

int cmcp_server_log ( cmcp_server_t s,
cmcp_log_level_t  level,
const char *  logger,
cmcp_json_t *  data 
)

◆ cmcp_server_send_request()

int cmcp_server_send_request ( cmcp_server_t s,
cmcp_handler_ctx_t hctx,
const char *  method,
cmcp_json_t *  params,
cmcp_rpc_message_t out_response 
)

◆ cmcp_handler_elicit()

int cmcp_handler_elicit ( cmcp_handler_ctx_t hctx,
const char *  message,
cmcp_json_t *  requested_schema,
cmcp_json_t **  out_result 
)

◆ cmcp_handler_elicit_url()

int cmcp_handler_elicit_url ( cmcp_handler_ctx_t hctx,
const char *  message,
const char *  url,
cmcp_json_t **  out_result 
)