Publish a folder or HTML file from your machine to a public Cloudflare URL with one command. CLI + MCP server + /cloudfact skill.
cloudfact has 12 well-named tools with consistent verb-noun patterns (deploy, expose, list, catalog, etc.). All tools have descriptions (avg ~60 chars, within baseline). Input schemas are present and typed with Zod. Tool annotations (readOnlyHint, destructiveHint) are implemented. However, parameter descriptions are sparse or missing in several tools (e.g., 'deploy' has 8 params but only 3-4 have meaningful descriptions; 'expose' ssh param lacks detail). Output schemas are not documented. Error handling is basic (errorResult helper exists but no recovery guidance or categorization). No pagination support despite tools like 'catalog' and 'logs' that could return large result sets. Security: credentials tool accepts plaintext password param, should use server-side injection.
List every cloudfact in the Cloudflare account, grouped by project
Set or clear the app's own login credentials shown on the catalog page
Deploy a folder or HTML file to Cloudflare
Check system health and dependencies
Publish an app already listening on a port
List all local cloudfact deployments
Read deployment logs
File a deploy under a project or clear project assignment
Parameter descriptions incomplete or missing. 'deploy' tool has 8 params but only 3-4 have substantive descriptions (e.g., 'backend' param lacks explanation of auto/tunnel/workers trade-offs; 'access' array lacks format detail). 'expose' ssh param is undocumented. LLMs cannot infer parameter semantics from names alone.
Output schemas not documented. Tools return structured data (e.g., 'catalog' returns deployments grouped by project, 'logs' returns log lines) but no schema is visible in code. LLMs cannot plan downstream calls or extract fields without knowing response structure.
Credentials tool accepts plaintext password as parameter. Passwords should never appear in tool params, they leak into logs and traces. Use server-side secret injection via environment or vault.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Delete a deployment
Generate a new private key for a live deploy
Get the status of a deployment
Stop a deployment or all deployments
No pagination support. 'catalog' and 'logs' tools could return large result sets but lack limit/offset or cursor parameters. Unbounded results risk context window exhaustion and degrade LLM reasoning.
Error handling lacks recovery guidance. errorResult() helper returns raw error messages with no actionable next steps. E.g., 'deployment not found' should suggest 'call list() to see available deployments' or offer alternatives.