Skip to content

Commit 5f09c09

Browse files
committed
Fix clang-format styling for tasks/elicitation code
1 parent 2a7a7ec commit 5f09c09

9 files changed

Lines changed: 126 additions & 184 deletions

File tree

examples/context_elicitation.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@ int main()
108108

109109
std::cout << "[server] Calling Context::elicit()...\n\n";
110110

111-
ElicitationResult result =
112-
ctx.elicit("Please confirm your profile information:", base_schema);
111+
ElicitationResult result = ctx.elicit("Please confirm your profile information:", base_schema);
113112

114113
if (auto* accepted = std::get_if<AcceptedElicitation>(&result))
115114
{
@@ -128,4 +127,3 @@ int main()
128127
std::cout << "=== Example Complete ===\n";
129128
return 0;
130129
}
131-

examples/sse_elicitation_server.cpp

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include "fastmcpp/app.hpp"
1818
#include "fastmcpp/mcp/handler.hpp"
1919
#include "fastmcpp/server/context.hpp"
20-
#include "fastmcpp/server/sse_server.hpp"
2120
#include "fastmcpp/server/session.hpp"
21+
#include "fastmcpp/server/sse_server.hpp"
2222
#include "fastmcpp/tools/manager.hpp"
2323
#include "fastmcpp/util/json.hpp"
2424

@@ -29,11 +29,11 @@
2929
#include <string>
3030
#include <thread>
3131

32-
using fastmcpp::Json;
3332
using fastmcpp::FastMCP;
33+
using fastmcpp::Json;
3434
using fastmcpp::server::Context;
35-
using fastmcpp::server::SseServerWrapper;
3635
using fastmcpp::server::ServerSession;
36+
using fastmcpp::server::SseServerWrapper;
3737

3838
static std::atomic<bool> g_running{true};
3939

@@ -79,23 +79,21 @@ int main(int argc, char* argv[])
7979
Json{{"type", "object"},
8080
{"properties",
8181
Json{{"prompt",
82-
Json{{"type", "string"},
83-
{"description", "Prompt to display to the user"}}}}},
82+
Json{{"type", "string"}, {"description", "Prompt to display to the user"}}}}},
8483
{"required", Json::array({"prompt"})}},
8584
Json{{"type", "object"},
86-
{"properties",
87-
Json{{"name", Json{{"type", "string"}}},
88-
{"age", Json{{"type", "integer"}}},
89-
{"newsletter", Json{{"type", "boolean"}}}}},
85+
{"properties", Json{{"name", Json{{"type", "string"}}},
86+
{"age", Json{{"type", "integer"}}},
87+
{"newsletter", Json{{"type", "boolean"}}}}},
9088
{"required", Json::array({"name", "age"})}},
9189
// Tool implementation; actual elicitation wiring is done in the MCP handler
9290
[](const Json& args) -> Json
9391
{
9492
// This body will be replaced by the MCP handler's Context-based path.
9593
// If invoked directly, just echo the prompt for debugging.
9694
std::string prompt = args.value("prompt", std::string("Please fill in your profile"));
97-
return Json{{"content",
98-
Json::array({Json{{"type", "text"}, {"text", "Prompt: " + prompt}}})}};
95+
return Json{
96+
{"content", Json::array({Json{{"type", "text"}, {"text", "Prompt: " + prompt}}})}};
9997
}};
10098

10199
app.tools().register_tool(ask_user_profile);
@@ -141,9 +139,7 @@ int main(int argc, char* argv[])
141139
}
142140

143141
if (method == "ping")
144-
{
145142
return Json{{"jsonrpc", "2.0"}, {"id", id}, {"result", Json::object()}};
146-
}
147143

