cxxmcp 1.1.6
C++ MCP SDK
Loading...
Searching...
No Matches
handler_dispatch.hpp File Reference

Internal handler dispatch helpers for cxxmcp server authoring APIs. More...

#include <optional>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include "cxxmcp/core/result.hpp"
#include "cxxmcp/server/context.hpp"

Go to the source code of this file.

Classes

struct  mcp::server::detail::is_result< T >
 
struct  mcp::server::detail::is_result< core::Result< T > >
 
struct  mcp::server::detail::callable_argument_types< T, class >
 
struct  mcp::server::detail::callable_argument_types< Return(Class::*)(Args...) const, void >
 
struct  mcp::server::detail::callable_argument_types< Return(Class::*)(Args...), void >
 
struct  mcp::server::detail::callable_argument_types< Return(*)(Args...), void >
 
struct  mcp::server::detail::callable_argument_types< T, std::void_t< decltype(&T::operator())> >
 
struct  mcp::server::detail::callable_arguments_match< Handler, Tuple, class >
 
struct  mcp::server::detail::callable_arguments_match< Handler, std::tuple< Args... >, std::void_t< typename callable_argument_types< std::decay_t< Handler > >::type > >
 
struct  mcp::server::detail::has_callable_arguments< Handler, class >
 
struct  mcp::server::detail::has_callable_arguments< Handler, std::void_t< typename callable_argument_types< std::decay_t< Handler > >::type > >
 

Functions

template<class Handler , class Args >
constexpr void mcp::server::detail::require_unambiguous_tool_handler ()
 
template<class Handler , class Args , class Context >
constexpr void mcp::server::detail::require_unambiguous_typed_context_handler (std::string_view label)
 
template<class Handler >
constexpr void mcp::server::detail::require_unambiguous_prompt_handler ()
 
template<class Handler >
constexpr void mcp::server::detail::require_unambiguous_resource_handler ()
 
template<class Handler >
constexpr void mcp::server::detail::require_unambiguous_json_extension_handler ()
 
template<class Handler >
constexpr void mcp::server::detail::require_unambiguous_completion_handler ()
 
template<class T >
protocol::Json mcp::server::detail::value_to_json (T &&value)
 
template<class Handler >
bool mcp::server::detail::callable_is_empty (const Handler &) noexcept
 
template<class Return , class... Args>
bool mcp::server::detail::callable_is_empty (const std::function< Return(Args...)> &handler) noexcept
 
template<class Return , class... Args>
bool mcp::server::detail::callable_is_empty (Return(*handler)(Args...)) noexcept
 
template<class Handler >
void mcp::server::detail::require_callable (const Handler &handler, std::string_view label)
 
protocol::ToolResult mcp::server::detail::value_to_tool_result (protocol::ToolResult result)
 
protocol::ToolResult mcp::server::detail::value_to_tool_result (std::string text)
 
protocol::ToolResult mcp::server::detail::value_to_tool_result (const char *text)
 
template<class T >
protocol::ToolResult mcp::server::detail::value_to_tool_result (T &&value)
 
protocol::PromptsGetResult mcp::server::detail::value_to_prompt_result (protocol::PromptsGetResult result)
 
protocol::PromptsGetResult mcp::server::detail::value_to_prompt_result (std::string text)
 
protocol::PromptsGetResult mcp::server::detail::value_to_prompt_result (protocol::PromptMessage message)
 
protocol::PromptsGetResult mcp::server::detail::value_to_prompt_result (std::vector< protocol::PromptMessage > messages)
 
protocol::ResourcesReadResult mcp::server::detail::value_to_resource_read_result (protocol::ResourcesReadResult result, std::string_view)
 
protocol::ResourcesReadResult mcp::server::detail::value_to_resource_read_result (protocol::ResourceContents contents, std::string_view)
 
protocol::ResourcesReadResult mcp::server::detail::value_to_resource_read_result (std::vector< protocol::ResourceContents > contents, std::string_view)
 
protocol::ResourcesReadResult mcp::server::detail::value_to_resource_read_result (std::string text, std::string_view uri)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (protocol::Json json)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (protocol::CompleteResult result)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (protocol::CompletionResult result)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (std::vector< std::string > values)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (std::string value)
 
protocol::Json mcp::server::detail::value_to_complete_result_json (const char *value)
 
template<class T >
core::Result< protocol::Jsonmcp::server::detail::completion_response_to_json (T &&value)
 
template<class Arg >
Arg mcp::server::detail::argument_from_json (const protocol::Json &arguments, std::string_view fallback_name={})
 
