Deploy and manage Edge Network cloud: sites, VMs, storage, DNS, Shield, Assist. Agent self-signup.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer ea_live_... (an Edge agent access code). Optional for discovery — initialize and tools/list work without credentials; tools/call requires a code. Get one from the Edge console, or self-sign-up via GET https://edge.network/agent/signup.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check whether the connected account is a self-signed-up guest (explore tier) or fully claimed, and how to unlock it.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Check whether the connected account is a self-signed-up guest (explore tier) or fully claimed, and how to unlock it.
No arguments.
{
"type": "object",
"properties": {}
}Add a DNS record to a zone.
| Argument | Type | Description |
|---|---|---|
| ttl | number | TTL in seconds (default 300) |
| data* | string | Record value, e.g. an IP address or target domain |
| name* | string | Record name, e.g. "www" or "@" for the root |
| type* | string | Record type |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| zone_id* | string | Zone id (from edge_list_dns_zones) |
| priority | number | Priority — required for MX records |
{
"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"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| name* | string | Friendly name, e.g. "Docs site" |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| hostname* | string | Hostname the widget will run on, e.g. "docs.example.com" (origin-enforced) |
| index_url | string | Public URL of the content index JSON: { "pages": [{ "url", "title", "text" }] }. Can be set later. |
{
"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."
}
}
}Create an object storage bucket (S3-compatible). Free tier includes a limited number of buckets.
| Argument | Type | Description |
|---|---|---|
| name* | string | Bucket name: 3-63 chars, lowercase letters, numbers, hyphens |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
{
"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."
}
}
}Create a DNS zone for a domain on Edge authoritative DNS. Free.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name, e.g. "example.com" |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| mode | string | managed: invisible for humans, one-click check for suspicious traffic (default) |
| name* | string | Friendly name, e.g. "Contact form" |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| hostnames | array | Hostnames allowed to use this widget, e.g. ["example.com"]. Empty = any hostname. |
{
"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."
}
}
}Delete one DNS record from a zone.
| Argument | Type | Description |
|---|---|---|
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| zone_id* | string | Zone id (from edge_list_dns_zones) |
| record_id* | string | Record id (from the zone detail) |
{
"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)"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| confirm | boolean | Must be true to actually delete. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| zone_id* | string | Zone id (from edge_list_dns_zones) |
{
"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)"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| vm_id* | string | VM id (from edge_list_vms) |
| confirm | boolean | Must be true to actually delete. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| os | string | Operating system template id (default ubuntu-24.04) |
| cdn | boolean | Put the Edge CDN in front of the VM |
| size* | string | nano: 1vCPU/1GB, small: 1/2GB, medium: 2/4GB, large: 4/8GB, xlarge: 8/16GB |
| domain | string | Domain for the app |
| region | string | Deployment region (default london) — list regions via edge_discover |
| script | string | Startup script id from the Edge library (e.g. "docker", "nodejs") — preferred over setup_script |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| project* | string | Project name |
| ssh_key |
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.
| Argument | Type | Description |
|---|---|---|
| repo | string | Git repository to deploy instead of files: "user/repo" or a full GitHub/GitLab URL |
| files | array | Files to upload, base64-encoded. |
| branch | string | Git branch or tag (default: main) |
| domain | string | Custom domain to serve from, e.g. "app.example.com". SSL is auto-provisioned. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| project* | string | Project name (created if it does not exist), e.g. "my-portfolio" |
| spa_mode | boolean | Enable single-page-app mode (all routes serve index.html) |
| git_token | string | Personal access token for private repositories |
| source_path |
Get everything about the connected Edge account: plan, budget, enabled products with limits and regions, current projects, and full API documentation. Call this first in every session.
No arguments.
{
"type": "object",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| vm_id* | string | VM id (from edge_list_vms) |
{
"type": "object",
"required": [
"vm_id"
],
"properties": {
"vm_id": {
"type": "string",
"description": "VM id (from edge_list_vms)"
}
}
}List Edge Assist sites (AI answers widget) with usage and index status.
No arguments.
{
"type": "object",
"properties": {}
}List storage buckets on the account.
No arguments.
{
"type": "object",
"properties": {}
}List DNS zones on the account.
No arguments.
{
"type": "object",
"properties": {}
}List all projects (groupings of resources) on the connected Edge account.
No arguments.
{
"type": "object",
"properties": {}
}List Edge Shield widgets (free, privacy-first CAPTCHA alternative).
No arguments.
{
"type": "object",
"properties": {}
}List all virtual machines on the account with status, size, and IPs.
No arguments.
{
"type": "object",
"properties": {}
}Comprehensive health check for every resource in a project: status, metrics, and actionable suggestions.
| Argument | Type | Description |
|---|---|---|
| project_id* | string | Project id (from edge_list_projects) |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "string",
"description": "Project id (from edge_list_projects)"
}
}
}Change the display name of a VM (does not change the guest hostname).
| Argument | Type | Description |
|---|---|---|
| name* | string | New name |
| vm_id* | string | VM id (from edge_list_vms) |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
{
"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."
}
}
}Nominate the human operator of a self-signed-up (explore tier) account. They receive an email with a claim link; claiming unlocks billable resources and stops the ~7 day auto-purge. Ask the user for their email address first.
| Argument | Type | Description |
|---|---|---|
| email* | string | The human operator's email address |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The human operator's email address"
}
}
}Scale the compute resources in a project up or down. BILLABLE — dry_run first and report the cost change to the user.
| Argument | Type | Description |
|---|---|---|
| size* | string | Target VM size |
| reason | string | Why you are scaling (recorded in the audit log) |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| project_id* | string | Project id |
{
"type": "object",
"required": [
"project_id",
"size"
],
"properties": {
"size": {
"enum": [
"nano",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Target VM size"
},
"reason": {
"type": "string",
"description": "Why you are scaling (recorded in the audit log)"
},
"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_id": {
"type": "string",
"description": "Project id"
}
}
}PERMANENTLY delete a project and every resource in it (VMs, buckets, CDN deployments, DNS zones). Irreversible — only use when the user has clearly asked. Set confirm to true to execute.
| Argument | Type | Description |
|---|---|---|
| confirm | boolean | Must be true to actually delete. Without it the call fails with a summary of what would be deleted. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| project_id* | string | Project id |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "Must be true to actually delete. Without it the call fails with a summary of what would be deleted."
},
"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_id": {
"type": "string",
"description": "Project id"
}
}
}Update an existing deployment: upload changed files and optionally purge the CDN cache.
| Argument | Type | Description |
|---|---|---|
| files* | array | Files to upload, base64-encoded. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| purge_cdn | boolean | Purge the CDN cache after upload |
| project_id* | string | Project id (from edge_list_projects) |
| changed_only | boolean | Skip files whose content has not changed (MD5 comparison) |
{
"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)"
}
}
}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}).
| Argument | Type | Description |
|---|---|---|
| ttl | number | New TTL in seconds |
| data | string | New value, e.g. the new IP address |
| name | string | New record name |
| type | string | New record type |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| zone_id* | string | Zone id (from edge_list_dns_zones) |
| priority | number | New priority (MX only) |
| record_id* | string | Record id (from the zone detail) |
{
"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)"
}
}
}Upload files to an existing storage bucket.
| Argument | Type | Description |
|---|---|---|
| files* | array | Files to upload, base64-encoded. |
| bucket* | string | Bucket name |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
| changed_only | boolean | Skip files whose content has not changed (MD5 comparison) |
{
"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)"
}
}
}Start, stop, restart, suspend, resume or hard-reset a VM. Stopped VMs keep their disk and IP and are still billed. Returns the VM with its new status.
| Argument | Type | Description |
|---|---|---|
| vm_id* | string | VM id (from edge_list_vms) |
| action* | string | Power action. Use "reset" only when "restart" does not respond. |
| dry_run | boolean | Preview the action without executing it. Returns what would happen, including cost estimates. Always dry-run first for anything that costs money. |
{
"type": "object",
"required": [
"vm_id",
"action"
],
"properties": {
"vm_id": {
"type": "string",
"description": "VM id (from edge_list_vms)"
},
"action": {
"enum": [
"start",
"stop",
"restart",
"suspend",
"resume",
"reset"
],
"type": "string",
"description": "Power action. Use \"reset\" only when \"restart\" does not respond."
},
"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."
}
}
}| string |
| SSH public key string (e.g. "ssh-ed25519 AAAA...") to bake into the VM |
| setup_script | string | Inline bash script to run on first boot (use script instead when a library script exists) |
| script_params | object | Parameters for the chosen library script |
{
"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"
}
}
}| string |
| Subdirectory of the repo to deploy, e.g. "dist" or "build" |
{
"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\""
}
}
}