hatchable-mcp
Build, deploy, and manage full-stack web apps on Hatchable from an MCP client, including files, Postgres, auth, storage, cron, logs, and agent tasks.
Create, list, get, update, fork, and set visibility for projects; search public projects.
Write, batch-write, read, patch, grep, list, delete, upload, and import files across public/, api/, migrations/, and config.
Execute SQL, inspect database schema, and run arbitrary JS in the project runtime with db, auth, email, and storage bindings.
Deploy projects with dry-run validation, list/get deployments, list/run functions, inspect cron jobs, and view logs.
Manage environment variables and secrets: set, list, delete.
Use guidance tools: list/read skills, search platform docs, submit feedback, and manage agent tasks.
Set up an account via email verification.
Hatchable MCP
Build and host full-stack web apps and sites on Hatchable from any MCP client. Every project gets its own Postgres database, auth, storage, domains, cron and email, plus a live URL in seconds. Free tier, no credits.
This repo is two things: the Claude Code plugin for Hatchable (this directory is the plugin), and the connector notes for every other MCP client. Hatchable's code runs on our infrastructure, not yours; there is nothing to build or install locally.
Endpoint |
|
Transport | Streamable HTTP (MCP 2025-03-26) |
Authentication | OAuth 2.1 with PKCE and Dynamic Client Registration (RFC 7591). Bearer fallback. |
Registry | |
Homepage | |
Docs |
Claude Code plugin
/plugin marketplace add anthropics/claude-plugins-community
/plugin install hatchable@claude-communityThen connect your account: run /mcp, pick hatchable, and complete the sign-in. New accounts are free, and the first app you publish to the open web is free too.
What the plugin adds:
The Hatchable MCP server, preconfigured. 34 tools for creating projects, writing files, running SQL, deploying, reading logs, and forking templates. Full reference at hatchable.com/docs/developers/mcp.
/hatchable:new <description>: build and deploy an app from a plain-language description. Returns a live URL./hatchable:import: deploy the repo you are sitting in. Maps your files to the platform structure, runs the validators, and walks any blockers./hatchable:fix <what's wrong>: diagnose a rejected deploy or a broken live app using the platform's own logs and dry-run validators.The
hatchable:builderagent: an app builder Claude can delegate whole build tasks to. It creates, codes, deploys and verifies in the cloud, then hands back the live URL. Mention it with@hatchable:builderor let Claude pick it.
A Hatchable project is a folder: paths become routes, SQL files become schema, one TOML file declares the rest. The platform serves its own build patterns to your agent over MCP (list_skills, read_skill), so Claude reads the current conventions at build time instead of relying on training data.
To try the plugin from a checkout before installing it: claude --plugin-dir . in this directory.
Related MCP server: Kleap
Setup by client
Claude Code (terminal)
Install the plugin (see above), or add the server directly. OAuth handles the rest:
claude mcp add --transport http hatchable https://hatchable.com/mcpDon't have Claude Code? Install it here.
Claude.ai (web)
Open claude.ai/customize/connectors and click the + next to Connectors.
In the Add custom connector dialog, name it Hatchable, paste
https://hatchable.com/mcp, and click Add.Claude redirects you to hatchable.com to approve — that creates your free account.
Works on Free (1 connector), Pro, Max, Team, and Enterprise. On Team/Enterprise, an owner adds it from Organization settings → Connectors.
ChatGPT
Open chatgpt.com/apps#settings/Connectors/Advanced, toggle on Developer Mode, and click Create app.
Name it Hatchable, paste
https://hatchable.com/mcpunder MCP Server URL, keep OAuth, tick the consent box, and click Create.ChatGPT redirects you to hatchable.com to approve — that creates your free account.
Requires a Plus, Pro, Business, Enterprise, or Edu plan (Developer Mode prerequisite).
Codex
Open Codex → Settings → MCP servers → + Add server.
Name it Hatchable, pick Streamable HTTP, paste
https://hatchable.com/mcp, and Save.Click Authenticate on the new row and approve the popup on hatchable.com — that creates your free account.
Don't have Codex? Download it here.
Cursor
Paste into ~/.cursor/mcp.json:
{
"mcpServers": {
"hatchable": {
"url": "https://hatchable.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_HATCHABLE_TOKEN"
}
}
}
}Grab your token from hatchable.com/console/settings?tab=api-keys after signing up (10 seconds, no credit card).
Google Antigravity
Open the Command Palette (Cmd/Ctrl + Shift + P).
Select Antigravity: Manage MCP Servers, then click View raw config.
Paste and save:
{ "mcpServers": { "hatchable": { "serverUrl": "https://hatchable.com/mcp" } } }Reopen Manage MCP Servers, click Authenticate on the hatchable row, and approve on hatchable.com.
Don't have Antigravity? Download from Google — free, no credit card.
Other MCP clients
Any client that supports Streamable HTTP + OAuth will work. Configure https://hatchable.com/mcp as the endpoint and let the client handle the OAuth dance. Clients that only support bearer tokens should send Authorization: Bearer <API_KEY>, where the key comes from the console.
What you can do (tool surface)
34 tools, served live by the endpoint:
Project lifecycle:
create_project,get_project,list_projects,update_project,fork_project,create_preview_linkFiles:
write_file,write_files,patch_file,read_file,grep,list_files,delete_file,upload_file,list_pending_uploads,import_file_from_urlDatabase:
execute_sql,get_schemaDeploy and observability:
dry_run_deploy,deploy,list_deployments,get_deployment,list_functions,run_function,run_code,view_logs,list_cron_jobsAgent tasks:
list_agent_tasks,update_agent_task(plain-language requests the project owner files in the console)Guidance and discovery:
list_skills,read_skill,search_documentation,search_projects,submit_platform_feedback
Each project ships with a dedicated Postgres database, built-in auth (email code and OAuth providers), cron scheduling, object storage, email sending and AI routing, all reached through the hatchable SDK inside your handlers. No npm install, no build step. See hatchable.com/docs/developers for the SDK and handler contract.
Manifests
server.json— MCP Registry manifest (schema version 2025-12-11), also served athatchable.com/server.jsonandhatchable.com/.well-known/mcp/server.json.smithery.yaml— Smithery submission config.
Security and auth
OAuth metadata (RFC 8414):
/.well-known/oauth-authorization-serverProtected-resource metadata (RFC 9728):
/.well-known/oauth-protected-resourceDynamic Client Registration (RFC 7591) is supported — MCP clients can register themselves automatically.
Bearer tokens are scoped per-account. You can rotate or revoke them in the console.
Docker (for registries and scanners)
The Dockerfile in this repo is a small stdio-to-HTTP proxy (proxy.mjs). It exists so registries and quality scanners that expect a runnable container (Glama, Smithery, etc.) can introspect the tool surface. End users don't need to build it — configure https://hatchable.com/mcp directly in your MCP client and let the client's native HTTP transport talk to the server.
docker build -t hatchable-mcp .
docker run --rm -i hatchable-mcp # stdio ↔ https://hatchable.com/mcpLicense
MIT. See LICENSE.
Contact
Website: hatchable.com
Email: hello@hatchable.com
Issues: file an issue in this repo for MCP-integration questions; use the in-console support flow for account or billing questions.
Available Tools
33 toolscreate_projectADestructive
Create a new Hatchable project. This generates a URL slug, creates a dedicated PostgreSQL database, and returns the project ID and URLs. Call this first before writing files or creating tables.
Project structure
public/ static files, served at their file path
api/ backend functions — each file is one endpoint
hello.js → /api/hello
users/list.js → /api/users/list
users/[id].js → /api/users/:id (req.params.id — one segment)
docs/[...path].js → /api/docs/*path (req.params.path — string[], catches multi-segment)
_lib/ shared code, not routed
migrations/*.sql SQL files, run in filename order on every deploy
seed.sql optional — runs on first deploy / fork, once per project
hatchable.toml optional overrides (cron, auth, project name)
package.json dependencies (no build scripts yet — build locally, commit public/)Routing precedence
Most-specific wins. For a request to /api/users/42:
api/users/42.js(static) — beatsapi/users/[id].js(single-param,params.id = "42") — beatsapi/users/[...rest].js(catch-all,params.rest = ["42"])
Catch-all params arrive as string[], never slash-joined. Use req.params.path as an array:
const [first, ...rest] = req.params.path;
Static file resolution (public/)
A request to /foo/bar/baz tries, in order:
public/foo/bar/baz(exact file)public/foo/bar/baz.htmlpublic/foo/bar/baz/index.htmlAncestor
index.htmlfallback — walks up:public/foo/bar/index.html→public/foo/index.html→public/index.html
Step 4 means each folder with an index.html acts as its own mini-site. You can ship
an /admin/* React SPA alongside a static marketing page at / — unmatched paths
under /admin/ fall back to public/admin/index.html, not the root one.
Handler contract
Every file under api/ exports a default async function:
// api/users/list.js
import { db, auth } from "hatchable";
export default async function (req, res) {
const user = auth.getUser(req);
if (!user) return res.status(401).json({ error: "Not logged in" });
const { rows } = await db.query(
"SELECT id, name FROM users WHERE org_id = $1",
[user.id]
);
res.json(rows);
}
// Optional: restrict methods
export const methods = ["GET"];
// Optional: register this endpoint as a cron job
// export const schedule = "0 */6 * * *";req (Express-shaped)
method, url, path, headers, cookies, params, query
body — parsed by Content-Type: JSON → object, urlencoded → object, multipart/form-data → object of non-file fields
files — present for multipart uploads: [{ field, filename, contentType, buffer }]
res (Express-shaped)
res.json(data), res.status(code) (chainable), res.send(text|buffer)
res.redirect(url), res.cookie(name, value, opts), res.setHeader(name, value)
SDK — import from "hatchable"
db.query(sql, params) → { rows, rowCount }
db.transaction([{sql, params}, ...]) → { results: [{rows, rowCount}] }
auth.getUser(req) → { id, email, name } | null
email.send({ to, subject, html })
storage.put(key, buffer, contentType) → url
storage.get(key) → { buffer, contentType }
storage.del(key)That's the entire SDK. Everything else uses standard Node: fetch for
external HTTP, process.env.KEY for secrets (set with set_env), crypto/etc
from node:*.
Database
Postgres. Write schema in migrations/*.sql. Files run in filename order, tracked in __hatchable_migrations so each runs once.
Always use RETURNING to get inserted ids in the same round trip:
INSERT INTO users (email) VALUES ($1) RETURNING idNever call lastval() or LAST_INSERT_ID() — each db.query is a fresh connection, so session-local state doesn't carry across calls.
Available Node.js APIs and packages
Functions run in Node.js 20. The full hatchable SDK is always available. In addition, these packages are pre-installed and ready to import:
sharp, puppeteer-core (with Chromium at /usr/bin/chromium), csv-parse, csv-stringify, xlsx, bcrypt, jsonwebtoken, uuid, date-fns, lodash, marked, sanitize-html, cheerio, xml2js, archiver, qrcode, stripe, openai.
Standard Node.js APIs are available: fs, child_process, net, http, Buffer, stream, path, os, crypto, etc. External HTTP via global fetch(). Secrets via process.env (set with the set_env tool).
Visibility
Three tiers — each one a step up in who the software is for:
personal — free. You and anyone you invite. Login-gated via Hatchable accounts. Build anything including auth — test the full flow with your invitees before going live.
public — $12/mo. On the open web. Custom domains. No branding. No app-level auth (use Hatchable identity only).
app — $39/mo. On the open web + your app has its own users. Email/password signup, OAuth, password reset. If your project has [auth] enabled, this is the only live tier — you can't go Public with auth, you go straight to App.
Calling the API from public/
At deploy time, Hatchable injects a tiny bootstrap into every HTML file:
window.__HATCHABLE__ = { slug: "my-app", api: "/api" };Use it as the base URL:
const API = window.__HATCHABLE__.api;
fetch(API + "/users/list").then(r => r.json()).then(render);Auth (optional)
Enable auth in hatchable.toml to get a complete signup/login/session system with one config block. The platform auto-mounts /api/auth/* — do not write files under api/auth/ when auth is enabled.
[auth]
enabled = true
providers = ["email"] # or ["email", "google", "hatchable"]Auto-mounted endpoints:
POST /api/auth/sign-up/email — create account with email + password
POST /api/auth/sign-in/email — log in
POST /api/auth/sign-out — clear session
GET /api/auth/get-session — current session + user
POST /api/auth/forget-password — send password-reset email
POST /api/auth/reset-password — complete password reset
GET /api/auth/sign-in/social/:provider — OAuth flow (google, github)
GET /api/auth/hatchable/sso — one-click Hatchable SSO (when enabled)
Users live in these tables inside your project's own database: users, sessions, accounts, verifications
You can extend the users table with your own columns:
-- migrations/002_user_profile.sql
ALTER TABLE users ADD COLUMN phone text;
ALTER TABLE users ADD COLUMN tier text DEFAULT 'free';You CANNOT drop or rename users/sessions/accounts/verifications or create your own tables with those names — the deploy will fail with a clear error.
In your API functions, auth.getUser works the same whether auth is enabled or not:
import { auth, db } from "hatchable";
export default async function (req, res) {
const user = await auth.getUser(req); // NOTE: await when auth is enabled
if (!user) return res.status(401).json({ error: "Not logged in" });
const { rows } = await db.query(
"SELECT * FROM bookings WHERE user_id = $1",
[user.id]
);
res.json(rows);
}OAuth providers need credentials set via hatchable secret set:
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET
Deploy
After writing files, call the deploy tool. It runs migrations, seeds
(first deploy only), copies public/ to the CDN, registers api/ routes,
and — if [auth] enabled — provisions the auth tables in your database.
Inputs: name (required), visibility, description.
delete_envADestructiveIdempotent
Delete one or more environment variables by key. Pass key for a single delete or keys for a batch. Missing keys are reported in skipped, not errored, so retries are idempotent. Takes effect on the next deploy.
Inputs: project_id (required), key, keys.
delete_fileADestructiveIdempotent
Delete a project file. Takes effect after the next deploy.
Inputs: project_id (required), path (required).
deployDeploy projectADestructive
Deploy the project. Runs migrations/*.sql (tracked so each runs once), runs seed.sql on first deploy, copies public/ files to the CDN, and registers api/ files as live endpoints. Increments the project version. Call this after writing all your files. To verify your functions work after deploying, use run_function — it calls the function directly through your authenticated session and works for all project visibilities. The url field is the public URL for end users — personal projects require visitors to sign up before they can view the site.
Inputs: project_id (required).
dry_run_deployARead-only
Run every deploy-time validator against the project's current files without actually deploying. Returns errors (hard gates) and warnings (soft lints), plus a would_deploy summary of what would ship.
Errors catch: package.json build scripts, reserved table names in migrations, auth route collisions, usage cap breaches.
Warnings catch known runtime footguns that type-check but silently misbehave — most notably auth.getUser() / auth.getSession() / db.query() calls without await (returning a Promise is truthy, so if (!user) guards pass and downstream user.id is undefined). Safer than calling deploy blindly and finding out mid-flight.
Inputs: project_id (required).
execute_sqlADestructive
Run SQL against the project's dedicated PostgreSQL database.
Supports: CREATE TABLE, ALTER TABLE, DROP TABLE, INSERT, SELECT, UPDATE, DELETE.
Use parameterized queries for safety: pass values in the params array with $1, $2, etc. placeholders.
Return format:
SELECT: { rows: [...], count: N } — DECIMAL columns return as strings (e.g. "45.00")
INSERT/UPDATE/DELETE: { changes: N }
DDL: { changes: 0 }
Inputs: project_id (required), sql (required), params.
fork_projectA
Fork a public project into your account. Copies all code and database schema (no data). The fork starts as a personal project you can modify freely.
This is the recommended way to start from an existing app: fork it, then modify the code.
Inputs: project_id (required), name.
get_deploymentARead-only
Detail view of one deployment by version number — returns the full file manifest (paths, hashes, sizes) and function list captured when that version shipped. Use it with list_deployments to audit or compare what changed between versions.
Inputs: project_id (required), version (required).
get_projectARead-only
Get project details including slug, visibility, status, deployed functions, and the database schema (tables, columns, types).
Inputs: project_id (required).
get_schemaARead-only
Return the database schema for the project's PostgreSQL database: tables, columns (with types), and indexes.
Inputs: project_id (required).
grepARead-only
Regex content search across a project's files. Postgres-backed, scoped to one project, with glob filtering.
Three output modes:
files_with_matches (default) — list paths containing a match
content — matching lines with optional context and line numbers
count — per-file match counts + total
Default head_limit is 250 to prevent context blowups on broad patterns. Use glob to narrow by path (e.g. 'api//*.js', 'public//.html'). Regex uses Postgres syntax (~ / ~). Invalid or catastrophic patterns error out via a 2s statement timeout — simplify the pattern if that happens.
Inputs: project_id (required), pattern (required), glob, output_mode, +4 more.
import_file_from_urlADestructiveIdempotent
Fetch a remote URL and save the response body as a project file — server-side, so the bytes never pass through your context window. Useful for seed data, vendor libs, and asset migration.
Capped at 10 MB and 10s timeout. Private/loopback addresses are rejected. Path must live under public/, api/, or migrations/, or be one of seed.sql / hatchable.toml / package.json.
Inputs: project_id (required), url (required), path (required).
list_cron_jobsARead-only
List every scheduled (cron) function in a project with its cron expression, 7-day run count, error count, and last_run_at timestamp. Use this to verify a cron job is actually firing without tailing logs manually.
Inputs: project_id (required).
list_deploymentsARead-only
List deployments for a project in reverse-chronological order. Each entry includes version, status, deployed_at, description, and summary counts (files, functions).
Use this to understand recent deploy history, identify a known-good version for rollback, or debug a regression by comparing two versions.
Inputs: project_id (required), limit.
list_envARead-only
List environment variable keys for a project. Only key names and an is_secret flag are returned — values are never exposed through this tool. Use process.env.KEY inside a deployed function to read the actual value.
Inputs: project_id (required).
list_filesBRead-only
List all files in a project with their paths, sizes, and hashes.
Inputs: project_id (required).
list_functionsARead-only
List every deployed API function for a project: route, method, runtime tier, cron schedule (if any), and 24-hour invocation and error counts.
This is the 'what routes did I ship' introspection tool. Call it after a fork, after picking up an unfamiliar project, or to verify a deploy registered the endpoints you expected. Much cheaper than reading every api/ file with read_file.
Inputs: project_id (required).
list_pending_uploadsARead-only
Show multipart uploads currently staged for this project that haven't yet been committed. Use this to recover from a disconnect — find the upload_id and resume from the next chunk_index. Uploads expire 10 minutes after the last chunk was added.
Inputs: project_id (required).
list_projectsARead-only
List all projects you own or collaborate on, with their visibility, tier, role, and current version.
Inputs: no named parameters.
patch_fileADestructive
Apply a targeted edit to an existing project file without rewriting the entire file. Finds the first occurrence of old_string and replaces it with new_string. Use this instead of write_file when modifying large files (e.g. HTML) — you only send the changed portion, not the whole file.
The old_string must match exactly (including whitespace). If it's not found, the tool returns an error. To insert at a specific position, use a nearby string as old_string and include it in new_string with your addition.
Inputs: project_id (required), path (required), old_string (required), new_string (required).
read_fileARead-only
Read the content of a project file.
Pass offset/limit to read a range of lines — useful for large files where the whole file would blow the context window. When either is set, the response includes cat -n style line-numbered content so subsequent patch_file calls can reference exact line numbers.
Inputs: project_id (required), path (required), offset, limit.
run_codeADestructive
Execute arbitrary JS in the project's isolate runtime with the same bindings a deployed function gets: db, auth, email, storage from "hatchable", plus process.env and global fetch. The return value of the snippet becomes the result field.
Use this as a REPL: probe the database, verify a computation, test an API shape before committing it to a file. Nothing is persisted — the snippet runs once and disappears.
Caps: 5s default timeout (max 30s), 256 KB max source length.
Example:
run_code({ project_id, code: const { db } = await import("hatchable"); const { rows } = await db.query("SELECT count(*) FROM users"); return rows[0]; })
Inputs: project_id (required), code (required), timeout_ms.
run_functionADestructive
Execute a deployed function and return the real response. Use this to test your API endpoints.
Returns: { status, headers, body, logs, error, duration_ms }
Example: run_function({ project_id: 1, path: "/api/users", method: "GET" }) Example: run_function({ project_id: 1, path: "/api/users", method: "POST", body: { name: "Alice" } })
IMPORTANT: Always run_function on your API endpoints after writing them. Inspect the response body field names and types. Then write your frontend to match those exact names.
Inputs: project_id (required), path (required), method, body, +2 more.
search_documentationARead-only
Search Hatchable's own documentation for platform behavior — routing, the SDK surface, deploy semantics, auth config, runtime limits. Call this instead of guessing when you're unsure how a Hatchable feature works.
Ranks results by term frequency across headed sections. Returns source file, section heading, and a snippet around the hit.
Inputs: query (required), limit.
search_projectsARead-only
Search the public Hatchable project directory — other people's projects that you can view or fork. Use this to find existing apps to fork-and-modify as a starting point.
Note: this searches the public marketplace. To search inside your own project's files, use the grep tool instead.
Inputs: query, category, limit.
set_envADestructiveIdempotent
Set environment variables for a project. Available in functions via process.env.KEY. Keys containing SECRET, PASSWORD, TOKEN, API_KEY, or PRIVATE are automatically marked as secrets.
Inputs: project_id (required), vars (required).
setup_accountADestructive
Associate an email and handle with your account.
Step 1: Call with just email — sends a 6-digit verification code. Step 2: Call with email + code + handle — verifies and completes setup.
This lets you log in to the console and sets your permanent @handle.
Inputs: email (required), code, handle.
set_visibilityADestructiveIdempotent
Change a project's visibility.
personal: you + invitees, login-gated, free
public: on the open web, requires Public plan ($12/mo). No app-level auth.
app: on the open web + user signups, requires App plan ($39/mo). Required if [auth] is enabled.
Inputs: project_id (required), visibility (required).
update_projectADestructiveIdempotent
Update project metadata: name, tagline, description, category. Only the fields you pass are touched. For visibility changes use set_visibility; slug and tier are immutable.
Inputs: project_id (required), name, tagline, description, +1 more.
upload_fileADestructiveIdempotent
Multipart file upload for content that exceeds a single model response's output token cap (big SPA bundles, large seed data, inline vendor libs).
Flow: first call with chunk_index=0 and NO upload_id — response returns an upload_id. Subsequent calls pass that upload_id with chunk_index=1, 2, 3…. Last call sets final=true to atomically concatenate and commit as one ProjectFile.
Chunks are staged in Redis with a 10-minute TTL. chunk_index overwrites (safe to retry). Max chunk size: 64 KB. Max assembled file: 20 MB.
Inputs: project_id (required), path (required), chunk (required), chunk_index (required), +2 more.
view_logsARead-only
View function execution logs with rich filtering. Each entry includes status_code, duration_ms, log_output (captured console.log), error (if any), and a derived level field (error/warning/info).
Filter by any combination of function_name, route, method, status_code (exact or 4xx/5xx wildcards), level, time range (since/until — ISO or relative like '1h'/'30m'/'7d'), full-text query across log_output and error, or specific request_id.
Use this to debug production issues: e.g. level='error' + since='1h' finds everything that blew up in the last hour.
Inputs: project_id (required), function_name, route, method, +7 more.
write_fileADestructiveIdempotent
Write or overwrite a project file. Paths are relative to the project root.
Valid locations: public/** static files (HTML, CSS, JS, images, etc.) api/.js backend functions (each file is one endpoint) api/_lib/ shared helpers imported by api/ files, not routed migrations/*.sql database migrations, run in filename order seed.sql optional seed data, runs once on fresh installs hatchable.toml optional config overrides package.json dependencies (no build script yet)
Files are stored but not live until you call deploy.
Inputs: project_id (required), path (required), content (required).
write_filesADestructiveIdempotent
Write multiple project files in a single call. Same rules as write_file but batched — faster for scaffolding a new project or updating several files at once.
Each entry in the files array has a path and content. All files are written atomically — if any path is invalid, none are written.
Inputs: project_id (required), files (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 33 tools
Most tools are clearly distinct (file ops vs. deploy vs. env vs. SQL), but write_file/write_files and get_deployment/list_deployments could cause minor confusion. The descriptions are detailed enough that an agent can usually pick correctly.
The set mostly follows verb_noun (read_file, list_files, create_project, delete_file, set_env), with a few exceptions like deploy, grep, and run_code that are verb-only or noun-verb. Still predictable overall.
33 tools is on the heavy side, but the platform covers a full lifecycle: project management, file editing, database, deploy, env, logs, cron, uploads, and account setup. Each tool has a real purpose, though some could be consolidated.
The surface is remarkably complete for a deployment platform: create/read/update/delete for projects and files, SQL execution, schema inspection, deploy with dry-run, function testing, logs, cron, env vars, uploads, forking, and account setup. No obvious dead ends.
Maintenance
Related MCP Connectors
Build, deploy, and host full-stack web apps from any MCP client. DB, auth, storage, cron included.
Deploy web apps with sign-in, per-user storage, realtime and AI built in.
Deploy full-stack web apps with database, file storage, auth, and RBAC via a single API call.
Deploy and manage web apps with Atlas hosting, isolated Postgres, file storage and logs.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables Claude to deploy full-stack web apps to Cloudflare, including databases, authentication, and file storage, directly through natural language.-
- AlicenseAqualityBmaintenanceEnables AI agents to build, edit, and publish live websites with hosting, database, auth, and domains via the Model Context Protocol.13132 npm1MIT
- AlicenseAqualityDmaintenanceMCP server for deploying projects to multiple cloud platforms (Vercel, Railway, Neon, MongoDB Atlas, Docker) and running local dev servers, with orchestration for full-stack deployments.8MIT
- AlicenseNot gradedqualityCmaintenanceA remote MCP server that lets a coding agent turn a plain-language idea into a real, shareable product — creating the project and data model, serving live API endpoints, deploying custom endpoints and server-side functions, and reading request and function logs. It handles sign-up, OAuth-backed access, and OpenAPI spec generation so people can open, sign into, and use the app the agent builds.MIT