template<class Result >
void mcp::server::detail::apply_default_output_schema (protocol::ToolDefinition &definition)
 
template<class Handler , class Args >
decltype(auto) mcp::server::detail::invoke_tool_handler (Handler &handler, Args &&args, const ToolContext &context)
 
template<class Handler , class Args , class Context >
decltype(auto) mcp::server::detail::invoke_typed_context_handler (Handler &handler, Args &&args, const Context &context)
 
template<class Handler >
decltype(auto) mcp::server::detail::invoke_prompt_handler (Handler &handler, const PromptContext &context)
 
template<class Handler >
decltype(auto) mcp::server::detail::invoke_resource_handler (Handler &handler, const ResourceContext &context)
 
template<class Handler >
decltype(auto) mcp::server::detail::invoke_json_extension_handler (Handler &handler, const protocol::Json &request, const SessionContext &context, CancellationToken cancellation)
 
template<class Handler >
decltype(auto) mcp::server::detail::invoke_completion_handler (Handler &handler, const CompletionContext &context)
 

Variables

template<class >
constexpr bool mcp::server::detail::always_false_v = false
 
template<class Handler , class... Args>
constexpr bool mcp::server::detail::callable_arguments_match_v
 
template<class Handler >
constexpr bool mcp::server::detail::has_callable_arguments_v
 
template<bool... Values>
constexpr int mcp::server::detail::bool_count_v = (0 + ... + (Values ? 1 : 0))
 
template<class Handler , class... Args>
constexpr bool mcp::server::detail::handler_accepts_v
 
template<class Handler , class... Args>
constexpr bool mcp::server::detail::handler_shape_accepts_v
 
template<class Handler , class Args >
constexpr int mcp::server::detail::tool_handler_match_count_v
 
template<class Handler , class Args , class Context >
constexpr int mcp::server::detail::typed_context_handler_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::prompt_handler_exact_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::prompt_handler_invocable_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::prompt_handler_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::resource_handler_exact_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::resource_handler_invocable_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::resource_handler_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::json_extension_handler_match_count_v
 
template<class Handler >
constexpr int mcp::server::detail::completion_handler_match_count_v
 
template<class Handler >
constexpr bool mcp::server::detail::is_typed_completion_handler_v
 

Detailed Description

Internal handler dispatch helpers for cxxmcp server authoring APIs.

Variable Documentation

◆ callable_arguments_match_v

template<class Handler , class... Args>
constexpr bool mcp::server::detail::callable_arguments_match_v
inlineconstexpr
Initial value:
=
callable_arguments_match<Handler, std::tuple<Args...>>::value

◆ completion_handler_match_count_v

template<class Handler >
constexpr int mcp::server::detail::completion_handler_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
handler_accepts_v<Handler, const protocol::CompleteParams&,
const CompletionContext&>,
handler_accepts_v<Handler, const CompletionContext&,
const protocol::CompleteParams&>,
handler_accepts_v<Handler, const protocol::CompletionArgument&,
const CompletionContext&>,
handler_accepts_v<Handler, const CompletionContext&,
const protocol::CompletionArgument&>,
handler_accepts_v<Handler, std::string, const CompletionContext&>,
handler_accepts_v<Handler, const CompletionContext&, std::string>,
handler_accepts_v<Handler, const protocol::CompleteParams&,
handler_accepts_v<Handler, CancellationToken,
const protocol::CompleteParams&>,
handler_accepts_v<Handler, const protocol::CompletionArgument&,
handler_accepts_v<Handler, CancellationToken,
const protocol::CompletionArgument&>,
handler_accepts_v<Handler, std::string, CancellationToken>,
handler_accepts_v<Handler, CancellationToken, std::string>,
handler_accepts_v<Handler, const protocol::CompleteParams&>,
handler_accepts_v<Handler, const protocol::CompletionArgument&>,
handler_accepts_v<Handler, std::string>,
handler_accepts_v<Handler, CancellationToken>>
mcp::CancellationToken CancellationToken
Copyable cooperative cancellation token for server handlers.
Definition context.hpp:22

◆ handler_accepts_v

template<class Handler , class... Args>
constexpr bool mcp::server::detail::handler_accepts_v
inlineconstexpr
Initial value:
=
callable_arguments_match_v<Handler, Args...> ||
(!callable_arguments_match_v<Handler, Args...> &&
std::is_invocable_v<Handler&, Args...>)

◆ handler_shape_accepts_v

