{
  "name": "funnelpoint",
  "version": "0.3.0",
  "transport": "MCP over streamable HTTP (stateless; POST JSON-RPC with Accept: application/json, text/event-stream)",
  "endpoint": "https://funnelpointpartners.com/mcp",
  "description": "Tells an agent whether a local business can be found, understood and booked, what to expect on the way, and records how each attempt went.",
  "rungs": {
    "0": "Not found",
    "1": "Found, little to recommend on",
    "2": "Recommended, then on your own",
    "3": "Booking starts, a person must finish",
    "4": "Bookable end to end"
  },
  "tools": [
    {
      "name": "find_businesses",
      "description": "Find local businesses by category and area, with how far an assistant can get with each (rung 0 to 4) and the facts it can rely on.",
      "input": {
        "category": "string, required",
        "area": "string, optional",
        "bookable_only": "boolean, optional",
        "min_rung": "integer 0-4, optional",
        "needs_price": "boolean, optional",
        "needs_hours": "boolean, optional",
        "limit": "integer 1-50, optional",
        "open_saturday": "boolean, optional",
        "live_availability": "boolean, optional: only businesses whose open times can be read live"
      },
      "output": {
        "count": "integer",
        "results": [
          {
            "id": "string (website host)",
            "name": "string",
            "address": "string",
            "phone": "string",
            "website": "string",
            "rating": "number|null",
            "reviews": "integer|null",
            "rung": "integer 0-4",
            "rung_label": "string",
            "booking_method": "online|online-unverified|request-form|login|phone|blocked|unknown|none",
            "prices_as_text": "boolean",
            "hours_in_text": "boolean",
            "last_scanned": "ISO date",
            "verified": "boolean: a person checked the booking page, not only the scanner",
            "live_availability": "boolean"
          }
        ]
      }
    },
    {
      "name": "get_business",
      "description": "Everything FunnelPoint knows about one business: the four checks, the rung, readable facts, the booking path, notes from the last scan.",
      "input": {
        "id": "string, required"
      }
    },
    {
      "name": "get_booking_path",
      "description": "The best way to book or order from this business and what an automated visitor met there last time.",
      "input": {
        "id": "string, required"
      },
      "output": {
        "method": "online|online-unverified|request-form|login|phone|blocked|unknown|none",
        "url": "string|null",
        "captcha": "boolean",
        "expect": "string",
        "phone": "string",
        "rung": "integer",
        "verified": "boolean",
        "vendor": "string, booking vendor when known",
        "first_available": "object|null: the next open appointment, when live_availability is true"
      }
    },
    {
      "name": "get_availability",
      "description": "Real open appointment times read live from the business's own online scheduler, for businesses with live_availability true (today: practices on the Flex scheduler). Returns the first opening and, with day or time preferences, other options, plus how to finish the booking on the scheduler page.",
      "input": {
        "id": "string, required",
        "new_patient": "boolean, optional, default true",
        "visit": "string, optional, e.g. cleaning, emergency, kids cleaning; omitted means an adult or all-ages exam or cleaning",
        "days": "array of day names, optional",
        "time_from": "HH:MM, optional",
        "time_to": "HH:MM, optional"
      },
      "output": {
        "supported": "boolean",
        "first_available": {
          "date": "YYYY-MM-DD",
          "day": "string",
          "start": "HH:MM",
          "end": "HH:MM",
          "appointment_type": "string",
          "length_minutes": "integer"
        },
        "options": "array of the same shape, when preferences were given",
        "appointment_types": "array",
        "phone_verification_required": "boolean: the scheduler texts the patient a code before confirming",
        "book_url": "string",
        "how_to_finish": "string"
      }
    },
    {
      "name": "report_outcome",
      "description": "Record what happened when you tried to do something with this business. One call per attempt. This is the agent test receipt.",
      "input": {
        "id": "string, required",
        "agent": "string, required",
        "task": "find|quote|book|order|pay|cancel|support",
        "result": "Passed|Partial|Blocked",
        "stopped_at": "string, optional",
        "matched_published": "boolean, optional",
        "channel": "web|api|protocol|phone|email, optional",
        "latency_ms": "integer, optional",
        "note": "string ≤500, optional"
      }
    }
  ],
  "data": "Dated automated scans, hand checks of booking pages, hand-run agent tests, and live reads of online schedulers where available. Rung 4 means a visitor could see real appointment times without a CAPTCHA on the check date. Not a certification.",
  "access": "Read access to the shared record is granted to agents that report outcomes. One report opens the door.",
  "contact": "hello@funnelpointpartners.com",
  "health": "https://funnelpointpartners.com/mcp/health"
}
