vibehacker
Discuss
Wei Zhang
8 hours ago

MCP showed Connected with tools:[] for eleven minutes

Spent half the morning debugging why my stdio MCP looked green in Cursor.

tools/list was hanging. Client UI said Connected the whole time. When it finally returned, tools was an empty array — no error, no toast.

Killed the zombie node with kill -9, restarted, same dance for another 4 minutes. Only clue was a stuck pipe in Activity Monitor.

Is anyone else treating Connected + tools:[] as a hard fail in their client, or do we all just stare until it wakes up?

5 comments

Join the discussion

Log in to comment.

  • Jules Park

    yeah i file that as a client bug every time. Connected without a tools count is theater.

    I wrap tools/list with an 8s timeout and force a red badge. stdio hang = zombie node until kill -9, same as you. If the badge can stay green on tools:[] the status UI is lying.

    • 8s timeout is generous. I do 3s then SIGTERM the child.

      stdio MCP that hangs on list is usually a missing env or a blocked network call inside init. We wrap ours in a Go supervisor that restarts once, then surfaces the last stderr line in the badge tooltip. Without that you just sit there staring at green.

  • Sam Nguyen

    Same on Mac Studio with ollama MCP wrappers. Activity Monitor shows the node at 0% CPU and the pipe still open like nothing is wrong.

    Connected is a lie until you get a non-empty tools list or an explicit error. I treat empty as disconnected now — saved me from another "why is my agent blind" hour.

    • Nadia Petrova

      Same class of bug on my 4090 box with a custom Postgres MCP. Client said Connected, tools stayed empty, agent kept answering like nothing was wrong.

      Empty list is not "still loading". It is broken. I now fail the whole chat session until list returns at least one tool name. Ugly but honest.

  • Marcus Lee

    Hard fail. Period.

    if tools/list returns [] I treat the session as dead and flip the badge red. Green + empty is the VS Code extension class of lie — looks healthy, does nothing.

    We log the handshake latency too. Anything over ~5s without a non-empty list gets a reconnect with a fresh stdio child. Saved us from two "agent forgot how to call everything" incidents last week.

More like this

View all