bnod

Find Austrian local service businesses, check free slots and request appointment bookings.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
95%
命名品質
100%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,343Token(工具定義)
~7.7 KB典型回應大小
中等的注意力影響(128k 上下文的 1.83%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "bnod-booking": {
      "url": "https://bnod.at/api/mcp"
    }
  }
}

遠端端點

https://bnod.at/api/mcpstreamable-http

它能做什麼

工具清單

工具(3)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢search_businesses(query, category, city, near, googlePlaceId, ...)

Find businesses on bnod (Austrian local services such as hairdressers, barbers, beauty, massage) that accept online bookings. Filter by free text, category, city, a lat/lng radius or a Google Place ID. Returns slugs, addresses with coordinates, services (id, name, duration, price in euro cents) and the profile URL. Flow: search_businesses -> get_available_slots -> confirm service, date, time, team member, name and e-mail with the user -> create_booking. Bookings are only requests until the customer clicks the confirmation link e-mailed to them.

輸入結構描述

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Free text matched against business name, category, description and service names, e.g. \"Haarschnitt\", \"barber\", \"massage\".",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "category": {
      "description": "Business category (English key or German label). Known categories: Hairdresser, Barbershop, Nail salon, Beauty & spa, Massage & wellness, Tattoo & piercing, Fitness & personal training, Health & clinic, Tutoring & lessons, Pet grooming, Other.",
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "city": {
      "description": "City or district as written in the (German) address, e.g. \"Wien\", \"1070\", \"Graz\".",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "near": {
      "description": "Only businesses with an address within radiusKm of this point, sorted by distance.",
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lng": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "radiusKm": {
          "default": 10,
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 200
        }
      },
      "required": [
        "lat",
        "lng"
      ]
    },
    "googlePlaceId": {
      "description": "Exact Google Place ID of the business location, if known.",
      "type": "string",
      "minLength": 1,
      "maxLength": 300
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "businesses": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "categoryLabel": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "profileUrl": {
            "type": "string"
          },
          "distanceKm": {
            "type": "number"
          },
          "addresses": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "lat": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "lng": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "label",
                "address",
                "lat",
                "lng"
              ],
              "additionalProperties": false
            }
          },
          "services": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "durationMin": {
                  "type": "number"
                },
                "priceCents": {
                  "type": "number"
                }
              },
              "required": [
                "id",
                "name",
                "durationMin",
                "priceCents"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slug",
          "name",
          "category",
          "categoryLabel",
          "description",
          "profileUrl",
          "addresses",
          "services"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "businesses"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_available_slots(slug, serviceId, dateFrom, dateTo, teamMemberId)

List free appointment start times for one service of a business, per day in the business timezone, with ISO 8601 start/end (including UTC offset) and the team members who can take each slot. Holidays, vacations, working hours and buffers are already applied. Ranges are capped to 14 days. service.questions lists booking questions to ask the user (pass answers to create_booking). Never invent slots: only book times returned here. Flow: search_businesses -> get_available_slots -> confirm service, date, time, team member, name and e-mail with the user -> create_booking. Bookings are only requests until the customer clicks the confirmation link e-mailed to them.

輸入結構描述

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Business slug from search_businesses."
    },
    "serviceId": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Service id from search_businesses."
    },
    "dateFrom": {
      "description": "First day (YYYY-MM-DD, business timezone). Defaults to today.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "dateTo": {
      "description": "Last day, inclusive. Defaults to dateFrom + 6 days; ranges are capped to 14 days.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "teamMemberId": {
      "description": "Only slots of this team member.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "slug",
    "serviceId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "business": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "timezone": {
          "type": "string"
        },
        "profileUrl": {
          "type": "string"
        }
      },
      "required": [
        "slug",
        "name",
        "timezone",
        "profileUrl"
      ],
      "additionalProperties": false
    },
    "service": {
      "type": "object",
      "properties": {
        "id": {
          "type": "number"
        },
        "name": {
          "type": "string"
        },
        "durationMin": {
          "type": "number"
        },
        "priceCents": {
          "type": "number"
        },
        "questions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "required": {
                "type": "boolean"
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "value",
                    "label"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "label",
              "type",
              "required",
              "options"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "id",
        "name",
        "durationMin",
        "priceCents",
        "questions"
      ],
      "additionalProperties": false
    },
    "teamMembers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "role"
        ],
        "additionalProperties": false
      }
    },
    "range": {
      "type": "object",
      "properties": {
        "from": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "truncated": {
          "type": "boolean"
        }
      },
      "required": [
        "from",
        "to",
        "truncated"
      ],
      "additionalProperties": false
    },
    "days": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "slots": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "time": {
                  "type": "string"
                },
                "start": {
                  "type": "string"
                },
                "end": {
                  "type": "string"
                },
                "teamMembers": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "number"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "time",
                "start",
                "end",
                "teamMembers"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "date",
          "slots"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "business",
    "service",
    "teamMembers",
    "range",
    "days"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟡create_booking(slug, serviceId, teamMemberId, date, time, ...)

Create a booking request for a slot returned by get_available_slots. Only call after the user explicitly confirmed the service, date, time and their name and e-mail. The booking is created as "pending" and the slot is held for 30 minutes; the customer must click the confirmation link sent to their e-mail, otherwise it expires. After that the business's own confirmation policy applies (instant or manual approval). Tell the user to check their inbox.

輸入結構描述

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Business slug from search_businesses."
    },
    "serviceId": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Service id from search_businesses."
    },
    "teamMemberId": {
      "description": "Team member id from get_available_slots. Omit to let bnod pick a free team member.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Slot date (YYYY-MM-DD) exactly as returned by get_available_slots."
    },
    "time": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Slot start time (HH:MM, business timezone) exactly as returned by get_available_slots."
    },
    "customerName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Full name of the customer."
    },
    "customerEmail": {
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Customer e-mail. The customer must click the confirmation link sent to this address."
    },
    "customerPhone": {
      "type": "string",
      "maxLength": 40
    },
    "notes": {
      "description": "Optional note for the business.",
      "type": "string",
      "maxLength": 1000
    },
    "answers": {
      "description": "Answers to service booking questions, if the service has any.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "questionId": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "answer": {
            "type": "string",
            "maxLength": 1000
          }
        },
        "required": [
          "questionId",
          "answer"
        ]
      }
    }
  },
  "required": [
    "slug",
    "serviceId",
    "date",
    "time",
    "customerName",
    "customerEmail"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "appointmentId": {
      "type": "number"
    },
    "status": {
      "type": "string",
      "const": "pending"
    },
    "confirmationRequired": {
      "type": "boolean",
      "const": true
    },
    "confirmationExpiresAt": {
      "type": "string"
    },
    "business": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "profileUrl": {
          "type": "string"
        }
      },
      "required": [
        "slug",
        "name",
        "profileUrl"
      ],
      "additionalProperties": false
    },
    "service": {
      "type": "object",
      "properties": {
        "id": {
          "type": [
            "number",
            "null"
          ]
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "name"
      ],
      "additionalProperties": false
    },
    "teamMember": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "time": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "appointmentId",
    "status",
    "confirmationRequired",
    "confirmationExpiresAt",
    "business",
    "service",
    "teamMember",
    "date",
    "time",
    "message"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本3 個工具