In-house set
Write against the API that exists today
The worst failure in third-party integration work does not look like a failure. The call is idiomatic, the types line up, and the method was removed two majors ago. Two items for what is true now, two for proving it stays true.
The failure this is for
An agent integrating someone else's API does not usually get stuck. It writes a call that is syntactically correct, idiomatic for the library, correctly typed, and aimed at a method that was renamed two major versions ago. Nothing complains until runtime, and in the worst version nothing complains at runtime either because the endpoint still exists and quietly no-ops.
This is a confidently-wrong failure rather than a visibly-stuck one, which makes it the expensive kind. The model is not hallucinating. It genuinely learned that API. It learned an older one.
| The failure | What it looks like | What answers it |
|---|---|---|
| Training data froze the API | idiomatic call to a renamed method | version-pinned docs at write time |
| The docs lag the release | the page still lists a removed endpoint | releases, tags, closed issues |
| Iterating against production | every retry is a real charge or a real email | record once, replay after |
| The error path never ran | retry logic written, never executed | a dependency that fails on demand |
| They changed it and nobody noticed | works until a Tuesday | recorded flows as a suite |
Two clocks, not two lookups
The pair worth understanding is the first two, because a lazy version of this set picks one and calls it done.
Context7 answers what the current documentation says. It is fast, covers an enormous range, and is a curated snapshot maintained by somebody else. The GitHub server answers what the source actually shipped, which is slower, needs you to know the repository, and is primary. When those two disagree the second one is right, and the case that matters is not disagreement but silence: a documentation site that has not mentioned a removal is indistinguishable from one where nothing was removed, and the release notes can tell those apart.
Two directions of mock
The second pair looks more redundant than it is. Both record traffic and replay it, and they point at different things.
MockServer stands where the vendor stands. You put it in front of your code and it answers as they would, including badly: latency, dropped connections, the 429 your retry logic was written for and has never seen. Most integrations ship an untested error path, not from negligence but because deliberately provoking a vendor's rate limiter is awkward to arrange.
Keploy stands where your application stands. It watches real flows at the network layer and hands back a test suite with the stubs already captured, which is the thing that fails on the morning the vendor changes a response shape without telling anybody. One rehearses a disaster; the other notices one.
There is no item here for making an HTTP request
There was nearly a fifth item: an MCP server that wraps curl and returns the status, headers and raw body as typed JSON, so the agent sees the real response rather than an SDK's parsed idea of it. It is a real need. An agent that only ever sees a doc example's abbreviated JSON does not learn that the field is null in practice, or that pagination lives in a header nobody documented.
It is not here because the agent already has a shell, and the candidate was a 136-star wrapper around a command that has been installed on every machine for thirty years. Recommending it would have made this set look more complete without making anybody's integration work better.
Four items, and each one removed leaves a hole with a name.
Take the lot
1 of 4, in order
claude mcp add context7 -- npx -y @upstash/context7-mcpSome of these are the commands their projects publish and some are assembled from repository paths. Each one is labelled where it appears below. Nobody here has run them as a set.
What is in it
Their picking, our numbers
Context7MCP server
upstash/context7/io.github.upstash/context760,113★ repoMIT
The default move, and it is the right default. Version-pinned documentation fetched at the moment of writing, rather than recalled from whenever the model last saw this library. Worth pointing at the version the project actually installs, because "latest" is its own way of being wrong.
claude mcp add context7 -- npx -y @upstash/context7-mcpAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
GitHubMCP server
github/github-mcp-server/io.github.github/github-mcp-server31,881★ repoMIT
The second opinion, and it is a different clock rather than a backup. Documentation is a rendering of the code and it lags. Release notes, tags, and a closed issue titled "removed in v5" are the code. Reach for this the moment the docs are silent on something, because silence in documentation is not evidence of absence.
No install line here. This server does not publish one we could copy, and it has no package name recorded, so anything shown here would be a guess at whether it runs from npm, PyPI, a container or a hosted URL.
The repository will have the real instructions: github.com/github/github-mcp-server
MockserverMCP server
mock-server/mockserver-monorepo/com.mock-server/mockserver4,931★ repoApache-2.0
Stands in for their API, and its real value is the part that sounds like a stunt: it can inject latency, drop connections and fail on purpose. Every integration ships a retry path and a rate-limit path that were never once executed, because provoking a 429 from a vendor deliberately is difficult and slightly rude.
No install line here. This server does not publish one we could copy, and it has no package name recorded, so anything shown here would be a guess at whether it runs from npm, PyPI, a container or a hosted URL.
The repository will have the real instructions: github.com/mock-server/mockserver-monorepo
KeployMCP server
keploy/keploy/io.github.keploy/mcp18,370★ repoApache-2.0
Points the other way. Record your own application's real flows once, at the network layer, and get back a test suite plus the stubs it needs to run with the vendor unplugged. The mock above is for asking "what if they misbehave"; this is for noticing the day they quietly do.
No install line here. This server does not publish one we could copy, and it has no package name recorded, so anything shown here would be a guess at whether it runs from npm, PyPI, a container or a hosted URL.
The repository will have the real instructions: github.com/keploy/keploy
More of these
Stacks are written by hand and there are not many. The catalog underneath is large, and its default ordering puts whatever has been picked at the front.