148144
if (method == "tools/list")
149145
{
@@ -154,9 +150,8 @@ int main(int argc, char* argv[])
154150
Json entry = {{"name", tool.name()}, {"inputSchema", tool.input_schema()}};
155151
tools_array.push_back(entry);
156152
}
157-
return Json{{"jsonrpc", "2.0"},
158-
{"id", id},
159-
{"result", Json{{"tools", tools_array}}}};
153+
return Json{
154+
{"jsonrpc", "2.0"}, {"id", id}, {"result", Json{{"tools", tools_array}}}};
160155
}
161156

162157
if (method == "tools/call")
@@ -165,10 +160,10 @@ int main(int argc, char* argv[])
165160
Json args = params.value("arguments", Json::object());
166161
if (name.empty())
167162
{
168-
return Json{{"jsonrpc", "2.0"},
169-
{"id", id},
170-
{"error",
171-
Json{{"code", -32602}, {"message", "Missing tool name"}}}};
163+
return Json{
164+
{"jsonrpc", "2.0"},
165+
{"id", id},
166+
{"error", Json{{"code", -32602}, {"message", "Missing tool name"}}}};
172167
}
173168

174169
if (name == "ask_user_profile")
@@ -203,13 +198,11 @@ int main(int argc, char* argv[])
203198
if (!ctx.has_elicitation())
204199
{
205200
// No client-side elicitation support; degrade gracefully.
206-
Json content = Json::array({Json{
207-
{"type", "text"},
208-
{"text",
209-
"Elicitation not available; prompt was: " + prompt}}});
210-
return Json{{"jsonrpc", "2.0"},
211-
{"id", id},
212-
{"result", Json{{"content", content}}}};
201+
Json content = Json::array(
202+
{Json{{"type", "text"},
203+
{"text", "Elicitation not available; prompt was: " + prompt}}});
204+
return Json{
205+
{"jsonrpc", "2.0"}, {"id", id}, {"result", Json{{"content", content}}}};
213206
}
214207

215208
auto result = ctx.elicit(prompt, base_schema);
@@ -218,9 +211,9 @@ int main(int argc, char* argv[])
218211
if (auto* accepted =
219212
std::get_if<fastmcpp::server::AcceptedElicitation>(&result))
220213
{
221-
content.push_back(Json{
222-
{"type", "text"},
223-
{"text", std::string("User profile: ") + accepted->data.dump()}});
214+
content.push_back(
215+
Json{{"type", "text"},
216+
{"text", std::string("User profile: ") + accepted->data.dump()}});
224217
}
225218
else if (std::holds_alternative<fastmcpp::server::DeclinedElicitation>(result))
226219
{
@@ -233,9 +226,8 @@ int main(int argc, char* argv[])
233226
Json{{"type", "text"}, {"text", "User cancelled elicitation"}});
234227
}
235228

236-
return Json{{"jsonrpc", "2.0"},
237-
{"id", id},
238-
{"result", Json{{"content", content}}}};
229+
return Json{
230+
{"jsonrpc", "2.0"}, {"id", id}, {"result", Json{{"content", content}}}};
239231
}
240232

241233
// Fallback: direct FastMCP invoke_tool
@@ -246,21 +238,19 @@ int main(int argc, char* argv[])
246238
else if (result.is_array())
247239
content = result;
248240
else if (result.is_string())
249-
content = Json::array(
250-
{Json{{"type", "text"}, {"text", result.get<std::string>()}}});
241+
content =
242+
Json::array({Json{{"type", "text"}, {"text", result.get<std::string>()}}});
251243
else
252244
content = Json::array({Json{{"type", "text"}, {"text", result.dump()}}});
253245

254-
return Json{{"jsonrpc", "2.0"},
255-
{"id", id},
256-
{"result", Json{{"content", content}}}};
246+
return Json{{"jsonrpc", "2.0"}, {"id", id}, {"result", Json{{"content", content}}}};
257247
}
258248

