AgentBookable

Find local services, check live availability, and book real appointments with consent.

使うべきか

品質と安全性

A
説明の品質
100%
スキーマの完全性
91%
命名の品質
98%
ポイズニングのリスク
80%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded stringget_business 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~2,052トークン数(ツール定義)
~1.6 KB一般的なレスポンスサイズ
注意への影響は中程度(128k コンテキストの 1.60%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "mcp": {
      "url": "https://agentbookable.com/mcp"
    }
  }
}

リモートエンドポイント

https://agentbookable.com/mcpstreamable-http

できること

ツール一覧

ツール(9)

🟢 読み取り専用🟡 書き込み🔴 削除⚪ 不明
🟢find_businesses(query, category, city, service, latitude, ...)

Search the AgentBookable registry for businesses that accept AI bookings. Search by free text, category, city, service name or geo radius. ALWAYS start here — the results include capability flags and _links telling you the exact next endpoints.

入力スキーマ

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free text on name/category/description/services, e.g. 'hairdresser'"
    },
    "category": {
      "type": "string"
    },
    "city": {
      "type": "string",
      "description": "e.g. 'Civray'"
    },
    "service": {
      "type": "string",
      "description": "Service name, e.g. 'Haircut'"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "radiusKm": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_business(businessId)

Get one business's record by id (ab_bus_*) or slug. Includes capabilities (availability/booking/reschedule/cancellation/payment) — NEVER promise an action whose flag is false — plus _links to the service list, availability endpoint and booking flow, and per-service bookingRequirements (e.g. whether customer phone is required).

入力スキーマ

{
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string",
      "description": "ab_bus_* id or public slug, e.g. 'agentbookable-demo'"
    }
  },
  "required": [
    "businessId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_services(businessId)

List the services a business has opened to AI booking. Each service has a durationMinutes and bookingRequirements telling you what customer details to collect (name/email/phone) BEFORE booking.

入力スキーマ

{
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string",
      "description": "ab_bus_* id or slug"
    }
  },
  "required": [
    "businessId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_availability(businessId, serviceId, from, to)

Find LIVE availability for a service. Always call this immediately before create_booking — slots are temporary (~60s) and revalidated at booking. Pass an ISO-8601 window; use a slot id from the result when booking.

入力スキーマ

{
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string"
    },
    "serviceId": {
      "type": "string"
    },
    "from": {
      "type": "string",
      "description": "ISO-8601 window start, e.g. 2026-09-01T00:00:00Z"
    },
    "to": {
      "type": "string",
      "description": "ISO-8601 window end"
    }
  },
  "required": [
    "businessId",
    "serviceId",
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_booking(businessId, serviceId, slotId, slot, customer, ...)

Create a REAL appointment. CONSEQUENCEFUL: only after the user has explicitly chosen a slot and authorized the booking in their own words. Flow: (1) check the service's bookingRequirements and collect any required customer details (e.g. phone); (2) create a mandate via the create_mandate tool with the user's exact instruction; (3) call this tool with the mandateRef. The mandate is single-use and expires in 15 minutes. On SLOT_NO_LONGER_AVAILABLE offer the returned alternatives — never rebook unilaterally.

入力スキーマ

{
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string"
    },
    "serviceId": {
      "type": "string"
    },
    "slotId": {
      "type": "string",
      "description": "Slot id from get_availability (preferred)"
    },
    "slot": {
      "type": "object",
      "properties": {
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "staffId": {
          "type": "string"
        }
      },
      "required": [
        "start",
        "end"
      ],
      "additionalProperties": false
    },
    "customer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string",
          "description": "Required when the service's bookingRequirements.phone is 'required'"
        },
        "timezone": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "mandateRef": {
      "type": "string",
      "description": "From create_mandate (or create_mandate_for_draft) — records the user's authorization"
    },
    "draftId": {
      "type": "string",
      "description": "Booking draft the user consented to (from prepare_booking). When given, the request must match the draft exactly or booking fails with CONSENT_DRAFT_MISMATCH."
    },
    "idempotencyKey": {
      "type": "string",
      "description": "Stable key; safe retries return the original booking"
    }
  },
  "required": [
    "businessId",
    "serviceId",
    "customer",
    "mandateRef"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢prepare_booking(businessId, serviceId, slotId, slot, customer, ...)

Prepare a booking draft: the concrete proposal (business, service, time, customer) to show the user. Validates live availability and customer requirements — if requirements are missing you get MISSING_CUSTOMER_REQUIREMENT: ask the user for those details first, then call again. Show the returned draft to the user as the final proposal (business, service, duration, date/time), then obtain explicit affirmative consent. The draft expires after 30 minutes; consent binds to this exact proposal.

入力スキーマ

{
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string"
    },
    "serviceId": {
      "type": "string"
    },
    "slotId": {
      "type": "string",
      "description": "Slot id from get_availability (preferred)"
    },
    "slot": {
      "type": "object",
      "properties": {
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "staffId": {
          "type": "string"
        }
      },
      "required": [
        "start",
        "end"
      ],
      "additionalProperties": false
    },
    "customer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "timezone": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "actorRef": {
      "type": "string",
      "description": "Your agent/session identifier for the audit trail"
    }
  },
  "required": [
    "businessId",
    "serviceId",
    "customer",
    "actorRef"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_mandate_for_draft(actorRef, draftId, consent)

After the user explicitly agrees to the exact proposal in the draft (an affirmative reply such as 'yes, book it' — the user having already seen business, service, date and time), assert consent here to get a single-use mandate bound to that draft. consentObtained must be true; this assertion is audited. If anything consequential changes (different time, service or business), prepare a NEW draft and get fresh consent.

入力スキーマ

{
  "type": "object",
  "properties": {
    "actorRef": {
      "type": "string",
      "description": "Your agent/session identifier, recorded in the audit trail"
    },
    "draftId": {
      "type": "string",
      "description": "The draft the user consented to (from prepare_booking)"
    },
    "consent": {
      "type": "object",
      "properties": {
        "consentObtained": {
          "type": "boolean",
          "const": true
        },
        "draftId": {
          "type": "string"
        },
        "consentedBy": {
          "type": "string",
          "description": "Who consented, e.g. 'the customer'"
        },
        "consentMethod": {
          "type": "string",
          "description": "How, e.g. 'chat reply: yes, book it' or 'spoken yes'"
        },
        "instruction": {
          "type": "string",
          "description": "The user's exact consenting words, for the audit trail"
        }
      },
      "required": [
        "consentObtained",
        "draftId"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "actorRef",
    "draftId",
    "consent"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_booking(bookingId, mandateRef)

Retrieve a booking by its AgentBookable id (bb_bkg_*). Requires the mandateRef issued for that booking (from create_booking / create_mandate). Provider identity is never returned.

入力スキーマ

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string"
    },
    "mandateRef": {
      "type": "string",
      "description": "Mandate ref returned when the booking was authorized/created"
    }
  },
  "required": [
    "bookingId",
    "mandateRef"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_mandate(actorRef, action, businessId, serviceId, instruction)

Legacy: record the user's authorization WITHOUT a booking draft. Prefer the draft flow: prepare_booking → show proposal → user agrees → create_mandate_for_draft → create_booking with draftId. The draft flow binds consent to the exact appointment the user saw.

入力スキーマ

{
  "type": "object",
  "properties": {
    "actorRef": {
      "type": "string",
      "description": "Your agent/session identifier, recorded in the audit trail"
    },
    "action": {
      "type": "string",
      "enum": [
        "create_booking",
        "reschedule_booking",
        "cancel_booking"
      ]
    },
    "businessId": {
      "type": "string",
      "description": "Bind the mandate to this business"
    },
    "serviceId": {
      "type": "string"
    },
    "instruction": {
      "type": "string",
      "description": "The user's exact words — never fabricate or paraphrase"
    }
  },
  "required": [
    "actorRef",
    "action",
    "businessId",
    "instruction"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 9 件
検証済みバージョンは記録されていませんツール 9 件