bnod

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

¿Debería usar esto?

Calidad y seguridad

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

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

Costo de contexto

~2,343Tokens (definiciones de herramientas)
~7.7 KBTamaño de respuesta típico
Impacto moderado en la atención (1.83% 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": {
    "bnod-booking": {
      "url": "https://bnod.at/api/mcp"
    }
  }
}

Puntos de conexión remotos

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

Qué puede hacer

Inventario de herramientas

Herramientas (3)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada3 herramientas