Skip to main content
Glama
@sandboxapis/mcp

@sandboxapis/mcp

@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.

Related MCP server: Faker MCP Server

Tools

Tool

What it does

orient

Start here. Full self-orientation, no docs required — including access: keyed or not, the requests left this hour, and where to raise the limit.

check_budget

Costs nothing. Call it before any loop of more than a handful of requests: limit, remaining, when the window resets.

list_repositories / get_repository

Repos, provider-shaped, with provider-form ids.

list_pull_requests / get_pull_request

PRs/MRs with their reviews or approvals.

list_issues

Issues — REST on git hosts and Jira, GraphQL on Linear.

get_user

A user by login/username.

search_commits_by_author

Commits by author, with SHAs that cross-reference across hosts.

get_snapshot

The pinned hostname for drift-free CI.

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.

Variable

Effect

SANDBOXAPIS_API_KEY

Lifts the anonymous limit (60 req/hr) to 600. Free key at sandboxapis.dev — agents exhaust 60/hr quickly. Without it, a refusal names this variable rather than a signup page; with it, a refusal names the rung the key is on. Either way the tool result carries upgrade (see below).

SANDBOXAPIS_BASE_URL_GITHUB (and _GITLAB, _BITBUCKET, _ADO, _JIRA, _LINEAR, _SLACK, _TEAMS, _SENTRY, _PAGERDUTY, _STATUSPAGE, _SALESFORCE, _HUBSPOT, _ZENDESK, _CIRCLECI, _BUILDKITE, _ANTHROPIC, _OPENAI, _CHATGPT, _CURSOR, _DEVIN, _ANTIGRAVITY, _PROMETHEUS, _GRAFANA, _DATADOG)

Point a surface elsewhere: a pinned snapshot host, or a self-hosted instance.

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_budget reads 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. orient returns the same facts in its access block, 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 adds upgrade:

{
  "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: team@sandboxapis.dev.


Docs: sandboxapis.dev/docs/mcp · Coverage: sandboxapis.dev/coverage

Available Tools

10 tools
check_budgetCheck the remaining request budgetA

Costs nothing — call it before any loop of more than a handful of requests. Returns this server's real hourly window (limit, remaining, when it resets) read from the provider's own budget endpoint, which is exempt from the budget it reports, plus whether a key is set and where to raise the limit. The window is ONE bucket per caller shared across every provider host, so the numbers apply to all of them.

Inputs: provider.

get_pull_requestGet a pull/merge request with its reviewsB

Fetch one PR (GitHub) / MR (GitLab) plus its reviews (GitHub) / approvals (GitLab). Returns both in one result; each carries provider-form ids for cross-referencing.

Inputs: number (required), provider (required), repo.

get_repositoryGet a repositoryC

Fetch one repository by name (default: the flagship repo). Provider-shaped, with provider-form ids.

Inputs: provider (required), repo.

get_snapshotGet a pinned snapshot hostnameA

Return the pinned, reproducible hostname for a provider — point your client's base URL at it for drift-free CI. A snapshot regenerates byte-identically on every request.

Inputs: provider (required).

get_userGet a userC

Fetch a user by login/username. Provider-shaped, with provider-form ids.

Inputs: login (required), provider (required).

list_issuesList issuesC

List a repo's issues. Optional state filter (open/closed/all).

Inputs: provider (required), repo, state.

list_pull_requestsList pull requests / merge requestsC

List a repo's pull requests (GitHub) or merge requests (GitLab). Optional state filter.

Inputs: provider (required), repo, state.

list_repositoriesList the org's repositoriesB

List repositories for the universe's org. Results are identical to the provider's REST API and carry provider-form ids (node_id / numeric id).

Inputs: provider (required).

orientOrient in the SandboxAPIs universeA

START HERE. Returns everything needed to use SandboxAPIs with no docs: the universe/theme, every API surface and its base URL (git hosts and issue trackers), live-vs-snapshot modes and how to pin, the org and its teams/repos, notable entry points (each with a ready-to-run REST path), where the coverage manifest lives, and this server's access block — whether a key is set and how many requests are left this hour. Writes: this server is READ-ONLY, including for a scratch-enabled key — the scratch layer (a per-key, 24-hour overlay: GitHub issues and issue comments, Jira comments and transitions, and Slack messages into existing channels) is a REST feature, so use the GitHub, Jira or Slack base URL above with your key for it, and expect the tools here to answer from the shared data set alone.

Inputs: no named parameters.

search_commits_by_authorSearch commits by authorB

Find commits authored by a given login in a repo. Returns SHAs (identical across GitHub and GitLab, invariant #5) with a REST path to fetch each — so you can cross-reference against either provider.

Inputs: author (required), repo, provider.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 10 tools

    Disambiguation4/5

    The data tools each target a distinct resource+action (repositories, pull requests, issues, users, commits), and the three meta tools (orient, get_snapshot, check_budget) serve clearly different setup/reproducibility/budget purposes. Minor risk that orient overlaps conceptually with check_budget and get_snapshot as 'introspection' tools, but descriptions clearly separate them.

    Naming Consistency4/5

    Nearly all tools follow a predictable verb_noun pattern (get_snapshot, check_budget, list_repositories, get_repository, list_pull_requests, get_pull_request, list_issues, get_user, search_commits_by_author). The lone bare verb 'orient' is a minor deviation from the otherwise consistent scheme.

    Tool Count5/5

    Ten tools is well-scoped for a read-only multi-provider API surface with a few setup helpers. Each tool earns its place with no obvious redundancy or filler.

    Completeness4/5

    The read-only surface covers lists/gets for repositories and pull requests plus issues, users, and commit search, matching the stated read-only, snapshot-oriented purpose. Asymmetries remain (list_issues with no get_issue, get_user with no user list, no issue/PR comment retrieval), but agents can work around these via the returned REST paths.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      A deterministic eval engine for coding agents. Your agent claims it fixed the bug—this checks it. The same scenario runs twice against a sandbox of the services your code calls, with failures injected on purpose. It must fail on the old code and pass on the new. The verdict is an exit code, not a model's opinion. Every run leaves a receipt.
      19
      134 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to explore and query a locally generated synthetic organization—with employees, teams, projects, documents, and relationships—through read-only MCP tools, facilitating agent testing, evaluation, and demos without external APIs.
      3
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI coding agents to build, debug, and test hosted mock REST APIs by scaffolding persistent CRUD resources, importing OpenAPI specs, simulating requests, auto-healing failing endpoints, and injecting latency or error faults. It also exposes live OpenAPI and TypeScript contract resources for each workspace.
      MIT