---
slug: "oatpp"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/oatpp/oatpp-mcp@main/README.md"
repo: "https://github.com/oatpp/oatpp-mcp"
source_file: "README.md"
branch: "main"
---
# oatpp-mcp

Anthropic’s Model Context Protocol implementation for Oat++

Read more:
- [About Oat++](https://oatpp.io/)
- [Oat++ Repository](https://github.com/oatpp/oatpp)
- [Model Context Protocol](https://www.anthropic.com/news/model-context-protocol)

## Supported features

### Autogenerated tools for API

:tada: `oatpp-mcp` can automatically generate tools from `ApiController` so that you can query your API with LLM. :tada:  

- [Detailed tutorial](https://medium.com/oatpp/c-restful-web-service-with-autogenerated-mcp-server-to-connect-with-llms-156d68bbb661)
- Example project [example-crud](https://github.com/oatpp/example-crud) (branch `add_mcp_server`)

### Transport

- STDIO
- HTTP SSE

### Server features

- [Prompts](https://spec.modelcontextprotocol.io/specification/server/prompts/)
- [Resources](https://spec.modelcontextprotocol.io/specification/server/resources/)
- [Tools](https://spec.modelcontextprotocol.io/specification/server/tools/)

## Build And Install

### Pre Requirements

- Install the main [oatpp](https://github.com/oatpp/oatpp) module

### Install module

- Clone this repository.
- In the root of the repository run:
   ```bash
   mkdir build && cd build
   cmake ..
   make install
   ```
  
## Examples

Find working example in tests `/test/oatpp-mcp/app/ServerTest.cpp`

### Serve via STDIO

**Note:** make sure to redirect oatpp logging to a different stream - ex.: to file by providing custom Logger.

```cpp
  /* Create MCP server */
  oatpp::mcp::Server server;

  /* Add prompts */
  server.addPrompt(std::make_shared<prompts::CodeReview>());

  /* Add resource */
  server.addResource(std::make_shared<resource::File>());
  
  /* Add tools */
  server.addTool(std::make_shared<tools::Logger>());

  /* Run server */
  server.stdioListen(); 
```

### Serve via SSE

```cpp
  /* Create MCP server */
  oatpp::mcp::Server server;

  /* Add prompts */
  server.addPrompt(std::make_shared<prompts::CodeReview>());

  /* Add resource */
  server.addResource(std::make_shared<resource::File>());
  
  /* Add tools */
  server.addTool(std::make_shared<tools::Logger>());

  /* Add SSE controller to your HTTP server router */
  router->addController(server.getSseController());
```

