An open API service indexing awesome lists of open source software.

https://github.com/mariojgt/mcpfactory

Pick the tools you want, click build, download a ready-to-run MCP server. 32 integrations, browser-built, zero infra.
https://github.com/mariojgt/mcpfactory

anthropic claude claude-code claude-desktop mcp mcp-server mcp-tools model-context-protocol nextjs typescript

Last synced: 4 days ago
JSON representation

Pick the tools you want, click build, download a ready-to-run MCP server. 32 integrations, browser-built, zero infra.

Awesome Lists containing this project

README

          

![MCP Factory — pick the tools you want, click build, download a ready-to-run MCP server](./public/og-image.png)

# MCP Factory

**Pick the tools you want, click build, download a ready-to-run MCP server.**

A static, browser-built dashboard that assembles custom **Model Context Protocol** servers from a curated catalog of integrations — Stripe, GitHub, Slack, Notion, Linear, PostgreSQL, OpenAI, Gmail, YouTube, Anthropic, and 22 more. The build runs entirely in your browser. No backend, no accounts, no infra.

Every download includes a CLI that wires the server into Claude Code, Claude Desktop, VSCode, or Cursor in one command.

---

## Highlights

- **32 tool catalog · 187 MCP operations** — Stripe, GitHub, Slack, Notion, Linear, PostgreSQL, Cloudflare, AWS S3, Sentry, Discord, Figma, Brave Search, Anthropic API, Replicate, FFmpeg, Remotion, Google Calendar, X/Twitter, Vercel, generic HTTP/Fetch escape hatch, browser/Puppeteer, Gmail, YouTube, LinkedIn, Vimeo, ElevenLabs, fal.ai, OpenAI, Mailtrap, PDF tools, Google Maps, Thumbnail Studio.
- **Live inspector + curl bridge** — like ngrok + Postman for MCP. The wrapper proxies every client request, shows it in a real-time dashboard at `localhost:7474`, AND exposes an HTTP bridge so you can fire tool calls from curl, scripts, or the dashboard's built-in playground. Replay any past call, copy as curl, edit & resend. Logs to `mcpfactory.log.jsonl` + `.txt`.
- **One-command client wiring** — `npx mcpfactory connect claude-code` writes the right config in the right place. Targets: Claude Code (project + user), Claude Desktop (mac/win/linux), VSCode, Cursor.
- **OAuth helper** — `npx mcpfactory auth google-youtube` opens the browser, captures the redirect, writes refresh tokens to `.env`. Supported: YouTube, Gmail, Calendar, LinkedIn, X (PKCE).
- **Read-only mode** — every operation is tagged `safe / write / destructive`. Toggle `--read-only` at build time or `MCPFACTORY_READ_ONLY=1` at runtime to disable mutating tools.
- **OpenAPI import** — `npx tsx scripts/openapi-import.ts ` generates a working tool from any OpenAPI 3.x spec (verified against the Petstore: 19 operations from one URL).
- **Build customization** — custom server name, sub-selection of operations, lockfile (`mcpfactory.lock.json`) + `npx mcpfactory upgrade` to refresh.
- **Framework helpers** — `withProgress` (MCP `notifications/progress`), `cached` (TTL memoizer), `McpToolError` (typed errors with retry hints), `wrapHandler` (consistent envelope).
- **Tested** — per-tool smoke harness boots each generated server via real JSON-RPC. CI runs the whole catalog on every PR.

## Try it

```bash
npm install
npm run dev # http://localhost:3000

# In another terminal — build a test zip and verify it boots
npx tsx scripts/build-from-fs.ts stripe,github,fetch test-builds
cd test-builds/mcp-stripe-github-fetch
npm install
npx mcpfactory # interactive menu
```

## curl bridge

Every running inspector exposes an HTTP API at the dashboard port (default `7474`):

| Endpoint | Method | Body |
|---|---|---|
| `/api/tools` | GET | — — returns the live `tools/list` |
| `/api/call` | POST | `{ "name": "", "arguments": {...} }` — fires a `tools/call` |
| `/api/raw` | POST | `{ "method": "...", "params": {...} }` — arbitrary JSON-RPC |
| `/api/state` | GET | — — recent events ring buffer |

```bash
# Start the wrapper (auto-spawns the MCP server)
npx mcpfactory inspect --open # also opens the browser dashboard

# In another terminal — call any tool
curl -sX POST http://localhost:7474/api/call \
-H 'content-type: application/json' \
-d '{"name":"http_get","arguments":{"url":"https://api.github.com/zen"}}'

# Or the friendlier CLI
npx mcpfactory call http_get '{"url":"https://api.github.com/zen"}'
npx mcpfactory call stripe_get_balance
```

In the dashboard, click **▶ NEW REQUEST** for the playground form (tool dropdown + JSON args + send), or click any past call to **Replay** / **Edit & resend** / **Copy as curl**.

## How it works

