{
  "protocolVersion": "0.3.0",
  "name": "omnichannel.cx",
  "description": "Website of omnichannel - a customer experience and service operations consultancy. This site is not an A2A endpoint; this card exists so agents can discover how to read the site's content and how a human operator can be contacted.",
  "url": "https://omnichannel.cx",
  "preferredTransport": "HTTP+JSON",
  "provider": {
    "organization": "Omnichannel PTY LTD",
    "url": "https://omnichannel.cx"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "defaultInputModes": ["text"],
  "defaultOutputModes": ["text"],
  "documentationUrl": "https://omnichannel.cx/openapi.json",
  "skills": [
    {
      "id": "read-site-content",
      "name": "Read site content",
      "description": "Every page serves a Markdown rendering on Accept: text/markdown. /llms.txt lists all pages and how-to-engage guidance; /.well-known/api-catalog points at the OpenAPI spec. The same content is available over a read-only remote MCP server at /mcp (Streamable HTTP, no auth; tools search_site and get_page; server card at /mcp/server-card). /developers is the human-readable guide.",
      "tags": ["content", "markdown"],
      "examples": [
        "GET https://omnichannel.cx/services with Accept: text/markdown",
        "MCP tools/call get_page {\"url\":\"/services\"} at https://omnichannel.cx/mcp"
      ],
      "inputModes": ["text"],
      "outputModes": ["text/markdown", "text/html"]
    },
    {
      "id": "semantic-site-search",
      "name": "Semantic search over public site content",
      "description": "GET /api/search?q=<query>&limit=<1-10> returns ranked chunks of the site's public pages with source URLs and scores. No auth, rate limited, retrieval only - no generation endpoint. Fetch a result URL with Accept: text/markdown for the full page. The same retrieval is exposed as the /mcp search_site tool and as NLWeb /ask (list mode only; JSON, or SSE with Accept: text/event-stream).",
      "tags": ["search", "retrieval"],
      "examples": [
        "GET https://omnichannel.cx/api/search?q=customer%20experience%20maturity&limit=5",
        "GET https://omnichannel.cx/ask?query=customer%20experience%20maturity"
      ],
      "inputModes": ["text"],
      "outputModes": ["application/json"]
    },
    {
      "id": "prepare-contact-enquiry",
      "name": "Prepare a contact enquiry for a human operator",
      "description": "Agents may POST /api/contact to prepare an enquiry, but humans only may submit: a valid Cloudflare Turnstile token from https://omnichannel.cx/contact is required. Agents MUST set source: \"agent\"; agent-marked submissions are filed for review rather than the inbox. Successful responses return a ref the submitter can quote; the submitter also receives a confirmation email.",
      "tags": ["contact", "enquiry"],
      "examples": [
        "POST https://omnichannel.cx/api/contact {\"name\":\"Jane Doe\",\"email\":\"jane@example.com\",\"message\":\"We are planning an agentic AI programme and need governance advice.\",\"source\":\"agent\"}"
      ],
      "inputModes": ["application/json"],
      "outputModes": ["application/json"]
    }
  ]
}