259-
return Json{{"jsonrpc", "2.0"},
260-
{"id", id},
261-
{"error",
262-
Json{{"code", -32601},
263-
{"message", std::string("Method '") + method + "' not found"}}}};
249+
return Json{
250+
{"jsonrpc", "2.0"},
251+
{"id", id},
252+
{"error", Json{{"code", -32601},
253+
{"message", std::string("Method '") + method + "' not found"}}}};
264254
}
265255
catch (const std::exception& e)
266256
{

include/fastmcpp/client/client.hpp

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,8 @@ class Client
333333
/// @param arguments Tool arguments
334334
/// @param ttl_ms Time to keep results available in milliseconds (hint to server)
335335
/// @return Shared pointer to ToolTask wrapper
336-
std::shared_ptr<ToolTask>
337-
call_tool_task(const std::string& name, const fastmcpp::Json& arguments,
338-
int ttl_ms = 60000);
336+
std::shared_ptr<ToolTask> call_tool_task(const std::string& name,
337+
const fastmcpp::Json& arguments, int ttl_ms = 60000);
339338

340339
/// Query status of a background task via MCP 'tasks/get'.
341340
/// @throws fastmcpp::Error if server does not support tasks or returns error
@@ -424,8 +423,7 @@ class Client
424423
/// that polls 'tasks/get' and 'tasks/result'. When the server executes
425424
/// synchronously (no task support), ResourceTask wraps the immediate
426425
/// contents result.
427-
std::shared_ptr<ResourceTask> read_resource_task(const std::string& uri,
428-
int ttl_ms = 60000);
426+
std::shared_ptr<ResourceTask> read_resource_task(const std::string& uri, int ttl_ms = 60000);
429427

430428
// ==========================================================================
431429
// Prompt Operations
@@ -479,8 +477,7 @@ class Client
479477
/// synchronously (no task support), PromptTask wraps the immediate result.
480478
std::shared_ptr<PromptTask>
481479
get_prompt_task(const std::string& name,
482-
const fastmcpp::Json& arguments = fastmcpp::Json::object(),
483-
int ttl_ms = 60000);
480+
const fastmcpp::Json& arguments = fastmcpp::Json::object(), int ttl_ms = 60000);
484481

485482
// ==========================================================================
486483
// Completion Operations
@@ -1058,8 +1055,7 @@ class ToolTask
10581055
/// Wait until the task reaches the desired state or timeout elapses.
10591056
/// If timeout_ms == 0, waits until terminal state.
10601057
TaskStatus wait(const std::string& desired_state = "completed",
1061-
std::chrono::milliseconds timeout_ms =
1062-
std::chrono::milliseconds(60000)) const
1058+
std::chrono::milliseconds timeout_ms = std::chrono::milliseconds(60000)) const
10631059
{
10641060
auto start = std::chrono::steady_clock::now();
10651061

@@ -1069,8 +1065,7 @@ class ToolTask
10691065
if (s.status == desired_state || s.status == "failed" || s.status == "cancelled")
10701066
return s;
10711067

1072-
if (timeout_ms.count() > 0 &&
1073-
std::chrono::steady_clock::now() - start >= timeout_ms)
1068+
if (timeout_ms.count() > 0 && std::chrono::steady_clock::now() - start >= timeout_ms)
10741069
return s;
10751070

10761071
int poll_ms = s.pollInterval.value_or(1000);
@@ -1140,17 +1135,16 @@ class ToolTask
11401135
inline static std::atomic<uint64_t> next_synthetic_id_{0};
11411136
};
11421137

1143-
inline std::shared_ptr<ToolTask>
1144-
Client::call_tool_task(const std::string& name, const fastmcpp::Json& arguments, int ttl_ms)
1138+
inline std::shared_ptr<ToolTask> Client::call_tool_task(const std::string& name,
1139+
const fastmcpp::Json& arguments, int ttl_ms)
11451140
{
11461141
CallToolOptions opts;
11471142
opts.timeout = std::chrono::milliseconds{0};
11481143
opts.progress_handler = nullptr;
11491144

11501145
// Attach task metadata in _meta (mirrors Python fastmcp)
11511146
fastmcpp::Json task_meta = {{"ttl", ttl_ms}};
1152-
opts.meta = fastmcpp::Json{
1153-
{"modelcontextprotocol.io/task", std::move(task_meta)}};
1147+
opts.meta = fastmcpp::Json{{"modelcontextprotocol.io/task", std::move(task_meta)}};
11541148

11551149
auto result = call_tool_mcp(name, arguments, opts);
11561150

@@ -1222,8 +1216,7 @@ class PromptTask
12221216
}
12231217

