Validate Formhaus form definitions and simulate multi-step paths against the real engine.
Mockbird is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Mock REST APIs, fake OAuth2/OIDC provider, uptime monitors + heartbeats, live badge/QR images.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http mockbird-mcp https://mockbird.mockbird.workers.dev/mcp
# 2 — ask your agent for something these tools do
# create_project, import_data, fork_project and 16 more
Mockbird costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http mockbird-mcp https://mockbird.mockbird.workers.dev/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
19 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Create a new mock REST API project. Returns {id, adminKey, baseUrl, resources[]}. SAVE the adminKey — it is required for admin operations (add_resource, custom_route, snapshots) and is shown only once. Presets seed a full backend: blog (posts/comments/authors), ecommerce (products/orders/customers/reviews), saas (users/teams/events), payments (Stripe-shaped sandbox: charges/refunds/subscriptions/c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | Project name (max 60 chars). Optional. |
| preset | string | no | Seeded preset; 'blank' = truly empty. Omit for a starter project. Optional. |
| ttl | number | no | Optional: self-expiring project — auto-deletes after this many seconds (60–604800, i.e. 1 min to 7 days). Perfect for CI/eval sandboxes that must not leak even when the run crashes. Extend or cancel l |
Create a live mock API from existing artifacts. Auto-detects: OpenAPI 3.x / Swagger 2.0 spec (JSON or YAML) → resources with realistic seeded data, and non-CRUD paths (login, /search, RPC verbs like POST /invoices/{id}/send) become custom routes serving the spec's own examples verbatim; json-server db.json → hosts your exact records; Postman Collection v2.x → resources from requests, saved example
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content | string | yes | The raw spec / db.json / collection / CSV text. |
| name | string | no | Project name override. Optional. |
| resource | string | no | CSV only: collection name (default items). |
| seed | number | no | Records to seed per resource for OpenAPI specs (default 20, max 100). |
| ttl | number | no | Optional: self-expiring project — auto-deletes after this many seconds (60–604800). Sandboxes for CI/eval runs clean themselves up. |
Copy an entire project — resources + records verbatim, custom routes, behavior settings — into a brand-new project with its own id + adminKey. Built for parallel eval/CI runs: keep a template project, fork_project per run with a ttl (crashed runs can't leak sandboxes — the fork deletes itself), let the agent mutate the fork freely, then grade with snapshots action:"diff". withSnapshots:true also c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Source project id to fork (or "demo"). |
| adminKey | string | no | Source project's adminKey. Not needed when forking "demo". |
| name | string | no | Name for the fork (default: <source name>-fork). Optional. |
| withSnapshots | boolean | no | Also copy the source's snapshots into the fork (answer keys travel with it). Optional. |
| ttl | number | no | Self-expiring fork: auto-deletes after this many seconds (60–604800), even if your run crashes. Optional. |
Add a resource (collection) to a project and seed it with realistic fake data. Either pass template (one of the built-ins, e.g. users, products, posts, comments, orders, todos, reviews, customers, events) or fields: an array of {name, type} where type ∈ uuid|firstName|lastName|fullName|username|email|avatar|image|word|words|title|sentence|paragraph|number|price|percent|boolean|date|pastDate|future
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | Project id. Omit (together with adminKey) to auto-create a fresh project. |
| adminKey | string | no | The project's adminKey. Omit (together with project) to auto-create. |
| name | string | yes | Resource name, plural (e.g. products). |
| template | string | no | Built-in template name. Optional (use this OR fields). |
| fields | array | no | Array of {name, type} (or {name, type:'oneOf', values:[…]}). Optional. |
| seed | number | no | Records to seed (default 20, max 100). |
Get a project's public root index: every resource with record counts and URLs, custom routes, auth mode, and export links (openapi.json, types.ts, postman.json, db.json, GraphQL). No adminKey needed. Try project "demo" for the shared public playground.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Project id (e.g. demo). |
GET records from a mock resource. params is an object of query parameters, all optional: exact filters (field=value), operator suffixes (price_gte, date_lte, name_like, status_ne), full-text q, _sort/_order (or _page/_limit for pagination), select (field projection, e.g. "name,price"), _expand=<parent>/_embed=<children> relations. Failure simulation for testing: mock_status=503 forces that status,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | — |
| resource | string | yes | Resource name (e.g. products). |
| id | string | no | Single record id. Optional. |
| params | object | no | Query params as key→value. Optional. |
Create, update, or delete records in a mock resource. Writes persist (unlike JSONPlaceholder/FakeStoreAPI). POST creates (auto-id), PUT replaces, PATCH merges, DELETE removes. id required for PUT/PATCH/DELETE.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | — |
| resource | string | yes | — |
| method | string | yes | — |
| id | string | no | Record id (PUT/PATCH/DELETE). |
| body | object | no | Record fields (POST/PUT/PATCH). |
Generate realistic fake data instantly — stateless, nothing is created or stored, no project or adminKey needed. Ready-made resource shapes (FakerAPI-compatible): persons, users, addresses, companies, books, products, texts, images, places, credit_cards (credit cards are Luhn-valid; book EAN13/ISBN13 checksums are real; image URLs are live SVG placeholders served by Mockbird). Or pass fields for a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resource | string | no | One of persons|users|addresses|companies|books|products|texts|images|places|credit_cards. Default persons. Ignored when fields is set. |
| quantity | number | no | Rows to generate (1-100, default 5). |
| seed | number | no | Deterministic seed — same seed returns the same rows. Optional. |
| fields | object | no | Custom shape: {outputKey: type}, e.g. {"id":"counter","name":"firstName","mail":"email","signup":"dateTime"}. Optional. |
| params | object | no | Extra FakerAPI-compatible query params, e.g. {"_gender":"female"}, {"_price_min":10,"_price_max":500}, {"_characters":500}, {"_width":640}. Optional. |
Define a custom endpoint on a project (like /health, /config/:key, or a catch-all /webhooks/* request bin). body is a response template: {{query.x}} {{params.x}} {{body.x}} {{headers.x}} {{method}} {{path}} {{now}} {{ts}} {{uuid}} {{rand}}; triple braces {{{body}}} insert raw JSON. Custom routes take precedence over resource routes; '*' catch-alls are a fallback. Max 20 routes/project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | — |
| adminKey | string | yes | — |
| method | string | no | Default GET. |
| path | string | yes | e.g. /health, /config/:key, /webhooks/* |
| status | number | no | Response status (default 200). |
| body | string | no | Response body template (string; JSON works). |
| contentType | string | no | Default application/json. |
| delayMs | number | no | Artificial latency in ms. |
Read the project's request inspector: the most recent requests that hit the mock API (method, path, query, status, origin, captured headers incl. x-* — authorization redacted to its scheme — and a body snippet for writes). Use it to VERIFY what your app / tests / webhook sender actually sent: point code at the mock, run it, then inspect. Pairs with custom_route catch-all bins (e.g. /webhooks/*) fo
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Project id. |
| adminKey | string | no | Project adminKey (not needed for demo). |
| limit | number | no | Newest N entries to return (default 20, max 50). |
| method | string | no | Filter: HTTP method, comma-list ok (e.g. "DELETE" or "PUT,PATCH,DELETE"). |
| path | string | no | Filter: segment-aware path prefix ("/tasks" matches /tasks and /tasks/5, not /tasksomething). |
| status | number | no | Filter: exact response status (comma-list ok as a string via status_gte/lte for ranges). |
| status_gte | number | no | Filter: status >= this (400 = any error). |
| status_lte | number | no | Filter: status <= this. |
| since | string | no | Filter: only requests at/after this time (epoch ms or ISO-8601) — record the episode start, assert about only that episode. |
Mint (or manage) a READ-ONLY share link for a project: a browser URL you can hand to a human reviewer — they can browse the data, endpoints, snapshots and the live request inspector, but can't write and never see the adminKey. Agent workflow: build or mutate a sandbox, then share_project and give your human the shareUrl to review your work — no key handover. Works even when the project is in prote
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Project id. |
| adminKey | string | yes | The project's adminKey. |
| action | string | no | Default: create. |
Permanently delete a project and ALL its data (records, resources, snapshots, custom routes, webhooks, request log). Irreversible. Good practice for short-lived test projects: clean up when your session is done. Requires the adminKey.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Project id. |
| adminKey | string | yes | The project's adminKey. |
Deterministic test fixtures + eval grading: save the project's entire dataset under a name, restore it exactly later, or DIFF it against live data (list/delete too). action:"diff" is machine-checkable grading — compares the named snapshot (expected) against live data (actual, or another snapshot via against) and returns {identical, summary, resources[] with per-record added/removed/changed field d
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | — |
| adminKey | string | yes | — |
| action | string | yes | — |
| name | string | no | Snapshot name (required for restore/delete/diff; default for save: snapshot-<n>). |
| against | string | no | diff only, optional: compare the named snapshot against THIS other snapshot instead of live data. |
| ignore | string | no | diff only, optional: comma-separated field names excluded from comparison (volatile timestamps etc.), e.g. "updatedAt,id". |
| data | object | no | save only, optional: AUTHOR the snapshot inline instead of capturing live state — {"tasks":[{...records...}],"labels":[]} (records verbatim, ids preserved, [] = expected-empty, new resource names allo |
One call = the whole eval grade. Composes the state check (snapshot diff vs live data) with trajectory constraints on the request log into a single {pass, checks[]} verdict. Pass snapshot:"expected" to require live data to match that snapshot (author it as the answer key first via snapshots action:"save" with data), and/or trajectory constraints like [{method:"DELETE", count:0}, {method:"POST", pa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | yes | Project id. |
| adminKey | string | yes | The project's adminKey. |
| name | string | no | Optional: run a saved verdict spec by name instead of an inline spec (mutually exclusive with snapshot/ignore/trajectory). |
| snapshot | string | no | Optional: snapshot name to diff live data against — pass means identical. |
| ignore | string | no | Optional (with snapshot): comma-separated field names excluded from the state comparison, e.g. "updatedAt,createdAt". |
| trajectory | array | no | Optional: constraint objects — filters (method comma-list, path segment-prefix, status, status_gte, status_lte, since) + expectation (count exact, min, max). Example: [{"method":"DELETE","count":0}]. |
Live status of ~58 public mock/testing APIs — JSONPlaceholder, httpbin.org, ReqRes, FakeStoreAPI, DummyJSON, Postman Echo, httpstat.us, Mocky, Mockbin, CrudCrud, restcountries, and more — checked with a plain keyless GET every 30 minutes from Cloudflare's network (a service answering HTTP 200 error envelopes is probed by body and honestly reported as failing). No arguments → compact summary: up/do
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service | string | no | Service id, name, or hostname substring (e.g. httpbin, reqres.in). Optional — omit for the summary. |
Free downtime alerts for any public URL — no account, armed in one call. action:"create" {url, notify?}: Mockbird GETs the url every 30 minutes from Cloudflare's network (8s timeout, 2xx/3xx = up; a timeout/TLS/DNS blip on an otherwise-up url is confirmed with a same-run retry before it counts); with notify, that webhook gets ONE message when it goes down and ONE when it recovers — debounced (two
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What to do. |
| url | string | no | create: the public https URL to watch (e.g. https://api.example.com/health). |
| notify | string | no | create (optional): the webhook URL to alert (Slack/Discord webhook, or any HTTPS endpoint — gets HMAC-signed JSON). Omit it to get a pollable monitor instead. |
| id | string | no | poll/info/delete: the monitor id (mon-…) returned by create. |
| secret | string | no | poll/info/delete: the secret returned by create. |
Dead man's switch for cron jobs, scheduled tasks, and recurring agent runs — the INVERSE of uptime_monitor: the JOB pings Mockbird, and if the ping stops arriving the alert fires once (plus one recovery message when pings resume). action:"create" {name?, period_minutes, grace_minutes?, notify?}: period_minutes = how often the job runs (30–10080); grace defaults to half the period. With notify, mis
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What to do. |
| name | string | no | create: a label for the job (shown on the status page), e.g. "nightly backup". |
| period_minutes | number | no | create: how often the job is supposed to run, in minutes (30–10080). |
| grace_minutes | number | no | create: extra slack before alerting (5–1440). Default: half the period. |
| notify | string | no | create (optional): the webhook URL to alert when the ping stops. Omit it to get a pollable heartbeat instead. |
| ping_url | string | no | ping: the ping URL returned by create (https://…/ping/p-…). |
| id | string | no | poll/info/delete: the heartbeat id (hb-…) returned by create. |
| secret | string | no | poll/info/delete: the secret returned by create. |
Subscribe to down/recovered alerts for any of the public mock/testing APIs tracked by check_api_status (httpbin, JSONPlaceholder, ReqRes, FakeStoreAPI, DummyJSON …). action:"subscribe" {service, notify?}: service is an id from check_api_status (or "*" for all tracked services). With notify, that webhook gets one message when the service goes down and one when it recovers (debounced across two cons
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What to do. |
| service | string | no | subscribe: service id from check_api_status (e.g. "reqres", "httpbin"), or "*" for all tracked services. |
| notify | string | no | subscribe (optional): webhook URL to alert (Slack/Discord webhook, or any HTTPS endpoint — gets HMAC-signed JSON). Omit it to get a pollable subscription instead. |
| id | string | no | poll/info/unsubscribe: the watch id (w…) returned by subscribe. |
| secret | string | no | poll/info/unsubscribe: the secret returned by subscribe. |
Mint a permanent, keyless image URL rendered by Mockbird — README badges (including LIVE record-count badges), chart images, QR codes, Open Graph cards, placeholder images, initials avatars. Deterministic: the same URL renders the same image forever (no account, no expiry, no watermark). Params are validated against the real endpoint before the URL is returned, so a returned URL is guaranteed to r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | Which image to mint. |
| params | object | no | Query params for the endpoint (see the per-kind lists in the tool description). Values are strings or numbers (arrays of numbers join with commas). Passing these directly as top-level properties (e.g. |
| size | string | no | Optional size path: "WxH" for chart/og/placeholder (e.g. "800x400"), a single number for qr (e.g. "512") or a square placeholder. |
| format | string | no | Optional. badge is always SVG; chart/qr/og/placeholder default to PNG (og/chart/qr) or SVG (placeholder/avatar) — svg forces the vector twin. |
| project | string | no | Optional project id (default "demo", the shared public playground). Use your own project id so live badge counts track your data. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Mockbird or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.6.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Mockbird can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.