{
    "protocolVersion": "0.3.0",
    "name": "EuroVDC",
    "description": "EuroVDC agent interface is Model Context Protocol at /mcp (JSON-RPC methods: initialize, tools/list, tools/call). This card does not expose a separate A2A message/send endpoint.",
    "url": "https://www.eurovdc.eu/mcp",
    "version": "1.4.0",
    "documentationUrl": "https://www.eurovdc.eu/agents.md",
    "iconUrl": "https://www.eurovdc.eu/public/ikdomain/img/favicon/favicon.ico",
    "provider": {
        "organization": "EuroVDC",
        "url": "https://www.eurovdc.eu"
    },
    "capabilities": {
        "streaming": false,
        "pushNotifications": false
    },
    "additionalInterfaces": [
        {
            "url": "https://www.eurovdc.eu/mcp",
            "transport": "JSONRPC"
        }
    ],
    "mcp": "https://www.eurovdc.eu/.well-known/mcp.json",
    "openapi": "https://www.eurovdc.eu/.well-known/openapi.json",
    "llmsTxt": "https://www.eurovdc.eu/llms.txt",
    "llmsFullTxt": "https://www.eurovdc.eu/llms-full.txt",
    "languages": {
        "en": {
            "llmsTxt": "https://www.eurovdc.eu/llms.txt",
            "llmsFullTxt": "https://www.eurovdc.eu/llms-full.txt",
            "agents": "https://www.eurovdc.eu/agents.md"
        },
        "tr": {
            "llmsTxt": "https://www.eurovdc.eu/llms-tr.txt",
            "llmsFullTxt": "https://www.eurovdc.eu/llms-full-tr.txt",
            "agents": "https://www.eurovdc.eu/agents-tr.md"
        },
        "de": {
            "llmsTxt": "https://www.eurovdc.eu/llms-de.txt",
            "llmsFullTxt": "https://www.eurovdc.eu/llms-full-de.txt",
            "agents": "https://www.eurovdc.eu/agents-de.md"
        },
        "bg": {
            "llmsTxt": "https://www.eurovdc.eu/llms-bg.txt",
            "llmsFullTxt": "https://www.eurovdc.eu/llms-full-bg.txt",
            "agents": "https://www.eurovdc.eu/agents-bg.md"
        }
    },
    "skills": [
        {
            "id": "search_domain",
            "name": "search_domain",
            "description": "Check domain registration availability and return live EUR price for the TLD. Call when the user asks if a name is free or what a domain costs before cart.",
            "tags": [
                "domain",
                "pricing"
            ]
        },
        {
            "id": "recommend_server",
            "name": "recommend_server",
            "description": "Recommend a EuroVDC Cloud VPS or Dedicated plan from a plain-language workload. Returns best_pid, best_name, cpu/ram/hdd/traffic specs and alternative_pid for agent_cart_add. Does not include email/VPN. Call when the user describes traffic, stack, or budget instead of a product id.",
            "tags": [
                "vps",
                "hosting"
            ]
        },
        {
            "id": "list_products",
            "name": "list_products",
            "description": "List live EuroVDC catalog rows (hosting, Cloud VPS, Dedicated, SSL, email, VPN) with EUR prices, landing_url, purchase_url, billing_periods and server `_f` specs. Call first when comparing plans or before agent_cart_add with product_id.",
            "tags": [
                "catalog"
            ]
        },
        {
            "id": "list_tlds",
            "name": "list_tlds",
            "description": "List supported TLDs with registration, renewal and transfer prices in EUR. Call when the user asks which extensions EuroVDC sells or for bulk TLD pricing.",
            "tags": [
                "domain"
            ]
        },
        {
            "id": "get_network_rtt",
            "name": "get_network_rtt",
            "description": "Measured ICMP RTT from EuroVDC Sofia (Neterra) Looking Glass egress to reference city probes (median ms, measured_at, disclaimer). Not an SLA. Call for Sofia/Bulgaria latency questions.",
            "tags": [
                "network",
                "sofia"
            ]
        },
        {
            "id": "whois_lookup",
            "name": "whois_lookup",
            "description": "Look up WHOIS for a registered domain (registrar, expiry, nameservers). Call for ownership/expiry questions — not for price or availability (use search_domain).",
            "tags": [
                "domain",
                "whois"
            ]
        },
        {
            "id": "ai_domain_suggest",
            "name": "ai_domain_suggest",
            "description": "Generate brandable domain ideas from a business description and check availability. Call when the user needs name ideas rather than a specific FQDN.",
            "tags": [
                "domain"
            ]
        },
        {
            "id": "agent_domain_fields",
            "name": "agent_domain_fields",
            "description": "Return required additional registrant fields for a TLD (e.g. .tr) before agent_cart_add. Call for ccTLDs that need extra data.",
            "tags": [
                "domain",
                "checkout"
            ]
        },
        {
            "id": "agent_cart_add",
            "name": "agent_cart_add",
            "description": "Add a product and/or domain to an agent cart and return checkout_url (24h TTL) for Phase 1 browser handoff. Call after list_products or search_domain when the user is ready to buy.",
            "tags": [
                "checkout"
            ]
        },
        {
            "id": "agent_cart_get",
            "name": "agent_cart_get",
            "description": "Fetch an existing agent cart summary by cart_id (lines, totals, checkout_url). Call to resume a previous cart.",
            "tags": [
                "checkout"
            ]
        },
        {
            "id": "agent_checkout_quote",
            "name": "agent_checkout_quote",
            "description": "Create a 15-minute locked EUR quote from an agent cart (ACP Phase 1/2). Call after agent_cart_add when proceeding beyond browser handoff.",
            "tags": [
                "checkout"
            ]
        },
        {
            "id": "agent_checkout_prepare",
            "name": "agent_checkout_prepare",
            "description": "Create a Stripe Checkout Session for a locked quote when Phase 2 is enabled; returns stripe_checkout_url. Call after agent_checkout_quote.",
            "tags": [
                "checkout",
                "stripe"
            ]
        },
        {
            "id": "agent_checkout_status",
            "name": "agent_checkout_status",
            "description": "Poll payment status for a quote (syncs Stripe when a session exists). Call after prepare/pay to confirm payment.",
            "tags": [
                "checkout"
            ]
        },
        {
            "id": "agent_checkout_pay",
            "name": "agent_checkout_pay",
            "description": "Pay a locked quote with a Stripe Shared Payment Granted Token (ACP Phase 3, spt_…). Call only when the client supplies an SPT.",
            "tags": [
                "checkout",
                "acp"
            ]
        },
        {
            "id": "agent_checkout_fulfill",
            "name": "agent_checkout_fulfill",
            "description": "Create the order from a paid quote. Agents typically get login-required; prefer checkout_url browser handoff for Phase 1.",
            "tags": [
                "checkout"
            ]
        }
    ]
}