{
  "markdown": "# MockMCP\n\n> Hosted MCP endpoint returning realistic fake data for prototyping agents. Paste one URL, zero setup.\n\n**Live at [mockmcp.io](https://mockmcp.io)** — `https://mockmcp.io/mcp`\n\nBuilt for devs who want to prototype agent workflows without wiring up a backend, writing fixtures, or standing up a local MCP server. 12 pre-built tools covering the scenarios in most agent tutorials.\n\n## Try it\n\n```bash\n# Initialize a session and get back a session id\ncurl -i -X POST https://mockmcp.io/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-06-18\",\"capabilities\":{},\"clientInfo\":{\"name\":\"curl\",\"version\":\"0.1\"}}}'\n\n# Use the Mcp-Session-Id header in subsequent calls:\ncurl -X POST https://mockmcp.io/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -H \"Mcp-Session-Id: <paste-id-here>\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"list_users\",\"arguments\":{\"limit\":3}}}'\n```\n\n## Connect your client\n\n**Claude Code**\n\n```bash\nclaude mcp add --transport http mockmcp https://mockmcp.io/mcp\n```\n\n**Cursor** — add to `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"mockmcp\": {\n      \"url\": \"https://mockmcp.io/mcp\"\n    }\n  }\n}\n```\n\n**Claude Desktop** — Settings → Connectors → Add custom connector → paste `https://mockmcp.io/mcp` as the URL.\n\nNo `mcp-remote` proxy required. All three clients speak Streamable HTTP natively.\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `list_users` | Paginated list of mock users |\n| `get_user` | One mock user by id or seed |\n| `create_user` | Create a mock user (no persistence) |\n| `list_products` | Paginated list of mock products |\n| `get_product` | One mock product |\n| `list_orders` | Mock orders with optional status filter |\n| `get_order` | One mock order |\n| `create_order` | Create a mock order (no persistence) |\n| `list_events` | Mock analytics events |\n| `create_event` | Record a mock event |\n| `send_email` | Returns fake success, nothing delivered |\n| `search_knowledge_base` | Mock KB search with ranked results |\n\nAll data is seeded from your inputs — same input, same output.\n\n## Limits\n\nFree tier, per hashed `IP + User-Agent` fingerprint:\n\n- **30 requests per minute**\n- **500 requests per day**\n\nHit the wall? Drop your email at [mockmcp.io/waitlist](https://mockmcp.io/waitlist) for paid-tier access when it launches.\n\n429 responses carry a structured JSON-RPC error with `upgrade_url` and `retry_after_seconds`. Every successful response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, and `X-RateLimit-Scope` headers.\n\n## Run locally\n\n```bash\nnpm install\nnpm run dev\n```\n\nServer listens on `http://localhost:3000`. MCP endpoint at `/mcp`. Without Upstash env vars, rate limiting falls back to an in-memory store (per-process, fine for dev).\n\n## Stack\n\n- [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — MCP server + Streamable HTTP transport\n- Raw Node `http` — no framework overhead, clean shutdown\n- [`@faker-js/faker`](https://fakerjs.dev) — deterministic fake data via seeds\n- [`@upstash/ratelimit`](https://github.com/upstash/ratelimit-js) + `@upstash/redis` — sliding-window rate limiting\n- [`zod`](https://zod.dev) — tool input validation\n\n## Deploy (for forks)\n\nTargets Node 20+. Build + start are pinned via `nixpacks.toml`; health checks + restart policy via `railway.json`.\n\n1. Fork this repo, push to GitHub.\n2. Railway → New Project → Deploy from GitHub → pick your fork.\n3. Add env vars in Railway → Variables:\n\n| Var | Notes |\n|---|---|\n| `UPSTASH_REDIS_REST_URL` | From [upstash.com](https://upstash.com) free tier |\n| `UPSTASH_REDIS_REST_TOKEN` | Paired with the URL above |\n| `PORT` | Railway sets this automatically |\n\n4. Railway service → Settings → Networking → Custom Domain → paste your domain → follow the DNS instructions.\n\n### Health check\n\n`GET /health` returns `{\"ok\":true}`. Railway pings this during deploy.\n\n### Waitlist signups\n\n`POST /api/waitlist` logs a structured JSON line per signup:\n\n```json\n{\"event\":\"waitlist_signup\",\"email\":\"alice@example.com\",\"at\":\"2026-04-24T19:33:06.396Z\"}\n```\n\nGrep them with `railway logs | grep waitlist_signup`. Storage-free by design — swap in Resend, a Tally forward, or a DB when the paid tier is live.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n",
  "bytes": 4466,
  "sha": "c22cabc0accdc0ce09864a7fe961cc9289c2bf2efb884a747f97fc8988537bef",
  "repo_slug": "k-cupples/mockmcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_k_cupples_mockmcp_bc39e113/readme"
}