@@ -103,8 +103,17 @@ class ServerSession
103103 capabilities_ = capabilities;
104104
105105 // Parse common capability flags
106+ supports_sampling_ = false ;
107+ supports_sampling_tools_ = false ;
108+ supports_elicitation_ = false ;
109+ supports_roots_ = false ;
106110 if (capabilities.contains (" sampling" ) && capabilities[" sampling" ].is_object ())
111+ {
107112 supports_sampling_ = true ;
113+ const auto & sampling = capabilities[" sampling" ];
114+ if (sampling.contains (" tools" ) && sampling[" tools" ].is_object ())
115+ supports_sampling_tools_ = true ;
116+ }
108117 if (capabilities.contains (" elicitation" ) && capabilities[" elicitation" ].is_object ())
109118 supports_elicitation_ = true ;
110119 if (capabilities.contains (" roots" ) && capabilities[" roots" ].is_object ())
@@ -118,6 +127,13 @@ class ServerSession
118127 return supports_sampling_;
119128 }
120129
130+ // / Check if client supports sampling with tools (sampling.tools capability)
131+ bool supports_sampling_tools () const
132+ {
133+ std::lock_guard lock (cap_mutex_);
134+ return supports_sampling_tools_;
135+ }
136+
121137 // / Check if client supports elicitation
122138 bool supports_elicitation () const
123139 {
@@ -262,10 +278,14 @@ class ServerSession
262278 *
263279 * @param method The JSON-RPC method name (e.g., "notifications/progress")
264280 * @param params Notification parameters
281+ * @param meta Optional top-level _meta for the notification
265282 */
266- void send_notification (const std::string& method, const Json& params = Json::object())
283+ void send_notification (const std::string& method, const Json& params = Json::object(),
284+ const std::optional<Json>& meta = std::nullopt)
267285 {
268286 Json notification = {{" jsonrpc" , " 2.0" }, {" method" , method}, {" params" , params}};
287+ if (meta.has_value () && meta->is_object () && !meta->empty ())
288+ notification[" _meta" ] = *meta;
269289
270290 if (send_callback_)
271291 send_callback_ (notification);
@@ -331,6 +351,7 @@ class ServerSession
331351 bool supports_sampling_{false };
332352 bool supports_elicitation_{false };
333353 bool supports_roots_{false };
354+ bool supports_sampling_tools_{false };
334355
335356 // Pending requests
336357 std::mutex pending_mutex_;
0 commit comments