Handle
Connecting…
Home

Quests

Ten challenges, 2800 XP. Every answer lives on the wire — you get it by writing a client that speaks MCP 2026-07-28, not by reading this page.

Open the live score card

Getting the quests

The quest server is a second MCP server on :8004, alongside the weather server (:8000). Point a client at it, or start with the Makefile:

make curl-quests                       # the board
make curl-quest QUEST=the-405-wall     # one assignment
make curl-submit QUEST=the-405-wall HANDLE=your-handle ANSWER='...'
You would submit as anonymous

That handle is set once at the top of the page and is the same one the feedback form and the score card use. The first submission claims it and hands back a claim_token; keep it, every later submission needs it. A wrong answer costs 10% of the quest’s XP down to a floor of half, so guessing is cheap but not free. First to solve a quest takes 25% extra.

The Handshake That Wasn't

handshake-that-wasnt
100 XP
novice

Every MCP tutorial you have ever read opens with `initialize`. This one does not have it. Find out what replaced it, and make the server tell you which protocol version it actually speaks.

  • Send a server/discover request to the weather server 40
  • Read supportedVersions out of the result 30
  • Read the capabilities and the serverInfo out of the same result 30
~10 min solved by —

Roll Call

roll-call
150 XP
novice

Two MCP servers are running on this network. One of them is not the one you have been working on all morning — it is the one handing you this quest. Go and ask it what it can do.

  • Locate the second MCP server on the compose network 50
  • Call tools/list against it 60
  • Report the tool names in sorted order 40
~15 min solved by —

The 405 Wall

the-405-wall
150 XP
novice

A stateless protocol has no stream to reconnect to. Prove it — with a request, not a quotation.

  • Send GET /message and record the status 60
  • Send DELETE /message and record the status 60
  • Explain why a stateless revision can answer nothing else here 30
~10 min solved by —

The Mirror Test

mirror-test
250 XP
intermediate

A gateway waves through `Mcp-Name: read_document` while the body says `delete_everything`. Find out what a conformant server does about that.

  • Send a tools/call whose Mcp-Name disagrees with params.name 120
  • Record both the JSON-RPC error code and the HTTP status 90
  • Explain why getting the code right and the status wrong still breaks clients 40
~20 min solved by —

Two Numbers and a Word

cache-contract
200 XP
intermediate

Some MCP answers may be cached and some may never be. The server tells you which — if you ask it properly.

  • Read ttlMs and cacheScope off tools/list 80
  • Read ttlMs and cacheScope off server/discover 80
  • Confirm tools/call carries neither field, and say why 40
~15 min solved by —

The Slashed Ø

the-slashed-o
300 XP
intermediate

HTTP headers carry visible ASCII only. Norway does not. Write the encoder.

  • Find the wrapping rule for non-ASCII header values 80
  • Implement the wrapper in your own language 140
  • Implement the matching decoder the server side needs 80
~25 min solved by —

The Error Ledger

error-ledger
300 XP
intermediate

Three ways to be wrong, three different answers, and one of the HTTP statuses is deliberately not 400. Go and collect them.

  • Provoke a parse error with a malformed body 80
  • Provoke an unknown-method error 80
  • Provoke an unknown-tool error 80
  • Explain why one of the three statuses is not 400 60
~25 min solved by —

Origin Story

origin-story
350 XP
expert

DNS rebinding is the attack. The `Origin` header is the defence. Getting it wrong in either direction breaks something real.

  • Send a request with an untrusted Origin 120
  • Send the same request with no Origin at all 120
  • Explain why this error code is a positive number 60
  • Explain why an absent Origin must be allowed 50
~30 min solved by —

Two Servers, One Agent

two-servers-one-agent
400 XP
expert

A second connection is not a second config line. Your agent has to know which server it is talking to, and be able to say why.

  • Call server/discover on both MCP servers 90
  • Fetch tools/list from both, and index tool name -> server 120
  • Make your agent choose a server per tool deliberately, in code 130
  • State what your agent would do if both servers offered the same tool name 60
~40 min solved by —

Forge Your Own

forge-your-own
600 XP
legendary

Every quest so far had you interrogate someone else's server. This one interrogates yours.

  • Implement get_random_fact on your own MCP server 200
  • Return content and structuredContent, and no cache fields 150
  • Answer -32602/-32020/-32601 correctly under probing 150
  • Pass the quest server's live probe 100
~60 min solved by —