12241218
TaskStatus wait(const std::string& desired_state = "completed",
1225-
std::chrono::milliseconds timeout_ms =
1226-
std::chrono::milliseconds(60000)) const
1219+
std::chrono::milliseconds timeout_ms = std::chrono::milliseconds(60000)) const
12271220
{
12281221
auto start = std::chrono::steady_clock::now();
12291222

@@ -1233,8 +1226,7 @@ class PromptTask
12331226
if (s.status == desired_state || s.status == "failed" || s.status == "cancelled")
12341227
return s;
12351228

1236-
if (timeout_ms.count() > 0 &&
1237-
std::chrono::steady_clock::now() - start >= timeout_ms)
1229+
if (timeout_ms.count() > 0 && std::chrono::steady_clock::now() - start >= timeout_ms)
12381230
return s;
12391231

12401232
int poll_ms = s.pollInterval.value_or(1000);
@@ -1280,8 +1272,7 @@ class ResourceTask
12801272
public:
12811273
ResourceTask(Client* client, std::string task_id, std::string uri,
12821274
std::optional<std::vector<ResourceContent>> immediate_contents)
1283-
: client_(client), uri_(std::move(uri)),
1284-
immediate_contents_(std::move(immediate_contents))
1275+
: client_(client), uri_(std::move(uri)), immediate_contents_(std::move(immediate_contents))
12851276
{
12861277
if (!client_)
12871278
throw fastmcpp::Error("ResourceTask requires non-null client");
@@ -1326,8 +1317,7 @@ class ResourceTask
13261317
}
13271318

13281319
TaskStatus wait(const std::string& desired_state = "completed",
1329-
std::chrono::milliseconds timeout_ms =
1330-
std::chrono::milliseconds(60000)) const
1320+
std::chrono::milliseconds timeout_ms = std::chrono::milliseconds(60000)) const
13311321
{
13321322
auto start = std::chrono::steady_clock::now();
13331323

@@ -1337,8 +1327,7 @@ class ResourceTask
13371327
if (s.status == desired_state || s.status == "failed" || s.status == "cancelled")
13381328
return s;
13391329

1340-
if (timeout_ms.count() > 0 &&
1341-
std::chrono::steady_clock::now() - start >= timeout_ms)
1330+
if (timeout_ms.count() > 0 && std::chrono::steady_clock::now() - start >= timeout_ms)
13421331
return s;
13431332

13441333
int poll_ms = s.pollInterval.value_or(1000);
@@ -1377,32 +1366,27 @@ class ResourceTask
13771366
inline static std::atomic<uint64_t> next_synthetic_id_{0};
13781367
};
13791368

