* @brief Handle MCP initialize request */
| 246 | * @brief Handle MCP initialize request |
| 247 | */ |
| 248 | API::MCP::MCPResponse API::MCPHandler::handleInitialize(const MCP::MCPRequest& request, |
| 249 | const QString& sessionId) |
| 250 | { |
| 251 | auto& session = m_sessions[sessionId]; |
| 252 | |
| 253 | const auto clientInfo = request.params.value(QStringLiteral("clientInfo")).toObject(); |
| 254 | session.clientName = clientInfo.value(QStringLiteral("name")).toString(); |
| 255 | session.clientVersion = clientInfo.value(QStringLiteral("version")).toString(); |
| 256 | session.initialized = true; |
| 257 | |
| 258 | QJsonObject result; |
| 259 | result[QStringLiteral("protocolVersion")] = MCP::kProtocolVersion; |
| 260 | |
| 261 | QJsonObject serverInfo; |
| 262 | serverInfo[QStringLiteral("name")] = APP_NAME; |
| 263 | serverInfo[QStringLiteral("version")] = APP_VERSION; |
| 264 | result[QStringLiteral("serverInfo")] = serverInfo; |
| 265 | |
| 266 | QJsonObject capabilities; |
| 267 | capabilities[QStringLiteral("tools")] = QJsonObject(); |
| 268 | capabilities[QStringLiteral("resources")] = QJsonObject{ |
| 269 | {QStringLiteral("subscribe"), true} |
| 270 | }; |
| 271 | capabilities[QStringLiteral("prompts")] = QJsonObject(); |
| 272 | result[QStringLiteral("capabilities")] = capabilities; |
| 273 | |
| 274 | return MCP::MCPResponse::makeSuccess(request.id, result); |
| 275 | } |
| 276 | |
| 277 | /** |
| 278 | * @brief Handle MCP ping request |
nothing calls this directly
no test coverage detected