template<class Handler , class... Args>
constexpr bool mcp::server::detail::handler_shape_accepts_v
inlineconstexpr
Initial value:
=
has_callable_arguments_v<Handler>
? callable_arguments_match_v<Handler, Args...>
: std::is_invocable_v<Handler&, Args...>

◆ has_callable_arguments_v

template<class Handler >
constexpr bool mcp::server::detail::has_callable_arguments_v
inlineconstexpr
Initial value:
=
has_callable_arguments<Handler>::value

◆ is_typed_completion_handler_v

template<class Handler >
constexpr bool mcp::server::detail::is_typed_completion_handler_v
inlineconstexpr
Initial value:
=
!callable_arguments_match_v<Handler, protocol::Json, SessionContext> &&
!callable_arguments_match_v<Handler, SessionContext, protocol::Json> &&
!callable_arguments_match_v<Handler, protocol::Json> &&
(callable_arguments_match_v<Handler, protocol::CompleteParams,
CompletionContext> ||
callable_arguments_match_v<Handler, CompletionContext,
protocol::CompleteParams> ||
callable_arguments_match_v<Handler, protocol::CompletionArgument,
CompletionContext> ||
callable_arguments_match_v<Handler, CompletionContext,
protocol::CompletionArgument> ||
callable_arguments_match_v<Handler, std::string, CompletionContext> ||
callable_arguments_match_v<Handler, CompletionContext, std::string> ||
callable_arguments_match_v<Handler, protocol::CompleteParams,
callable_arguments_match_v<Handler, CancellationToken,
protocol::CompleteParams> ||
callable_arguments_match_v<Handler, protocol::CompletionArgument,
callable_arguments_match_v<Handler, CancellationToken,
protocol::CompletionArgument> ||
callable_arguments_match_v<Handler, std::string, CancellationToken> ||
callable_arguments_match_v<Handler, CancellationToken, std::string> ||
callable_arguments_match_v<Handler, protocol::CompleteParams> ||
callable_arguments_match_v<Handler, protocol::CompletionArgument> ||
callable_arguments_match_v<Handler, std::string> ||
callable_arguments_match_v<Handler, CancellationToken>)

◆ json_extension_handler_match_count_v

template<class Handler >
constexpr int mcp::server::detail::json_extension_handler_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
handler_accepts_v<Handler, const protocol::Json&, const SessionContext&,
handler_accepts_v<Handler, const protocol::Json&, const SessionContext&>,
handler_accepts_v<Handler, const SessionContext&, const protocol::Json&,
handler_accepts_v<Handler, const SessionContext&, const protocol::Json&>,
handler_accepts_v<Handler, const protocol::Json&, CancellationToken>,
handler_accepts_v<Handler, CancellationToken, const protocol::Json&>,
handler_accepts_v<Handler, const protocol::Json&>,
handler_accepts_v<Handler, const SessionContext&, CancellationToken>,
handler_accepts_v<Handler, CancellationToken, const SessionContext&>,
handler_accepts_v<Handler, const SessionContext&>,
handler_accepts_v<Handler, CancellationToken>, handler_accepts_v<Handler>>

◆ prompt_handler_exact_match_count_v

template<class Handler >
constexpr int mcp::server::detail::prompt_handler_exact_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
callable_arguments_match_v<Handler, protocol::Json, PromptContext>,
callable_arguments_match_v<Handler, PromptContext, protocol::Json>,
callable_arguments_match_v<Handler, std::string, PromptContext>,
callable_arguments_match_v<Handler, PromptContext, std::string>,
callable_arguments_match_v<Handler, protocol::Json>,
callable_arguments_match_v<Handler, std::string>,
callable_arguments_match_v<Handler, PromptContext>,
callable_arguments_match_v<Handler, protocol::Json, CancellationToken>,
callable_arguments_match_v<Handler, CancellationToken, protocol::Json>,
callable_arguments_match_v<Handler, std::string, CancellationToken>,
callable_arguments_match_v<Handler, CancellationToken, std::string>,
callable_arguments_match_v<Handler, CancellationToken>,
callable_arguments_match_v<Handler>>

◆ prompt_handler_invocable_match_count_v

