MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / processMessage

Method processMessage

app/src/API/MCPHandler.cpp:65–152  ·  view source on GitHub ↗

* @brief Process an incoming MCP message */

Source from the content-addressed store, hash-verified

63 * @brief Process an incoming MCP message
64 */
65QByteArray API::MCPHandler::processMessage(const QByteArray& data, const QString& sessionId)
66{
67 constexpr int kMaxBatchSize = 256;
68
69 QJsonParseError error;
70 const auto doc = QJsonDocument::fromJson(data, &error);
71
72 if (error.error != QJsonParseError::NoError) {
73 return MCP::MCPResponse::makeError(
74 QVariant(), MCP::ErrorCode::ParseError, QStringLiteral("JSON parse error"))
75 .toJsonBytes();
76 }
77
78 if (doc.isArray()) {
79 const auto batchArray = doc.array();
80
81 if (batchArray.isEmpty()) {
82 return MCP::MCPResponse::makeError(
83 QVariant(), MCP::ErrorCode::InvalidRequest, QStringLiteral("Batch cannot be empty"))
84 .toJsonBytes();
85 }
86
87 if (batchArray.size() > kMaxBatchSize) {
88 return MCP::MCPResponse::makeError(QVariant(),
89 MCP::ErrorCode::InvalidRequest,
90 QStringLiteral("Batch size exceeds limit of 256"))
91 .toJsonBytes();
92 }
93
94 QJsonArray responses;
95
96 for (const auto& item : batchArray) {
97 if (!item.isObject()) {
98 const auto errorResponse =
99 MCP::MCPResponse::makeError(
100 QVariant(), MCP::ErrorCode::InvalidRequest, QStringLiteral("Batch item must be object"))
101 .toJson();
102 responses.append(errorResponse);
103 continue;
104 }
105
106 const auto request = MCP::MCPRequest::fromJson(item.toObject());
107
108 if (!request.isValid()) {
109 const auto errorResponse =
110 MCP::MCPResponse::makeError(
111 request.id, MCP::ErrorCode::InvalidRequest, QStringLiteral("Invalid JSON-RPC request"))
112 .toJson();
113 responses.append(errorResponse);
114 continue;
115 }
116
117 if (request.isNotification()) {
118 processRequest(request, sessionId);
119 } else {
120 const auto response = processRequest(request, sessionId);
121 responses.append(response.toJson());
122 }

Callers 1

handleJsonMessageMethod · 0.45

Calls 8

fromJsonFunction · 0.85
isEmptyMethod · 0.80
isNotificationMethod · 0.80
toJsonBytesMethod · 0.45
sizeMethod · 0.45
toJsonMethod · 0.45
appendMethod · 0.45
isValidMethod · 0.45

Tested by

no test coverage detected