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 "Install 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 appA
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 provided, the description carries the full burden of behavioral disclosure. It clearly states the action is permanent and reversible (implies destructive), and requires confirm=true for safety. It also indicates app data is deleted. This is sufficient transparency for a delete operation, though it doesn't elaborate on permissions or side effects.
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, concise sentence that front-loads the core action and the critical requirement. No unnecessary words or 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?
The description provides the essential fact (permanent deletion) and a safety requirement, but leaves gaps: the 'app' parameter is unspecified, and there is no indication of return values or failure behavior. For a destructive tool with no annotations, more context would be helpful, though it is minimally viable.
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 50%: only 'confirm' has a description. The tool description adds no clarification for the 'app' parameter, leaving its expected format (e.g., ID or name) undefined. The requirement 'confirm=true' reinforces the schema but does not compensate for the missing app semantics.
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 ('Permanently delete') and resource ('an app and its data'), making the tool's purpose unambiguous. It also differentiates from the sibling delete_file by specifying that it targets apps, not 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?
The description implies usage (when you need to remove an app) but does not explicitly contrast with alternatives like delete_file or specify conditions for choosing this tool. It mentions the confirm requirement, but no when-to-use or when-not-to-use guidance is given.
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, the description carries full responsibility for behavioral disclosure. It only says 'Delete a file or directory', which implies mutation but does not disclose permanence, recursion behavior, error handling, or safety implications. This is insufficient 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, front-loaded sentence stating the core action with no waste. It is appropriately concise, though it could include more detail without becoming verbose.
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 2 required parameters and no annotations or output schema, the description is incomplete. It does not clarify how to reference the app, whether directories are deleted recursively, or what happens if the target does not exist. An agent would need to guess these critical 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. It does not elaborate on what 'app' (ID vs. name) or 'path' (absolute vs. relative, file vs. directory format) mean. The parameter names give minimal hints, but the description adds no additional meaning.
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 (delete) and resource (file or directory inside an app), clearly distinguishing it from siblings like delete_app (which deletes an entire app) and read/write tools. The scope 'inside an app' further clarifies the target.
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, nor any prerequisites such as requiring the app to exist or the path to be valid. No exclusions or mentions of alternative tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployDeploy appB
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 carries the full burden. It discloses that local builds persistently and cloud providers publish via CLI, and mentions free tiers and domain configuration. However, it does not cover side effects, permission requirements, failure modes, idempotency, or what happens to prior deployments—significant gaps for an unannotated 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 two sentences with zero waste: the first states the action, the second details provider semantics. All information is front-loaded and directly relevant, earning every sentence.
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?
It covers the essential purpose and provider options, but misses guidance on when to use deploy versus sibling tools like start_preview or undeploy, and does not mention any post-deployment behavior or return values. Given no annotations and no output schema, the description could reasonably provide more operational context to fully equip an agent.
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 description adds substantial meaning to the provider parameter by explaining the outcome of each enum value (local = persistent build, cloud providers = public URL via CLI) and additional context like free tiers and domain setup. This goes well beyond the schema's simple enum listing. The app parameter is not elaborated, but its meaning is self-evident from the tool's 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 tool deploys an app and distinguishes local vs. cloud providers, making its core purpose specific. However, it does not explicitly differentiate it from sibling tools like start_preview, share_preview, or undeploy, so it lacks a strong sibling distinction.
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 explains the provider options (local vs. vercel/netlify/cloudflare) and notes free tiers and custom domain configuration, but provides no guidance on when to use this tool versus alternatives like start_preview or undeploy. It does not state any exclusions or conditions that would route an agent to a different tool.
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 carry the full burden of behavioral disclosure. It states it runs npm install, implying a mutation of the environment, but does not reveal potential side effects like overwriting node_modules, requiring network access, or idempotency, which are critical for safe invocation.
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 concise single sentence that conveys the core action without redundancy. It is front-loaded and efficient, though it may be overly terse at the expense of necessary details.
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 one required parameter and no output schema, the description is incomplete. It does not clarify the parameter semantics, side effects, or expected result, leaving an agent unable to confidently invoke the tool correctly.
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 sole parameter 'app' has no description in the schema (0% coverage), and the description only vaguely references 'app directory' without explaining what value 'app' expects (e.g., an ID or path). This is a severe gap for a required 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 ('Run npm install') and the context ('in the app directory'), making it unambiguous about what the tool does. However, it does not explicitly differentiate from sibling tools like deploy, which might also install dependencies, so it lacks a distinctive contrast.
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. It does not mention prerequisites (e.g., app must exist) or exclusions (e.g., when dependencies are already installed), leaving the agent without direction on appropriate conditions.
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 provided, the description carries the full burden. It discloses the tool's output scope (apps and their URLs) but does not explicitly confirm read-only behavior, mention any limitations like pagination, or describe response format. For a simple list, this is acceptable but not overly 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 a single sentence that front-loads the core action and resource, then adds the valuable detail about URLs. There is no redundancy or filler; every word contributes to clarity.
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 is largely complete. It states the scope and the included URL information. The only minor gap is the absence of any note about response structure or potential edge cases, but for a simple list tool this is not critical.
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 schema coverage is trivially 100% since the schema is an empty object. According to the rubric, a tool with 0 parameters receives a baseline score of 4. The description does not need to explain parameters, and it does not introduce any confusion.
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', scoped to 'the Slipway workspace'. It adds specificity by mentioning that running preview/deploy URLs are included, which distinguishes it from other app-related tools like create_app or delete_app. This is a precise and unambiguous purpose.
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 this is the tool for listing apps, and siblings like list_files clearly target different resources. However, it does not explicitly state when to use this vs. alternatives, nor does it provide exclusions or conditions. The guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_envList env keysA
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 carries the full burden of behavioral disclosure. It reveals a critical security behavior—never returning values—and scopes the operation to a specific app. However, it omits details like output format, error handling, or authentication 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?
The description is a single, concise sentence that immediately states the action ('List the env keys') and the key constraint ('keys only, never values'). There is no fluff, and the critical detail is front-loaded.
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—one parameter, no output schema, and no annotations—the description covers the core purpose and the important behavior of not exposing values. Minor gaps remain, such as what happens if the app does not exist or the response format, but these are not critical for a straightforward list operation.
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 lists a single required parameter 'app' with no description, and schema coverage is 0%. The description adds minimal context by referring to 'for an app,' indicating that 'app' identifies the target application. It does not specify the expected format (e.g., app ID vs. name) or provide additional 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 clearly states the tool lists env keys for a specified app, and explicitly notes that only keys are returned, never values. This distinguishes it from set_env and other sibling tools that modify or generate keys, 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 does not provide explicit guidance on when to use this tool versus alternatives like set_env or push_generate_keys. The read-versus-write distinction is implied but not stated, and there is no mention of exclusions or prerequisites.
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 provided, the description must carry the burden of behavioral disclosure. It does disclose that node_modules and .git are skipped, which is useful context. However, it does not mention any other behavior such as whether the listing is recursive, sorted, or what the return format is. For a simple read operation, this partial disclosure earns a 3, but it could have easily added a note about being read-only.
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, concise sentence with the core action front-loaded. It states 'List all files' immediately and then adds the exclusion in parentheses. Every word earns its place, and it avoids unnecessary 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 there is no output schema, the description should clarify what the tool returns (e.g., list of file paths, boolean, etc.) and any relevant details. It does not mention the return format or how the app parameter is used. The tool is simple, but the description leaves out important details that an agent needs to call it correctly.
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%, meaning the parameter 'app' has no description in the schema. The description does not explain what 'app' refers to or how to specify it. Since there is only one parameter, the description should clarify its meaning, but it only says 'in an app' without linking it to the parameter. This leaves the agent to guess the value format.
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), the resource (files), and the scope (all files in an app), with an explicit exclusion of node_modules and .git. It distinguishes itself from siblings like read_file, write_file, and delete_file by specifying the listing action. No 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 gives no guidance on when to use this tool versus alternatives. It does not mention any conditions, limitations, or alternatives. It simply states what it does without helping an agent decide if this is the right tool among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_logsPreview logsA
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?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool returns recent stdout/stderr, which conveys a read-only operation. However, it does not disclose potential side effects, error behavior (e.g., if preview is not running), or any limitations like log retention. Since the operation is simple and read-only, the basic behavior is covered, but additional details are missing.
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 filler. It front-loads the core purpose ('Recent stdout/stderr from a running preview') and immediately states the use case ('use this to debug'). Every word earns its place, making it 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 tool with two parameters and no output schema, the description should at least clarify parameter usage and error conditions. It does not explain what 'app' means or how 'lines' behaves, nor does it mention what happens if the preview is not running. The description covers the basic purpose and behavior but leaves significant gaps 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 0% description coverage, and the tool description does not explain either parameter (app or lines). It does not clarify what 'app' refers to (e.g., app ID, name) or what 'lines' controls (number of log lines). The parameter names are self-evident to some degree, but the description adds no value beyond the schema, leaving the agent to guess exact semantics.
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 tool's purpose: retrieving recent stdout/stderr from a running preview for debugging. It uses a specific verb ('preview') and resource ('logs'), and the context of sibling tools (start_preview, stop_preview) makes its role distinct.
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 is for debugging a running preview, implying it should be used when logs are needed. It also implies a prerequisite (the preview must be running). However, it does not explicitly mention when not to use it or name alternatives, but given the sibling list, the guidance is sufficient for an agent to infer correct usage.
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 provided, the description carries the full burden. It adds useful behavioral context: the operation may return existing keys or generate new ones, and it explicitly states the private key never leaves the machine. However, it does not disclose potential side effects (e.g., whether it overwrites existing keys) or error conditions, leaving some 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?
Two sentences with no filler. It front-loads the purpose, states the output, and includes the security constraint. 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?
The description is incomplete for a one-parameter tool. It lacks explanation of the 'app' parameter, any prerequisites (e.g., does the app need to exist?), and does not describe the return format beyond the public key. Given no output schema and no annotations, the description should provide more context but does not.
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 and the description does not mention the 'app' parameter at all. An agent calling this tool would not know what value to supply for 'app' (e.g., an app identifier, name, or path). The description fails to compensate for the missing schema documentation.
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 specific verb (generate or return) and resource (VAPID keys for Web Push), and it distinguishes itself from the sibling push_send by focusing on key generation rather than sending notifications. It also clarifies the output (public key) and a key constraint (private key stays local).
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 use case: when you need VAPID keys for Web Push. However, it does not explicitly mention alternatives or when-not-to-use. Since push_send is clearly about sending, the context is clear, but no exclusions or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_sendSend push notificationA
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, the description bears the full burden of behavioral disclosure. It states the core action (sending a push notification) and the required subscription format, but it does not disclose potential side effects, prerequisites (e.g., prior key generation), error conditions, or success/failure semantics. It is truthful but minimal, leaving out operational details an agent might need for robust use.
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 is efficient and front-loaded with the primary action. The parenthetical clarifies the expected subscription format without added fluff. It is appropriately sized for a simple tool, though a brief structuring into separate clauses could improve readability.
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 lack of annotations and output schema, the description provides the essential context for identifying the tool and the subscription parameter format. However, it leaves 'app', 'title', and 'body' undefined, and does not mention return values or error behavior. For a 4-parameter tool with low schema coverage, this is incomplete but not critically misleading.
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 25% (only the 'subscription' parameter has a description). The tool description only elaborates on the 'subscription' parameter (the JSON from PushSubscription.toJSON()), which aligns with the schema. It provides no explanation for 'app', 'title', or 'body', despite the low schema coverage. Since the description does not compensate for undocumented parameters, it adds little value beyond parameter names.
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 and resource: 'Send a Web Push notification to a browser subscription'. It also specifies the exact input format (JSON from PushSubscription.toJSON()), which uniquely identifies this tool among siblings like push_generate_keys (key generation) and send_email (email). No ambiguity about what this tool does.
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 when to use it (when the frontend provides subscription JSON to the backend) but does not mention alternatives or when not to use it. It provides context about the subscription source but does not explicitly contrast with send_email or push_generate_keys. The usage context is inferable but not explicitly stated, so guidance is implicit rather than explicit.
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?
No annotations are provided, so the description carries the full burden. It discloses that SELECT returns rows as JSON and DDL/DML returns change info, and notes the server uses the same file, which implies side effects. However, it doesn't explicitly warn that DDL/DML is destructive or irreversible, nor mention error handling or permission requirements. For a tool that executes arbitrary SQL, this is a notable 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?
Three sentences, no filler. The main action and key behaviors are front-loaded, and the context about the server is useful. 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?
The tool is complex (arbitrary SQL execution) with no output schema, no annotations, and minimal parameter descriptions. The description covers the purpose and return behavior but omits critical operational details: potential for destructive writes, error handling, validation, and parameter specifics. An agent lacks enough information to use it safely and correctly in all 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?
Schema description coverage is 0%, so the description must compensate. It implies that 'app' refers to the app identifier (via the path <app>/data.sqlite) and 'sql' is the SQL statement, but it doesn't provide format, constraints, or examples. The explanation is minimal and doesn't help an agent know how to construct valid values beyond the obvious.
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 (Run SQL) and resource (app's built-in SQLite database at <app>/data.sqlite). It clearly distinguishes from siblings since no other tool in the list executes SQL. The description is unambiguous about the tool's 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?
Gives context that the database is the app's built-in one and that the server uses the same file, implying this is the correct way to interact with the DB. However, it doesn't explicitly mention when not to use it or name alternative tools for other data operations, though no sibling tool covers SQL.
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?
No annotations are provided, so the description must convey behavioral details. It only states the basic operation without disclosing whether the file content is returned, how errors are handled, or any permission requirements. For a read operation, this is minimal and leaves important aspects undisclosed.
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, concise sentence that front-loads the verb and object. It contains no superfluous words and is appropriately minimal for a simple read operation. 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?
Although the tool is simple, the description is incomplete for an agent to call it correctly. It does not mention the return value (presumably file content), potential errors, or clarify the 'app' parameter. With no annotations or output schema, these missing details leave ambiguities that could lead to incorrect calls.
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 50% coverage (path is described, app is not), and the tool description adds no parameter information at all. The description does not explain what 'app' refers to or clarify the path format beyond the schema. It completely fails to compensate for the undocumented app 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 verb (read) and resource (a file from an app), which is specific and unambiguous. It implicitly distinguishes from sibling tools like write_file, delete_file, and list_files by naming the read operation, making it evident when to choose this tool.
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. It does not mention that list_files could be used to discover available files first, nor any conditions or exclusions. The intended usage is only implied by the verb 'read,' leaving the agent to infer context.
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?
With no annotations provided, the description must convey behavioral implications. It discloses the environmental dependencies and that it works with any SMTP provider, which is useful. However, it does not state what happens on success/failure, whether it is idempotent, or any rate limits. It neither contradicts annotations (none) nor provides deep behavioral context, so a 3 is appropriate.
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 states the purpose and the critical prerequisite. It is efficient with no fluff, though it could have added parameter details without becoming verbose. It earns a 4 for being compact and well-structured, but loses a point for skipping crucial semantic info.
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 five parameters, no output schema, and no annotations, the description is insufficiently complete. It fails to define the required parameters, the role of 'app', or the relationship between html and text (e.g., which takes precedence). An agent would need to guess parameter formats and meanings, making this tool difficult to use correctly.
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%, meaning the description must compensate for parameter meanings. The description does not explain any of the five parameters (to, app, subject, html, text). 'app' is especially ambiguous, and the distinction between html and text fields is unaddressed. With zero parameter guidance, the description fails to help the agent construct a valid invocation.
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'), resource ('transactional email'), and transport ('via SMTP'). It clearly distinguishes from sibling tools like push_send (push notifications) by specifying email, so an agent can identify the correct tool 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 provides a clear prerequisite: the required environment variables (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, MAIL_FROM) must be present in the app's env. It implies usage when sending transactional email, and notes any SMTP provider works. It does not explicitly mention when not to use it or name alternatives, but given the sibling list, the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusServer statusB
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?
Annotations are absent, so the description carries the full burden. 'Show' implies a read-only operation, but there is no disclosure of return format, authentication requirements, or potential side effects. Very sparse.
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 with no fluff, front-loading the core purpose. Perfectly concise.
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 is too ambiguous about what 'everything currently running' entails (processes, apps, services, etc.). Without an output schema, the agent must guess the return content, leaving a gap in completeness.
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, so schema coverage is complete. No parameter explanations are needed; the baseline score of 4 applies.
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 ('Show') and resource ('workspace location and everything currently running'), but the scope is broad and does not explicitly distinguish from sibling status-like tools (e.g., list_apps, preview_logs). The intent is clear enough for an agent.
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 on when to use this tool or how it differs from alternatives. The description only states the function without indicating appropriate contexts or contraindications.
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, the description carries the full burden of behavioral disclosure. It usefully states that values are never echoed back and are injected on preview and deploy. However, it omits critical behaviors such as whether setting an existing key overwrites it, whether permissions are required, and what the tool returns on success or failure. These gaps limit transparency 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?
Two sentences with no wasted words. The core action is front-loaded, and the additional behavioral notes (injection, no echo) are directly relevant. The structure is efficient and 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It does not clarify overwrite semantics, persistence across previews/deploys, or what the response contains (even though values are never echoed, the tool may return a success indicator). The simplicity of the tool (3 string params) makes the missing behavioral details more noticeable.
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 references 'app's .env' (clarifying the app parameter) and 'secret/config value' (shedding light on the value parameter), but it does not explain the 'key' parameter (the variable name) or its format. The description partially clarifies two of three parameters but leaves the most essential one ambiguous.
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 'Set a secret/config value in the app's .env' with a specific verb ('Set') and resource ('.env'). The description clearly indicates the action and implicitly distinguishes from sibling list_env (read vs write). The purpose is unambiguous and specific.
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 explicit guidance on when to use this tool versus alternatives or when not to use it. The mention of injection on preview and deploy provides some context, but it does not direct the agent to, for example, use list_env to verify existing values or explain scenarios where this tool is inappropriate. Usage is implied rather than explicitly specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_previewStart previewC
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 must fully disclose behavioral traits. It only states that a preview is started and a URL returned, omitting details like whether this is asynchronous, has side effects on existing previews, requires authentication, or has rate limits. There is no contradiction, but the description adds minimal behavioral context beyond the basic action.
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 and front-loads the core action. The second sentence, 'Give the URL to the user,' is arguably redundant with 'return its URL' but adds a directive and is not harmful. Overall, it is concise and 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?
For a tool with no annotations, no output schema, and an undocumented parameter, the description is insufficient. It fails to explain the input parameter, lacks usage context, and does not clarify behavioral expectations. An agent cannot reliably know what to pass or what to expect beyond a URL.
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 explain the 'app' parameter. It does not. The agent is left to guess whether 'app' refers to an app ID, name, or path. This is a critical gap for a required single-parameter tool; the description provides no semantic value for the 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 states a specific verb ('Start'), resource ('live dev preview'), and expected output ('return its URL'). It clearly differentiates this tool from siblings like stop_preview and share_preview by implying it initiates a new preview, though it doesn't name alternatives. The core purpose is 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 guidance is given about when to use this tool versus alternatives such as share_preview or stop_preview. There is no mention of prerequisites, typical workflow, or conditions that would favor this tool. The agent must infer that starting a preview is a first step, which is not explicit.
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 fileA
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?
With no annotations, the description must disclose behavior. It does state the destructive overwrite behavior and automatic directory creation, which is helpful. However, it omits potential errors (e.g., app not existing), return values, and any prerequisites, leaving gaps for an agent to discover.
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 short sentences, front-loaded with the core action (create or overwrite) and then a key behavioral detail. There is no redundancy or unnecessary text, making it as concise as possible while still informative.
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 file-write tool, the description covers the basic function and directory auto-creation. However, given no annotations or output schema, it lacks details on return behavior, error handling, and whether the app must already exist. These would be expected for a complete definition.
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 33% (only path is described). The tool description adds no details about the app or content parameters, relying on inference from the tool name. Since the schema is sparse, the description should compensate but does not, leaving ambiguity for two of three parameters.
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 tool creates or overwrites a file in an app, using a specific verb and resource. It distinguishes itself from sibling tools like delete_file and read_file by focusing on the write operation, so an agent can easily tell what it does.
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 usage (when you need to create or overwrite a file) and provides a useful hint that parent directories are auto-created, but it does not explicitly compare with alternatives like read_file or delete_file. The when-not-to-use guidance is left to inference, making it adequate but not explicit.
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. Dates show when Glama detected each change.
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
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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 gradedqualityCmaintenanceDeploy 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.30294Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sandeepbhuiya29/Slipway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server