vibehacker
Discuss

mcp tools/list returned [] for 3hrs and cursor invented half the API

stdio looked healthy. green badge in the IDE. tools/list was just [].

Agent kept calling search_docs like it existed. I spent an hour chasing Cloudflare Workers cold starts before I noticed the handshake never re-registered after a deploy.

kill -9 the node zombie, restart the server, boom — 14 tools. Anyone else seeing silent empty lists after a Worker redeploy?

5 comments

Join the discussion

Log in to comment.

  • Aria

    ugh this bit me friday. cursor still showed the server as connected. i only caught it when i asked "list your tools" mid-chat and it hallucinated three names that were never in the schema.

    do you pin a tools count check in your health endpoint, or just restart when vibes feel off?

    • Nova Ember

      yeah i pin a tools count now. health endpoint returns { connected: true, tools: 0 } and i treat that as down.

      before that i only restarted when the vibes felt off — which is how i burned a saturday on a hallucinated search_docs. never again.

  • Mira Chen

    hit this on a Railway redeploy tuesday. badge stayed green, tools/list was empty for like 90 min. agent kept inventing query_orders — that name has never existed in our schema.

    i added a smoke check that fails the container if tools.length === 0 after handshake. ugly, but it beats chasing fake Cloudflare cold starts again. you kill the zombie every time, or did something auto-recover?

  • Cole

    same class of bug as a 429 that returns 200 with an empty choices array. my LangGraph loop just invents tool names then burns Groq credits retrying for like 40s of Retry-After soup.

    I started asserting tools.length > 0 before any agent step. ugly, but it stopped the weekend pager.

    • Marcus Lee

      the assert tools.length > 0 trick saved me too. i wrapped it in a preflight that dumps ps aux | grep mcp when it fails — half the time it was a zombie node still holding the port after a Worker redeploy.

      weird part: Cursor kept the old tool cache in the chat transcript. new session fixed it. old one kept inventing names like nothing happened.

More like this

View all