
Write HTML. Render video. Built for agents.
This repository provides a C++ implementation of the Model Context Protocol for building MCP servers and clients. It supports stdio, HTTP+SSE, Streamable HTTP, WebSocket, and TCP, with filters, observability, security, and a C API for other languages.
Builders who want to add MCP protocol support to C++ apps or expose it through bindings in other languages.
You can build MCP servers and clients in C++ and reuse them from other languages without rewriting the protocol layer.
Supports stdio, HTTP+SSE, HTTPS+SSE, Streamable HTTP, WebSocket, and TCP.
Implements MCP request, response, notification, and tool-calling flows on top of JSON-RPC 2.0.
Adds routing, CORS, rate limiting, circuit breaking, authentication, and metrics as composable filters.
Exposes `libgopher_mcp_c` so Python, TypeScript, Go, Rust, Java, C#, and Ruby can use the SDK.
Includes connection pooling, graceful shutdown, structured logging, and health endpoints.
Provides sample servers and clients under `examples/` and broad coverage under `tests/` and `shell/`.
# From Cygwin bash shell ./build-mingw.sh # Release build (default) ./build-mingw.sh debug # Debug build ./build-mingw.sh release # Release build ./build-mingw.sh clean # Clean build directory
The most comprehensive C++ implementation of the Model Context Protocol (MCP) for building AI-powered applications. Production-ready SDK with enterprise features including multi-transport support, connection pooling, and multi-language bindings via C API (Python, TypeScript, Go, Rust, Java, C#, Ruby and more).
⭐ Please give a star if you find this useful!
┌─────────────────────────────────────────────────────────────────────┐
│ Application Layer │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ MCP Server │ MCP Client │ Custom Applications │ │
│ └────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Cross-Language Binding Layer │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Python │ TypeScript │ Go │ Rust │ Java │ C# │ Ruby │ Swift │ │
│ └────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ C API (FFI Layer) │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ libgopher_mcp_c: Opaque Handles │ RAII Guards │ Type Safety │ │
│ └────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Protocol Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ JSON-RPC │ │ Requests │ │ Responses │ │ Notify │ │
│ │ Codec │ │ Dispatch │ │ Routing │ │ Stream │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Filter Chain Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ HTTP / SSE │ │ Routing │ │ Rate Limiter │ │ Auth │ │
│ │ Codecs │ │ & CORS │ │ Circuit Brk │ │ Metrics │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Transport Layer │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Stdio │ HTTP(S)+SSE │ Streamable HTTP │ WebSocket │ TCP │ │
│ └────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Network Layer │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ Connection │ │ Listener │ │ Socket │ │
│ │ Management │ │ & Accept │ │ Interface │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ Event Loop & Dispatcher │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Libevent │ Timer Management │ I/O Events │ Buffer │ Result │ │
│ └────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Use MCP C++ SDK from any programming language via the stable C API (libgopher_mcp_c):
| Language | Binding Type | Features |
|---|---|---|
| Python | ctypes/cffi | Async support, type hints |
| TypeScript/Node.js | N-API | High performance, native async |
| Go | CGO | Goroutine-safe wrappers |
| Rust | FFI | Safe wrappers, ownership guarantees |
| Java | JNI | Automatic resource management |
| C#/.NET | P/Invoke | Async/await support |
| Ruby | Native extension | GC integration |
# Installation paths
Headers: /usr/local/include/gopher-mcp/mcp/c_api/
Library: /usr/local/lib/libgopher_mcp_c.{so,dylib,dll}
Model Context Protocol (MCP) is an open protocol that enables AI models (like Claude, GPT, etc.) to securely interact with external tools, data sources, and services. MCP provides a standardized way for:
This MCP C++ SDK implements the official MCP specification in high-performance C++, suitable for:
| Category | Features |
|---|---|
| Protocol | Full MCP 2025-06-18, 2025-11-25 and 2026-07-28 specifications, JSON-RPC 2.0, resources, tools, prompts |
| Transports | stdio, HTTP+SSE, HTTPS+SSE, WebSocket, TCP |
| Performance | Zero-copy buffers, lock-free operations, connection pooling |
| Reliability | Circuit breaker, rate limiting, retry with backoff, graceful shutdown |
| Security | TLS/SSL, authentication middleware, request validation |
| Observability | Structured logging, metrics, health endpoints |
| Cross-Language | C API for Python, Node.js, Go, Rust, Java, C#, Ruby bindings |
# Show all available commands
make help
# Build
make
# Install (auto-prompts for sudo if needed)
make install
# Run tests
make test
#include "mcp/server/mcp_server.h"
int main() {
mcp::server::McpServerConfig config;
config.server_name = "my-mcp-server";
auto server = mcp::server::createMcpServer(config);
// Register a tool
mcp::Tool calculator;
calculator.name = "add";
calculator.description = "Add two numbers";
server->registerTool(calculator, [](const std::string& name,
const mcp::optional<mcp::Metadata>& arguments,
mcp::server::SessionContext& ctx) {
mcp::CallToolResult result;
auto args = arguments.value();
auto a_it = args.find("a");
auto b_it = args.find("b");
double a = mcp::holds_alternative<double>(a_it->second)
? mcp::get<double>(a_it->second) : 0.0;
double b = mcp::holds_alternative<double>(b_it->second)
? mcp::get<double>(b_it->second) : 0.0;
result.content.push_back(mcp::TextContent{"Result: " + std::to_string(a + b)});
return result;
});
server->listen("http://0.0.0.0:3000");
server->run();
}
#include "mcp/client/mcp_client.h"
int main() {
mcp::client::McpClientConfig config;
config.client_name = "my-mcp-client";
auto client = mcp::client::createMcpClient(config);
client->connect("http://localhost:3000");
// Initialize protocol
auto init = client->initializeProtocol().get();
// Call a tool
auto args = mcp::make<mcp::Metadata>()
.add("a", 10.0)
.add("b", 5.0)
.build();
auto result = client->callTool("add", mcp::make_optional(args)).get();
}
See examples/mcp/README.md for complete working examples:
# Terminal 1: Start server
./build/examples/mcp/mcp_example_server --verbose
# Terminal 2: Run client with demo
./build/examples/mcp/mcp_example_client --demo --verbose
The example server includes:
# Debug build
make debug
# Release build
make release
# Static libraries only
cmake -B build -DBUILD_SHARED_LIBS=OFF
# Without C API
cmake -B build -DBUILD_C_API=OFF
# Custom install prefix
cmake -B build -DCMAKE_INSTALL_PREFIX=~/.local
Building on Windows requires Cygwin with MinGW-w64 toolchain:
Install Cygwin with these packages:
make, cmake - Build toolsmingw64-x86_64-gcc-g++ - MinGW C++ compilermingw64-x86_64-libevent - Event librarymingw64-x86_64-openssl - SSL/TLS library# From Cygwin bash shell
./build-mingw.sh # Release build (default)
./build-mingw.sh debug # Debug build
./build-mingw.sh release # Release build
./build-mingw.sh clean # Clean build directory
build-mingw/build-mingw/examples/mcp/mcp_example_server.exeSeveral C++ implementations of the Model Context Protocol exist. They serve different needs — this table is meant to help you pick the right one:
| gopher-mcp (this SDK) | hkr04/cpp-mcp | Neumann-Labs/mcp-cpp | |
|---|---|---|---|
| Focus | Production / enterprise deployments | Lightweight, minimal footprint | Modern C++20 framework |
| MCP spec version | 2025-06-18, 2025-11-25, 2026-07-28 | 2025-03-26 | 2025-11-25 (in progress) |
| C++ standard | C++14 / 17 / 20 | C++17 | C++20 |
| Transports | stdio, HTTP+SSE, HTTPS, Streamable HTTP, WebSocket, TCP | stdio, HTTP+SSE | stdio, HTTP |
| Client + server | Yes | Yes | Yes |
| TLS | Yes | Yes (build flag) | — |
| Event model | Event-driven dispatcher (libevent), thread-safe by design | — | — |
| Resilience | Connection pooling, circuit breaker, rate limiting, backpressure | — | — |
| Observability | Metrics, tracing hooks, structured logging | — | — |
| Language bindings | Python, TypeScript, Go, Rust, Java, C#, Ruby via stable C API | C++ only | C++ only |
| License | Apache-2.0 | MIT | MIT |
If you need a small dependency for a quick stdio tool, a lightweight SDK like
cpp-mcp is a fine choice. If you need an MCP C++ SDK for production —
long-lived connections, multiple transports, observability, or calling the
SDK from other languages — that is what gopher-mcp is built for.
MCP is an open protocol by Anthropic that standardizes how AI models interact with external tools and data. It defines JSON-RPC methods for resources (data), tools (actions), and prompts (templates).
C++ provides maximum performance and portability. This SDK is ideal for embedded systems, real-time applications, game engines, and any environment where Python/Node.js overhead is unacceptable.
Yes. MCP is model-agnostic. Any AI system that supports MCP can use servers built with this SDK.
Use the C API bindings. The SDK provides a stable C interface that can be called from any language with FFI support.
Yes. The SDK includes connection pooling, circuit breakers, rate limiting, TLS support, and comprehensive error handling suitable for enterprise deployments.
See the comparison table. In short: gopher-mcp targets production use — more transports (Streamable HTTP, WebSocket, TCP), connection pooling, circuit breakers, observability, and multi-language bindings — while lighter SDKs optimize for minimal footprint.
See CONTRIBUTING.md for guidelines. Issues and pull requests welcome!
Using this MCP C++ SDK in your product or project? We'd love to list you here — open a pull request or issue to add yourself.
MCP C++, MCP CPP, Model Context Protocol C++, MCP SDK, C++ MCP, CPP MCP, Model Context Protocol CPP, MCP implementation, AI model integration C++, LLM integration C++, MCP server C++, MCP client C++, Model Context Protocol SDK, C++ AI SDK, Enterprise MCP, Production MCP C++
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
Apache License 2.0 - see LICENSE for details.
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Write HTML. Render video. Built for agents.
Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps
SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.
A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!