MCP server for instanode.dev. Lets AI coding agents (Claude Code, Cursor, Windsurf, Continue, etc.) provision ephemeral Postgres databases and webhook receivers over HTTPS — no Docker, no signup required for the free tier.
- One tool call → one
postgres://URL, usable immediately asDATABASE_URL. - pgvector is pre-installed on every database.
- Free tier: 10 MB / 2 conn / 24h TTL. Paid (optional): 500 MB / 5 conn /
permanent, unlocked by setting
INSTANODE_TOKEN.
claude mcp add instanode -- npx -y @instanode/mcp@latestTo authenticate (unlock paid tier, list_resources, delete_resource):
claude mcp add instanode \
--env INSTANODE_TOKEN=<paste from https://instanode.dev/dashboard> \
-- npx -y @instanode/mcp@latestAdd to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"instanode": {
"command": "npx",
"args": ["-y", "@instanode/mcp@latest"],
"env": {
"INSTANODE_TOKEN": "<optional — paste from dashboard for paid tier>"
}
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"instanode": {
"command": "npx",
"args": ["-y", "@instanode/mcp@latest"],
"env": {
"INSTANODE_TOKEN": "<optional>"
}
}
}
}Add to your ~/.continue/config.yaml:
mcpServers:
- name: instanode
command: npx
args: ["-y", "@instanode/mcp@latest"]
env:
INSTANODE_TOKEN: "<optional>"For a drop-in CLAUDE.md / .cursorrules that tells the agent exactly when
to reach for this MCP, see https://instanode.dev/agent.html.
| Variable | Required | Default | Purpose |
|---|---|---|---|
INSTANODE_TOKEN |
No | — | Bearer JWT minted at https://instanode.dev/dashboard. Required for list_resources, claim_token, delete_resource, get_api_token. Unlocks paid-tier limits on create_*. |
INSTANODE_API_URL |
No | https://api.instanode.dev |
Override the API base URL. Only set this for local development. |
| Tool | Description |
|---|---|
create_postgres |
Provision a Postgres database (pgvector included). Returns a postgres:// URL. name required. |
create_webhook |
Provision an inbound webhook receiver URL. name required. |
list_resources |
List resources on the caller's account. Requires INSTANODE_TOKEN. |
claim_token |
Attach an anonymous token to the authenticated account. Requires INSTANODE_TOKEN. |
delete_resource |
Hard-delete a resource you own. Paid tier only. Requires INSTANODE_TOKEN. |
get_api_token |
Mint a fresh 30-day bearer JWT (for rotation). Requires an existing INSTANODE_TOKEN. |
You: Claude, I need a Postgres database for this project.
Claude: calls
create_postgres({ name: "my-side-project" })Returns a
connection_urllikepostgres://usr_a1b2:...@pg.instanode.dev:5432/db_a1b2?sslmode=require.Claude then: writes
DATABASE_URL=...to.env, adds.envto.gitignore, runs your migrations.
You: Give me a webhook URL I can point Stripe at.
Claude: calls
create_webhook({ name: "stripe-sandbox" })Returns a
receive_urlthat captures every request.curl $receive_urlpulls back the stored log.
You: I want to keep the database you made yesterday past 24h.
Claude: (with
INSTANODE_TOKENset) callsclaim_token({ token: "a1b2c3d4-..." })→ resource is now linked to your account withtier=paidand no expiry.
The free tier works without any setup. To unlock permanent resources, paid
limits, and the list_resources / delete_resource tools:
- Sign up at https://instanode.dev with GitHub.
- Visit the dashboard and copy your bearer token.
- Set it as
INSTANODE_TOKENin the MCP server'senvblock (see examples above).
Rotate any time by calling get_api_token, which mints a fresh 30-day JWT.
npm install
npm run build
# Integration test (optional — requires a running instanode.dev server):
INSTANODE_API_URL=http://localhost:30080 npm testMIT — (c) instanode.dev