{
  "name": "Edgevana Edge AI Infrastructure",
  "description": "Hourly GPU instances for AI agents. Search GPU and bare-metal offers, check availability, get pricing, compare to AWS/GCP/Azure, and launch hourly GPU instances. Every launch returns a preview first and launches only after the user approves. Bare-metal and CPU servers can be searched and priced, not launched.",
  "version": "1.13.0",
  "protocolVersion": "0.3.0",
  "url": "https://mcp.edgevana.com/a2a/jsonrpc",
  "preferredTransport": "JSONRPC",
  "provider": {
    "organization": "Edgevana",
    "url": "https://edgevana.com"
  },
  "capabilities": {
    "streaming": true,
    "pushNotifications": false
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "search-servers",
      "name": "Search Servers",
      "description": "Search GPU and bare-metal offers by server_type and region. Region matches country or location names. GPU results include offer_id, hourly_sites, launch_status and launch_note. Use MCP for more filters, sorting and paging.",
      "tags": [
        "gpu",
        "servers",
        "search",
        "edge-compute"
      ],
      "examples": [
        "Find GPU servers in South Korea",
        "Find GPU servers in United States",
        "Search for non-GPU bare-metal servers in Germany"
      ]
    },
    {
      "id": "get-pricing",
      "name": "Get Pricing",
      "description": "Get GPU and bare-metal pricing from the live inventory. GPU results include available_count, offer_kind and launch_status. Only GPU offers with launch_status available can be launched.",
      "tags": [
        "pricing",
        "cost",
        "billing"
      ],
      "examples": [
        "Get pricing"
      ]
    },
    {
      "id": "check-availability",
      "name": "Check Availability",
      "description": "Check live stock for GPU and bare-metal servers. Filter by site, server type, or SKU.",
      "tags": [
        "availability",
        "capacity",
        "locations"
      ],
      "examples": [
        "Is there GPU availability in Dallas?",
        "Check availability in Chicago"
      ]
    },
    {
      "id": "get-locations",
      "name": "Get Locations",
      "description": "List Edgevana data center locations worldwide. Filter by country.",
      "tags": [
        "locations",
        "data-centers",
        "geography"
      ],
      "examples": [
        "List all data center locations",
        "Where are Edgevana locations in Germany?"
      ]
    },
    {
      "id": "get-server-specs",
      "name": "Get Server Specs",
      "description": "Get detailed hardware specifications for server SKUs including CPU, RAM, disk, network, and GPU details.",
      "tags": [
        "specs",
        "hardware",
        "gpu",
        "cpu"
      ],
      "examples": [
        "Show me hardware details for SKU BM-9254-384G-25G"
      ]
    },
    {
      "id": "compare-cloud",
      "name": "Compare to Cloud",
      "description": "Compare Edgevana to AWS, GCP, and Azure for specific workload types including AI inference, training, gaming, streaming, and more.",
      "tags": [
        "comparison",
        "aws",
        "gcp",
        "azure",
        "cloud"
      ],
      "examples": [
        "Compare Edgevana to AWS for AI inference",
        "How does Edgevana compare to cloud providers for gaming workloads?"
      ]
    },
    {
      "id": "provision-instance",
      "name": "Launch GPU Instance",
      "description": "Launch an hourly GPU instance (the only kind agents can launch). Send the offer_id and one of its hourly_sites from search-servers, plus an optional ssh_key, custom_name, disk_gb (a root disk size within the offer's disk_options; only capacity above disk_options.included_gb adds to the hourly price, and the disk cannot be resized later) ports (inbound ports such as [\"7946/tcp\", \"7946/udp\"]; up to 16, from 1 to 65535, not 22; SSH takes one of the host's direct ports, so choose an offer whose host.direct_port_count is at least the number of ports + 1, or the launch is refused before any spend) and onstart (a shell script of at most 4096 bytes that runs as root at every start of the instance; it is stored in plain text, so never put secrets in it; the preview and instance responses show only its bytes and sha256). With ports, the preview lists them, and the instance is ready only after every port is mapped; a host that cannot map them fails with ERROR_PORTS_UNMAPPED after the port checks time out, and the service tries to destroy the instance. ERROR_PORTS_UNMAPPED does not confirm destruction. Check the instance (connection.status) before another launch. Send launch parameters in a data part as { \"action\": \"launch_instance\", \"params\": { ... } }; text requests ask for missing parameters. The first call returns the hourly price and an approval object, plus the deposit due today when the quote succeeds; nothing is created. If approval.deposit_due_cents is null, run the preview again: a confirm without a deposit quote is refused. If the offer was just taken, the preview may offer an equivalent one (same GPU, possibly another site) in substituted: show substituted.note. After the user approves, send the same params (or the substituted offer_id and site) with confirm: true, the approval object unchanged, and a unique idempotency_key. If the approved offer is taken by then, an equivalent offer at the same site may be launched instead, never above the approved hourly price or deposit; a higher price is refused. A completed retry with the same idempotency_key and arguments returns the first result while the server keeps its record (the record resets when the server restarts); after an interrupted or failed launch, check your instances before you retry. Hourly GPU takes a non-refundable deposit at creation (the launch preview shows the amount); credit on the account counts towards it, and it comes back as account credit against usage. Without an ssh_key the instance is billed but not provisioned.",
      "tags": [
        "launch",
        "gpu",
        "instance",
        "hourly"
      ],
      "examples": [
        "Launch an hourly GPU instance in Seoul, South Korea"
      ]
    },
    {
      "id": "manage-instances",
      "name": "Manage Instances",
      "description": "List, inspect, update, or terminate instances. View provisioning status, billing, and hardware details. Each instance has a connection object: status (ready, provisioning, failed, destroying or destroyed), public_ip (string or null), ssh (null or { host, port, user }) ports [{ internal, proto, external, ip }] and destroyed_at (the confirmed destroy time after a cancel, null when unknown; subscription.cancelled_at is the billing term start). Terminate returns a preview first and needs confirm: true. Hourly GPU instances are always destroyed immediately (deprovisioned now; cannot be undone). Other instances can only be destroyed with when: Immediately for now; EndOfTerm is refused.",
      "tags": [
        "instances",
        "manage",
        "terminate",
        "status"
      ],
      "examples": [
        "List my instances",
        "Show details for instance abc-123",
        "Terminate instance abc-123"
      ]
    },
    {
      "id": "platform-info",
      "name": "Platform Information",
      "description": "Get information about the Edgevana platform including compute capabilities, EdgeView traffic control, EdgeLink connectivity, pricing model, security, and AI infrastructure.",
      "tags": [
        "platform",
        "info",
        "documentation"
      ],
      "examples": [
        "Tell me about Edgevana",
        "What is EdgeView?",
        "Tell me about Edgevana security"
      ]
    }
  ],
  "securitySchemes": {
    "apiKey": {
      "type": "http",
      "scheme": "bearer",
      "description": "Edgevana API key (starts with edgv_). Send it in the X-API-Key header or as a Bearer token. Create one at https://nodes.edgevana.com/profile/api-keys."
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ],
  "additionalInterfaces": [
    {
      "url": "https://mcp.edgevana.com/a2a/rest",
      "transport": "HTTP+JSON"
    }
  ]
}
