26namespace mcp::protocol {
60 if (value ==
"user") {
63 if (value ==
"assistant") {
64 return Role::Assistant;
82 std::optional<ToolChoiceMode>
mode;
149 item.
content = std::move(value);
208 static constexpr bool defined =
true;
209 static auto fields() {
213 static std::vector<std::string> known_keys() {
return {
"name"}; }
249 std::optional<TaskRequestParameters>
task;
279 std::string
model = {}) {
291 static_cast<int>(ErrorCode::InvalidRequest), std::move(message), {}};
305 case ContextInclusion::AllServers:
307 case ContextInclusion::None:
309 case ContextInclusion::ThisServer:
317 std::string_view value) {
318 if (value ==
"allServers") {
319 return ContextInclusion::AllServers;
321 if (value ==
"none") {
322 return ContextInclusion::None;
324 if (value ==
"thisServer") {
325 return ContextInclusion::ThisServer;
337 return std::isfinite(value);
343 bool has_tool_result =
false;
344 bool has_non_tool_result =
false;
345 for (
const auto& content : message.
contents) {
346 if (content.is_tool_use() && message.
role !=
"assistant") {
348 "sampling tool_use content is only allowed in assistant messages"));
350 if (content.is_tool_result() && message.
role !=
"user") {
352 "sampling tool_result content is only allowed in user messages"));
354 has_tool_result = has_tool_result || content.is_tool_result();
355 has_non_tool_result = has_non_tool_result || !content.is_tool_result();
357 if (has_tool_result && has_non_tool_result) {
359 "sampling tool_result messages must not mix other content types"));
366 const std::vector<SamplingMessage>& messages) {
367 std::vector<std::string> pending_tool_use_ids;
368 for (
const auto& message : messages) {
369 if (message.role ==
"assistant") {
370 for (
const auto& content : message.contents) {
371 if (content.tool_use.has_value()) {
372 pending_tool_use_ids.push_back(content.tool_use->id);
377 if (message.role !=
"user") {
380 for (
const auto& content : message.contents) {
381 if (!content.tool_result.has_value()) {
385 std::find(pending_tool_use_ids.begin(), pending_tool_use_ids.end(),
386 content.tool_result->tool_use_id);
387 if (found == pending_tool_use_ids.end()) {
389 "sampling tool_result content has no matching tool_use"));
391 pending_tool_use_ids.erase(found);
394 if (!pending_tool_use_ids.empty()) {
396 "sampling tool_use content is missing a matching tool_result"));
404 case ToolChoiceMode::Auto:
406 case ToolChoiceMode::Required:
408 case ToolChoiceMode::None:
416 const std::string& value) {
417 if (value ==
"auto") {
418 return ToolChoiceMode::Auto;
420 if (value ==
"required") {
421 return ToolChoiceMode::Required;
423 if (value ==
"none") {
424 return ToolChoiceMode::None;
434 static bool deserialize(
const Json& json,
const char* key,
436 if (!json.contains(key) || !json.at(key).is_string()) {
440 if (!val.has_value()) {
450 Json json = Json::object();
451 if (choice.
mode.has_value()) {
460 if (!json.is_object()) {
461 return mcp::core::unexpected(
465 if (json.contains(
"mode")) {
466 if (!json.at(
"mode").is_string()) {
467 return mcp::core::unexpected(
472 if (!mode.has_value()) {
473 return mcp::core::unexpected(
484 Json json = Json::object();
485 json[
"type"] =
"tool_use";
486 json[
"id"] = content.
id;
487 json[
"name"] = content.
name;
488 json[
"input"] = content.
input;
489 if (content.
meta.has_value()) {
490 json[
"_meta"] = *content.
meta;
499 if (!json.is_object()) {
500 return mcp::core::unexpected(
503 if (!json.contains(
"id") || !json.at(
"id").is_string()) {
504 return mcp::core::unexpected(
507 if (!json.contains(
"name") || !json.at(
"name").is_string()) {
508 return mcp::core::unexpected(
511 if (!json.contains(
"input") || !json.at(
"input").is_object()) {
512 return mcp::core::unexpected(
516 content.
id = json.at(
"id").get<std::string>();
517 content.
name = json.at(
"name").get<std::string>();
518 content.
input = json.at(
"input");
519 if (json.contains(
"_meta")) {
520 if (!json.at(
"_meta").is_object()) {
521 return mcp::core::unexpected(
524 content.
meta = json.at(
"_meta");
533 Json json = Json::object();
534 json[
"type"] =
"tool_result";
536 if (!content.
content.empty()) {
537 json[
"content"] = Json::array();
538 for (
const auto& block : content.
content) {
546 json[
"isError"] = *content.
is_error;
548 if (content.
meta.has_value()) {
549 json[
"_meta"] = *content.
meta;
558 if (!json.is_object()) {
559 return mcp::core::unexpected(
562 if (!json.contains(
"toolUseId") || !json.at(
"toolUseId").is_string()) {
563 return mcp::core::unexpected(
567 content.
tool_use_id = json.at(
"toolUseId").get<std::string>();
568 if (json.contains(
"content")) {
569 if (!json.at(
"content").is_array()) {
570 return mcp::core::unexpected(
573 for (
const auto& item : json.at(
"content")) {
576 return mcp::core::unexpected(block.error());
578 content.
content.push_back(*block);
581 if (json.contains(
"structuredContent")) {
582 if (!json.at(
"structuredContent").is_object()) {
584 "tool_result structuredContent must be an object"));
588 if (json.contains(
"isError")) {
589 if (!json.at(
"isError").is_boolean()) {
590 return mcp::core::unexpected(
593 content.
is_error = json.at(
"isError").get<
bool>();
595 if (json.contains(
"_meta")) {
596 if (!json.at(
"_meta").is_object()) {
597 return mcp::core::unexpected(
600 content.
meta = json.at(
"_meta");
604 "structuredContent",
"isError",
"_meta"});
623 if (json.is_object() && json.contains(
"type") &&
624 json.at(
"type").is_string()) {
625 const auto type = json.at(
"type").get<std::string>();
626 if (type ==
"tool_use") {
629 return mcp::core::unexpected(tool_use.error());
633 if (type ==
"tool_result") {
636 return mcp::core::unexpected(tool_result.error());
644 return mcp::core::unexpected(block.error());
646 if (block->type ==
"resource" || block->type ==
"resource_link") {
648 "sampling message content does not support resource content"));
661 json[
"content"] = Json::array();
662 for (
const auto& content : message.
contents) {
669 if (message.
meta.has_value()) {
670 json[
"_meta"] = *message.
meta;
680 if (!json.is_object()) {
681 return mcp::core::unexpected(
684 if (!json.contains(
"role") || !json.at(
"role").is_string()) {
685 return mcp::core::unexpected(
688 if (!json.contains(
"content")) {
689 return mcp::core::unexpected(
693 message.
role = json.at(
"role").get<std::string>();
695 return mcp::core::unexpected(
698 if (json.at(
"content").is_array()) {
699 for (
const auto& item : json.at(
"content")) {
702 return mcp::core::unexpected(content.error());
704 message.
contents.push_back(*content);
709 return mcp::core::unexpected(content.error());
711 message.
contents.push_back(*content);
716 if (json.contains(
"_meta")) {
717 if (!json.at(
"_meta").is_object()) {
718 return mcp::core::unexpected(
721 message.
meta = json.at(
"_meta");
727 return mcp::core::unexpected(valid.error());
740 return reflect_from_json<ModelHint>(json);
745 Json json = Json::object();
746 if (!preferences.
hints.empty()) {
747 json[
"hints"] = Json::array();
748 for (
const auto& hint : preferences.
hints) {
769 if (!json.is_object()) {
770 return mcp::core::unexpected(
774 if (json.contains(
"hints")) {
775 if (!json.at(
"hints").is_array()) {
776 return mcp::core::unexpected(
779 for (
const auto& item : json.at(
"hints")) {
782 return mcp::core::unexpected(hint.error());
784 preferences.
hints.push_back(*hint);
787 const auto read_priority =
790 if (!json.contains(key)) {
793 if (!json.at(key).is_number()) {
795 std::string(
"model preferences ") + key +
" must be a number"));
797 const auto value = json.at(key).get<
double>();
800 std::string(
"model preferences ") + key +
" must be finite"));
805 if (
const auto ok = read_priority(
"costPriority", preferences.
cost_priority);
807 return mcp::core::unexpected(ok.error());
812 return mcp::core::unexpected(ok.error());
814 if (
const auto ok = read_priority(
"intelligencePriority",
817 return mcp::core::unexpected(ok.error());
820 json, {
"hints",
"costPriority",
"speedPriority",
"intelligencePriority"});
826 Json json = Json::object();
827 json[
"messages"] = Json::array();
828 for (
const auto& message : params.
messages) {
832 json[
"modelPreferences"] =
851 if (params.
task.has_value()) {
854 if (params.
meta.has_value()) {
855 json[
"_meta"] = *params.
meta;
857 if (!params.
tools.empty()) {
858 json[
"tools"] = Json::array();
859 for (
const auto& tool : params.
tools) {
874 if (!json.is_object()) {
875 return mcp::core::unexpected(
878 if (!json.contains(
"messages") || !json.at(
"messages").is_array()) {
880 "sampling/createMessage params require a messages array"));
882 if (!json.contains(
"maxTokens") ||
883 !json.at(
"maxTokens").is_number_integer()) {
885 "sampling/createMessage params require integer maxTokens"));
889 for (
const auto& item : json.at(
"messages")) {
892 return mcp::core::unexpected(message.error());
894 params.
messages.push_back(*message);
896 if (json.contains(
"modelPreferences")) {
897 const auto preferences =
900 return mcp::core::unexpected(preferences.error());
904 if (json.contains(
"systemPrompt")) {
905 if (!json.at(
"systemPrompt").is_string()) {
906 return mcp::core::unexpected(
909 params.
system_prompt = json.at(
"systemPrompt").get<std::string>();
911 if (json.contains(
"includeContext")) {
912 if (!json.at(
"includeContext").is_string()) {
913 return mcp::core::unexpected(
918 return mcp::core::unexpected(
922 if (json.contains(
"temperature")) {
923 if (!json.at(
"temperature").is_number()) {
924 return mcp::core::unexpected(
927 const auto temperature = json.at(
"temperature").get<
double>();
929 return mcp::core::unexpected(
934 params.
max_tokens = json.at(
"maxTokens").get<
int>();
935 if (json.contains(
"stopSequences")) {
936 if (!json.at(
"stopSequences").is_array()) {
937 return mcp::core::unexpected(
940 for (
const auto& item : json.at(
"stopSequences")) {
941 if (!item.is_string()) {
942 return mcp::core::unexpected(
948 if (json.contains(
"metadata")) {
949 if (!json.at(
"metadata").is_object()) {
950 return mcp::core::unexpected(
953 params.
metadata = json.at(
"metadata");
955 if (json.contains(
"task")) {
958 return mcp::core::unexpected(task.error());
962 if (json.contains(
"_meta")) {
963 if (!json.at(
"_meta").is_object()) {
965 "sampling/createMessage _meta must be an object"));
967 params.
meta = json.at(
"_meta");
969 if (json.contains(
"tools")) {
970 if (!json.at(
"tools").is_array()) {
971 return mcp::core::unexpected(
974 for (
const auto& item : json.at(
"tools")) {
977 return mcp::core::unexpected(tool.error());
979 params.
tools.push_back(*tool);
982 if (json.contains(
"toolChoice")) {
985 return mcp::core::unexpected(tool_choice.error());
990 json, {
"messages",
"modelPreferences",
"systemPrompt",
"includeContext",
991 "temperature",
"maxTokens",
"stopSequences",
"metadata",
"task",
992 "_meta",
"tools",
"toolChoice"});
993 if (
const auto valid =
996 return mcp::core::unexpected(valid.error());
1003 Json json = Json::object();
1004 json[
"role"] = result.
role;
1010 json[
"content"] = Json::array();
1011 for (
const auto& content : result.
contents) {
1018 json[
"model"] = result.
model;
1022 if (result.
meta.has_value()) {
1023 json[
"_meta"] = *result.
meta;
1033 if (!json.is_object()) {
1034 return mcp::core::unexpected(
1037 if (!json.contains(
"role") || !json.at(
"role").is_string()) {
1039 "sampling/createMessage result requires a string role"));
1041 if (!json.contains(
"content")) {
1042 return mcp::core::unexpected(
1045 if (!json.contains(
"model") || !json.at(
"model").is_string()) {
1047 "sampling/createMessage result requires a string model"));
1050 result.
role = json.at(
"role").get<std::string>();
1051 if (result.
role !=
"assistant") {
1053 "sampling/createMessage result role must be assistant"));
1055 if (json.at(
"content").is_array()) {
1056 for (
const auto& item : json.at(
"content")) {
1059 return mcp::core::unexpected(content.error());
1061 result.
contents.push_back(*content);
1066 return mcp::core::unexpected(content.error());
1068 result.
contents.push_back(*content);
1073 result.
model = json.at(
"model").get<std::string>();
1074 if (json.contains(
"stopReason")) {
1075 if (!json.at(
"stopReason").is_string()) {
1076 return mcp::core::unexpected(
1079 result.
stop_reason = json.at(
"stopReason").get<std::string>();
1081 if (json.contains(
"_meta")) {
1082 if (!json.at(
"_meta").is_object()) {
1084 "sampling/createMessage result _meta must be an object"));
1086 result.
meta = json.at(
"_meta");
1089 json, {
"role",
"content",
"model",
"stopReason",
"_meta"});
1092 result_message.contents = result.
contents;
1093 if (
const auto valid =
1096 return mcp::core::unexpected(valid.error());
@ User
Message from the user.
@ Assistant
Message from the assistant (model).
Shared JSON, JSON-RPC, error, cancellation, and progress model types.
void append_json_extensions(Json &json, const Json &extensions)
Flattens extension members into a JSON object without overwriting typed fields.
Definition types.hpp:358
nlohmann::json Json
JSON value type used by all protocol DTOs.
Definition types.hpp:28
Json collect_json_extensions(const Json &json, std::initializer_list< std::string_view > known_keys)
Collects unknown object members so typed DTOs can preserve future protocol fields and vendor extensio...
Definition types.hpp:320
constexpr FieldDescriptor< Struct, Field > field(const char *wire_name, Field Struct::*pointer)
Creates a FieldDescriptor with wire name and pointer-to-member.
Definition reflect.hpp:75
ExtensionsField< Struct > extensions_field(Json Struct::*pointer, std::vector< std::string > own_keys)
Creates an ExtensionsField descriptor.
Definition reflect.hpp:90
Json reflect_to_json(const T &obj)
Serializes a DTO to JSON using its Reflect<T> trait.
Definition reflect.hpp:701
Shared result and error primitives used by the public cxxmcp SDK.
std::monostate Unit
Success value for operations that only need to report failure.
Definition result.hpp:55
tl::expected< T, Error > Result
Alias for the SDK result type.
Definition result.hpp:64
core::Result< ToolUseContent > tool_use_content_from_json(const Json &json)
Parses assistant-side sampling tool use content.
Definition sampling.hpp:497
Role
Message role for sampling messages.
Definition sampling.hpp:39
Json create_message_result_to_json(const CreateMessageResult &result)
Serializes a sampling/createMessage result.
Definition sampling.hpp:1002
ToolChoiceMode
Tool selection mode for SEP-1577 sampling requests.
Definition sampling.hpp:70
@ Auto
Let the model decide whether to use tools.
@ Required
Require at least one tool use.
Json model_hint_to_json(const ModelHint &hint)
Serializes a model hint.
Definition sampling.hpp:733
core::Result< SamplingMessage > sampling_message_from_json(const Json &json)
Parses a sampling message.
Definition sampling.hpp:678
bool sampling_role_is_valid(std::string_view role) noexcept
Returns true for the MCP sampling message roles.
Definition sampling.hpp:295
core::Error sampling_json_error(std::string message)
Builds an InvalidRequest error for sampling JSON validation failures.
Definition sampling.hpp:289
bool sampling_number_is_finite(double value) noexcept
Returns true for finite JSON numbers accepted by sampling.
Definition sampling.hpp:336
std::string tool_choice_mode_to_string(ToolChoiceMode mode)
Converts a tool-choice mode to the lowercase wire value.
Definition sampling.hpp:402
ContextInclusion
Context inclusion mode for sampling requests.
Definition sampling.hpp:29
@ AllServers
Include context from all servers.
@ None
Do not include any server context.
@ ThisServer
Include context only from the requesting server.
core::Result< core::Unit > validate_sampling_message_content_roles(const SamplingMessage &message)
Validates SEP-1577 tool-use/tool-result placement for one message.
Definition sampling.hpp:341
Json sampling_message_content_to_json(const SamplingMessageContent &content)
Serializes one sampling message content item.
Definition sampling.hpp:609
std::optional< ToolChoiceMode > tool_choice_mode_from_string(const std::string &value)
Parses a tool-choice mode string.
Definition sampling.hpp:415
Json sampling_message_to_json(const SamplingMessage &message)
Serializes a sampling message.
Definition sampling.hpp:654
core::Result< ModelHint > model_hint_from_json(const Json &json)
Parses a model hint.
Definition sampling.hpp:739
std::optional< ContextInclusion > context_inclusion_from_string(std::string_view value)
Parses a context-inclusion mode string.
Definition sampling.hpp:316
std::optional< Role > from_string_role(std::string_view value) noexcept
Parses a Role from its wire string.
Definition sampling.hpp:59
Json create_message_params_to_json(const CreateMessageParams ¶ms)
Serializes sampling/createMessage params.
Definition sampling.hpp:825
Json model_preferences_to_json(const ModelPreferences &preferences)
Serializes model preferences.
Definition sampling.hpp:744
core::Result< ToolResultContent > tool_result_content_from_json(const Json &json)
Parses user-side sampling tool result content.
Definition sampling.hpp:556
core::Result< core::Unit > validate_sampling_tool_use_result_balance(const std::vector< SamplingMessage > &messages)
Validates that every sampling tool result answers a prior tool use.
Definition sampling.hpp:365
core::Result< ModelPreferences > model_preferences_from_json(const Json &json)
Parses model preferences.
Definition sampling.hpp:767
Json tool_use_content_to_json(const ToolUseContent &content)
Serializes assistant-side sampling tool use content.
Definition sampling.hpp:483
std::string_view context_inclusion_to_string(ContextInclusion mode)
Converts a context-inclusion mode to the camelCase wire value.
Definition sampling.hpp:303
bool sampling_include_context_is_valid(std::string_view value) noexcept
Returns true for the MCP sampling includeContext values.
Definition sampling.hpp:331
core::Result< ToolChoice > tool_choice_from_json(const Json &json)
Parses tool-choice behavior.
Definition sampling.hpp:459
Json tool_result_content_to_json(const ToolResultContent &content)
Serializes user-side sampling tool result content.
Definition sampling.hpp:532
std::string_view to_string(Role role) noexcept
Converts a Role to its lowercase wire representation.
Definition sampling.hpp:47
core::Result< SamplingMessageContent > sampling_message_content_from_json(const Json &json)
Parses one sampling message content item.
Definition sampling.hpp:621
core::Result< CreateMessageResult > create_message_result_from_json(const Json &json)
Parses a sampling/createMessage result.
Definition sampling.hpp:1031
Json tool_choice_to_json(const ToolChoice &choice)
Serializes tool-choice behavior.
Definition sampling.hpp:449
core::Result< CreateMessageParams > create_message_params_from_json(const Json &json)
Parses sampling/createMessage params.
Definition sampling.hpp:872
Structured error returned by fallible SDK operations.
Definition result.hpp:35
A single content item returned by a tool or embedded in prompts.
Definition tool.hpp:93
std::string type
Content kind.
Definition tool.hpp:96
static ContentBlock text_content(std::string value)
Creates a text content block.
Definition tool.hpp:115
Parameters for sampling/createMessage.
Definition sampling.hpp:231
std::optional< std::string > include_context
Optional instruction for whether client context should be included.
Definition sampling.hpp:239
std::optional< std::string > system_prompt
Optional system prompt supplied outside the message array.
Definition sampling.hpp:237
std::optional< double > temperature
Optional sampling temperature. Explicit 0.0 is serialized.
Definition sampling.hpp:241
std::optional< TaskRequestParameters > task
Optional task request parameters for asynchronous sampling.
Definition sampling.hpp:249
Json metadata
Optional metadata object carried through the sampling request.
Definition sampling.hpp:247
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:257
std::vector< std::string > stop_sequences
Optional stop sequences.
Definition sampling.hpp:245
std::vector< SamplingMessage > messages
Conversation messages to sample from.
Definition sampling.hpp:233
int max_tokens
Maximum tokens the client may generate.
Definition sampling.hpp:243
std::vector< ToolDefinition > tools
Optional tools available to the sampled model.
Definition sampling.hpp:253
std::optional< ToolChoice > tool_choice
Optional tool selection behavior.
Definition sampling.hpp:255
std::optional< ModelPreferences > model_preferences
Optional model selection preferences.
Definition sampling.hpp:235
std::optional< Json > meta
Optional _meta extension object preserved on the wire.
Definition sampling.hpp:251
Result object for sampling/createMessage.
Definition sampling.hpp:261
std::string stop_reason
Optional reason generation stopped.
Definition sampling.hpp:271
ContentBlock content
First or only generated content kept for simple callers.
Definition sampling.hpp:265
static CreateMessageResult text(std::string role, std::string value, std::string model={})
Creates a text-only sampling result for the given role and model.
Definition sampling.hpp:278
std::vector< SamplingMessageContent > contents
Optional full generated content list. Empty means content is serialized.
Definition sampling.hpp:267
std::optional< Json > meta
Optional _meta extension object preserved on the wire.
Definition sampling.hpp:273
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:275
std::string role
Role assigned to the generated message.
Definition sampling.hpp:263
std::string model
Model identifier selected by the client.
Definition sampling.hpp:269
Type-specific serialization and deserialization logic.
Definition reflect.hpp:246
Soft model name hint for sampling.
Definition sampling.hpp:199
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:203
std::string name
Model family, name, or alias preferred by the requester.
Definition sampling.hpp:201
Preferences used by the client when choosing a model.
Definition sampling.hpp:217
std::optional< double > speed_priority
Optional priority for low latency, typically normalized by the peer.
Definition sampling.hpp:223
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:227
std::optional< double > cost_priority
Optional priority for low cost, typically normalized by the peer.
Definition sampling.hpp:221
std::optional< double > intelligence_priority
Optional priority for model capability, typically normalized by the peer.
Definition sampling.hpp:225
std::vector< ModelHint > hints
Ordered or unordered model hints supplied by the requester.
Definition sampling.hpp:219
Primary template.
Definition reflect.hpp:199
One sampling message content item.
Definition sampling.hpp:131
std::optional< ToolUseContent > tool_use
Assistant-only tool-use content.
Definition sampling.hpp:135
static SamplingMessageContent tool_use_content(ToolUseContent value)
Creates an assistant tool-use content item.
Definition sampling.hpp:154
std::optional< ToolResultContent > tool_result
User-only tool-result content.
Definition sampling.hpp:137
static SamplingMessageContent text(std::string value)
Creates a text sampling content item.
Definition sampling.hpp:140
static SamplingMessageContent from_content(ContentBlock value)
Wraps a regular content block.
Definition sampling.hpp:147
bool is_tool_use() const noexcept
Returns true when this item carries tool-use content.
Definition sampling.hpp:170
ContentBlock content
Ordinary content block for text, image, audio, or extension content.
Definition sampling.hpp:133
bool is_tool_result() const noexcept
Returns true when this item carries tool-result content.
Definition sampling.hpp:173
static SamplingMessageContent tool_result_content(ToolResultContent value)
Creates a user tool-result content item.
Definition sampling.hpp:162
Input message supplied to a sampling request.
Definition sampling.hpp:177
ContentBlock content
First or only message content block kept for simple callers.
Definition sampling.hpp:181
static SamplingMessage text(std::string role, std::string value)
Creates a text-only sampling message for the given role.
Definition sampling.hpp:190
std::string role
Message role understood by the sampling client.
Definition sampling.hpp:179
std::vector< SamplingMessageContent > contents
Optional full content list. Empty means content is serialized.
Definition sampling.hpp:183
std::optional< Json > meta
Optional _meta extension object preserved on the wire.
Definition sampling.hpp:185
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:187
User-side result for a prior sampling tool call.
Definition sampling.hpp:111
std::string tool_use_id
Id of the corresponding tool use.
Definition sampling.hpp:113
std::optional< Json > structured_content
Optional structured result object.
Definition sampling.hpp:117
std::vector< ContentBlock > content
Tool-visible content blocks returned by the tool.
Definition sampling.hpp:115
std::optional< Json > meta
Optional _meta extension object preserved on the wire.
Definition sampling.hpp:121
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:123
std::optional< bool > is_error
Optional error marker for failed tool execution.
Definition sampling.hpp:119
Assistant-side tool call request embedded in sampling content.
Definition sampling.hpp:97
Json extensions
Unknown JSON members preserved for forward-compatible round trips.
Definition sampling.hpp:107
std::string name
Tool name to invoke.
Definition sampling.hpp:101
std::string id
Unique id for this requested tool call.
Definition sampling.hpp:99
std::optional< Json > meta
Optional _meta extension object preserved on the wire.
Definition sampling.hpp:105
Json input
JSON object containing tool arguments.
Definition sampling.hpp:103
Asynchronous task status and task-management payloads.
Json task_request_parameters_to_json(const TaskRequestParameters ¶meters)
Serializes optional task request parameters.
Definition task.hpp:319
core::Result< TaskRequestParameters > task_request_parameters_from_json(const Json &json)
Parses optional task request parameters.
Definition task.hpp:326