Beyond the runtime handshake, real-world MCP servers ship a small manifest — usually a pyproject.toml or a package.json — that names the server, its version, its entry point, and the protocol revision(s) it commits to supporting. The manifest is what registries, package managers, and Claude Desktop's "add server" UI read.
Pin your protocol revision explicitly in the metadata. Keep the changelog short and honest: "v1.4.0: added refund_order tool, drops support for protocol-version 2025-03-26." Future-you and the next user who upgrades both depend on that line. Add a compatibility section listing tested clients, mirroring the matrix from the versioning track.
For Python servers, expose the entry point through uv / uvx: [project.scripts] my-server = "my_server:main". Now any host can launch your server with a single command (uvx my-server) without users worrying about virtualenvs. For TypeScript/Node servers, the equivalent is npx.