learn-mcp-with-phoebe / Builder session 8 of 8
Learn MCP with Phoebe · Builder track · Session 8 of 8

Registry and what's next

The last mile: publish Daybreak to the official MCP registry so anyone can discover and install it, then decode the 2026-07-28 revision in full - which finalizes just six days after this course shipped, making this the freshest section of any MCP course you will find. You walk out with a published server, a migration checklist, and the ability to narrate every byte of an MCP conversation.

🔴 Hardest Practitioners: DE · DS · AI engineers · builders Python · spec 2025-11-25 → 2026-07-28 45 min · capstone
0-3 · Recap 3-15 · Publish Daybreak 15-38 · The 2026-07-28 delta 38-45 · Migration + graduation
Part 0

Where we are - and the finish line

You have built (b2-b3), connected (b4), written a client (b5), gone remote (b6), and secured it (b7). Two things remain. First, make Daybreak discoverable by publishing it to registry.modelcontextprotocol.io. Second, look forward: the 2026-07-28 revision reshapes the protocol you just learned, and because it lands days after this course, you get it decoded ahead of nearly everyone. Then a graduation trace where you narrate the whole protocol end to end.

Live - presented in session Self-study - read after class ▶ Live MCP wire - step through real messages Official sources covered
★ What you walk out with today A real server published under your own namespace (io.github.yourname/daybreak), a server.json manifest you understand line by line, the entire 2026-07-28 change register decoded with migration advice per theme, and a checklist that makes the upgrade a non-event. Plus the graduation trace: you can now read and narrate every message MCP puts on the wire.
Part 1 · covers official Registry docs (publish, versioning, moderation)

Publish Daybreak 6 min live

