The ecosystem: where servers come from and how MCP grows
Servers are found through a registry, built with SDKs, extended with opt-in extensions, and changed through SEPs. And MCP is not the only protocol: it pairs with A2A.
Your team wants an issue-tracker MCP server. In a registry-backed catalog you find two candidates: io.github.acme-labs/tracker and com.acme/tracker.
The namespace is a trust signal: the second one proves control of acme.com through DNS, so it's from the company itself. The registry stores only metadata; the code comes from npm, and security scanning is up to package registries and aggregators, so you still review it.
You call server/discover and see io.modelcontextprotocol/ui under extensions: it can render interactive views in hosts that support MCP Apps, and falls back to plain results where they don't. A week later you want a feature the protocol lacks. You don't fork it: you write a SEP, find a maintainer to sponsor it, and prototype it.
MCP Registry (preview): the official metadata repository for publicly accessible servers. It hosts metadata, not code, is meant for downstream aggregators, and exposes an API that sub-registries can implement. Namespaces: io.github.<user>/* via GitHub login, com.example/* via DNS TXT or an HTTP well-known file. Published with mcp-publisher from a server.json.
Extensions: identified as {vendor-prefix}/{name}; official ones use io.modelcontextprotocol: ui (MCP Apps), tasks, skills, and auth extensions for client credentials and enterprise-managed authorization. Always disabled by default; clients opt in per request, servers advertise in server/discover; if only one side supports one, fall back to core or reject.
SEPs (Specification Enhancement Proposals): Standards Track, Informational, Process, Extensions Track. Each needs a sponsor (a maintainer); acceptance needs a prototype, final needs a reference implementation. A SEP with no sponsor after six months goes dormant.
Governance: MCP was donated to the Agentic AI Foundation (a Linux Foundation directed fund) in December 2025; the maintainers keep technical direction. Features follow the Active → Deprecated → Removed lifecycle.
MCP vs A2A: MCP standardizes agent-to-tool/context connections; A2A standardizes agent-to-agent discovery and delegation. "MCP gives each agent depth, and A2A gives your system reach."
Use-case questions on the exam are usually "which piece solves this?": discovering servers (registry), adding UI (Apps extension), long jobs (Tasks), talking to another company's agent (A2A), changing the protocol (SEP). Knowing the map is most of the answer.
{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.my-username/weather","description":"An MCP server for weather information.","repository": {"url":"https://github.com/my-username/mcp-weather-server","source":"github" },"version":"1.0.0","packages": [ {"registryType":"npm","identifier":"@my-username/mcp-weather-server","version":"1.0.0","transport": {"type":"stdio" } } ]}
Verbatim from the registry quickstart (environment variables trimmed). The io.github.my-username namespace is proven by logging in with that GitHub account.
First time here? Set up the test helper (once per terminal)
ShellSetup
# 1. In a SECOND terminal, start the reference server (Node 18+, no dependencies)curl -sO https://www.diegozuluaga.dev/mcpa/reference-server.mjsnode reference-server.mjs # http://localhost:3000/mcp, logs appear here# 2. In THIS terminal, define the helper every test uses (bash or zsh)export MCP=http://localhost:3000/mcpMETA='"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}'mcp() { # usage: mcp <method> '<json body>' [extra curl args...] curl -sS -N "$MCP" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H 'MCP-Protocol-Version: 2026-07-28' \ -H "Authorization: Bearer ${MCP_USER:-alice}" \ -H "Mcp-Method: $1" "${@:3}" -d "$2" \ -w '\nHTTP %{http_code}\n'}# Demo auth: the reference server treats the bearer token as the user's name.# Prefix a command with MCP_USER=bob to act as someone else.
ShellTests
# 1. Which extensions does a server support? (here: the reference server)mcp server/discover '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{'"$META"'}}' | grep -o '"extensions":{[^}]*}}'# 2. Browse the public registry (preview API; may change)curl -s "https://registry.modelcontextprotocol.io/v0.1/servers?limit=3" | head -c 600; echo