Slipway
Uses Cloudflare quick-tunnel to expose local previews as public HTTPS URLs for sharing.
Allows deploying apps to Cloudflare Pages hosting.
Enables exporting generated apps to a GitHub repository, with private repos by default and secrets excluded.
Supports sending email through Gmail's SMTP server using an app password and configurable SMTP settings.
Allows deploying apps to Netlify hosting.
Provides a per-app SQLite database with query capabilities for data storage and retrieval.
Allows deploying apps to Vercel hosting.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SlipwayBuild a habit tracker with streaks, store data, and share a public preview link."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Slipway ⛵
Build and ship real apps directly from Claude or ChatGPT — free, open source, and yours.

40-second demo of an app Claude built through Slipway — dashboard, signup, private per-user notes (mp4 version).
Claude and ChatGPT can already write you an app. Getting it live is another story — git, hosting, databases, email services, push providers: a stack that was never built for you.
Slipway fixes that with one MCP (Model Context Protocol) server. Connect it, and the model you already pay for can scaffold apps, edit code, run live previews, share them at a public URL, store data, send email, send push notifications, deploy to real hosting, and hand you the finished repo. No meter, no credits, no lock-in: Slipway just executes what your model decides, on your machine, into your accounts.
flowchart LR
A["Claude / ChatGPT<br/>(the subscription you already have)"] -- MCP --> B["Slipway<br/>(your machine)"]
B --> C["Apps in ~/.slipway/apps<br/>plain directories — yours"]
B --> D["Live preview<br/>+ public share URL"]
B --> E["SQLite · SMTP email · Web Push"]
B --> F["Deploy: Vercel / Netlify / Cloudflare<br/>+ export to your GitHub"]The 60-second demo
git clone https://github.com/Sandeepbhuiya29/Slipway.git && cd Slipway
npm install && npm run build
claude mcp add slipway -- node "$PWD/dist/index.js"Then tell Claude:
"Build me a habit tracker with streaks. Keep the data in the database, give me a link to try it, and a public link I can open on my phone."
It scaffolds the app, writes the code, starts a preview, opens a share_preview tunnel, and hands you both URLs. Say "ship it" and it deploys; say "give me the repo" and export_app pushes the code to your own GitHub, secrets excluded.
Related MCP server: Universal Dev MCP
How it compares
Slipway | Hosted AI app builders | |
Price | Free, MIT-licensed | Their pricing, their terms |
AI usage | Your existing Claude/ChatGPT subscription, any model tier | Depends on their integration |
Where your code lives | Plain directories on your machine + your GitHub | Their platform |
Hosting | Your Vercel/Netlify/Cloudflare accounts (free tiers, your domains) | Their infrastructure |
Database | Built-in SQLite per app, zero setup | Their managed backend |
Email / push | Any SMTP · Web Push with local VAPID keys | Their bundled providers |
Lock-in if the company disappears | None — it's all on your disk | Everything |
Inspect what the AI can do | Read | Closed |
The full tool surface (22 tools)
Capability | Tools |
Apps |
|
Code |
|
Preview |
|
Share |
|
Data |
|
Secrets |
|
Deploy |
|
Own it |
|
| |
Push |
|
Meta |
|
Plus a web dashboard: run node dist/index.js --http 8788 and open http://localhost:8788 — every app with preview/share/deploy buttons and live logs. The saas template ships working signup/login (scrypt-hashed passwords, cookie sessions, per-user data in SQLite) with zero dependencies.
New here? The full walkthrough with copy-paste prompts is in GETTING_STARTED.md.
Connecting
Claude Code
claude mcp add slipway -- node /absolute/path/to/Slipway/dist/index.jsClaude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"slipway": { "command": "node", "args": ["/absolute/path/to/Slipway/dist/index.js"] }
}
}ChatGPT, claude.ai on the web, or your phone — run the HTTP transport and tunnel it:
SLIPWAY_TOKEN=some-long-secret node dist/index.js --http 8788
cloudflared tunnel --url http://localhost:8788Point the client's MCP connector at https://<your-tunnel>/mcp with header Authorization: Bearer some-long-secret. ChatGPT accepts remote MCP connectors in developer mode; claude.ai accepts custom connectors.
Where things live
Apps are plain directories in ~/.slipway/apps/<name> (override with SLIPWAY_HOME). Per app:
data.sqlite— the database.env— secrets, injected on preview/deploy, never echoed back through the AI.slipway-push.json— Web Push VAPID keys; the private key never leaves your machine
Nothing is proprietary about the output: every app is ordinary code you can open in an editor, export_app to GitHub, or move anywhere.
Email and push, without the SaaS
Email:
set_envthe five SMTP values (SMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS,MAIL_FROM) — a Gmail app password is enough to start — andsend_emailworks.Push:
push_generate_keysgives your frontend a VAPIDapplicationServerKey;push_senddelivers to any browser subscription. No OneSignal, no accounts.
Security model
Slipway executes code on the machine it runs on — that is the point — so the design is containment:
All file operations are jailed to the workspace; path traversal is rejected.
Secrets are write-only through the AI (
list_envreturns names, never values).delete_apprequires explicit confirmation;export_appdefaults to private repos and gitignores secrets before staging.HTTP mode warns loudly unless
SLIPWAY_TOKENis set. Treat a tunneled Slipway like SSH access, because that's what it is.
Details and reporting: SECURITY.md.
Verified, not vibes
npm run smoke drives the built server over a real MCP stdio session: create → write → preview → fetch the page over HTTP → SQLite roundtrip → env → push keys → teardown. CI runs it on every push, on Linux and macOS, Node 22 and 24.
Roadmap
Postgres behind the same
query_databasetoolMagic-link login (email-based) in the saas template
More templates: Next.js, Expo, Astro
A hosted multi-tenant mode so one Slipway can serve a team
Windows support
Contributions welcome — see CONTRIBUTING.md. Good first issues are listed there.
License
MIT. Slipway is an independent open-source project, not affiliated with Anthropic, OpenAI, or Cloudflare.
Available Tools
22 toolscreate_appCreate appA
Scaffold a new app from a template. Templates: static (Plain HTML/CSS/JS site. Zero dependencies, instant preview.); react (React + Vite single-page app. Run install_dependencies before previewing.); api (Node.js JSON API server. Zero dependencies.); fullstack (Node.js server + static frontend + SQLite database. Zero dependencies.); saas (Fullstack + built-in user accounts: signup/login/sessions (scrypt + SQLite) and per-user data. Zero dependencies.)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | App name: lowercase letters, digits, hyphens | |
| template | Yes | Template to scaffold from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It notes dependency and preview behavior for each template (zero deps vs react needing install_dependencies), but it omits side effects like directory creation, potential overwrites, or response format. This is incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded with the core purpose, followed by a structured, semicolon-separated list of templates. Every sentence carries necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all five templates with dependencies and preview notes, sufficient for an agent to choose correctly and invoke. Lacking details on return value or filesystem side effects, but given the tool's nature and absence of output schema, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, yet the description adds substantial value by detailing each template's contents, dependencies, and preview expectations, going far beyond the enum. Name semantics are adequately covered in schema, and template semantics are richly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'scaffold' and resource 'app from a template', clearly distinguishing it from sibling tools that handle file ops, deployment, etc. The description unambiguously identifies the action and object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly indicates when to use (when creating a new app) and provides template-selection guidance, including an explicit prerequisite for react (install_dependencies before preview). However, it does not explicitly state when not to use or name alternatives since none exist for creation, leaving a slight gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_appDelete appB
Permanently delete an app and its data. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| confirm | Yes | Must be true. Ask the user before deleting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing destructive behavior. It does say 'permanently delete' and 'and its data', conveying irreversibility and scope. However, the confirm requirement is already documented in the schema's confirm parameter description, so this adds no new information. No other behavioral traits (e.g., cascading effects, permission requirements) are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that efficiently communicates the core action and the critical prerequisite. No filler or redundant phrasing; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the essential destructive nature and confirmation requirement but omits details like how the app is identified, whether deletion is reversible (though 'permanently' implies it), and any side effects on related resources. Given the low complexity (2 params, no nested objects), it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% (confirm is described; app is not). The description mentions only the confirm requirement (redundant with schema) and provides no clarification on what the 'app' parameter should be (e.g., app ID, name, path). This leaves the agent without guidance for the 'app' parameter, which is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('delete') and resource ('an app and its data'), clearly distinguishing it from siblings like delete_file. The 'app' noun makes the target unambiguous, though it does not explicitly name the alternative tool for files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a prerequisite ('requires confirm=true') but no explicit guidance on when to use this tool versus alternatives. It does not mention any context where delete_app is preferred or excluded, leaving the agent to infer based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileDelete fileC
Delete a file or directory inside an app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description must carry the full burden of behavioral disclosure. It only states 'Delete' without explaining recursive behavior for directories, irreversibility, permission requirements, or side effects. This is a significant gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and is not verbose, but it is under-specified rather than concise. There is no structure or front-loading of critical information beyond the basic operation. It could be more informative without becoming lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with two parameters and no output schema, the description is incomplete. It does not clarify whether deleting a directory is recursive, what happens if the path does not exist, or any error conditions. The agent would have to infer behavior from the name and parameters alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either parameter (app, path). It offers no explanation of what 'app' or 'path' refer to, their formats, or how they interact. The agent must guess entirely from the schema names, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Delete') and resource ('a file or directory inside an app'), which distinguishes it from sibling delete_app. However, it does not explicitly name the alternative or contrast with other tools, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like delete_app or list_files. No context is given about prerequisites, safety checks, or when deletion is appropriate. The description is purely a statement of function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployDeploy appA
Deploy the app. "local" builds and serves it persistently on this machine; "vercel" / "netlify" / "cloudflare" publish to a real public URL via that provider's CLI (free tiers work; custom domains are configured in the provider dashboard).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| provider | Yes | local | vercel | netlify | cloudflare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure. It does state that 'local' builds and serves persistently and that cloud providers publish to a public URL, and it notes free tiers and custom domain configuration. However, it omits other critical behaviors such as authentication requirements, whether it overwrites existing deployments, and what the return value (e.g., a URL) looks like. Given the absence of annotations, this is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no superfluous words. It leads with the action and then concisely details the main modes. Every sentence earns its place, and the structure is front-loaded for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deployment tool with two required parameters, no output schema, and no annotations, the description covers the core behavior but remains incomplete. It lacks details on prerequisites (e.g., provider CLI installed), the result of deployment (e.g., a pa URL), and potential side effects. While adequate for a basic agent, it does not provide a full operational picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers only 50% of parameters with descriptions, and the provider description is just an enum repetition. The description text does not add any semantic value to the 'app' parameter (what it refers to) or elaborate on the provider choices beyond the schema. With low schema coverage, the description should compensate, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Deploy the app') and immediately distinguishes between local deployment and public hosting via three named providers. It is unambiguous about what the tool does and separates it from sibling tools like start_preview. The verb and resource are specific, and the provider distinction adds valuable differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the difference between 'local' and the cloud providers, giving implicit guidance on when to choose each. However, it does not explicitly mention alternatives or when not to use this tool (e.g., for temporary previews, one might use start_preview). The context is present but not explicit, leaving the agent to infer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_appExport app to GitHubA
Turn an app into the user's own GitHub repository (git init + commit + gh repo create + push). Secrets (.env, keys, databases) are gitignored automatically. Requires the gh CLI, logged in. Ask the user before making a repo public.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| repo | No | Repository name (defaults to the app name) | |
| visibility | No | Defaults to private |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly mentions that it performs git init, commit, gh repo create, and push, and that secrets are automatically gitignored. It also notes the user-consent requirement for public repos. It does not mention edge cases like existing repos or failure handling, but the core side effects are clearly surfaced, making it fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences. The main action and steps are stated first, followed by key details about secret handling and user consent. Every sentence adds value, with no redundancy. It is concise and front-loaded, making it easy for an agent to quickly grasp the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and no output schema, the description provides essential context: the operation performed, the automatic handling of secrets, and the prerequisite for gh CLI. It also covers the user-consent requirement for public visibility. Missing details like default behavior if a repo already exists or what happens on failure are not critical for initial selection and invocation. Overall, it is sufficiently complete for an agent to use the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes repo and visibility (67% coverage), leaving only the app parameter undocumented. The description does not add parameter-specific details beyond the schema, but it does mention that secrets are gitignored, which is relevant to the overall operation. Since schema coverage is above 80% (actually 67%—still above the 50% threshold), the baseline of 3 is appropriate; the description does not need to compensate for low coverage, and it adds minimal extra parameter insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: turning an app into the user's own GitHub repository through git init, commit, gh repo create, and push. This is specific and distinguishes it from sibling tools like deploy or share_preview, which serve different functions. The use of concrete actions and the inclusion of secret handling make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the prerequisite of the gh CLI being logged in and instructs to ask the user before making a repo public, providing clear usage context. It does not explicitly list alternatives or when not to use it, but the purpose is distinct enough that an agent can infer when it is appropriate. It covers key conditions without being exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_dependenciesInstall dependenciesC
Run npm install in the app directory.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavior and safety. It states 'Run npm install' but does not disclose that this modifies package files, may access the network, or could have side effects. The agent is left unaware of the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—one short sentence—with no fluff. However, it is terse to the point of brevity, though that does keep it easy to parse. The structure is fine, but it sacrifices necessary detail elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter tool, the description still omits critical context: what 'app' refers to, what installation entails, and expected outcomes. Without output schema or richer description, the agent has insufficient information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'app' with zero description coverage. The description does not explain what 'app' represents (e.g., an ID or path) or how to obtain it, so the agent cannot correctly construct the argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Run npm install' and the target context 'in the app directory.', which is specific both in verb and resource. It is distinct from sibling tools like read_file or deploy, so an agent can immediately understand its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus alternatives such as create_app or set_env. It lacks any context about prerequisites, when dependency installation is needed, or that it should be called after app creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsList appsA
List all apps in the Slipway workspace, with running preview/deploy URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It indicates a read-only operation through the verb 'List' and mentions the output (URLs), but it does not explicitly state that it is non-destructive, requires no special permissions, or describe any side effects. The agent can reasonably infer a safe read, but the description adds only minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the action and scope, and includes the critical output detail. There is no redundancy or filler; every word serves a purpose. It is optimally concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description outlines the return value (URLs) but does not specify the structure of the result, such as whether it returns app names, IDs, statuses, or a list of objects. This could leave an agent with questions about how to parse the output, though the basic purpose is clear. Adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is fully covered (empty object). The description correctly avoids parameter details since there are none. The baseline for a zero-parameter tool is 4, and the description does not detract from that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'all apps in the Slipway workspace', and adds the key output detail of running preview/deploy URLs. This distinguishes it from sibling tools like list_files, which focus on files, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not explain when to use this tool versus alternatives, mention any prerequisites, or give conditions or exclusions. The agent must infer from the name that this is for listing apps, but the description itself offers no supporting guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_envList env keysB
List the env keys set for an app (keys only, never values).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It clearly states that values are never returned, which is a key security/privacy behavior. However, it does not explicitly state that the operation is read-only (non-mutating) or describe any pagination, ordering, or error behavior. It adds some value but remains thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that front-loads the key behavior (listing keys) and the security constraint (never values). Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple list operation with one parameter and no output schema, the description is minimally adequate. However, it lacks details about return format, ordering, or any side effects (e.g., whether it might trigger a refresh). For a read-only list, this is borderline acceptable, but the absence of annotations raises the bar.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single parameter 'app' with no description (schema coverage 0%). The description says 'for an app' but does not clarify what form the app parameter takes (e.g., name, ID, slug). With such low schema coverage and zero parameter explanation in the description, the agent may struggle to know how to populate this field correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (env keys) scoped to an app, and explicitly notes it returns keys only, never values. This is clear enough to distinguish from set_env, though it doesn't name the sibling tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like set_env. There is no mention of prerequisites, filters, or scenarios where this tool is preferred, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList filesB
List all files in an app (node_modules and .git are skipped).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds meaningful context about node_modules and .git being skipped, which is valuable. However, it does not mention whether the listing is recursive, whether directories are included, or what the return format is, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the primary action and includes a useful scoping detail. There is no irrelevant content; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, no output schema, and no annotations, the description omits critical details such as whether it returns a recursive file list, includes directories, or the structure of the result. This incompleteness could lead an agent to make incorrect assumptions about the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It indicates that 'app' identifies the app whose files are listed, which provides essential context. Yet it does not specify whether 'app' is a name, ID, or path, nor any format constraints, leaving ambiguity for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all files') and the resource ('in an app'), and clarifies a specific behavior (skipping node_modules and .git). It distinguishes from siblings like read_file (which reads content) and list_apps (which lists apps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like read_file or list_apps. The context where this tool is appropriate (e.g., enumerating files for an app) is only implied, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_logsPreview logsC
Recent stdout/stderr from a running preview — use this to debug.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'Recent stdout/stderr' which implies a read operation, but it does not state whether the tool is read-only, whether it has side effects, what happens if the preview isn't running, or any error conditions. This is a significant gap for a debug tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, making it concise. However, it lacks any structure (e.g., separate usage notes, parameter explanations) and packs only minimal information. It's appropriately short but could be organized better without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is barely adequate. It does not mention prerequisites (e.g., that the preview must be running), what the logs look like, or how 'lines' behaves. With no output schema and no annotations, the agent is left without critical context for debugging scenarios, making the description incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the tool description does not explain either 'app' or 'lines'. The schema only provides types and constraints; the agent must infer that 'app' identifies the preview and 'lines' controls the number of log lines. The description adds no semantic meaning beyond the parameter names, failing to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it returns 'Recent stdout/stderr from a running preview', which is a clear verb-noun combo indicating the tool retrieves logs for debugging. It distinguishes itself from sibling tools by focusing on preview log access, though it doesn't explicitly name alternatives. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'use this to debug' gives a clear contextual hint for when to employ the tool. However, it does not mention conditions like requiring a running preview, nor does it state when not to use it or point to alternative tools (e.g., for deployed logs). The guidance is implied but not explicit about boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_generate_keysGenerate Web Push keysA
Generate (or return existing) VAPID keys for Web Push. Returns the public key to use with pushManager.subscribe() in the app's frontend; the private key never leaves this machine.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals idempotency ('or return existing') and a security property ('private key never leaves this machine'), which go beyond the surface operation. However, it doesn't mention error scenarios or dependencies (e.g., whether the app must already exist), so it falls short of comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and includes only essential details. No wasted words, and the security note is placed at the end without bloating the entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, idempotency, output, and a security aspect, which is decent for a simple tool. However, the unexplained 'app' parameter is a significant omission, and there is no mention of errors or prerequisites. Overall, it's adequate but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention the 'app' parameter at all. An agent cannot infer what value to pass (app ID, name, etc.) from the description. Since the schema provides no guidance either, this is a major gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate') and resource ('VAPID keys for Web Push'), and clarifies that it returns an existing set if present. This clearly distinguishes it from siblings like 'push_send' (sending) and 'create_app' (app creation). The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it returns the public key for pushManager.subscribe() in the frontend, implying it should be called when setting up push notifications. It doesn't explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to select it appropriately among the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_sendSend push notificationB
Send a Web Push notification to a browser subscription (the JSON from PushSubscription.toJSON(), which the app's frontend should send to its backend).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| body | Yes | ||
| title | Yes | ||
| subscription | Yes | PushSubscription JSON (endpoint + keys) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the subscription input format well, but says nothing about the required preconditions (VAPID keys configured, subscription validity), delivery semantics, failure behavior, or whether notifications are queued or fire-and-forget. For a network-side-effecting tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence that front-loads the core purpose before the parenthetical format detail. No redundant filler, though the parenthetical is slightly convoluted (three nested clauses). It earns its place by clarifying the crucial subscription input contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Web Push is a protocol-heavy operation with dependencies — VAPID key generation (push_generate_keys), env configuration (set_env), and app existence (create_app) — none of which are hinted at. There is no output schema and no annotations, so the description is the only guide, and it omits these prerequisites. Incomplete for a tool with this much hidden setup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only 'subscription' has a schema description), so the description must compensate. It does add clear meaning for 'subscription' by specifying the exact source format (PushSubscription.toJSON()), which goes beyond the schema. However, 'app' is left undefined — an agent cannot tell whether it's a name, ID, or identifier from create_app — and 'title'/'body' rely on common sense. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Send') and a precise resource ('Web Push notification to a browser subscription'), which clearly differentiates it from sibling send_email. The explicit reference to Web Push and browser subscriptions leaves no ambiguity about what the tool does, and it stands apart from push_generate_keys by being the send-side counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied workflow context — that the frontend supplies a PushSubscription.toJSON() payload — but never explicitly states when to use this tool vs. alternatives. It notably fails to mention the prerequisite relationship with push_generate_keys (VAPID keys must exist) or that the app must be pre-created via create_app. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_databaseQuery databaseA
Run SQL against the app's built-in SQLite database (/data.sqlite). SELECT returns rows as JSON; DDL/DML returns change info. The fullstack template's server uses this same file.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| sql | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It does reveal that SELECT returns JSON and DDL/DML returns change info, and it notes the file is shared with the server, implying side effects. However, it does not mention error handling, transactionality, potential destructive impact, or any rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste. The primary purpose is front-loaded, the return behavior is stated succinctly, and the server-sharing note is useful context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two required parameters, no annotations, and no output schema, the description covers the core purpose and return types, and provides the file path. Missing context includes how errors are reported, whether SQL is executed in a transaction, and any read/write limitations. The server-sharing note is helpful but overall it leaves some operational details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameters. It explains 'app' through the path (<app>/data.sqlite) and implies 'sql' is the query string. It doesn't explicitly define each parameter's format or constraints, but provides enough context to infer meaning. This is average compensation for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run SQL') and a specific resource ('the app's built-in SQLite database'), and clarifies the file path. It distinguishes itself from siblings by being the only database-related tool, and the behavior of SELECT vs DDL/DML adds clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use it (for any SQL operation on the app's database) and contrasts its effect (SELECT vs DDL/DML). It doesn't mention alternatives, but since no direct alternative exists, the context is clear. The statement about the server using the same file hints at when to be cautious, though not explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead fileC
Read a file from an app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| path | Yes | Path relative to the app root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action 'Read', which implies a non-destructive operation, but it does not reveal behavior on missing files, encoding, return format, or permission requirements. This is minimal and leaves significant uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero fluff. The verb 'Read' appears immediately, and the entire statement is efficient. It earns full marks for conciseness, though this comes at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no output schema, and no annotations, the description is far too sparse. An agent needs to know how to specify 'app' (e.g., from create_app/list_apps), the expected path format, and what the tool returns—none of which are covered. The description is incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: the 'path' parameter has a schema description, but 'app' does not. The tool description adds no explanation for either parameter, failing to compensate for the missing 'app' documentation. An agent cannot tell what value to pass for 'app' or the expected path format from either source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a resource ('a file'), and a container ('an app'), which clearly distinguishes it from siblings like write_file, list_files, and delete_file. It is concise and unambiguous, though it does not elaborate on what constitutes an 'app' or the file types supported.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as list_files (to enumerate files) or write_file (to modify). It does not mention any prerequisites, exclusions, or typical scenarios, leaving the agent to infer usage solely from the name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailSend emailB
Send a transactional email via SMTP. Requires SMTP_HOST/SMTP_PORT/SMTP_USER/SMTP_PASS/MAIL_FROM in the app's env (any SMTP provider works).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| app | Yes | ||
| html | No | ||
| text | No | ||
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It only states the action and a prerequisite, omitting any details about success/failure handling, whether sending is synchronous, error conditions, or other side effects beyond the email dispatch itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the action and includes a key prerequisite without excess words. It is appropriately concise, though it sacrifices necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no schema descriptions, no output schema, and no annotations, the description leaves critical gaps. An agent cannot determine parameter semantics, expected behavior on failure, or return values. This is grossly insufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description provides no explanation of the five parameters (app, to, subject, html, text). It doesn't clarify what 'app' refers to, expected formats for 'to' or 'subject', or the optionality/relationship of html and text. The description adds zero value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (send) and resource (transactional email) and specifies the transport (SMTP). This clearly distinguishes it from sibling tools like push_send, which handles push notifications, and file or deploy tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete prerequisite (SMTP env vars) and implies the tool is for transactional email delivery. However, it does not explicitly mention alternatives or state when not to use it. Since no other email tool exists among siblings, the context is clear enough, but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusServer statusA
Show the workspace location and everything currently running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not confirm whether the tool is read-only, has side effects, or requires special permissions. 'Everything currently running' is ambiguous, leaving the agent without clear expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the tool's entire purpose without waste. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status tool with no output schema, the description is mostly sufficient. However, 'everything currently running' could be more specific (e.g., apps, servers, or processes) to fully set expectations, but the simplicity of the tool makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema declares zero parameters, so there is nothing for the description to clarify. The baseline of 4 applies, and the description appropriately explains the tool's purpose without parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and identifies the resource (workspace location and running items). It clearly distinguishes from siblings like list_apps (specific apps) and list_files (files) by providing an overall status overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus specific siblings like list_apps or preview_logs. The description does not mention alternatives or conditions that would lead an agent to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_envSet env varA
Set a secret/config value in the app's .env. Injected into the app's process on preview and deploy. Values are never echoed back.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| key | Yes | ||
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that values are secrets/config, that they are injected on preview and deploy, and that 'Values are never echoed back'—an important non-obvious behavior. This goes beyond the schema and offers useful transparency, though it does not cover overwrite semantics or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: the first states the action and resource, the second explains timing and a key behavior. It is front-loaded with purpose and avoids extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is too sparse. It leaves open questions: what happens if the key already exists (overwrite?), is the app required to pre-exist, are there naming constraints, and are there any side effects. An agent might call it incorrectly without these details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only says 'secret/config value in the app's .env' without explaining the individual parameters (app, key, value) beyond their names. It does not provide formats, constraints, or interaction details, leaving the agent to infer from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and the resource '.env' for a specific app, and it explicitly mentions 'secret/config value' which differentiates it from related tools like list_env (which lists) and write_file (which writes files, not environment variables).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies when the value takes effect ('Injected into the app's process on preview and deploy'), which gives concrete context for use. However, it does not explicitly state alternatives or when not to use this tool, though the sibling tool names (e.g., list_env) imply a read counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_previewStart previewB
Start a live dev preview of the app and return its URL. Give the URL to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only mentions starting a preview and returning the URL, but does not disclose that this may start a background process, require dependencies to be installed first, or that the preview persists until stopped. Side effects and prerequisites are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero fluff. The main purpose is front-loaded, and the instruction to give the URL to the user is an extra useful detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the basic return value and user-facing instruction. However, it omits critical context like prerequisites (e.g., dependencies installed), whether the preview blocks or runs in the background, and that it can be stopped via stop_preview. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a string type for 'app' with no description (coverage 0%). The description does not explain what 'app' refers to (e.g., app ID, name) or its expected format. The agent must infer that it is the app to preview, but no further guidance is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start'), the resource ('a live dev preview of the app'), and the output ('return its URL'). It distinguishes itself from siblings like stop_preview and deploy by specifying 'live dev preview'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies usage (for previewing during development), but the description does not explicitly state when to use this vs. deploy or how it differs from other preview-related tools. No exclusion conditions or alternative tools are mentioned, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_previewStop previewB
Stop a running preview (and its public tunnel, if shared).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden, and it adds the useful detail that the public tunnel is also stopped if shared. However, it omits behavior such as what happens if no preview is running, whether the operation is idempotent, or any permissions required. It is partially transparent but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and the key extra detail. There is no wasted verbiage, and the structure is optimal for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool without an output schema, the description covers the core action but omits important context such as what 'app' refers to, error behavior, or requirements (e.g., preview must exist). Given the lack of annotations, the description is not fully self-sufficient, but it is adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the only parameter 'app', and the tool description does not mention the parameter at all. The description adds no semantic meaning beyond the raw parameter name, leaving an agent to infer that 'app' refers to the app whose preview should be stopped. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'stop' and the resource 'preview', and adds a specific detail about stopping the public tunnel if shared. This distinguishes it from siblings like start_preview or share_preview without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when a preview is running and needs to be stopped, but it does not explicitly state when to use it versus alternatives, nor does it provide any exclusions or edge-case guidance. The context is clear to a human but lacks explicit routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undeployUndeploy appB
Take down a local deploy (it will no longer restart with the server).
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does state the key effect (no longer restarts with the server), which is a meaningful behavioral trait. However, it does not mention whether the operation is reversible (i.e., re-deploying), whether it affects running processes or data, or any permission requirements. It covers the core effect but lacks broader context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that immediately states the action and then clarifies the consequence. Every word adds value, and there is no wasted text. It is front-loaded with the primary verb and subject, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), but the description is incomplete for successful invocation. It does not explain the expected format or meaning of the 'app' parameter, nor does it mention any conditions (e.g., app must be deployed already). While the action is clear, the lack of parameter guidance and any prerequisites means an agent may call it with incorrect input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single required parameter 'app' with no description, and the schema description coverage is 0%. The description fails to clarify what 'app' refers to (e.g., app name, ID, path). There is no explanation of accepted values or how to reference the local deploy. The description adds no parameter-level meaning, leaving the agent without sufficient information to populate the argument correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (take down) and the resource (a local deploy), and adds a clarifying behavioral outcome (it will no longer restart with the server). This distinguishes it from delete_app (which likely removes the app entirely) and deploy (the reverse operation), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like deploy or delete_app. It does not mention prerequisites (e.g., that the app must be currently deployed) or scenarios where it is appropriate. Users must infer from the name and the effect that it is used to stop a local deployment, but no explicit routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileWrite fileB
Create or overwrite a file in an app. Parent directories are created automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| path | Yes | Path relative to the app root | |
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals that the tool can overwrite (destructive) and that parent directories are auto-created. However, it does not disclose consequences of overwriting, permission requirements, or error behaviors, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, precisely worded sentence with no redundancy. It front-loads the core purpose ('Create or overwrite a file') and adds one key behavior (auto-creation of parent dirs). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write tool with three params, the description covers the primary action and a notable behavior. However, it omits any parameter details beyond the path, and with no output schema, an agent may wonder about return values or error handling. It is adequate but leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only 'path' has a description). The description does not explain the 'app' or 'content' parameters. It only mentions 'in an app' without detailing the app parameter, and 'content' is never described. With low schema coverage, the description should compensate, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Create or overwrite a file in an app.' This distinguishes it from sibling tools like list_files, read_file, and delete_file by implying a write operation. However, it does not explicitly name any sibling tools, so it does not fully capitalize on differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or workflows. An agent must infer from the name and siblings that this is for writing files instead of reading or listing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v0.3.0- First observed
create_app - First observed
delete_app - First observed
delete_file - First observed
deploy - First observed
export_app - First observed
install_dependencies - First observed
list_apps - First observed
list_env - First observed
list_files - First observed
preview_logs - First observed
push_generate_keys - First observed
push_send - First observed
query_database - First observed
read_file - First observed
send_email - First observed
server_status - First observed
set_env - First observed
share_preview - First observed
start_preview - First observed
stop_preview - First observed
undeploy - First observed
write_file
TDQS
Scored across 22 tools
Each tool targets a distinct operation: file management, app lifecycle, preview/deploy, env, database, email, push, and export. Even similar actions like start_preview and share_preview are clearly separated (dev preview vs. public tunnel). No overlap or ambiguity.
All tools use snake_case with a verb-first pattern (delete_file, list_apps, write_file, install_dependencies, push_send). Even compound names like push_generate_keys follow the same style. Naming is predictable and consistent.
22 tools is on the higher end but justifiable for a platform covering app scaffolding, files, previews, deployments, env, DB, email, push, and export. The set is comprehensive without being redundant; each tool serves a distinct purpose in the workflow.
The surface covers the full app lifecycle: create, read, update, delete, deploy, preview, log, env, database, and integrations. Minor gaps exist (e.g., no explicit file-append or update, no list of push subscriptions), but these are non-critical and agents can work around them.
Maintenance
Related MCP Connectors
Build, version, review, and export websites, web apps, and games from a conversation.
Build and host full-stack apps from a prompt, with agents that reach you on WhatsApp and email.
Build, clone & publish websites by chatting with Claude. Live in seconds, custom domains + SSL.
Turn Claude or ChatGPT into a website builder that ships a real site to a live URL you own.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceDeploy full-stack apps from AI. 75+ tools: GitHub/Docker deploy, databases, environments, security, billing.2-
- FlicenseNot gradedqualityCmaintenanceConnects Claude AI to any development project (Django, Next.js, Laravel, etc.) with 15+ universal tools for shell, file, git, logs, Docker, tests, and more.1-

Prowpt MCP Serverofficial
AlicenseCqualityCmaintenanceEnables AI agents to create, edit, and publish web apps on Prowpt.ai through project management, code editing, and AI assistant tools.59MIT- AlicenseBqualityDmaintenanceEnables non-coders to build software by describing ideas in natural language, orchestrating AI agents and CLI workers via chat without needing a terminal.307 npm4Apache 2.0