|
cxxmcp 1.1.6
C++ MCP SDK
|
This document defines how cxxmcp classifies public C++17 SDK APIs and what must be reviewed before a release can claim source compatibility. It is part of the release contract together with the compatibility policy, release process, release gates, and release candidate checklist.
The public SDK surface is the installed C++17 API that downstream consumers use through:
sdk/**/include/cxxmcp/...The canonical stable SDK path is Peer / Service over the public cxxmcp::protocol, cxxmcp::transport, cxxmcp::handler, cxxmcp::peer, cxxmcp::service, cxxmcp::client, cxxmcp::server, and cxxmcp::sdk targets. The aggregate cxxmcp::sdk target is a convenience target; narrow targets remain supported for consumers that want smaller dependency surfaces.
The package, repository, install namespace, and CMake target prefix are cxxmcp to avoid collisions with other MCP implementations. The stable C++ namespace is intentionally mcp. A future rename from mcp to cxxmcp would be source-breaking and must not be presented as a cleanup task inside the same major release line. If an alias is ever added, it must follow the public rename rules below and keep mcp available until the next major release at minimum.
Gateway/runtime/CLI/plugin tooling lives outside this SDK repository. Tooling, adapter, plugin, policy, discovery, and profile types are outside the core SDK contract unless they are explicitly promoted by a design note, compatibility review, release notes, and package evidence. External gateway/tooling repositories must define their own compatibility promise instead of relying on the SDK package contract.
Technical-audit closure is part of the public API evidence chain only when it is tied to the exact release commit. A fixed audit finding can justify a bug, security, protocol, or behavior-clarification classification, but it does not replace package-smoke, public-header compile, generated API docs, or API surface diff evidence.
Every new public surface must be classified before it appears in release notes or first-choice documentation.
Stable APIs are supported for source compatibility within a stable major version. For a stable API, cxxmcp may:
For a stable API, cxxmcp must not:
Stable public renames must be additive first: add the new name, keep the old name as an alias or forwarding wrapper, mark the old name with CXXMCP_DEPRECATED("message") where possible, document the migration, and remove the old spelling only in the next major release.
Experimental APIs are public enough for early adopters, but they are not part of the stable source-compatibility promise until promoted. Experimental status must be explicit in the header documentation, Doxygen/release notes, or the surrounding feature document.
Experimental APIs may change or be removed in a minor release when release notes include the impact and migration path. They must not be presented as the first-choice SDK path, and stable public APIs must not require downstream users to consume experimental types.
An experimental API can be promoted to stable only after:
Deprecated APIs are still public, but callers should migrate away from them. Deprecation requires:
CXXMCP_DEPRECATED("message") where the language form allows it;Compatibility wrappers such as concrete client::Client / server::Server escape hatches may remain available for migration and low-boilerplate examples, but they must not displace Peer / Service as the canonical SDK path.
Before every beta, rc, and stable release, reviewers must compare public header diffs under:
sdk/include/cxxmcpsdk/core/include/cxxmcpsdk/protocol/include/cxxmcpsdk/client/include/cxxmcpsdk/server/include/cxxmcpsdk/transport/include/cxxmcpsdk/auth/include/cxxmcp when the advertised package includes authClassify each public change as one of:
Breaking changes cannot ship in an rc or stable release line unless the release owner records why an additive mitigation is impossible. The release notes must name the affected API, the reason, the migration path, and the evidence gap if normal release gates could not run before a security release.
A release may claim public API stability only when the exact release commit has:
package_smoke evidence;public-api-surface.json generated by scripts/collect_public_api_surface.py, so stable/optional targets and public headers can be diffed against previous release evidence;scripts/compare_public_api_surface.py run against the previous and current manifests, with any removals or scalar policy changes handled as public API review items;docs/technical_audit.md reviewed so fixed audit items map to public API classifications, accepted limitations, or tracked debt rather than broad stability claims;Static-library releases do not claim ABI stability. If shared libraries become stable release artifacts later, the project must add a separate ABI policy before advertising ABI compatibility.