In case anyone is still having this issue, I discovered my MCP server implementation was breaking due to the very non-standard way that Cursor handles tool names.
Specifically, Cursor seems to automatically transform kebab case names to snake case, for example list-sites
becomes list_sites
when the agent tries to call the tool. It then (of course) cannot find the tool with that snake cased name because it does not exist.
This is quite annoying, especially since the MCP TS SDK docs themselves promote a skewer case convention: GitHub - modelcontextprotocol/typescript-sdk at 592c91fc86607a7c11ec60da5a31e58396448cea
Changing the names of my tools to follow snake case convention seems to have solved the problem for me.
@deanrie @danperks perhaps something the team can look into?