{"serverId":"mcp-registry/network.edge/mcp","tools":[{"name":"edge_account_status","fixed":{"name":"edge_account_status","description":"Check whether the connected account is a self-signed-up guest (explore tier) or fully claimed, and how to unlock it.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"edge_add_dns_record","fixed":{"name":"edge_add_dns_record","description":"Add a DNS record to a zone.","inputSchema":{"type":"object","required":["zone_id","type","name","data"],"properties":{"ttl":{"type":"number","description":"TTL in seconds (default 300)"},"data":{"type":"string","description":"Record value, e.g. an IP address or target domain"},"name":{"type":"string","description":"Record name, e.g. \"www\" or \"@\" for the root"},"type":{"enum":["A","AAAA","CNAME","MX","TXT","NS"],"type":"string","description":"Record type"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"zone_id":{"type":"string","description":"Zone id (from edge_list_dns_zones)"},"priority":{"type":"number","description":"Priority — required for MX records"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":240,"tokensAfter":240},{"name":"edge_create_assist_site","fixed":{"name":"edge_create_assist_site","description":"Create an Edge Assist site: AI answers for a website, grounded in its own content. Free tier: 1 site, 250 answered questions/month. Returns the sitekey and a one-line embed snippet.","inputSchema":{"type":"object","required":["name","hostname"],"properties":{"name":{"type":"string","description":"Friendly name, e.g. \"Docs site\""},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"hostname":{"type":"string","description":"Hostname the widget will run on, e.g. \"docs.example.com\" (origin-enforced)"},"index_url":{"type":"string","description":"Public URL of the content index JSON: { \"pages\": [{ \"url\", \"title\", \"text\" }] }. Can be set later."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":237,"tokensAfter":237},{"name":"edge_create_bucket","fixed":{"name":"edge_create_bucket","description":"Create an object storage bucket (S3-compatible). Free tier includes a limited number of buckets.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Bucket name: 3-63 chars, lowercase letters, numbers, hyphens"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"edge_create_dns_zone","fixed":{"name":"edge_create_dns_zone","description":"Create a DNS zone for a domain on Edge authoritative DNS. Free.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain name, e.g. \"example.com\""},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"edge_create_shield_widget","fixed":{"name":"edge_create_shield_widget","description":"Create an Edge Shield widget to protect a form or page from bots. Free. Returns the sitekey, the secret (shown once — store it server-side), and a ready-to-paste embed snippet.","inputSchema":{"type":"object","required":["name"],"properties":{"mode":{"enum":["managed","non-interactive","invisible"],"type":"string","description":"managed: invisible for humans, one-click check for suspicious traffic (default)"},"name":{"type":"string","description":"Friendly name, e.g. \"Contact form\""},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"hostnames":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to use this widget, e.g. [\"example.com\"]. Empty = any hostname."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":248,"tokensAfter":248},{"name":"edge_delete_dns_record","fixed":{"name":"edge_delete_dns_record","description":"Delete one DNS record from a zone.","inputSchema":{"type":"object","required":["zone_id","record_id"],"properties":{"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"zone_id":{"type":"string","description":"Zone id (from edge_list_dns_zones)"},"record_id":{"type":"string","description":"Record id (from the zone detail)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"edge_delete_dns_zone","fixed":{"name":"edge_delete_dns_zone","description":"PERMANENTLY delete a DNS zone and all its records; the domain stops resolving via Edge. Irreversible — only use when the user has clearly asked. Set confirm to true to execute. Requires the \"delete\" permission.","inputSchema":{"type":"object","required":["zone_id"],"properties":{"confirm":{"type":"boolean","description":"Must be true to actually delete."},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"zone_id":{"type":"string","description":"Zone id (from edge_list_dns_zones)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":189,"tokensAfter":189},{"name":"edge_delete_vm","fixed":{"name":"edge_delete_vm","description":"PERMANENTLY delete one VM, its disk and its IP. Irreversible — only use when the user has clearly asked. Set confirm to true to execute; without it the call returns a summary of what would be deleted. Requires the \"delete\" permission.","inputSchema":{"type":"object","required":["vm_id"],"properties":{"vm_id":{"type":"string","description":"VM id (from edge_list_vms)"},"confirm":{"type":"boolean","description":"Must be true to actually delete."},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"edge_deploy_app","fixed":{"name":"edge_deploy_app","description":"Deploy a full application on a VM: provisions compute, runs a setup script, and optionally adds CDN and DNS. This is BILLABLE — always dry_run first and report the monthly cost to the user. Pass ssh_key (a public key string) to enable SSH access.","inputSchema":{"type":"object","required":["project","size"],"properties":{"os":{"type":"string","description":"Operating system template id (default ubuntu-24.04)"},"cdn":{"type":"boolean","description":"Put the Edge CDN in front of the VM"},"size":{"enum":["nano","small","medium","large","xlarge"],"type":"string","description":"nano: 1vCPU/1GB, small: 1/2GB, medium: 2/4GB, large: 4/8GB, xlarge: 8/16GB"},"domain":{"type":"string","description":"Domain for the app"},"region":{"type":"string","description":"Deployment region (default london) — list regions via edge_discover"},"script":{"type":"string","description":"Startup script id from the Edge library (e.g. \"docker\", \"nodejs\") — preferred over setup_script"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"project":{"type":"string","description":"Project name"},"ssh_key":{"type":"string","description":"SSH public key string (e.g. \"ssh-ed25519 AAAA...\") to bake into the VM"},"setup_script":{"type":"string","description":"Inline bash script to run on first boot (use script instead when a library script exists)"},"script_params":{"type":"object","description":"Parameters for the chosen library script"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":448,"tokensAfter":448},{"name":"edge_deploy_static_site","fixed":{"name":"edge_deploy_static_site","description":"Deploy a static website to Edge in one call: creates a storage bucket, uploads files (or clones a git repo), configures the global CDN with SSL, and wires DNS if the zone is on Edge. Free tier covers it. Provide either files (base64) or a git repo.","inputSchema":{"type":"object","required":["project"],"properties":{"repo":{"type":"string","description":"Git repository to deploy instead of files: \"user/repo\" or a full GitHub/GitLab URL"},"files":{"type":"array","items":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":"File path, e.g. \"index.html\" or \"assets/style.css\""},"content":{"type":"string","description":"Base64-encoded file content"},"content_type":{"type":"string","description":"MIME type (auto-detected if omitted)"}}},"description":"Files to upload, base64-encoded."},"branch":{"type":"string","description":"Git branch or tag (default: main)"},"domain":{"type":"string","description":"Custom domain to serve from, e.g. \"app.example.com\". SSL is auto-provisioned."},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"project":{"type":"string","description":"Project name (created if it does not exist), e.g. \"my-portfolio\""},"spa_mode":{"type":"boolean","description":"Enable single-page-app mode (all routes serve index.html)"},"git_token":{"type":"string","description":"Personal access token for private repositories"},"source_path":{"type":"string","description":"Subdirectory of the repo to deploy, e.g. \"dist\" or \"build\""}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":474,"tokensAfter":474},{"name":"edge_get_vm","fixed":{"name":"edge_get_vm","description":"Get one VM: live status, metrics, IPs, attached SSH keys, and the ready-to-use SSH command. Poll until status is \"running\" before attempting SSH.","inputSchema":{"type":"object","required":["vm_id"],"properties":{"vm_id":{"type":"string","description":"VM id (from edge_list_vms)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":90,"tokensAfter":90},{"name":"edge_list_assist_sites","fixed":{"name":"edge_list_assist_sites","description":"List Edge Assist sites (AI answers widget) with usage and index status.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":47,"tokensAfter":47},{"name":"edge_list_buckets","fixed":{"name":"edge_list_buckets","description":"List storage buckets on the account.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":36,"tokensAfter":36},{"name":"edge_list_dns_zones","fixed":{"name":"edge_list_dns_zones","description":"List DNS zones on the account.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":35,"tokensAfter":35},{"name":"edge_list_projects","fixed":{"name":"edge_list_projects","description":"List all projects (groupings of resources) on the connected Edge account.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":47,"tokensAfter":47},{"name":"edge_list_shield_widgets","fixed":{"name":"edge_list_shield_widgets","description":"List Edge Shield widgets (free, privacy-first CAPTCHA alternative).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":47,"tokensAfter":47},{"name":"edge_list_vms","fixed":{"name":"edge_list_vms","description":"List all virtual machines on the account with status, size, and IPs.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":44,"tokensAfter":44},{"name":"edge_project_health","fixed":{"name":"edge_project_health","description":"Comprehensive health check for every resource in a project: status, metrics, and actionable suggestions.","inputSchema":{"type":"object","required":["project_id"],"properties":{"project_id":{"type":"string","description":"Project id (from edge_list_projects)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"edge_rename_vm","fixed":{"name":"edge_rename_vm","description":"Change the display name of a VM (does not change the guest hostname).","inputSchema":{"type":"object","required":["vm_id","name"],"properties":{"name":{"type":"string","description":"New name"},"vm_id":{"type":"string","description":"VM id (from edge_list_vms)"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"edge_update_deployment","fixed":{"name":"edge_update_deployment","description":"Update an existing deployment: upload changed files and optionally purge the CDN cache.","inputSchema":{"type":"object","required":["project_id","files"],"properties":{"files":{"type":"array","items":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":"File path, e.g. \"index.html\" or \"assets/style.css\""},"content":{"type":"string","description":"Base64-encoded file content"},"content_type":{"type":"string","description":"MIME type (auto-detected if omitted)"}}},"description":"Files to upload, base64-encoded."},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"purge_cdn":{"type":"boolean","description":"Purge the CDN cache after upload"},"project_id":{"type":"string","description":"Project id (from edge_list_projects)"},"changed_only":{"type":"boolean","description":"Skip files whose content has not changed (MD5 comparison)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":300,"tokensAfter":300},{"name":"edge_update_dns_record","fixed":{"name":"edge_update_dns_record","description":"Change an existing DNS record in place — e.g. repoint an A record when a VM gets a new IP. Prefer this over adding a second record. Only the fields you pass are changed. Record ids come from the zone detail (GET /agent/dns/zones/{id}).","inputSchema":{"type":"object","required":["zone_id","record_id"],"properties":{"ttl":{"type":"number","description":"New TTL in seconds"},"data":{"type":"string","description":"New value, e.g. the new IP address"},"name":{"type":"string","description":"New record name"},"type":{"enum":["A","AAAA","CNAME","MX","TXT","NS"],"type":"string","description":"New record type"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"zone_id":{"type":"string","description":"Zone id (from edge_list_dns_zones)"},"priority":{"type":"number","description":"New priority (MX only)"},"record_id":{"type":"string","description":"Record id (from the zone detail)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":300,"tokensAfter":300},{"name":"edge_upload_files","fixed":{"name":"edge_upload_files","description":"Upload files to an existing storage bucket.","inputSchema":{"type":"object","required":["bucket","files"],"properties":{"files":{"type":"array","items":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":"File path, e.g. \"index.html\" or \"assets/style.css\""},"content":{"type":"string","description":"Base64-encoded file content"},"content_type":{"type":"string","description":"MIME type (auto-detected if omitted)"}}},"description":"Files to upload, base64-encoded."},"bucket":{"type":"string","description":"Bucket name"},"dry_run":{"type":"boolean","description":"Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money."},"changed_only":{"type":"boolean","description":"Skip files whose content has not changed (MD5 comparison)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":255,"tokensAfter":255}],"toolsChanged":23,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}