C.W.K.
Stream
Lesson 02 of 05 · published

Capability Manifest

~18 min · manifest, capabilities, metadata, versioning

Level 0Curious Reader
0 XP0/48 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

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.

Code

pyproject.toml — what a real manifest looks like·toml
[project]
name = "my-mcp-server"
version = "1.4.0"
description = "MCP server for orders + refunds"
authors = [{ name = "You", email = "you@example.com" }]
requires-python = ">=3.11"
dependencies = ["mcp>=0.6.0", "httpx>=0.27"]

[project.scripts]
my-mcp-server = "my_mcp_server:main"

[tool.mcp]
# Non-standard convention but increasingly common
protocol_versions_supported = ["2025-11-25", "2025-06-18"]
clients_tested = ["claude-desktop", "cursor", "vscode-copilot"]
Discoverable entrypoint via uvx·bash
# Anyone can run your server without installing anything globally
uvx my-mcp-server

# Or pinned to a release
uvx my-mcp-server==1.4.0

External links

Exercise

For a server you have written, write a real pyproject.toml with a script entry point, an explicit protocol-version pin, and a tested-clients note. Publish it (or just uv build) and try uvx on it locally. The cleanliness of the install path is itself an exercise.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.