@sandboxapis/mcp
An MCP server that gives an AI agent a realistic, read-only data set to work against (repos, pull requests, reviews, issues, sprints, commits), served through API-compatible replicas of GitHub, GitLab, Bitbucket, Azure DevOps, Jira, Linear, Slack, Microsoft Teams, Sentry, PagerDuty, Statuspage, CircleCI, Buildkite, Zendesk, Salesforce, HubSpot, Anthropic, OpenAI, ChatGPT, Cursor, Devin, Google Antigravity, Prometheus, Grafana and Datadog.
No test accounts. No credentials. No rate-limit anxiety. Nothing to clean up afterwards.
claude mcp add sandboxapis -- npx -y @sandboxapis/mcp
Then have the agent call orient first. It comes back with the API surfaces and their base URLs, the org and its teams, notable entry points (each with a ready-to-run request), how to pin a reproducible snapshot, where the coverage manifest lives, and an access block saying what this server may spend — enough to make a correct call with no docs reading.
Why this exists
Agents that build or test integrations need something real to point at. The options are usually a hand-maintained fake org that's thin and stale, or a real account with credentials, rate limits, and consequences. This is the third option: one simulated company, olympus-labs, with months of coherent history, rendered into 25 different API dialects, where every reference resolves. A pull request's author is a fetchable user, its commits exist with matching SHAs, its reviewers belong to real teams, and the same story is queryable through every host.
Everything is read-only. Writes return the provider's own error shape with a plain explanation, so an agent that tries one learns something instead of breaking something.
Tools
Results come from the same public API a human would point a client at, so anything an agent learns here transfers directly to a curl or an Octokit call.
Configuration
Everything is optional — the server works with no configuration at all.
When the budget runs out
Nothing is hidden behind a limit, but every caller has an hourly window and an agent in a loop will find it. Two things make that legible without parsing prose:
- Ask first.
check_budgetreads the real window — limit, remaining, seconds until it resets — through an endpoint that is exempt from the budget it reports, so the check itself is free.orientreturns the same facts in itsaccessblock, so an agent that oriented already knows. - The refusal is data. A refused tool result keeps its
{provider, path, status, body}exactly as before and addsupgrade:
{
"provider": "github",
"path": "/users/athena",
"status": 403,
"body": { "message": "API rate limit exceeded. …", "documentation_url": "…", "status": "403" },
"upgrade": { "tier": "anonymous", "url": "https://sandboxapis.dev/upgrade?from=anonymous", "retryAfterSeconds": 600 }
}
tier is the rung that refused; url is absent when there is nothing to offer; retryAfterSeconds is present when the provider sent a Retry-After. upgrade appears on over-limit refusals only — never on a success, a coverage 404, or a read-only refusal.
Live vs. pinned
The default hosts roll forward daily, so the newest activity is always hours old — good for demos and exploration. For tests you want data that never drifts, ask get_snapshot for a pinned hostname and set the matching SANDBOXAPIS_BASE_URL_*. A snapshot regenerates byte-identically on every request, so pinned assertions hold indefinitely.
Honest boundaries
Coverage is deliberately bounded and published. An uncovered REST endpoint returns a real 404 plus an X-SandboxAPIs-Coverage header pointing at the coverage manifest; an uncovered GraphQL field returns an explicit coverage error rather than a silent null. You will never get a plausible-looking invented value.
This package is a thin client: it holds no data of its own and reads the hosted service over the network.
Source and licence
This repository is the source of the MCP server, the @sandboxapis/mcp package on npm. It is a thin client: it holds no data of its own and reads the hosted service at sandboxapis.dev over HTTPS. The hosted service, the API replicas and the engine that generates the data set are separate and are not included here.
The code is MIT licensed, see LICENSE. The copyright holder is Driftwork LLC, the company behind SandboxAPIs.
The source of record is the SandboxAPIs monorepo, and this repository is written from it by a script on every release, with the release's version as a tag. Bug reports and feature requests are welcome in this repository's issues. A pull request here is read and carried over by the SandboxAPIs team rather than merged in place, because the next release would otherwise overwrite it. Contact: [email protected].
Docs: sandboxapis.dev/docs/mcp · Coverage: sandboxapis.dev/coverage