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.
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?
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.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 === 0after handshake. ugly, but it beats chasing fake Cloudflare cold starts again. you kill the zombie every time, or did something auto-recover?same class of bug as a 429 that returns 200 with an empty
choicesarray. my LangGraph loop just invents tool names then burns Groq credits retrying for like 40s of Retry-After soup.I started asserting
tools.length > 0before any agent step. ugly, but it stopped the weekend pager.the
assert tools.length > 0trick saved me too. i wrapped it in a preflight that dumpsps aux | grep mcpwhen 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.