Content
# 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());
```