Appointment Booking

Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
81%
Calidad de los nombres
96%
Riesgo de envenenamiento
100%
Coincidencia de permisos
90%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'import_booking_url' suggests web access but openWorldHint=falseen import_booking_url

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~1,818Tokens (definiciones de herramientas)
~1.2 KBTamaño de respuesta típico
Impacto moderado en la atención (1.42% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "appointment-booking": {
      "url": "https://hatchloop.dev/mcp/appointment-booking"
    }
  }
}

Puntos de conexión remotos

https://hatchloop.dev/mcp/appointment-bookingstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (9)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢find_business(vertical, location, capability, price_band, availability_window, ...)

Given criteria (vertical, location, capability, price band, availability window), return ranked candidate businesses from our supply network. THE NETWORK IS SMALL AND STILL MOSTLY SAMPLE DATA: entries that are not real are named [DEMO] and flagged is_demo - check that field before acting on a result. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "vertical": {
      "type": "string",
      "enum": [
        "personal_services",
        "home_services",
        "professional_services"
      ]
    },
    "location": {
      "type": "object",
      "required": [
        "zip_or_city"
      ],
      "properties": {
        "zip_or_city": {
          "type": "string"
        },
        "radius_miles": {
          "type": "number",
          "minimum": 0,
          "description": "Accepted but NOT applied - no coordinates exist, so results are not restricted to this radius. Disclosed back as radius_miles_applied: false."
        }
      },
      "description": "Where to search. Matched against the business's city, state and ZIP as text -…"
    },
    "capability": {
      "type": "string",
      "description": "Specific service capability required, e.g. 'haircut', 'plumbing',…"
    },
    "price_band": {
      "type": "object",
      "properties": {
        "max_usd": {
          "type": "number"
        }
      }
    },
    "availability_window": {
      "type": "object",
      "properties": {
        "start_iso": {
          "type": "string",
          "format": "date-time"
        },
        "end_iso": {
          "type": "string",
          "format": "date-time"
        }
      },
      "description": "Accepted but NOT APPLIED - it does not narrow results. We do not hold live…"
    },
    "max_results": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1
    }
  },
  "required": [
    "vertical",
    "location"
  ]
}
🟢verify_business(smb_id, capability_to_verify)

Look up what we know about a business in our supply network: its contact channels, capabilities, and when the record was last verified. This is a DIRECTORY LOOKUP - it does not contact the business. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "smb_id": {
      "type": "string"
    },
    "capability_to_verify": {
      "type": "string"
    }
  },
  "required": [
    "smb_id"
  ]
}
🔴schedule_appointment(smb_id, action, service, customer, requested_time, ...)

Check availability, book, or cancel via Cal.com. Only completes when the SMB's imported booking link is bound to this deployment's ONE connected Cal.com account; otherwise fails honestly (booking_destination_unmapped) with no charge. No working booking path exists yet for non-Cal.com platforms (voice AI, web form) — those SMBs fail honestly instead of a fabricated confirmation. [from $0.15/call, variable] [async→get_outcome]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "smb_id": {
      "type": "string"
    },
    "action": {
      "type": "string",
      "enum": [
        "book",
        "cancel",
        "check_availability"
      ]
    },
    "service": {
      "type": "string"
    },
    "customer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      }
    },
    "requested_time": {
      "type": "object",
      "properties": {
        "preferred_iso": {
          "type": "string",
          "format": "date-time"
        },
        "window_start_iso": {
          "type": "string",
          "format": "date-time"
        },
        "window_end_iso": {
          "type": "string",
          "format": "date-time"
        },
        "duration_minutes": {
          "type": "integer"
        }
      }
    },
    "existing_appointment_id": {
      "type": "string",
      "description": "Required for cancel"
    },
    "notes": {
      "type": "string"
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
    }
  },
  "required": [
    "smb_id",
    "action"
  ]
}
🟢get_status(operation_id)

Query the current state of any in-flight async operation by operation_id. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟢get_outcome(operation_id)

Retrieve the final OutcomeReceipt for a completed operation. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟢preview_cost(operation, params)

Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Returns the exact price when it is fixed, and a min/max range when the cost depends on channel or outcome. It does not promise an accuracy percentage - check cost_range. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string"
    },
    "params": {
      "type": "object",
      "description": "The same request body you would pass to the operation"
    }
  },
  "required": [
    "operation",
    "params"
  ]
}
🟢self_test

Service health probe: runs 6 internal checks and reports how many passed. Confirms the server is up and responding - it does NOT probe each tool individually. Use to verify connectivity before production use. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢check_booking_link(url)

Free, instant pre-flight check for a booking URL. Classifies which booking platform a URL belongs to and tells you whether import_booking_url will accept it, WITHOUT fetching the page or spending money. Returns the platform, the exact smb_id import_booking_url would assign, the channels the booking will route through, and the inferred country. Use it to de-risk a paid booking BEFORE calling import_booking_url + schedule_appointment. [free, no key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Full http(s) URL to classify, e.g. 'https://cal.com/jane' or…"
    }
  },
  "required": [
    "url"
  ]
}
🟡import_booking_url(booking_url, business_name, vertical, country_code, contact_phone, ...)

Turn a public booking URL into a callable smb_id for send_message and capture_lead. But schedule_appointment only completes on Cal.com bound to our one connected account — the other 11 always fail schedule_appointment honestly, uncharged. Detects 12 platforms (Cal.com, Calendly, Doctolib, Booksy, Fresha, OpenTable, Setmore, Square, Acuity, Schedulista, Squarespace, BookMyCity). Idempotent — calling twice returns the same smb_id. [free, requires key]

Esquema de entrada

{
  "type": "object",
  "properties": {
    "booking_url": {
      "type": "string",
      "format": "uri",
      "description": "Full URL the user supplied. Must point at one of the 12 supported booking…"
    },
    "business_name": {
      "type": "string",
      "description": "If omitted, auto-extracted from the page's <title> or og:title."
    },
    "vertical": {
      "type": "string",
      "enum": [
        "personal_services",
        "home_services",
        "professional_services",
        "restaurants",
        "retail",
        "healthcare",
        "fitness"
      ],
      "description": "If omitted, inferred from the booking platform."
    },
    "country_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 (e.g. 'US', 'FR'); routes compliance on later sends."
    },
    "contact_phone": {
      "type": "string",
      "description": "If omitted, the platform integration handles outreach."
    },
    "contact_email": {
      "type": "string"
    },
    "capabilities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Free-form capability tags (e.g., ['haircut','color','blowdry'])."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
    }
  },
  "required": [
    "booking_url"
  ]
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada9 herramientas
verificadoversión no registrada9 herramientas