Writing an MCP server is the easy part. Shipping one as a Claude connector means passing four gates that have nothing to do with your business logic: Anthropic's network can reach you, Claude can get an OAuth client identity, a human reviewer approves your tool design, and your server does not waste the user's context window.

Here is the checklist I wish I had had, in the order the failures actually happen.

Gate 1 — Can Anthropic's infrastructure reach you?

Claude connects from Anthropic's servers, not from your laptop. So the tests you run at your desk prove almost nothing. Run these from a network that is not yours:

# Every returned address must be globally routable.