aissia/src/shared/mcp/MCPServer.hpp
StillHammer d17ee5fbdc feat: AISSIA rename and codebase updates
- Renamed project from Celuna to AISSIA
- Updated all documentation and configuration files
- Codebase improvements and fixes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 18:37:13 +07:00

86 lines
2.2 KiB
C++

#pragma once
#include "MCPTypes.hpp"
#include "../llm/ToolRegistry.hpp"
#include <spdlog/spdlog.h>
#include <nlohmann/json.hpp>
#include <thread>
#include <atomic>
#include <functional>
#include <string>
namespace celuna::mcp {
using json = nlohmann::json;
/**
* @brief MCP Server - Exposes AISSIA tools via MCP protocol
*
* Allows external clients (like Claude Code) to connect to AISSIA
* and use its tools via JSON-RPC over stdio.
*
* Usage:
* MCPServer server(toolRegistry);
* server.setServerInfo("aissia", "1.0.0");
* server.run(); // Blocking - reads stdin, writes stdout
*
* Or in a thread:
* std::thread serverThread([&]() { server.run(); });
*/
class MCPServer {
public:
explicit MCPServer(celuna::ToolRegistry& registry);
~MCPServer();
// Server configuration
void setServerInfo(const std::string& name, const std::string& version);
void setCapabilities(const json& capabilities);
// Run the server (blocking)
void run();
// Stop the server
void stop();
// Check if running
bool isRunning() const { return m_running; }
private:
// JSON-RPC handling
void processLine(const std::string& line);
json handleRequest(const JsonRpcRequest& request);
// MCP method handlers
json handleInitialize(const json& params);
json handleToolsList(const json& params);
json handleToolsCall(const json& params);
json handlePing(const json& params);
// IO
std::string readLine();
void writeLine(const std::string& line);
void sendResponse(int id, const json& result);
void sendError(int id, int code, const std::string& message);
void sendNotification(const std::string& method, const json& params = json::object());
// State
celuna::ToolRegistry& m_registry;
std::atomic<bool> m_running{false};
bool m_initialized{false};
// Server info
std::string m_serverName{"aissia"};
std::string m_serverVersion{"1.0.0"};
json m_capabilities;
// Client info (from initialize)
std::string m_clientName;
std::string m_clientVersion;
std::shared_ptr<spdlog::logger> m_logger;
};
} // namespace celuna::mcp