Skip to content
MCP Test Kitchen homePowered by Cakewalk

Andrea Del Popolo5 min read

We built an MCP Test Kitchen aka "WTF Simulator" so you don't have to

TL;DR: we built a configurable test environment for exercising happy and not-happy scenarios using an MCP Test Kitchen, and we made it public to everyone.

The industry went from OpenAPIs specs to MCPs overnight. The MCP protocol has been (in my opinion of course) a blessing to developers and humankind.

In all truth, MCPs are really cool and powerful, until you need to test them. Then you start developing mixed feelings about them.

Meme image of a man shouting on stage, captioned MCP! MCP! MCP!

At Cakewalk, we set out to build the ultimate MCP to rule them all, we call it the MCP Gateway, fancy. But I don’t want to start talking about that here, it might follow with a new blog post, maybe.

Here, I want to share what we learned about MCPs along the way and how solving a problem for ourselves might be helping others out there.

When you are tasked to build a system that can talk to any MCP, you already fear that incompatibilities, versions, tech stack and network issues will be acting as a standing crowd throwing sticks at your wheels. And it was, in fact, like that, but only to some extent. Naively, we started to test the local version of our work-in-progress MCP gateway against first-class MCP implementations, like Miro to name one, and all went well at the start. We were a happy team.

Things turned out complicated, very fast, one word came up often, one word that I had heard before when we were still doing “requirements” and nice old school waterfall project management. I don’t think any non-sociopath uses this word every day, but let me know if you do.

Elicitation

By now we all know what it means, but it is the single most annoying thing about the MCP protocol. At least, until 28th of July 2026, when the simplification of the protocol moved session-bound elicitation/create to multi-round-trip requests. The simulator still includes an elicitation-approval scenario. It was a breaking redesign, which is why client support is uneven. Some agents supported it beautifully, then stopped supporting it, I am still confused what’s the state of the art out there to be honest. We’ll see. Eventually.

The multi-round-trip requests spec

Our biggest challenge about Elicitation was to act as a bridge through the gateway, how to relay the elicitation back and forth when you act as both the client and the server? Spoiler-alert, we solved this.

Another cool thing about MCPs is that you have, of course, tools. But you have other options as well: resources and prompts are underrated. The aforementioned world class MCPs we tested at the start did not offer any of those, so we did not know how to test them out in practice.

So we made our own MCPs, with blackjack and tools.

Meme image of a cartoon robot, captioned: I will make my own MCP, with blackjack and tools!

The WTF simulator

For all of these reasons, we decided to work on an internal tool, initially named after what it was set out to do: WTF simulator, we could use it to plug use cases and see how our gateway behaved and misbehaved. Bad boy.

We built the WTF simulator as an external and stand-alone application, we did not want to merge it with our infra, but this turned out to be quite useful for sharing it externally, that’s why I’m writing about it, I hope that the WTF simulator could help your own WTFs.

The WTF simulator is available to anybody with either a Google or Github account. We need to have you authenticated because we mint a unique token that you can plug into Cursor/Claude or agent of choice. When connecting with that token, we then know it’s you hitting the MCP server.

We have worked on several test scenarios, but since we decided to go public with the simulator, we scoped the test cases to some very simple and configurable set of tools:

The six tool scenarios in the console: Baseline (success), C# SDK v2 backward compatibility, Elicitation approval, HTTP transport error, JSON-RPC error, Tool error (isError).

The Tools tab. One scenario is active at a time.

  • Baseline (the happy scenario, everything works as expected and boring)
  • Elicitation approval (trigger an elicitation flow, comes with complementary panic attack)
  • HTTP transport error: returns a configured sequence of HTTP status codes across successive MCP POST requests (transport layer). This way you can build a sequence of errors as it pleases you, and see how your agent (mis)behaves.
  • JSON-RPC error, same as the above, but one level below, it returns a JSON-RPC error envelope (HTTP 200, error object in body) on a configured tools/call invocation.
  • Tool error (isError): it returns a valid MCP tool result with isError=true on a configured invocation (application layer).
  • C# SDK v2 backward compatibility: inspired by the folks behind the recent upgrade of the C# SDK. It offers a dedicated tool that exercises official MCP C# SDK 2.0 / 2026-07-28 backward-compat paths: simulate_ticket_close_mrtr (up-front argument, native MRTR, or down-level guidance), show_negotiated_mcp_protocol (negotiated protocol and headers), and verify_order_region_param_header (Mcp-Param header promotion). run_configured_test_scenario returns a matrix of which cells this stateless host can cover.

Announcing v2.0 of the official MCP C# SDK

We have also added resources and prompts for both happy and not-so-happy scenarios:

The Resources tab, listing a valid resource at test://resources/valid and an invalid one at test://resources/invalid.

Resources. Always on, no scenario configuration.

The Prompts tab, listing valid_prompt and invalid_prompt.

Prompts. Same idea, one valid and one not.

Seeing what happened

All of this is good, but how do I know what’s going on? We solved that as well. We want visibility of everything that happens on the MCP Test Kitchen, we want to know the internal of the WTFs.

The Messages panel with filters open, showing rows for TOOLS/LIST and SERVER/DISCOVER, each with an OK status, a duration in milliseconds, the baseline scenario and protocol 2026-07-28.

One row per request, filterable, streaming live.

If you want to check out this project, sign in via either Google or Github. We do not store your email address for marketing purpose, and you can delete EVERYTHING at any time with the ERASE EVERYTHING big red button.

The Erase everything dialog. It permanently deletes your observations, saved scenario, MCP access token and live sessions, signs you out, and cannot be undone. You type erase everything to confirm.

Erase everything. Type it to confirm.

Feedback: if you want to reach out with ideas just hit the button in the console.

The Give feedback dialog, with a free-text box up to 2000 characters and a Send feedback button.

The feedback button, in the console.

The other half

And last but not least, it’s worth mentioning the counter part of the MCP Test Kitchen: the MCP Inspector, which is a very useful tool for connecting to MCP servers. We have designed the MCP Test Kitchen along the same UI, font and style and we hope it will be used as a companion in the world of MCPs, clients and server. And yes, we have connected the inspector with the WTF simulator, it ended up being an inception of testing the tests.

MCP Inspector