The registry (live since Sept 2025) is how servers get found. It hosts metadata, not code - your package lives on PyPI (or npm), and the registry points at it. You describe your server in a server.json manifest, authenticate with GitHub, and publish with the mcp-publisher CLI. GitHub auth locks your namespace to io.github.yourname/*, so no one can squat your name.

From code to discoverable listing 1 · server.jsonthe manifest 2 · publish pkgto PyPI 3 · login githublocks namespace 4 · publishto registry 5 · listedfindable The registry stores metadata only; the artifact stays on PyPI/npm. name in server.json must match the package. GitHub auth requires the name start with io.github.yourname/ - your namespace, no squatting. Registry is in preview: expect refinements. Moderation removes spam + malicious listings.
🔍 Click to zoom - the five-step publish pipeline
LiveThe manifest walkthrough - server.json for Daybreak4 min▶

mcp-publisher init generates a template; you edit it. The key fields: a namespaced name, a human description, the repository, a version, and a packages array telling installers where the artifact lives and how to run it (transport stdio for Daybreak). The name must match the mcpName you put in your package metadata.

server.json · Daybreak (PyPI package, stdio transport) { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.yourname/daybreak", "description": "Sales, subscriptions, catalog and refund policy for the Daybreak coffee brand.", "repository": { "url": "https://github.com/yourname/daybreak-mcp", "source": "github" }, "version": "1.0.0", "packages": [ { "registryType": "pypi", "identifier": "daybreak-mcp", "version": "1.0.0", "transport": { "type": "stdio" } } ] }
the three commands that publish it mcp-publisher init # scaffold server.json from your project mcp-publisher login github # device-code auth; locks you to io.github.yourname/* mcp-publisher publish # push metadata to registry.modelcontextprotocol.io
LiveWhat a good listing looks like - description quality = adoption3 min▶

Discovery is a marketplace. Two servers that do the same thing get wildly different adoption based on their metadata. Your description and your tool descriptions are the pitch - and, as you learned in b7, tool descriptions are also what the model reads to decide what to call. Bad descriptions hurt twice.

  • Say what it does in one line - "Sales and subscription analytics for Daybreak", not "an MCP server".
  • Version honestly with semantic versioning; publish a new version rather than mutating an old one.
  • Point at a real repo - reviewers and users check it. A README with setup + the security section from b7 builds trust.
  • Respect moderation - the registry removes spam and malicious servers; a clean, accurate listing survives.
Part 2 · covers MCP spec 2026-07-28 "Key Changes" (decoded ahead of finalization)

The 2026-07-28 delta, in full 10 min live

This revision finalizes 2026-07-28 - six days after this course shipped. Everything below is decoded from the release candidate; re-verify against the published spec after that date. It is the freshest material in any MCP course, and it touches things you built this term. Here is the whole change register with what to do about each.

LiveStateless core - the handshake disappears3 min▶

The biggest change. The initialize/initialized handshake and the Mcp-Session-Id header are removed. Capabilities travel in _meta on each request, and new Mcp-Method / Mcp-Name routing headers let infrastructure route without parsing the body. Any node can serve any request - horizontal scale becomes trivial.

Migration advice: keep tool handlers pure (everything from arguments, nothing from cross-request server memory) as you practiced in b6. Stateless-friendly servers barely notice the switch.

LiveDeprecations - roots, sampling, logging2 min▶

Roots, sampling, and logging are deprecated with a 12-month removal window. Two of the three client-side primitives you met in b1 are on the way out; elicitation stays. Logging as a protocol feature is deprecated too - use your host's own observability.

Migration advice: do not start new work on sampling or roots. If you have existing use, plan the 12-month exit. Build interactive UX on elicitation (b7).

LiveMCP Apps + Extensions + Tasks3 min▶
  • MCP Apps (SEP-1865): servers can ship sandboxed-iframe UIs - first-class interactive surfaces, not just text. Powerful, but host support is early; treat it as a preview and watch which hosts render it.
  • Extensions framework, first-class: optional capability bundles layered on the core. This is how new features ship without bloating the base protocol.
  • Tasks graduated to an extension: long-running work gets a standard shape, now delivered through the extensions mechanism rather than the core.

Migration advice: keep your core server lean and standard; adopt extensions deliberately as host support lands.

Self-studySchema + error-code changes2 min read▶
  • JSON Schema 2020-12 is the default for tool input schemas. If you hand-write schemas, target that draft.
  • Error code change: the "invalid params / unknown tool" style error moves from -32002 to -32602. (The live error scenario in this track already shows -32602.)

Migration advice: if any code branches on the exact numeric error code, update it. Most SDKs abstract this for you.

OLD - stateful (spec 2025-11-25) initialize → session created Mcp-Session-Id on every later request server remembers session · sticky routing NEW - stateless (spec 2026-07-28) no handshake · no session id capabilities in _meta per request Mcp-Method/Mcp-Name headers · any node serves Same tools, same results - only how the session is carried changes. Pure handlers migrate cleanly. Re-verify every callout in this track against the published spec after 2026-07-28.
🔍 Click to zoom - the old session model vs the new stateless core
Part 3 · synthesis + spec Roadmap

Your migration checklist + where MCP goes 5 min live

You cannot flip to 2026-07-28 before it finalizes, but you can build today so the upgrade is a non-event. Here is the checklist, then a look at the trajectory.

LiveThe migration checklist3 min▶

Design stateless now. Tool handlers derive everything from arguments; no per-user state built up across requests in a session.

Avoid roots and sampling in new work; plan a 12-month exit for any existing use.

Keep elicitation - it survives, and it is your interactive-UX mechanism.

Validate the issuer (RFC 9207) in your auth code today; it becomes required.

Target JSON Schema 2020-12 for any hand-written tool schemas; don't hardcode the old error number.

Watch host support for MCP Apps before shipping iframe UIs; adopt extensions as they land.

Self-studyEcosystem trajectory - where MCP is heading3 min read▶

Two forces to watch. First, the registry keeps growing - as it matures out of preview, discovery and trust signals (verification, moderation, download stats) will shape which servers win, much like npm did for JavaScript. Second, governance under the Agentic AI Foundation (Linux Foundation) means the roadmap is now public and multi-vendor: stateless core, Apps, and extensions are the current bets, and the SEP process is where the next ones get argued. Translation: MCP is stabilizing into infrastructure. Betting on it is betting on a standard, not a vendor.

The 12-month migration window 2026-07-28 · revisionstateless core lands months 0-12 · both workmigrate off roots/sampling/logging ~2027-07 · removaldeprecated primitives gone Elicitation is NOT on this timeline - it stays. Only roots, sampling, and logging are being removed.
🔍 Click to zoom - the deprecation window from revision to removal
Demo 1 of 2

Write the manifest ★ 7 min · scaffold + edit

Generate and edit a real server.json for Daybreak, then dry-run the publish path.

Package Daybreak for PyPI (add an mcpName of io.github.yourname/daybreak to your package metadata so the registry can verify it).

Run mcp-publisher init and edit the generated server.json to match the Part 1 example - name, description, repository, version, the pypi package with stdio transport.

Authenticate: mcp-publisher login github, complete the device-code flow. This is what binds you to the io.github.yourname/* namespace.

mcp-publisher publish, then verify with a search against the registry API. Your server is now discoverable.

Demo 2 of 2

The graduation trace ★ 10 min · narrate every byte

The whole track in one exchange. A host connects to Daybreak, discovers its tools, the user asks the March question, the model calls query_sales, and the $150.00 answer comes back. Narrate each message out loud - if you can, you have graduated.

Connect + handshake (b1, b5): the client sends initialize, the server agrees on version and capabilities. On 2026-07-28 this step vanishes - say why.

Discover (b1, b2): tools/list returns query_sales with its schema - the description the model reads (b7: also the injection surface).

Call (b1, b5): the model fills {"month":"2026-03"}; the client sends tools/call; the server queries the DB.

Answer: the content array carries "$150.00, down from $271.00" back to the model, which writes the founder's answer. Now name the transport (b6) and the auth (b7) that carried it if remote.

Real world

This is the skill that separates operators from users. Most people who "use MCP" cannot read this traffic. You can build the server, write the client, deploy it, secure it, publish it, and debug it at the wire level - and you know what the next spec revision changes. That is a rare, durable skill in the agent era.

Homework · capstone

Try it yourself - this week ◐ 45-90 min total

Source material

Official sources covered

The capstone: registry publishing and the forward-looking spec, decoded before it finalizes. This page covers:

✓modelcontextprotocol.io - Registry docs (publish, versioning, moderation)server.json manifest, mcp-publisher CLI, GitHub auth, namespaces
✓MCP spec 2026-07-28 - "Key Changes"Decoded ahead of finalization: stateless core, deprecations, schema/error changes
◐Extensions + MCP Apps (SEP-1865) docsPreview - framing + migration advice; host support still early
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · What does server.json actually put in the registry?

The registry hosts metadata, not artifacts. The package lives on PyPI or npm; server.json describes it and points at it. The name must match your package's mcpName, and GitHub auth locks your io.github.yourname/* namespace.

2 · What does the 2026-07-28 stateless core remove?

The handshake and session id go away; capabilities travel in _meta per request, with Mcp-Method/Mcp-Name routing headers, so any node can serve any request. Tools, resources, and Streamable HTTP all remain.

3 · Which primitives are deprecated on 2026-07-28 (12-month window)?

Roots, sampling, and logging are deprecated with a 12-month removal window. Elicitation survives - which is why b7 built interactive UX on it. The server primitives (tools, resources, prompts) are untouched.

Whole-course capstone cheat sheet · pin this

PrimitivesServer: tools (model), resources (app), prompts (user). Client: elicitation (stays), sampling + roots (deprecated 2026-07-28).
The wireJSON-RPC 2.0: request (id) · response (same id, result or error) · notification (no id). Error -32602 for bad params.
Transportsstdio (local subprocess) · Streamable HTTP (one endpoint, POST + optional SSE upgrade). HTTP+SSE is dead.
Client loopconnect → initialize → list_tools → (user → model → tool_use → call_tool → tool_result → model → answer).
Consumption modesHost app · your own client · Messages API MCP connector (remote-only, tool-only, no client code).
Auth (OAuth 2.1)Server = resource server. Metadata (RFC 9728) → auth server → DCR → PKCE → Bearer. Validate issuer (RFC 9207).
SecurityConfused deputy · token passthrough (forbidden) · session hijacking · prompt injection via tool descriptions · least privilege · human approval.
Registryserver.json (metadata) + package on PyPI/npm. mcp-publisher init/login github/publish. Namespace io.github.you/*.
2026-07-28 migrationDesign stateless now · avoid roots/sampling · keep elicitation · JSON Schema 2020-12 · watch MCP Apps host support.
Running projectDaybreak: query_sales/top_products/subscription_status · catalog + refund policy · monthly_report. March = $150.00.

Next course: learn-ai-agents-with-phoebe - your Daybreak server becomes an agent's toolbox (coming soon)