{"endpoint":"https://api.ample.computer/mcp","tools":[{"description":"Delete an app and its releases; preserve shared servers and declared resources","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"enum":[true,false],"type":"boolean"}},"required":["id","execution_key"],"type":"object"},"name":"ample_app_delete"},{"description":"Read an app's deployment status","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_app_get"},{"description":"List deployed apps, including static sites without a server","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_app_list"},{"description":"Provision an agent credential with a secret shown only once","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","scope","execution_key"],"type":"object"},"name":"ample_auth_agent_create"},{"description":"List agent credentials without exposing secrets","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_auth_agent_list"},{"description":"Revoke a credential and all its access tokens","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_auth_agent_revoke"},{"description":"Register a free autonomous account; returns credentials, quotas, expiry, and claim URL","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"type":"string"},"request_key":{"description":"Random UUID retained to retrieve registration after a disconnect","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_auth_signup"},{"description":"Create a new scoped token","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"expires":{"description":"Expiry duration (e.g. \"1h\", \"7d\", \"90d\")","type":"string"},"name":{"description":"Token name (must be unique)","type":"string"},"scope":{"description":"Comma-separated scopes (e.g. \"servers:read,servers:exec\")","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","scope","expires","execution_key"],"type":"object"},"name":"ample_auth_token_create"},{"description":"List all tokens","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_auth_token_list"},{"description":"Revoke a token by ID","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Token ID (e.g. tok_a1b2c3d4)","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_auth_token_revoke"},{"description":"Show current identity and scopes","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_auth_whoami"},{"description":"Create an object-storage bucket (returns S3 credentials)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"description":"Bucket name (lowercase letters, digits, hyphens)","type":"string"},"quota_mb":{"description":"Size quota in MB (defaults to 1024)","type":"integer"},"region":{"description":"Region","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","execution_key"],"type":"object"},"name":"ample_bucket_create"},{"description":"Show the bucket's S3 credentials and endpoint","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_credentials"},{"description":"Delete a bucket and all objects in it","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"description":"Skip confirmation","enum":[true,false],"type":"boolean"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_delete"},{"description":"Get bucket details (including live usage)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_get"},{"description":"List buckets","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_bucket_list"},{"description":"Serve the bucket publicly on the CDN host","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_publish"},{"description":"Rotate the bucket's S3 key (old key stops working)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_rotate_key"},{"description":"Stop serving the bucket publicly","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Bucket ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_bucket_unpublish"},{"description":"Set budget limits","inputSchema":{"additionalProperties":false,"properties":{"daily_max":{"description":"Daily maximum spend in USD","type":"number"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"hard_stop":{"default":false,"description":"Hard stop when budget exceeded (kill VMs)","enum":[true,false],"type":"boolean"},"monthly_max":{"description":"Monthly maximum spend in USD","type":"number"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_budget_set"},{"description":"Show budget status","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_budget_status"},{"description":"Create a managed database","inputSchema":{"additionalProperties":false,"properties":{"engine":{"description":"Engine: postgres, mysql, redis, or mongodb","type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"description":"Database name","type":"string"},"region":{"description":"Region","type":"string"},"size":{"description":"Instance size (defaults to s-1vcpu-1gb)","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","engine","execution_key"],"type":"object"},"name":"ample_database_create"},{"description":"Delete a managed database","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Database ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"description":"Skip confirmation","enum":[true,false],"type":"boolean"}},"required":["id","execution_key"],"type":"object"},"name":"ample_database_delete"},{"description":"Get database details","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Database ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_database_get"},{"description":"List managed databases","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_database_list"},{"description":"Deploy a local app/workspace and wait until it is live\n\nThis command blocks until the release is live or fails, then exits: 0 = live, 1 = failed, 2 = blocked on a required preflight action. Ample remembers your last deploy (content-addressed), so re-running with no source or config changes is a no-op that reports the app as already live instead of rebuilding. Only re-run `ample deploy` after a real change or to retry a failure — do not poll it for status. With `--format json` the result always carries top-level `status` (\"live\"), `unchanged` (bool), `deployment_id`, and `server_id` fields.","inputSchema":{"additionalProperties":false,"properties":{"build_command":{"description":"Explicit build command override","type":"string"},"env":{"description":"Encrypted environment variable (repeatable, e.g. --env KEY=value or --env KEY to prompt)","items":{"type":"string"},"type":"array"},"env_file":{"description":"Dotenv-style file to import as encrypted environment variables","items":{"type":"string"},"type":"array"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"force":{"default":false,"description":"Deploy even from a home/system directory (bypasses the safety guard). Also forces a full redeploy: it skips the unchanged/no-op short-circuit, so the release is rebuilt and re-activated even when nothing changed","enum":[true,false],"type":"boolean"},"health_path":{"default":"/","description":"Health check path","type":"string"},"health_timeout_secs":{"description":"Maximum seconds to wait for the service health check","type":"integer"},"idempotency_key":{"description":"Idempotency key for safe retries","type":"string"},"ignore_packaging_candidate":{"description":"Mark a detected packaging candidate as intentionally excluded","items":{"type":"string"},"type":"array"},"include":{"description":"Include a verified gitignored file or directory in the deploy package","items":{"type":"string"},"type":"array"},"install_command":{"description":"Explicit install command override","type":"string"},"kind":{"description":"Service kind: `web` (default, HTTP health-gated + public-capable), `worker` (non-HTTP background process; never gets a public URL), or `static`. Omit for `web`. `--kind worker` cannot be combined with `--public`","enum":["web","worker","static"],"type":"string"},"link":{"description":"Wire this app to a sibling Ample server (repeatable). `--link PB=my-pb-server` injects `PB_URL` and framework public URL variables using the live HTTP endpoint, so a localhost default doesn't follow the app into production. TARGET may be a bare server name/ID, deployment ID, hostname, or full HTTP URL. A server with multiple live HTTP apps requires a deployment ID. An explicit `--env` of the same key wins; the mapping is saved so redeploys keep the wiring","items":{"type":"string"},"type":"array"},"name":{"description":"Server/app name (defaults to directory name if omitted)","type":"string"},"path":{"default":".","description":"Project directory to deploy, or one service name from ample.toml","type":"string"},"port":{"description":"Explicit listen and health-check port (omitted means auto-assign)","type":"integer"},"preflight":{"default":false,"description":"Run local deployment advisor checks without contacting the Ample API","enum":[true,false],"type":"boolean"},"private":{"default":false,"description":"Deploy privately (no public URL). Overrides a saved `public = true` from prior deploys","enum":[true,false],"type":"boolean"},"public":{"default":false,"description":"Publicly expose with generated URL (the default for web/static apps)","enum":[true,false],"type":"boolean"},"release_command":{"description":"Optional one-off command to run before the release is considered live (e.g. migrations)","type":"string"},"runtime":{"description":"Explicit runtime override when source detection is ambiguous","type":"string"},"service_or_path":{"default":".","description":"Project directory to deploy, or one service name from ample.toml","type":"string"},"size":{"description":"VM size (e.g. s-1vcpu-256mb). Omit to let Ample pick a runtime-safe size — a node app that installs dependencies at runtime is given enough memory automatically instead of OOMing the small default","type":"string"},"start":{"description":"Start command inside the VM. Optional when Ample can infer it from the source probe","type":"string"},"target_mode":{"description":"Deployment target mode. Hosted paid accounts default to reusing the included server when omitted","enum":["new-server","existing-server","included-server"],"type":"string"},"target_server":{"description":"Existing server ID/name to reuse for this deployment","type":"string"},"template":{"description":"Optional internal template override","type":"string"},"volume":{"description":"Persistent volume to mount before the app first boots (ID or name:/mount/path)","type":"string"},"wait_secs":{"default":600,"description":"Maximum seconds to wait for build/activation, including operation watches","type":"integer"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_deploy"},{"description":"Read embedded CLI documentation (compatibility alias)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"topic":{"default":"agents","enum":["agents","llms"],"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_docs"},{"description":"Print the agent playbook (plan → answer → deploy workflow, contracts, footguns)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"snippet":{"default":false,"description":"Print a short block to merge into this repo's AGENTS.md / CLAUDE.md","enum":[true,false],"type":"boolean"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_docs_agents"},{"description":"Print the llms.txt-style condensed command and manifest reference","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_docs_llms"},{"description":"Print the generated MCP tool catalog or registry metadata","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"local":{"default":false,"enum":[true,false],"type":"boolean"},"registry":{"default":false,"enum":[true,false],"type":"boolean"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_docs_mcp"},{"description":"Print remote MCP authentication, workspace, and recovery instructions","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_docs_remote"},{"description":"Add a custom domain to a deployment","inputSchema":{"additionalProperties":false,"properties":{"deployment_id":{"type":"string"},"domain":{"type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["deployment_id","domain","execution_key"],"type":"object"},"name":"ample_domain_add"},{"description":"List domains for a deployment","inputSchema":{"additionalProperties":false,"properties":{"deployment_id":{"type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["deployment_id","execution_key"],"type":"object"},"name":"ample_domain_list"},{"description":"Verify DNS for a custom domain and activate it","inputSchema":{"additionalProperties":false,"properties":{"domain":{"type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["domain","execution_key"],"type":"object"},"name":"ample_domain_verify"},{"description":"Cancel remote execution; accepted cloud mutations may already have completed","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_execution_cancel"},{"description":"Retrieve an existing remote execution and its result without replaying it","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_execution_get"},{"description":"Plan this repo and write ample.toml, with onboarding guidance\n\nRuns `ample plan --write`, lifts legacy .ample/config.toml settings into the manifest, and prints the AGENTS.md snippet + .gitignore recommendation. Never edits files ample doesn't own.","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"path":{"default":".","description":"Path to the app repo (defaults to the current directory)","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_init"},{"description":"Tail build/runtime logs for a deployment","inputSchema":{"additionalProperties":false,"properties":{"deployment_id":{"description":"Deployment ID or manifest service name. Defaults to the current service's last deployment","type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"follow":{"default":false,"description":"Stream new entries as they are written. Polls every second","enum":[true,false],"type":"boolean"},"kind":{"default":"all","description":"Filter by log kind: build, runtime, or all (default)","type":"string"},"tail":{"default":200,"description":"Show only the last N entries","type":"integer"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_logs"},{"description":"Read an existing operation without starting another deployment","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"wait_secs":{"default":0,"description":"Wait up to this many seconds for a state change or completion","type":"integer"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_operation"},{"description":"Analyze the repo and plan its infrastructure before deploying\n\nDetects every deployable service (monorepos included), proposes the topology (servers, databases, volumes, links), and lists open questions with options and safe defaults. Exits 0 when the plan is ready, 2 when blocking questions remain — resolve them with `--answer =` (or edit ample.toml) and re-run. `--write` pins the plan to a checked-in ample.toml that deploys then consume; detection still fills anything the manifest leaves unpinned.","inputSchema":{"additionalProperties":false,"properties":{"answers":{"description":"Answer an open question in ample.toml (repeatable): --answer services.web.start=\"node build\". Applied before re-planning, so plan → answer → plan converges to ready","items":{"type":"string"},"type":"array"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"offline":{"default":false,"description":"Skip the remote-state overlay (no API access; plan is repo-local)","enum":[true,false],"type":"boolean"},"path":{"default":".","description":"Path to the app repo (defaults to the current directory)","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"write":{"default":false,"description":"Write ample.toml with the proposed plan. Open questions become `# TODO(ample):` comments naming their --answer path. Refuses to overwrite an existing ample.toml (edit it or use --answer instead)","enum":[true,false],"type":"boolean"}},"required":["execution_key"],"type":"object"},"name":"ample_plan"},{"description":"Inspect one published recipe contract (prerequisites, tested configuration, limitations, evidence, binding, next actions)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"markdown":{"default":false,"description":"Print the Markdown representation instead of JSON","enum":[true,false],"type":"boolean"},"recipe_id":{"description":"Recipe id, e.g. page:recipes:rest-api:express:persistent-state","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["recipe_id","execution_key"],"type":"object"},"name":"ample_recipe_get"},{"description":"Prepare a side-effect-free deployment plan for a recipe against a workspace or server you own\n\nRequires an account token with servers:read. Returns constraint results, missing inputs, blockers, resource changes, cost estimate, required scopes and, when every check passes, an approval summary with a signed plan token and the typed handoff to the existing `ample deploy` flow. It never provisions or bills anything and `ready_for_approval` is not approval.","inputSchema":{"additionalProperties":false,"properties":{"compliance_requirements":{"description":"Hard constraint: compliance requirement (repeatable)","items":{"type":"string"},"type":"array"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"inputs":{"description":"Recipe input as KEY=VALUE (repeatable). Secret-looking keys must use secret references, never literal credentials","items":{"type":"string"},"type":"array"},"project":{"description":"Workspace id (ws_...) or server id/name you own","type":"string"},"recipe_id":{"description":"Recipe id","type":"string"},"recipe_revision":{"description":"Recipe revision from `ample recipe get`; a stale revision is rejected","type":"string"},"region":{"description":"Hard constraint: deployment region","type":"string"},"required_capabilities":{"description":"Hard constraint: required capability (repeatable)","items":{"type":"string"},"type":"array"},"runtime_version":{"description":"Hard constraint: runtime and version, e.g. \"node 22\"","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["recipe_id","project","recipe_revision","execution_key"],"type":"object"},"name":"ample_recipe_plan"},{"description":"Search the published deployment recipe catalog by task, stack and explicit constraints\n\nPublic and read-only. `matches` lists recipes whose stated hard constraints are all verified; `needsVerification` lists recipes with at least one unknown constraint. An unknown is never a fit, a violated constraint excludes the recipe, and an empty result is a valid answer. Facet ids come from `ample recipe search` results or the catalog index (`/v1/catalog`).","inputSchema":{"additionalProperties":false,"properties":{"budget_amount":{"description":"Hard constraint: monthly budget amount (requires --budget-currency and --budget-scope)","type":"number"},"budget_currency":{"description":"Three-letter currency code for --budget-amount, e.g. USD","type":"string"},"budget_scope":{"description":"Whether the budget covers platform charges only or all dependencies","enum":["platform-only","all-dependencies"],"type":"string"},"compliance_requirements":{"description":"Hard constraint: compliance requirement such as HIPAA (repeatable)","items":{"type":"string"},"type":"array"},"cursor":{"description":"Continue a previous search from its nextCursor","type":"string"},"data_sensitivity":{"description":"Hard constraint: data sensitivity","enum":["public","internal","confidential","regulated"],"type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"framework_ids":{"description":"Framework facet id (repeatable; OR within the list)","items":{"type":"string"},"type":"array"},"industry_ids":{"description":"Industry facet id (repeatable)","items":{"type":"string"},"type":"array"},"limit":{"default":5,"description":"Results per page (1 to 20)","type":"integer"},"max_request_duration_seconds":{"description":"Hard constraint: maximum request duration in seconds","type":"number"},"migration_source_ids":{"description":"Migration source facet id (repeatable)","items":{"type":"string"},"type":"array"},"minimum_memory_mib":{"description":"Hard constraint: minimum memory in MiB","type":"integer"},"minimum_vcpu":{"description":"Hard constraint: minimum vCPU","type":"number"},"primitive_ids":{"description":"Required primitive id (repeatable; every listed primitive is required)","items":{"type":"string"},"type":"array"},"query":{"description":"Natural-language task, stack and constraints (1 to 2000 characters)","type":"string"},"region":{"description":"Hard constraint: deployment region","type":"string"},"required_capabilities":{"description":"Hard constraint: required capability such as gpu, redis, websockets (repeatable)","items":{"type":"string"},"type":"array"},"runtime_version":{"description":"Hard constraint: runtime and version, e.g. \"node 22\"","type":"string"},"workload_ids":{"description":"Workload facet id (repeatable; OR within the list)","items":{"type":"string"},"type":"array"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["query","execution_key"],"type":"object"},"name":"ample_recipe_search"},{"description":"Copy files to/from a server (scp-style)\n\nUpload: ample server cp ./local.txt my-server:/remote.txt Download: ample server cp my-server:/remote.txt ./local.txt","inputSchema":{"additionalProperties":false,"properties":{"dest":{"description":"Destination path (local or server:remote)","type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"src":{"description":"Source path (local or server:remote)","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["src","dest","execution_key"],"type":"object"},"name":"ample_server_cp"},{"description":"Create a new server","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"description":"Server name (idempotent — returns existing if name matches)","type":"string"},"size":{"description":"VM size (e.g., s-1vcpu-1gb)","type":"string"},"template":{"default":"empty","description":"Template (e.g., python-3.12, node-22, agent-workspace)","type":"string"},"volume":{"description":"Attach volume (format: name:/mount/path)","type":"string"},"wait":{"default":false,"description":"Wait until server is running","enum":[true,false],"type":"boolean"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","size","execution_key"],"type":"object"},"name":"ample_server_create"},{"description":"Destroy a server","inputSchema":{"additionalProperties":false,"properties":{"destroy_live_deployments":{"default":false,"description":"Also destroy live public deployments owned by this server","enum":[true,false],"type":"boolean"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Server ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"description":"Skip confirmation","enum":[true,false],"type":"boolean"}},"required":["id","execution_key"],"type":"object"},"name":"ample_server_destroy"},{"description":"Execute a command on a server","inputSchema":{"additionalProperties":false,"properties":{"command":{"description":"Command to execute (everything after --)","items":{"type":"string"},"type":"array"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Server ID or name","type":"string"},"stream":{"default":false,"description":"Stream output as it's produced","enum":[true,false],"type":"boolean"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_server_exec"},{"description":"Get server details","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Server ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_server_get"},{"description":"List servers","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"status":{"description":"Filter by status","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_server_list"},{"description":"Pause a server (snapshot to disk, stop billing)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Server ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_server_pause"},{"description":"Resume a paused server","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Server ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_server_resume"},{"description":"Reconcile the whole ample.toml topology (databases, volumes, services, domains)\n\nWhere `ample deploy ` applies one service, `ample up` applies the entire manifest in dependency order: it ensures every `[databases.*]` and `[volumes.*]` exists, deploys each `[services.*]` (a service linking to X deploys after X), then attaches each `[domains.*]`. It is idempotent and never destructive — existing databases/volumes are matched by name and left untouched, unchanged services are content-addressed no-ops, and a resource absent from the manifest is only reported, never removed. A failed resource blocks its dependents but independent siblings still proceed; re-running `ample up` resumes. `--dry-run` prints the ordered action plan without mutating anything. With `--format json` the result is a stable object: `{ \"status\": \"applied\"|\"partial\"|\"failed\"|\"needs_input\"|\"planned\", \"resources\": [...] }`; exit 0 when everything applied (or dry-run), 2 when required input is missing, and 1 for other failures. Required input produces `needs_input`.","inputSchema":{"additionalProperties":false,"properties":{"dry_run":{"default":false,"description":"Compute and print the reconcile plan without making any changes. Read-only list calls are still used to annotate what already exists (and degrade gracefully when unauthenticated)","enum":[true,false],"type":"boolean"},"env_file":{"items":{"type":"string"},"type":"array"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"path":{"default":".","description":"Directory containing ample.toml (defaults to the current directory)","type":"string"},"wait_secs":{"description":"Maximum seconds to wait for each service deployment. When omitted, each service keeps the existing health-timeout-plus-300-seconds default","type":"integer"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_up"},{"description":"Show current month's usage","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_usage_current"},{"description":"Attach a detached volume before a server first boots","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"mount":{"type":"string"},"server_id":{"type":"string"},"volume_id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"description":"Skip confirmation","enum":[true,false],"type":"boolean"}},"required":["volume_id","server_id","mount","execution_key"],"type":"object"},"name":"ample_volume_attach"},{"description":"Create a new volume","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"description":"Volume name","type":"string"},"size":{"description":"Size in MB","type":"integer"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["name","size","execution_key"],"type":"object"},"name":"ample_volume_create"},{"description":"Delete a volume (must be detached)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Volume ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"},"yes":{"default":false,"description":"Skip confirmation","enum":[true,false],"type":"boolean"}},"required":["id","execution_key"],"type":"object"},"name":"ample_volume_delete"},{"description":"Detach a volume from its server","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"volume_id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["volume_id","execution_key"],"type":"object"},"name":"ample_volume_detach"},{"description":"Get volume details","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"description":"Volume ID or name","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_volume_get"},{"description":"List volumes","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_volume_list"},{"description":"Create an empty account-owned source workspace (expires after seven inactive days)","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"name":{"default":"workspace","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_workspace_create"},{"description":"Delete workspace source and metadata; deployed applications are retained","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_workspace_delete"},{"description":"Return an authenticated archive download URL, or save it to a local file","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"output":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_workspace_download"},{"description":"Read workspace metadata and resolved Git commit","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_workspace_get"},{"description":"Import a public HTTPS Git repository into an empty workspace","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"reference":{"type":"string"},"request_key":{"type":"string"},"url":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","url","execution_key"],"type":"object"},"name":"ample_workspace_import"},{"description":"List source workspaces","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["execution_key"],"type":"object"},"name":"ample_workspace_list"},{"description":"Read a UTF-8 or binary file inside a workspace","inputSchema":{"additionalProperties":false,"properties":{"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"path":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","path","execution_key"],"type":"object"},"name":"ample_workspace_read"},{"description":"Replace workspace source with a bounded tar.gz archive (preserve ample.toml and .ample when editing)","inputSchema":{"additionalProperties":false,"properties":{"data_base64":{"type":"string"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"file":{"type":"string"},"id":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","execution_key"],"type":"object"},"name":"ample_workspace_upload"},{"description":"Write a workspace file; provide either text or base64 data","inputSchema":{"additionalProperties":false,"properties":{"data_base64":{"type":"string"},"executable":{"default":false,"enum":[true,false],"type":"boolean"},"execution_key":{"description":"Unique key for this intended execution. Reuse after disconnects to retrieve it without replaying mutations.","type":"string"},"id":{"type":"string"},"path":{"type":"string"},"text":{"type":"string"},"workspace_id":{"description":"Account-owned workspace used as the current directory","type":"string"}},"required":["id","path","execution_key"],"type":"object"},"name":"ample_workspace_write"}],"transport":"streamable-http","version":"0.1.21"}