
InstaNode Dev
io.github.InstaNode-devPublished by GitHub account InstaNode-devv0.7.2Updated Oct 24, 2026
Provision Postgres databases + webhooks from AI coding agents in one HTTP call.
Overview
Lets an AI coding agent provision ephemeral Postgres, Redis, MongoDB, NATS, S3 storage, webhooks, and container deployments, returning connection strings.
- What you can do
- Each tool provisions one resource type over HTTPS and returns a ready-to-use connection string: Postgres with pgvector, Redis with an ACL-scoped user, MongoDB, NATS JetStream, S3-compatible storage, and an inbound webhook receiver. It can also deploy a container from a base64 gzip tarball with a Dockerfile, or ship a multi-service stack from an instant.yaml manifest, and bind provisioned resources into a deployment by passing their tokens. Account tools list, claim, pause, resume, rotate, and delete resources, manage vault secrets and deployment env vars, and mint presigned storage URLs.
- When to use it
- Useful when an agent needs throwaway infrastructure for a prototype, test, or demo without Docker or a signup, or when it should deploy a small app and wire in a database or cache. Also suited to capturing webhooks or polling deployment status and build failure events.
- Requirements
- Runs locally via npx (Node.js). No account needed for the anonymous tier; INSTANODE_TOKEN is an optional bearer token that unlocks paid limits and the account and deploy tools. INSTANODE_API_BASE can override the API base URL. Network access to the instanode.dev API is required.
Installation
In SourceWeft
- Open InstaNode Dev in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
instanode-mcp
MCP server for instanode.dev. Lets AI coding agents (Claude Code, Cursor, Windsurf, Continue, etc.) provision the full bundle of ephemeral developer infrastructure over HTTPS — no Docker, no signup required for the free anonymous tier.
One tool call per resource type, each returning a drop-in connection string:
- Postgres (
create_postgres) →postgres://...with pgvector pre-installed - Redis (
create_cache) →redis://...with ACL-scoped user + namespace - MongoDB (
create_nosql) →mongodb://...with role scoped to the DB - NATS JetStream (
create_queue) →nats://...with scoped subject namespace - S3-compatible storage (
create_storage) → endpoint + keys + prefix (backed by DigitalOcean Spaces) - Webhook receiver (
create_webhook) → public URL that stores every inbound request - Container deployment (
create_deploy) → upload a base64 gzip tarball (Dockerfile + source), get back a public URL in ~30s. Bind any of the resources above by passing their tokens asresource_bindings— the API resolves tokens to connection URLs server-side. - Multi-service stack (
create_stack) → declare 1..N services in aninstant.yamlmanifest, ship them as a bundle in a single MCP call. Anonymous callers get a 6h-TTL stack with a live URL on*.deployment.instanode.dev— no card required. Cross-service refs (service://<name>) resolve cluster-internally at deploy time. Poll status withget_stack.
Every anonymous resource auto-expires in 24h. The provision response carries
a note and upgrade field — the MCP server surfaces both verbatim so the
agent can show the user the exact CTA + claim URL needed to keep the
resource permanently. Run claim_resource on the returned upgrade_jwt to
get the dashboard claim URL.
Install
Claude Code
To authenticate (unlock paid-tier limits and the account-management tools):
Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
Continue.dev
Add to your ~/.continue/config.yaml:
For a drop-in CLAUDE.md / .cursorrules that tells the agent exactly when
to reach for this MCP, see https://instanode.dev/agent.html.
Environment
Tools
Container deployment (create_deploy)
Deploying is a single multipart/form-data POST with a base64-encoded gzip tarball of the project (Dockerfile + source). The MCP tool handles the encoding plumbing; the agent's job is just to construct the tarball.
Building the tarball (any language):
Cap: 50 MB after decode. Honor .dockerignore — only ship what
docker build needs. The name field is required (1–64 chars,
letters/numbers/spaces/dashes) — it's the human-readable label shown
on the dashboard.
Binding provisioned resources:
Provision the resources first with create_postgres / create_cache / etc.
to get their tokens (UUIDs), then pass the tokens as resource_bindings:
The agent passes resource tokens (not connection URLs); the API
resolves each token to its connection URL server-side at deploy time. The
MCP server never pre-resolves tokens — pre-resolving would round-trip every
binding through GET /credentials and embed raw secrets into the tool
params, which the agent host may log.
Polling:
create_deploy returns status="building" immediately. Poll
get_deployment({ id: deploy_id }) every few seconds until status flips to
"running" (typical: ~30s). At that point the url field is the live URL.
Updating an existing deployment (same URL, new build)
To ship v2 of an app you already deployed without changing the URL or
app_id, call create_deploy again with the same name plus
redeploy: true:
The api finds the existing deployment by (team_id, name) and updates it
in place — same app_id, same *.deployment.instanode.dev URL, status
flips back to building while the new image rolls out.
Without redeploy: true, calling create_deploy with a name you've used
before mints a new app_id and a new URL (the legacy behaviour).
This is the trap that caused the AGENT-UX issue where agents ended up
with two live deployments + two URLs for the same app.
The standalone redeploy tool (by id, not name) still works and also
requires a tarball_base64 — the api never reuses the original tarball.
Prefer the create_deploy({ name, redeploy: true }) path when you have
the name; use redeploy({ id, tarball_base64 }) when you only have the
deploy id.
Private deploys
Set private: true and pass allowed_ips to restrict access to specific IPs
or CIDR blocks at the Ingress. Useful when the agent is asked to deploy a
CRM, internal dashboard, or staging app that should only be reachable by the
user.
Pro tier or higher required. Hobby callers will see HTTP 402 with an
agent_action field — the MCP server surfaces the upgrade URL so the agent
can prompt the user to upgrade.
Example prompt (paste into Claude Code):
"Deploy my CRM as a private app, only accessible from 1.2.3.4 and my office subnet 10.0.0.0/8"
The agent will then call:
get_deployment and list_deployments surface private + allowed_ips
back to the agent so it can confirm the policy to the user. To turn a
private deploy public, redeploy without the flags.
How anonymous → claimed works
Every create_* tool returns three fields the agent should treat as
load-bearing:
token— the resource UUID (used forclaim_tokenanddelete_resource).note— a one-sentence human-readable CTA, already mentions the upgrade URL.upgrade— the full claim URL (https://instanode.dev/start?t=<jwt>). The user clicks it, signs in with GitHub/Google or a magic link, and the resource is attached to their account.
upgrade_jwt is also returned for callers that want to build their own UI
around the claim flow. The claim_resource tool accepts that JWT and
returns the same dashboard URL — useful if the agent wants to re-surface the
claim URL later in the conversation after the original response has scrolled
out of context.
Example agent interactions
1. "I need a Postgres for this project"
You: Claude, I need a Postgres database for this project.
Claude: calls
create_postgres({ name: "my-side-project" })Returns a
connection_urllikepostgres://usr_a1b2:[email protected]:5432/db_a1b2?sslmode=require, plusnote: "Works for 24h free. Claim to keep — from $9/mo: https://instanode.dev/start?t=...".Claude then: writes
DATABASE_URL=...to.env, adds.envto.gitignore, runs the migrations, and shows the user the claim URL verbatim so they know how to keep the database past 24h.
2. "Spin up a Redis cache for rate limiting"
You: Add a Redis cache so I can rate-limit my API.
Claude: calls
create_cache({ name: "api-ratelimit" })Returns a
connection_urllikeredis://usr_b2c3:[email protected]:6379/0.
3. "Set up a webhook to catch Stripe events"
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.
4. "Object storage for user uploads"
You: I need S3-compatible storage for uploaded avatars.
Claude: calls
create_storage({ name: "user-avatars" })Returns endpoint, access key, secret key, and prefix. Claude wires the AWS SDK with the returned credentials.
5. "Make last night's database permanent"
You: I want to keep the database you made yesterday past 24h.
Claude (no INSTANODE_TOKEN): calls
claim_resource({ upgrade_jwt: "<the upgrade_jwt from yesterday's response>" })→ shows you the dashboard claim URL. You click it, sign in, the resource is attached.Claude (with INSTANODE_TOKEN): calls
claim_token({ token: "a1b2c3d4-..." })→ resource is now linked to the authenticated account, no browser round-trip needed.
Authentication
The anonymous tier works without any setup. To unlock paid limits, permanent
resources, and the account-management tools (list_resources,
delete_resource, claim_token, get_api_token):
- 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 Personal Access Token via POST /api/v1/auth/api-keys. PATs are revocation-based (not time-bound). NOTE: PATs cannot mint other PATs — get_api_token requires a user-session token (sign in via the dashboard), not an existing PAT, otherwise the API returns 403.
Development
License
MIT — (c) instanode.dev
Source: README.md at commit eba9e5f
Tools
0Version history
1- v0.7.2LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts