Book ShesMyDogLady
Book with ShesMyDogLady: services, prices and open times. No key needed.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"shesmydoglady": {
"url": "https://book.enhancedint.com/shesmydoglady/mcp"
}
}
}Remote-Endpunkte
https://book.enhancedint.com/shesmydoglady/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (6)
🟢get_business
Read the business card: what the business is, the area it serves, its services (which are booked here, how long each visit holds, and what to do about the rest), what a booking needs (the customer's details, the dog's address and what to ask about the dogs, in booking.petCare), that every booking is a request the business approves, the limits and the cancel rule. Call it first.
Eingabe-Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢find_times(items, from, to, windows)
Find the start times that are open for one visit (a service from the card whose bookable is true), between two dates (at most 14 days). Each time's end includes the minutes the business takes to settle the dog in. Pass `windows` (the customer's free time from their calendar) to get only the starts that fit both calendars. Returns ISO 8601 times with offsets. Only open times are ever shown.
Eingabe-Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"description": "Exactly one visit. Each visit is booked on its own; add-ons the service takes go in answers.addons.",
"items": {
"type": "object",
"description": "The visit being booked: the `slug` of a service from the business card whose `bookable` is true.",
"properties": {
"slug": {
"type": "string",
"description": "The service's slug, from the card's services list.",
"minLength": 1,
"maxLength": 200
},
"quantity": {
"type": "integer",
"enum": [
1
],
"description": "1, or left out: one visit, however many dogs (they go in answers.dogs)."
}
},
"required": [
"slug"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 1
},
"from": {
"type": "string",
"format": "date",
"description": "First day, YYYY-MM-DD, in the business's time zone (the card names it). Not in the past."
},
"to": {
"type": "string",
"format": "date",
"description": "Last day, YYYY-MM-DD. At most 14 days from `from`, counting both, and at most 60 days from today."
},
"windows": {
"type": "array",
"description": "The customer's free time, as intervals with offsets. When given, only starts whose whole visit (its length plus its settling time) fits inside one window come back. Leave out to see every open start.",
"items": {
"description": "A stretch of time the customer is free, from their own calendar. Both ends are ISO 8601 with an offset (\"2026-10-12T09:00:00-07:00\" or \"...Z\"), and the end is after the start. Written either as {start, end} or as one ISO 8601 interval string \"start/end\".",
"oneOf": [
{
"type": "object",
"properties": {
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})$"
},
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})$"
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})$",
"description": "An ISO 8601 interval: \"2026-10-12T09:00:00-07:00/2026-10-12T17:00:00-07:00\"."
}
]
},
"maxItems": 50
}
},
"required": [
"items",
"from",
"to"
],
"description": "Ask for the start times that are open for one visit. Only the business's own open times come back, narrowed to the customer's free windows when given.",
"additionalProperties": false,
"examples": [
{
"items": [
{
"slug": "meet-greet"
}
],
"from": "2026-10-11",
"to": "2026-10-17",
"windows": [
{
"start": "2026-10-11T09:00:00-07:00",
"end": "2026-10-11T17:00:00-07:00"
}
]
}
]
}🟢check_address(address)
Check the dog's address (its home, or where the dog is picked up) before booking. Send it as one line, as fields, or as a place_id saved from an earlier check. The answer says whether Google confirmed it (`verdict`), the address to book with (send it as answers.address), its place_id (save both for this customer), and whether it is inside the area the business serves. Book when `bookable` is true; when the verdict is `confirm`, read the corrected address to the customer first. `next` says what to do otherwise.
Eingabe-Schema
{
"type": "object",
"properties": {
"address": {
"oneOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "The address as one line: \"123 Main St, Poway, CA 92064\"."
},
{
"type": "object",
"description": "The address as fields, in any one of three spellings: schema.org PostalAddress (streetAddress, extendedAddress, addressLocality, addressRegion, postalCode, addressCountry), the same in snake_case (street_address, extended_address, address_locality, address_region, postal_code, address_country), or line_one, line_two, city, state, postal_code, country. A street is required. Or send `place_id`, a Google Place ID saved from an earlier check of this customer's address, with the apartment or unit as extended_address if there is one.",
"properties": {
"street_address": {
"type": "string",
"maxLength": 200
},
"extended_address": {
"type": "string",
"maxLength": 200,
"description": "Apartment, suite or unit."
},
"address_locality": {
"type": "string",
"maxLength": 200,
"description": "The city."
},
"address_region": {
"type": "string",
"maxLength": 200,
"description": "The state, as its two-letter code."
},
"postal_code": {
"type": "string",
"maxLength": 200
},
"address_country": {
"type": "string",
"maxLength": 200,
"description": "A two-letter country code; US when left out."
},
"place_id": {
"type": "string",
"maxLength": 300,
"description": "A Google Place ID from an earlier check, alone."
}
},
"additionalProperties": true
}
]
}
},
"required": [
"address"
],
"description": "Check a service address before booking a business that comes to the customer: whether Google confirms it, the address to book with, and whether it is inside the area the business serves.",
"additionalProperties": false,
"examples": [
{
"address": "123 Main St, Poway, CA 92064"
},
{
"address": {
"street_address": "123 Main St",
"address_locality": "Poway",
"address_region": "CA",
"postal_code": "92064"
}
}
]
}🔴book(items, start, customer, answers, agent, ...)
Book one visit for the customer, as a request the business approves (or, for a business that takes its bookings by email, confirms with the customer itself); the answer says what happens next and gives a `manage.token` to check or cancel it later. The customer is emailed. A new customer books the Meet & Greet first. Ask the customer about the dogs and answer from what they said (booking.petCare on the card): never guess. Confirm the visit, the time and the customer's details with the customer before calling it. `idempotency_key` is required: choose a new random one for each booking (a UUID without hyphens) and send the same one to retry after a timeout.
Eingabe-Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"description": "Exactly one visit. Each visit is booked on its own; add-ons the service takes go in answers.addons.",
"items": {
"type": "object",
"description": "The visit being booked: the `slug` of a service from the business card whose `bookable` is true.",
"properties": {
"slug": {
"type": "string",
"description": "The service's slug, from the card's services list.",
"minLength": 1,
"maxLength": 200
},
"quantity": {
"type": "integer",
"enum": [
1
],
"description": "1, or left out: one visit, however many dogs (they go in answers.dogs)."
}
},
"required": [
"slug"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 1
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::00(?:\\.0+)?)?(?:Z|[+-]\\d{2}:\\d{2})$",
"description": "A start time from `times`, ISO 8601 with an offset, on a whole minute: seconds, when written, are 00 (\"2026-10-12T10:00:00-07:00\" or \"2026-10-12T17:00Z\"). It is checked again, and refused with `time_not_open` if it is no longer open."
},
"customer": {
"type": "object",
"description": "The person the booking is for. They are emailed that the request was received, and again when the business answers.",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Full name."
},
"email": {
"type": "string",
"format": "email",
"maxLength": 320
},
"phone": {
"type": "string",
"maxLength": 30,
"description": "A phone number the business can call: 10 to 15 digits (\"(619) 555-0123\")."
}
},
"required": [
"name",
"email",
"phone"
],
"additionalProperties": false
},
"answers": {
"type": "object",
"description": "What the customer told you about the visit and the dogs. The card's booking.petCare.answers says each key's exact format. Never guess: a question nobody asked is null.",
"properties": {
"address": {
"type": "string",
"minLength": 5,
"maxLength": 500,
"description": "The dog's home address, or where the dog is picked up, as one line. Check it first (POST /agent/address, the MCP tool check_address) and send the `address` it answers."
},
"address_confirmed": {
"type": "boolean",
"description": "True when Google could not confirm the address, or corrected it, and the customer says theirs is right as they gave it: it is filed as given, for the business to check."
},
"claims_prior_meet_greet": {
"type": "boolean",
"default": false,
"description": "True only when the customer says they have already had a Meet & Greet with this business. A customer who has not books the Meet & Greet first: any other service is refused with `meet_greet_required`."
},
"behavior": {
"type": "object",
"description": "Whether any of the dogs has shown reactivity (to other dogs, to people, on the leash) or has a bite history. Asked: disclosed true and has_concerns the answer. Not asked: disclosed false and has_concerns null.",
"properties": {
"disclosed": {
"type": "boolean"
},
"has_concerns": {
"type": [
"boolean",
"null"
]
}
},
"required": [
"disclosed",
"has_concerns"
],
"additionalProperties": false
},
"dogs": {
"type": "array",
"items": {
"type": "object",
"description": "One dog, with every key present. A yes-or-no question nobody asked is null, never false.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "The dog's name; each dog's own."
},
"breed": {
"type": [
"string",
"null"
],
"maxLength": 100
},
"age_text": {
"type": [
"string",
"null"
],
"maxLength": 40,
"description": "As the customer says it (\"3 years\", \"8 months\")."
},
"behavior_flags": {
"type": "array",
"items": {
"type": "string",
"enum": [
"dog_reactive",
"people_reactive",
"leash_reactive",
"fearful",
"resource_guarding",
"separation_anxiety",
"bite_history",
"escape_risk"
]
},
"uniqueItems": true,
"maxItems": 8,
"description": "What the customer says about this dog, as keys of the card's booking.petCare.behaviorFlags; [] for none. A flag is read even when behavior.has_concerns is false."
},
"behavior_notes": {
"type": [
"string",
"null"
],
"maxLength": 2000,
"description": "The customer's own words about behaviour."
},
"medical_notes": {
"type": [
"string",
"null"
],
"maxLength": 2000,
"description": "The customer's own words about health and medication."
},
"vaccinated_self_reported": {
"type": [
"boolean",
"null"
],
"description": "What the customer says; null: not asked."
},
"crate_trained": {
"type": [
"boolean",
"null"
],
"description": "null: not asked."
},
"good_with_dogs": {
"type": [
"boolean",
"null"
],
"description": "null: not asked."
}
},
"required": [
"name",
"breed",
"age_text",
"behavior_flags",
"behavior_notes",
"medical_notes",
"vaccinated_self_reported",
"crate_trained",
"good_with_dogs"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 6,
"description": "The dogs, 1 to 6 (fewer where a service says so)."
},
"interested_services": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"uniqueItems": true,
"description": "On the Meet & Greet only, and required there: the services wanted afterwards, by family (the card's booking.petCare.interestedServices)."
},
"recurrence": {
"type": "object",
"description": "Optional, on a service that can repeat (a walk): a weekly preference the business reads. Nothing repeats on its own.",
"properties": {
"kind": {
"type": "string",
"enum": [
"none",
"weekly"
]
},
"days": {
"type": "array",
"items": {
"type": "string",
"enum": [
"sun",
"mon",
"tue",
"wed",
"thu",
"fri",
"sat"
]
},
"minItems": 1,
"uniqueItems": true
},
"note": {
"type": [
"string",
"null"
],
"maxLength": 500
}
},
"required": [
"kind"
],
"additionalProperties": false
},
"addons": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 5,
"uniqueItems": true,
"description": "Optional: add-ons offered with the service (its note on the card says which). The extra dog is added by the business, never sent."
}
},
"required": [
"address",
"behavior",
"dogs"
],
"additionalProperties": false
},
"agent": {
"type": "object",
"description": "Who is booking, so the business sees that an agent made the booking and which one.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "What the agent is called (\"Muse\", \"ChatGPT\")."
},
"acting_for": {
"type": "string",
"maxLength": 120,
"description": "Optional: the person it acts for, if that is not the customer."
}
},
"required": [
"name"
],
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{32,255}$",
"minLength": 32,
"maxLength": 255,
"description": "Required. A key you choose, new for each booking: 32 to 255 letters, digits, dashes or underscores, and RANDOM, never a counter, a word or a pattern (a UUID without hyphens is right; a key with fewer than 8 distinct characters is refused). Calling book again with the same key and customer email answers the first booking again, with the same manage token, instead of making a second one: use it to retry safely after a timeout."
}
},
"required": [
"items",
"start",
"customer",
"answers",
"agent",
"idempotency_key"
],
"description": "Book one visit. Every booking is a request the business approves. The same checks as the business's own booking form: a real open start, the customer's details and what they said about the dogs.",
"additionalProperties": false,
"examples": [
{
"items": [
{
"slug": "meet-greet"
}
],
"start": "2026-10-11T10:00:00-07:00",
"customer": {
"name": "Ada Lovelace",
"email": "[email protected]",
"phone": "(619) 555-0123"
},
"answers": {
"address": "123 Main St, Poway, CA 92064",
"claims_prior_meet_greet": false,
"behavior": {
"disclosed": true,
"has_concerns": false
},
"dogs": [
{
"name": "Biscuit",
"breed": "Labrador",
"age_text": "3 years",
"behavior_flags": [],
"behavior_notes": null,
"medical_notes": null,
"vaccinated_self_reported": true,
"crate_trained": null,
"good_with_dogs": true
}
],
"interested_services": [
"bark-n-stroll"
]
},
"agent": {
"name": "Your agent name"
},
"idempotency_key": "replace-this-with-a-fresh-random-key-0000"
}
]
}🟢get_booking(reference, token)
Check a booking made through this door: whether it is requested, confirmed, declined or cancelled, and whether it can still be cancelled here.
Eingabe-Schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "The booking's `reference`, from book."
},
"token": {
"type": "string",
"description": "The booking's `manage.token`, from book."
}
},
"required": [
"reference",
"token"
],
"additionalProperties": false
}🔴cancel_booking(reference, token)
Cancel a booking made through this door: withdraws a request still waiting. A booking the business has approved must be changed with the business directly (the answer says how). Ask the customer first.
Eingabe-Schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "The booking's `reference`, from book."
},
"token": {
"type": "string",
"description": "The booking's `manage.token`, from book."
}
},
"required": [
"reference",
"token"
],
"additionalProperties": false
}Community
Nachweis