Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/core/mcp/include/sourcemeta/core/mcp_capabilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ struct MCPServerCapabilities {
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/schema#clientcapabilities
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_parse_client_capabilities(const MCPProtocolVersion version,
const sourcemeta::core::JSON &capabilities)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_parse_client_capabilities(const MCPProtocolVersion version,
const sourcemeta::core::JSON &capabilities)
-> MCPClientCapabilities;

/// @ingroup mcp
Expand Down Expand Up @@ -199,9 +199,9 @@ auto mcp_parse_client_capabilities(const MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/schema#clientcapabilities
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_serialize_client_capabilities(
const MCPProtocolVersion version, const MCPClientCapabilities &capabilities)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_serialize_client_capabilities(const MCPProtocolVersion version,
const MCPClientCapabilities &capabilities)
-> sourcemeta::core::JSON;

/// @ingroup mcp
Expand All @@ -226,9 +226,9 @@ auto mcp_serialize_client_capabilities(
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/schema#servercapabilities
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_parse_server_capabilities(MCPProtocolVersion version,
const JSON &capabilities)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_parse_server_capabilities(MCPProtocolVersion version,
const JSON &capabilities)
-> MCPServerCapabilities;

/// @ingroup mcp
Expand All @@ -252,9 +252,9 @@ auto mcp_parse_server_capabilities(MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/schema#servercapabilities
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_serialize_server_capabilities(
MCPProtocolVersion version, const MCPServerCapabilities &capabilities)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_serialize_server_capabilities(MCPProtocolVersion version,
const MCPServerCapabilities &capabilities)
-> JSON;

} // namespace sourcemeta::core
Expand Down
56 changes: 25 additions & 31 deletions src/core/mcp/include/sourcemeta/core/mcp_error.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,11 @@ enum class MCPErrorContext : std::uint8_t {
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#responses
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error(MCPProtocolVersion version, const JSON *identifier,
std::int64_t code, JSON::StringView message,
std::optional<JSON> data = std::nullopt,
MCPErrorContext context = MCPErrorContext::Request) -> JSON;
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
mcp_make_error(MCPProtocolVersion version, const JSON *identifier,
std::int64_t code, JSON::StringView message,
std::optional<JSON> data = std::nullopt,
MCPErrorContext context = MCPErrorContext::Request) -> JSON;

/// @ingroup mcp
/// The legacy MCP error code returned when a requested resource cannot be
Expand Down Expand Up @@ -196,8 +196,9 @@ constexpr std::int64_t MCP_CODE_UNSUPPORTED_PROTOCOL_VERSION{-32022};
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#server-validation
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#_meta
constexpr auto mcp_error_code_to_http_status(const MCPProtocolVersion version,
const std::int64_t code) noexcept
[[nodiscard]] constexpr auto
mcp_error_code_to_http_status(const MCPProtocolVersion version,
const std::int64_t code) noexcept
-> std::optional<HTTPStatus> {
if (version != MCPProtocolVersion::V_2026_07_28) {
return std::nullopt;
Expand Down Expand Up @@ -247,8 +248,8 @@ constexpr auto mcp_error_code_to_http_status(const MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#error-codes
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_unsupported_protocol_version(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_make_error_unsupported_protocol_version(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
const JSON::StringView requested,
const std::span<const JSON::StringView> supported)
Expand Down Expand Up @@ -282,8 +283,8 @@ auto mcp_make_error_unsupported_protocol_version(
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#error-codes
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_missing_required_capability(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_make_error_missing_required_capability(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
sourcemeta::core::JSON required_capabilities,
const JSON::StringView message) -> sourcemeta::core::JSON;
Expand All @@ -310,11 +311,9 @@ auto mcp_make_error_missing_required_capability(
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#schema-extension
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
const sourcemeta::core::JSON *identifier,
const JSON::StringView message)
-> sourcemeta::core::JSON;
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_make_error_header_mismatch(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
const JSON::StringView message) -> sourcemeta::core::JSON;

/// @ingroup mcp
/// Build a JSON-RPC error response for header mismatch (-32020) with detailed
Expand Down Expand Up @@ -346,13 +345,10 @@ auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#schema-extension
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
const sourcemeta::core::JSON *identifier,
const JSON::StringView header_name,
const JSON::StringView header_value,
const JSON::StringView body_value)
-> sourcemeta::core::JSON;
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_make_error_header_mismatch(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
const JSON::StringView header_name, const JSON::StringView header_value,
const JSON::StringView body_value) -> sourcemeta::core::JSON;

/// @ingroup mcp
/// Build a JSON-RPC error response for header mismatch (-32020) reporting an
Expand All @@ -379,11 +375,9 @@ auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#schema-extension
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
const sourcemeta::core::JSON *identifier,
const JSON::StringView header_name,
const JSON::StringView header_value)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_make_error_header_mismatch(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
const JSON::StringView header_name, const JSON::StringView header_value)
-> sourcemeta::core::JSON;

/// @ingroup mcp
Expand Down Expand Up @@ -414,9 +408,9 @@ auto mcp_make_error_header_mismatch(const MCPProtocolVersion version,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/server/resources#error-handling
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_resource_not_found(const MCPProtocolVersion version,
const sourcemeta::core::JSON *identifier)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_make_error_resource_not_found(const MCPProtocolVersion version,
const sourcemeta::core::JSON *identifier)
-> sourcemeta::core::JSON;

} // namespace sourcemeta::core
Expand Down
34 changes: 15 additions & 19 deletions src/core/mcp/include/sourcemeta/core/mcp_headers.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@ struct MCPRequestMeta {
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#_meta
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_validate_request_meta(const sourcemeta::core::JSON &envelope)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_validate_request_meta(const sourcemeta::core::JSON &envelope)
-> std::pair<MCPRequestMetaStatus, std::optional<MCPRequestMeta>>;

/// @ingroup mcp
Expand All @@ -166,8 +166,8 @@ auto mcp_validate_request_meta(const sourcemeta::core::JSON &envelope)
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#_meta
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_validate_request_parameters(const JSON &parameters)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_validate_request_parameters(const JSON &parameters)
-> std::pair<MCPRequestMetaStatus, std::optional<MCPRequestMeta>>;

/// @ingroup mcp
Expand Down Expand Up @@ -216,8 +216,7 @@ auto mcp_validate_request_parameters(const JSON &parameters)
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/index#error-codes
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_error_request_meta(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_make_error_request_meta(
const MCPProtocolVersion version, const sourcemeta::core::JSON *identifier,
const MCPRequestMetaStatus status, const JSON::StringView requested,
const std::span<const JSON::StringView> supported)
Expand All @@ -242,8 +241,8 @@ auto mcp_make_error_request_meta(
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#standard-request-headers
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_request_name_from_body(const sourcemeta::core::JSON &envelope)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_request_name_from_body(const sourcemeta::core::JSON &envelope)
-> std::optional<JSON::StringView>;

/// @ingroup mcp
Expand Down Expand Up @@ -285,8 +284,7 @@ auto mcp_request_name_from_body(const sourcemeta::core::JSON &envelope)
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#server-validation
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_validate_request_headers(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_validate_request_headers(
const MCPProtocolVersion version,
const std::optional<JSON::StringView> &protocol_version_header,
const std::optional<JSON::StringView> &method_header,
Expand Down Expand Up @@ -316,8 +314,8 @@ auto mcp_validate_request_headers(
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#value-encoding
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_encode_header_value(JSON::StringView value) -> std::string;
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_encode_header_value(JSON::StringView value) -> std::string;

/// @ingroup mcp
/// Validate a borrowed HTTP header collection. Names are case insensitive.
Expand Down Expand Up @@ -363,8 +361,7 @@ auto mcp_encode_header_value(JSON::StringView value) -> std::string;
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#server-validation
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_validate_request_headers(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_validate_request_headers(
MCPProtocolVersion version,
std::span<const std::pair<JSON::StringView, JSON::StringView>> headers,
const JSON &envelope, std::span<const JSON::StringView> supported_versions)
Expand Down Expand Up @@ -442,9 +439,9 @@ struct MCPHeaderParameter {
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#schema-extension
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_make_parameter_headers(std::span<const MCPHeaderParameter> parameters,
const JSON &arguments)
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto
mcp_make_parameter_headers(std::span<const MCPHeaderParameter> parameters,
const JSON &arguments)
-> std::vector<std::pair<std::string, std::string>>;

/// @ingroup mcp
Expand Down Expand Up @@ -478,8 +475,7 @@ auto mcp_make_parameter_headers(std::span<const MCPHeaderParameter> parameters,
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#server-validation
SOURCEMETA_CORE_MCP_EXPORT
auto mcp_validate_parameter_headers(
[[nodiscard]] SOURCEMETA_CORE_MCP_EXPORT auto mcp_validate_parameter_headers(
MCPProtocolVersion version, const JSON &identifier,
std::span<const MCPHeaderParameter> parameters, const JSON &arguments,
std::span<const std::pair<JSON::StringView, JSON::StringView>> headers)
Expand Down
13 changes: 7 additions & 6 deletions src/core/mcp/include/sourcemeta/core/mcp_logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ enum class MCPLogLevel : std::uint8_t {
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/server/utilities/logging
constexpr auto mcp_log_level_string(const MCPLogLevel level) noexcept
-> JSON::StringView {
[[nodiscard]] constexpr auto
mcp_log_level_string(const MCPLogLevel level) noexcept -> JSON::StringView {
switch (level) {
case MCPLogLevel::Debug:
return "debug";
Expand Down Expand Up @@ -99,7 +99,8 @@ constexpr auto mcp_log_level_string(const MCPLogLevel level) noexcept
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/server/utilities/logging
constexpr auto mcp_resolve_log_level(const JSON::StringView value) noexcept
[[nodiscard]] constexpr auto
mcp_resolve_log_level(const JSON::StringView value) noexcept
-> std::optional<MCPLogLevel> {
constexpr std::array<MCPLogLevel, 8> LEVELS{
{MCPLogLevel::Debug, MCPLogLevel::Info, MCPLogLevel::Notice,
Expand Down Expand Up @@ -135,9 +136,9 @@ constexpr auto mcp_resolve_log_level(const JSON::StringView value) noexcept
///
/// @see
/// https://modelcontextprotocol.io/specification/2026-07-28/server/utilities/logging
constexpr auto mcp_log_level_enabled(const MCPLogLevel level,
const MCPLogLevel threshold) noexcept
-> bool {
[[nodiscard]] constexpr auto
mcp_log_level_enabled(const MCPLogLevel level,
const MCPLogLevel threshold) noexcept -> bool {
return level >= threshold;
}

Expand Down
Loading
Loading