mcp-c
@ZenWayne
mcp server frarmwork written in c, developing efficiently and effortlessly
Overview
What is mcp-c?
mcp-c is a framework written in C for building Model Context Protocol (MCP) servers efficiently. It uses annotation-based code generation to automate boilerplate, letting developers focus only on writing the server functions.
How to use mcp-c?
Write your MCP tools in src/mcp_server using the EXPORT and EXPORT_AS macros on functions and structs. Build with cmake -B build -S . && cmake --build ., then run the generated binary with ./mcpc (Windows users need vcpkg). The build process runs a code generator that creates serialization code and tool lists automatically.
Key features of mcp-c
- Annotate C structs to auto‑generate JSON schema definitions.
- Export function names as tool handlers via
EXPORT_ASmacro. - Automatic serialization between JSON and C structs.
- Built‑in bridge code generation for tool input/output parsing.
- Supports enums, nested structs, and descriptions with
DESmacro.
Use cases of mcp-c
- Rapidly prototyping an MCP server in C with minimal manual coding.
- Automatically generating JSON schemas for complex nested data types.
- Creating custom MCP tools without writing repetitive glue code.
- Integrating MCP capabilities into existing C‑based projects.
FAQ from mcp-c
What macros are available in mcp-c?
EXPORT marks a struct or function for export; EXPORT_AS(name) gives it a custom name for tool mapping; DES("description") adds JSON schema descriptions.
How do I define a tool in mcp-c?
Write a C function that returns cJSON* and annotate it with EXPORT_AS(tool_name). The tool name can be anything, including tools/list for the standard MCP list endpoint.
What files does the code generator produce?
It generates generated_bridge_code.c (JSON‑to‑struct parsing) and generated_function_signatures.c (struct definitions and the get_all_function_signatures_json function).
What are the prerequisites to build mcp-c?
You need cmake, clang, and cJSON. On Windows, vcpkg is also required.
How is the generated JSON schema structured?
It follows a $defs-based JSON Schema draft‑07 format, with separate definitions for enums, objects, and their properties, plus a tools array listing each exported tool and its input schema.