1380-
inline std::shared_ptr<ResourceTask>
1381-
Client::read_resource_task(const std::string& uri, int ttl_ms)
1369+
inline std::shared_ptr<ResourceTask> Client::read_resource_task(const std::string& uri, int ttl_ms)
13821370
{
13831371
fastmcpp::Json payload = {{"uri", uri}};
13841372

13851373
fastmcpp::Json task_meta = {{"ttl", ttl_ms}};
1386-
payload["_meta"] = fastmcpp::Json{
1387-
{"modelcontextprotocol.io/task", std::move(task_meta)}};
1374+
payload["_meta"] = fastmcpp::Json{{"modelcontextprotocol.io/task", std::move(task_meta)}};
13881375

13891376
auto response = call("resources/read", payload);
13901377

1391-
if (response.contains("_meta") &&
1392-
response["_meta"].contains("modelcontextprotocol.io/task"))
1378+
if (response.contains("_meta") && response["_meta"].contains("modelcontextprotocol.io/task"))
13931379
{
13941380
const auto& task_obj = response["_meta"]["modelcontextprotocol.io/task"];
13951381
if (task_obj.contains("taskId"))
13961382
{
13971383
std::string task_id = task_obj["taskId"].get<std::string>();
1398-
return std::make_shared<ResourceTask>(this, std::move(task_id), uri,
1399-
std::nullopt);
1384+
return std::make_shared<ResourceTask>(this, std::move(task_id), uri, std::nullopt);
14001385
}
14011386
}
14021387

14031388
ReadResourceResult result = parse_read_resource_result(response);
1404-
return std::make_shared<ResourceTask>(this, std::string{}, uri,
1405-
std::move(result.contents));
1389+
return std::make_shared<ResourceTask>(this, std::string{}, uri, std::move(result.contents));
14061390
}
14071391

14081392
inline std::shared_ptr<PromptTask>
@@ -1421,20 +1405,17 @@ Client::get_prompt_task(const std::string& name, const fastmcpp::Json& arguments
14211405
}
14221406

14231407
fastmcpp::Json task_meta = {{"ttl", ttl_ms}};
1424-
payload["_meta"] = fastmcpp::Json{
1425-
{"modelcontextprotocol.io/task", std::move(task_meta)}};
1408+
payload["_meta"] = fastmcpp::Json{{"modelcontextprotocol.io/task", std::move(task_meta)}};
14261409

14271410
auto response = call("prompts/get", payload);
14281411

1429-
if (response.contains("_meta") &&
1430-
response["_meta"].contains("modelcontextprotocol.io/task"))
1412+
if (response.contains("_meta") && response["_meta"].contains("modelcontextprotocol.io/task"))
14311413
{
14321414
const auto& task_obj = response["_meta"]["modelcontextprotocol.io/task"];
14331415
if (task_obj.contains("taskId"))
14341416
{
14351417
std::string task_id = task_obj["taskId"].get<std::string>();
1436-
return std::make_shared<PromptTask>(this, std::move(task_id), name,
1437-
std::nullopt);
1418+
return std::make_shared<PromptTask>(this, std::move(task_id), name, std::nullopt);
14381419
}
14391420
}
14401421

include/fastmcpp/server/context.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#pragma once
22
#include "fastmcpp/prompts/prompt.hpp"
33
#include "fastmcpp/resources/resource.hpp"
4-
#include "fastmcpp/types.hpp"
54
#include "fastmcpp/server/elicitation.hpp"
65
#include "fastmcpp/server/session.hpp"
6+
#include "fastmcpp/types.hpp"
77

88
#include <any>
99
#include <functional>
@@ -85,7 +85,8 @@ struct CancelledElicitation
8585
{
8686
};
8787

88-
using ElicitationResult = std::variant<AcceptedElicitation, DeclinedElicitation, CancelledElicitation>;
88+
using ElicitationResult =
89+
std::variant<AcceptedElicitation, DeclinedElicitation, CancelledElicitation>;
8990

9091
/// Callback type for elicitation: takes user-facing message and elicitation schema,
9192
/// returns an ElicitationResult describing the user response.
@@ -104,8 +105,8 @@ make_elicitation_callback(std::shared_ptr<ServerSession> session,
104105
if (!session)
105106
return {};
106107

107-
return [session, related_request_id,
108-
timeout](const std::string& message, const fastmcpp::Json& schema) -> ElicitationResult
108+
return [session, related_request_id, timeout](const std::string& message,
109+
const fastmcpp::Json& schema) -> ElicitationResult
109110
{
110111
fastmcpp::Json params = {{"message", message}, {"requestedSchema", schema}};
111112
if (related_request_id && !related_request_id->empty())

0 commit comments

Comments
 (0)