```
Browser dashboard Generated build
┌────────────────────┐ ┌──────────────────────┐
│ pick tools │ ─────────▶ │ custom-mcp.zip │
│ click BUILD │ JSZip │ · src/, bin/ │
│ (no backend) │ │ · .env.example │
└────────────────────┘ │ · mcpfactory CLI │
└──────────────────────┘


npm install && npx mcpfactory connect claude-code


Claude Code uses your tools
```

The build runs entirely client-side. The dashboard fetches:
- `/manifest.json` — tool catalog metadata
- `/tool-source/...` — each selected tool's source files
- `/skeleton/...` — templates rendered into every build (package.json, src/index.ts, README, the CLI)

JSZip assembles them in the browser, your browser downloads the result.

## CLI commands (shipped in every build)

| Command | What it does |
|---|---|
| `npx mcpfactory` | Interactive menu |
| `npx mcpfactory env` | Walk through `.env` setup with prompts |
| `npx mcpfactory auth ` | OAuth flow (`google-youtube`, `google-gmail`, `google-calendar`, `linkedin`, `twitter`) |
| `npx mcpfactory connect [--inspect]` | Wire into Claude Code/Desktop, VSCode, Cursor |
| `npx mcpfactory inspect [--port N] [--open]` | Run the inspector standalone |
| `npx mcpfactory call [json-args]` | Fire a tool through the running inspector (the curl bridge) |
| `npx mcpfactory logs [--json]` | Tail `mcpfactory.log.txt` (or `.jsonl`) |
| `npx mcpfactory upgrade` | Show build manifest + how to refresh against latest catalog |
| `npx mcpfactory doctor` | Check env vars + integration paths |
| `npx mcpfactory start` | Run the MCP server (no inspector) |

## Repo layout

```
mcpfactory/
├── app/ Next.js dashboard
├── components/ Neo-brutalist React components
├── lib/
│ ├── manifest.ts Typed catalog (32 tools, 9 categories)
│ ├── builder.ts In-browser zip pipeline (JSZip + Promise.all)
│ ├── auth-type.ts Auth-level inference (oauth/api-key/none)
│ └── types.ts Tool / SafetyLevel / BuildLock interfaces

├── public/
│ ├── tool-source/ Tool source served as static assets
│ │ ├── tools/_framework.ts Shared helpers (withProgress, cached, errors, wrap)
│ │ ├── tools/.ts Per-tool API wrapper
│ │ └── register/.ts MCP tool registration with Zod schemas
│ └── skeleton/ Templates rendered into every build
│ └── bin/
│ ├── mcpfactory.mjs CLI (env / auth / connect / inspect / logs / upgrade / doctor)
│ ├── inspect-wrapper.mjs Live inspector (HTTP + SSE + JSONL/TXT logs)
│ └── oauth-helper.mjs OAuth helper (localhost callback, PKCE for X)

├── scripts/
│ ├── build-from-fs.ts CI-friendly local builder
│ ├── smoke-test.ts Per-tool smoke runs via real MCP protocol
│ ├── openapi-import.ts Generate tools from any OpenAPI 3.x spec
│ └── test-build.ts Live-server build (mirrors the browser builder)

├── .github/workflows/
│ ├── ci.yml Typecheck + sharded smoke tests on PR
│ └── pages.yml Auto-deploy dashboard to GitHub Pages

└── next.config.mjs Static export (output: 'export')
```

## Adding a new tool

Two paths.

**Hand-written** (full control):

1. Drop your tool source into `public/tool-source/tools/.ts` and matching `public/tool-source/register/.ts` (must export `registerTools(server)`).
2. Add a typed entry to `lib/manifest.ts` with `name`, `category`, `files`, `imports`, `registerCalls`, `deps`, `env`, optional `safety` map.
3. Run `npx tsx scripts/smoke-test.ts ` to verify it boots.

**From OpenAPI** (force multiplier):

```bash
npx tsx scripts/openapi-import.ts https://api.example.com/openapi.json \
--id example --name "Example API" --auth bearer --env EXAMPLE_TOKEN
```

This generates the tool, register, and a manifest entry. Tweak as needed.

## Production build

```bash
npm run build # static export to ./out/
```

Push to `main` → the included GitHub Action deploys `out/` to Pages.

For deployment under a subpath (e.g. `user.github.io/mcpfactory`), set:

```bash
NEXT_PUBLIC_BASE_PATH=/mcpfactory npm run build
```

The CI workflow auto-detects the repo name and sets this for you.

## Stack

| Piece | Tech |
|---|---|
| Dashboard | Next.js 14 + React 18 + TypeScript + Tailwind |
| Zip building | JSZip, in-browser |
| Generated server | TypeScript + `tsx` + `@modelcontextprotocol/sdk` |
| Shipped CLIs | Node.js (zero deps — built-ins only) |
| Inspector | Node `http` + Server-Sent Events |
| Hosting | GitHub Pages (static) |

## License

MIT.