template<class Handler >
constexpr int mcp::server::detail::prompt_handler_invocable_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
std::is_invocable_v<Handler&, protocol::Json, PromptContext>,
std::is_invocable_v<Handler&, PromptContext, protocol::Json>,
std::is_invocable_v<Handler&, std::string, PromptContext>,
std::is_invocable_v<Handler&, PromptContext, std::string>,
std::is_invocable_v<Handler&, protocol::Json>,
std::is_invocable_v<Handler&, std::string>,
std::is_invocable_v<Handler&, PromptContext>,
std::is_invocable_v<Handler&, protocol::Json, CancellationToken>,
std::is_invocable_v<Handler&, CancellationToken, protocol::Json>,
std::is_invocable_v<Handler&, std::string, CancellationToken>,
std::is_invocable_v<Handler&, CancellationToken, std::string>,
std::is_invocable_v<Handler&, CancellationToken>,
std::is_invocable_v<Handler&>>

◆ prompt_handler_match_count_v

template<class Handler >
constexpr int mcp::server::detail::prompt_handler_match_count_v
inlineconstexpr
Initial value:
=
prompt_handler_exact_match_count_v<Handler> > 0
? prompt_handler_exact_match_count_v<Handler>
: prompt_handler_invocable_match_count_v<Handler>

◆ resource_handler_exact_match_count_v

template<class Handler >
constexpr int mcp::server::detail::resource_handler_exact_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
callable_arguments_match_v<Handler, protocol::Json, ResourceContext>,
callable_arguments_match_v<Handler, ResourceContext, protocol::Json>,
callable_arguments_match_v<Handler, std::string, ResourceContext>,
callable_arguments_match_v<Handler, ResourceContext, std::string>,
callable_arguments_match_v<Handler, protocol::Json>,
callable_arguments_match_v<Handler, std::string>,
callable_arguments_match_v<Handler, ResourceContext>,
callable_arguments_match_v<Handler, protocol::Json, CancellationToken>,
callable_arguments_match_v<Handler, CancellationToken, protocol::Json>,
callable_arguments_match_v<Handler, std::string, CancellationToken>,
callable_arguments_match_v<Handler, CancellationToken, std::string>,
callable_arguments_match_v<Handler, CancellationToken>,
callable_arguments_match_v<Handler>>

◆ resource_handler_invocable_match_count_v

template<class Handler >
constexpr int mcp::server::detail::resource_handler_invocable_match_count_v
inlineconstexpr
Initial value:
= bool_count_v<
std::is_invocable_v<Handler&, protocol::Json, ResourceContext>,
std::is_invocable_v<Handler&, ResourceContext, protocol::Json>,
std::is_invocable_v<Handler&, std::string, ResourceContext>,
std::is_invocable_v<Handler&, ResourceContext, std::string>,
std::is_invocable_v<Handler&, protocol::Json>,
std::is_invocable_v<Handler&, std::string>,
std::is_invocable_v<Handler&, ResourceContext>,
std::is_invocable_v<Handler&, protocol::Json, CancellationToken>,
std::is_invocable_v<Handler&, CancellationToken, protocol::Json>,
std::is_invocable_v<Handler&, std::string, CancellationToken>,
std::is_invocable_v<Handler&, CancellationToken, std::string>,
std::is_invocable_v<Handler&, CancellationToken>,
std::is_invocable_v<Handler&>>

◆ resource_handler_match_count_v

template<class Handler >
constexpr int mcp::server::detail::resource_handler_match_count_v
inlineconstexpr
Initial value:
=
resource_handler_exact_match_count_v<Handler> > 0
? resource_handler_exact_match_count_v<Handler>
: resource_handler_invocable_match_count_v<Handler>

◆ tool_handler_match_count_v

template<class Handler , class Args >
constexpr int mcp::server::detail::tool_handler_match_count_v
inlineconstexpr
Initial value:
=
bool_count_v<handler_accepts_v<Handler, Args, const ToolContext&>,
handler_accepts_v<Handler, const ToolContext&, Args>,
handler_accepts_v<Handler, Args, CancellationToken>,
handler_accepts_v<Handler, CancellationToken, Args>,
handler_accepts_v<Handler, Args>,
handler_accepts_v<Handler, const ToolContext&>,
handler_accepts_v<Handler>>

◆ typed_context_handler_match_count_v

template<class Handler , class Args , class Context >
constexpr int mcp::server::detail::typed_context_handler_match_count_v
inlineconstexpr
Initial value:
=
bool_count_v<handler_accepts_v<Handler, Args, const Context&>,
handler_accepts_v<Handler, const Context&, Args>,
handler_accepts_v<Handler, Args, CancellationToken>,
handler_accepts_v<Handler, CancellationToken, Args>,
handler_accepts_v<Handler, Args>,
handler_accepts_v<Handler, const Context&>,
handler_accepts_v<Handler, CancellationToken>,
handler_accepts_v<Handler>>