Server definition
- Hash
- sha256:b5160aa3936218e59b120aa3545c6bc0c6dc095f5dd5d83dfc9607fec20b88c8
- What it is
- What a remote MCP server returned when asked what it offers: 10 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Check real-time availability for one specific restaurant within a date range. Returns all openings for that restaurant; it does not filter by time of day.\n\nUse when you already know which restaurant the user wants. If the user is browsing across multiple restaurants in a region or cuisine, use search_available_restaurants instead.\n\nUse the exact parameter names start_date, end_date, restaurant_id, num_people, daily_or_minutes, and by_menu_item. Including restaurant_id is recommended; omitting it queries all restaurants and returns a large response. If the user specifies a time preference, do not pass time parameters — receive all openings for the date range and filter the display.\n\nDate handling: if the user gives only month/day, use the current year, or next year if that date is already past.\n\nResponse: has_availability, summary, openings[], and alternative_openings[] (openings within ±3 days when the requested range has none). Each opening includes opening_id, date, time (JST), datetime_jst, seat_type (\"fixed\" or \"flexible\"), seat counts, course_id, course_name, and course_price. The response also includes guidance for the next step under usage_guidance.",
"inputSchema": {
"properties": {
"by_menu_item": {
"default": false,
"description": "Group availability by menu items",
"type": "boolean"
},
"daily_or_minutes": {
"default": "minutes",
"description": "Time granularity - \"daily\" for daily view or \"minutes\" for minute-level detail",
"enum": [
"daily",
"minutes"
],
"type": "string"
},
"end_date": {
"description": "End date in YYYY-MM-DD format",
"type": "string"
},
"num_people": {
"description": "Number of people/party size (optional)",
"minimum": 1,
"type": "number"
},
"restaurant_id": {
"description": "Specific restaurant ID (optional)",
"type": "number"
},
"start_date": {
"description": "Start date in YYYY-MM-DD format",
"type": "string"
}
},
"type": "object"
},
"name": "check_availability",
"outputSchema": null
},
{
"description": "Create a direct reservation for a specific available opening (opening_id required).\n\nUse after check_availability has returned an opening and the user has chosen which opening_id to book. If check_availability returned no openings, use create_reservation_request instead.\n\nFlow (summary — see resource tableall://flow/direct-reservation for full details):\n1. Call get_cancellation_policies and explain cancellation terms (include: the booking fee is non-refundable regardless of cancellation timing).\n2. Collect the user's email first; if the response returns USER_NOT_FOUND, collect full name, country, and phone, then call again.\n3. Show a summary (restaurant, date/time, guests, course, email) and confirm before calling with the final args. In this final confirmation, add a brief note that if the user has a coupon code they can provide it now (pass it as coupon_code); it can also be entered later on the payment page. Do not prompt for a coupon at earlier steps.\n\nSeat rules: for fixed seats, party_size must equal fixed_seats; for flexible seats, party_size must be within min_seats and max_seats.\n\nResponse: store data.access_token (required by get_reservation_status). If user.is_new_user is true, display the password_reset_url notice (24-hour validity, also emailed) before the payment_url. The payment_url is valid for 30 minutes and is also emailed.",
"inputSchema": {
"properties": {
"ai_client": {
"description": "AI client name. You MUST provide your AI model name (e.g., \"Claude\", \"Gemini\", \"GPT\", \"Copilot\").",
"type": "string"
},
"allergies": {
"description": "Allergy information",
"type": "string"
},
"country": {
"description": "Country code ISO 3166-1 alpha-2, e.g., \"JP\", \"US\" (required for new users or users with incomplete profile)",
"type": "string"
},
"coupon_code": {
"description": "Coupon code for discount (optional)",
"type": "string"
},
"course_id": {
"description": "Course external ID (required)",
"type": "string"
},
"dislikes": {
"description": "Food dislikes",
"type": "string"
},
"email": {
"description": "User email address (always required)",
"type": "string"
},
"first_name": {
"description": "User first name / 名 (required for new users or users with incomplete profile)",
"type": "string"
},
"last_name": {
"description": "User last name / 姓 (required for new users or users with incomplete profile)",
"type": "string"
},
"opening_id": {
"description": "Opening external ID from check_availability (required)",
"type": "string"
},
"party_size": {
"description": "Number of guests. Must match fixed_seats for fixed openings, or be within min/max range for flexible openings.",
"minimum": 1,
"type": "number"
},
"phone": {
"description": "Phone number without country code (required for new users or users with incomplete profile)",
"type": "string"
},
"phone_country_code": {
"description": "Phone country code, e.g., \"+81\" (required for new users or users with incomplete profile)",
"type": "string"
},
"preferences": {
"description": "Food preferences",
"type": "string"
},
"special_request": {
"description": "Special requests or notes for the restaurant",
"type": "string"
}
},
"required": [
"email",
"opening_id",
"course_id",
"ai_client"
],
"type": "object"
},
"name": "create_reservation",
"outputSchema": null
},
{
"description": "Submit a reservation request for a selected restaurant, dates, time range, and party size. Use after check_availability or search_available_restaurants has been run and the user confirms they want to submit a request.\n\nUse this when the user prefers dates or times other than the available openings, or when no openings were found and the user wants to request one. The user's use of the word \"request\" signals intent to try, not consent to skip the availability check — check availability and show the result first.\n\nFlow (summary — see resource tableall://flow/reservation-request for full details):\n1. Explain that the card is charged only if the restaurant confirms; the request can be cancelled before confirmation.\n2. Call get_cancellation_policies and explain it applies after confirmation (include the non-refundable booking fee notice).\n3. Confirm adults vs children count.\n4. Collect the user's email first; if the response returns USER_NOT_FOUND, collect full name, country, and phone, then call again.\n5. Summarize and confirm before calling with the final args. In this final confirmation, add a brief note that if the user has a coupon code they can provide it now (pass it as coupon_code); it can also be entered later on the payment page. Do not prompt for a coupon at earlier steps.\n\nDate handling: \"any day in [month]\" includes all days of that month; \"any day from X to Y\" includes every day in the range.\n\nResponse: store data.access_token (required by get_reservation_request_status). If user.is_new_user is true, display the password_reset_url notice (24-hour validity, also emailed) before the payment_url. The payment_url is for card registration only; a charge occurs only if the restaurant approves. Valid 30 minutes; also emailed.",
"inputSchema": {
"properties": {
"ai_client": {
"description": "AI client name. You MUST provide your AI model name (e.g., \"Claude\", \"Gemini\", \"GPT\", \"Copilot\").",
"type": "string"
},
"allergies": {
"description": "Allergy information",
"type": "string"
},
"comment": {
"description": "Additional comments (optional)",
"type": "string"
},
"country": {
"description": "Country code ISO 3166-1 alpha-2, e.g., \"JP\", \"US\" (required for new users or users with incomplete profile)",
"type": "string"
},
"coupon_code": {
"description": "Coupon code for discount (optional)",
"type": "string"
},
"course_id": {
"description": "Course external ID (required)",
"type": "string"
},
"dates": {
"description": "Preferred dates in YYYY-MM-DD format. Can specify multiple dates.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array"
},
"dislikes": {
"description": "Food dislikes",
"type": "string"
},
"email": {
"description": "User email address (always required)",
"type": "string"
},
"first_name": {
"description": "User first name / 名 (required for new users or users with incomplete profile)",
"type": "string"
},
"hotel_name": {
"description": "Hotel name (optional)",
"type": "string"
},
"last_name": {
"description": "User last name / 姓 (required for new users or users with incomplete profile)",
"type": "string"
},
"num_adults": {
"description": "Number of adults (required). If user only says total number of guests (e.g., \"3 people\"), treat all as adults.",
"minimum": 1,
"type": "number"
},
"num_children": {
"description": "Number of children (required). Default to 0 if user does not specify children count or only provides total guest count.",
"minimum": 0,
"type": "number"
},
"phone": {
"description": "Phone number without country code (required for new users or users with incomplete profile)",
"type": "string"
},
"phone_country_code": {
"description": "Phone country code, e.g., \"+81\" (required for new users or users with incomplete profile)",
"type": "string"
},
"preferences": {
"description": "Food preferences",
"type": "string"
},
"restaurant_id": {
"description": "Restaurant ID (required)",
"type": "number"
},
"special_request": {
"description": "Special requests or notes for the restaurant",
"type": "string"
},
"start_time_from": {
"description": "Preferred start time from, in HH:mm format (e.g., \"18:00\"). Japan Time (JST).",
"type": "string"
},
"start_time_to": {
"description": "Preferred start time to, in HH:mm format (e.g., \"20:00\"). Japan Time (JST).",
"type": "string"
}
},
"required": [
"email",
"restaurant_id",
"course_id",
"num_adults",
"num_children",
"dates",
"start_time_from",
"start_time_to",
"ai_client"
],
"type": "object"
},
"name": "create_reservation_request",
"outputSchema": null
},
{
"description": "Read-only: retrieve a restaurant's cancellation policy. This tool only reads policy data; it does not cancel or modify any reservation. Safe to call repeatedly.\n\nUse when the user asks about the cancellation policy, refund terms, or no-show fee, or before calling create_reservation or create_reservation_request.\n\nget_restaurant_details returns booking_rules and booking_tips, which describe when bookings open and how to book — not cancellation terms.\n\nReturns: cancel_policies (array of { days_before, penalty_percentage, description }), policy_type, message, booking_fee_note, and important_note. Display the booking_fee_note: the booking fee is non-refundable regardless of cancellation timing. For reservation requests, the policy applies after the request is confirmed by the restaurant.",
"inputSchema": {
"properties": {
"course_id": {
"description": "Course external ID (optional, for course-specific policies)",
"type": "string"
},
"restaurant_id": {
"description": "Restaurant ID to retrieve cancellation policies for",
"type": "number"
}
},
"required": [
"restaurant_id"
],
"type": "object"
},
"name": "get_cancellation_policies",
"outputSchema": null
},
{
"description": "Check the status of a reservation request by session ID.\n\nRequires the access_token that was returned in the create_reservation_request response.\nYou MUST have stored the access_token from the create response to use this tool.\nWithout a valid access_token, the API will return 403 Forbidden.\n\nIMPORTANT - PRICE DISPLAY:\nThe \"price\" field already INCLUDES the \"booking_fee\". Do NOT add them together.\nWhen displaying to the user, show: price (total) and booking_fee (included in price, non-refundable).\nExample: \"Total: ¥30,000 (includes ¥1,000 non-refundable booking fee)\"",
"inputSchema": {
"properties": {
"access_token": {
"description": "Access token returned from create_reservation_request response (data.access_token). Required for authorization.",
"type": "string"
},
"session_id": {
"description": "Reservation request session ID returned from create_reservation_request",
"type": "string"
}
},
"required": [
"session_id",
"access_token"
],
"type": "object"
},
"name": "get_reservation_request_status",
"outputSchema": null
},
{
"description": "Check the status of a reservation by session ID.\n\nRequires the access_token that was returned in the create_reservation response.\nYou MUST have stored the access_token from the create response to use this tool.\nWithout a valid access_token, the API will return 403 Forbidden.\n\nIMPORTANT - PRICE DISPLAY:\nThe \"price\" field already INCLUDES the \"booking_fee\". Do NOT add them together.\nWhen displaying to the user, show: price (total) and booking_fee (included in price, non-refundable).\nExample: \"Total: ¥30,000 (includes ¥1,000 non-refundable booking fee)\"",
"inputSchema": {
"properties": {
"access_token": {
"description": "Access token returned from create_reservation response (data.access_token). Required for authorization.",
"type": "string"
},
"session_id": {
"description": "Reservation session ID returned from create_reservation",
"type": "string"
}
},
"required": [
"session_id",
"access_token"
],
"type": "object"
},
"name": "get_reservation_status",
"outputSchema": null
},
{
"description": "Get the full profile of one specific restaurant: untrimmed description, booking_rules, booking_tips, address, operating_hours, seating, and starting price.\n\nUse when the user names a specific restaurant and wants its details, or when you have a restaurant_id and need fields that search_restaurants does not return.\n\nDoes not return menu or courses (use get_restaurant_menu), cancellation policy (use get_cancellation_policies), or real-time availability (use check_availability).\n\nstarting_price_display is preformatted (e.g., \"¥65,000〜\", booking fee included).",
"inputSchema": {
"properties": {
"restaurant_id": {
"description": "The unique ID of the restaurant",
"type": "number"
}
},
"required": [
"restaurant_id"
],
"type": "object"
},
"name": "get_restaurant_details",
"outputSchema": null
},
{
"description": "Get the menu for a specific restaurant: an array of course names and their prices.\n\nUse when the user asks about a specific restaurant's menu, courses, or course pricing.\n\nThis tool returns course names and prices only — not dish lists, course composition, number of pieces, or ingredients. For full course details, direct the user to the restaurant page (details_url in the response). The response itself returns this course content only; do not supplement it with assumptions.",
"inputSchema": {
"properties": {
"restaurant_id": {
"description": "The unique ID of the restaurant",
"type": "number"
}
},
"required": [
"restaurant_id"
],
"type": "object"
},
"name": "get_restaurant_menu",
"outputSchema": null
},
{
"description": "Search across multiple restaurants for availability within a date range. Returns restaurants that have openings, filterable by prefecture, area, genre, and party size.\n\nUse when the user does not yet have a specific restaurant in mind and is browsing or filtering by region or cuisine. If the user already has a specific restaurant, use check_availability instead.\n\nDate handling: if the user gives only month/day, use the current year, or next year if that date is already past. For a single date, search from 2 days before to 3 days after, unless the user asks for that exact date only.\n\nParameters: start_date and end_date are required (YYYY-MM-DD); prefecture, area, genre, num_people, limit, and offset are optional.\n\nEach restaurant entry includes basic info (name, cuisine, location, michelin stars, price_range, open_time, closed_days), starting_price_display (e.g., \"¥39,000〜\", booking fee included), and its available openings (date, time, seat type, course info). Pagination fields (limit, offset, has_more, total_restaurants) indicate whether more results exist; default limit is 20, max 100.\n\nThe results list only restaurants with confirmed openings for the given dates; other restaurants may show no openings yet still be bookable via a reservation request. When presenting the results — even when openings are found — add one brief line that if the user has a specific restaurant in mind that is not listed, or wants dates/times beyond those shown, create_reservation_request can submit a request (the card is charged only if the restaurant confirms). If no restaurants match at all, offer create_reservation_request directly.",
"inputSchema": {
"properties": {
"area": {
"description": "Specific area within prefecture (e.g., \"Ginza\", \"Shibuya\")",
"type": "string"
},
"end_date": {
"description": "End date in YYYY-MM-DD format (required)",
"type": "string"
},
"genre": {
"description": "Cuisine type (e.g., \"Sushi\", \"Kaiseki\", \"French\", \"Italian\")",
"enum": [
"Sushi",
"Kaiseki",
"Tempura",
"Wagyu",
"Italian",
"French",
"Chinese",
"Innovative",
"Spanish",
"Yakiniku",
"Yakitori",
"Teppanyaki",
"Unagi",
"Dessert Dining",
"Kushiage",
"Shabushabu Sukiyaki",
"Izakaya",
"Ramen",
"Thai",
"Soba",
"Tonkatsu"
],
"type": "string"
},
"limit": {
"default": 20,
"description": "Maximum number of restaurants to return (default: 20, max: 100)",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"num_people": {
"description": "Number of guests to filter availability",
"minimum": 1,
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of restaurants to skip for pagination (default: 0)",
"minimum": 0,
"type": "number"
},
"prefecture": {
"description": "Prefecture/region filter. Values not in the allowed list will be ignored.",
"enum": [
"Tokyo",
"Kyoto",
"Osaka",
"Sapporo",
"Kanazawa",
"Komatsu",
"Toyama",
"Fukuoka",
"Nagoya",
"Ise Shima",
"Kobe",
"Niseko",
"Shizuoka",
"Nagano",
"Hiroshima",
"Shikoku",
"Niigata"
],
"type": "string"
},
"start_date": {
"description": "Start date in YYYY-MM-DD format (required)",
"type": "string"
}
},
"required": [
"start_date",
"end_date"
],
"type": "object"
},
"name": "search_available_restaurants",
"outputSchema": null
},
{
"description": "Browse restaurants by region, cuisine, or area. Returns a directory-style list with name, location, Michelin stars, and starting price. Does not include real-time availability — for date-based searches use search_available_restaurants, and for one restaurant's openings use check_availability.\n\nFor a specific named restaurant, use this tool to obtain its restaurant_id, then call get_restaurant_details for the full profile and get_restaurant_menu for courses and pricing. The description field returned here is trimmed to ~200 characters.\n\nEach restaurant includes name (and name_ja), michelin_stars when present, area/location, and starting_price_display (e.g., \"¥81,000〜\", booking fee included). Returns up to 30 restaurants per call; total and has_more indicate whether more exist, retrievable with offset.",
"inputSchema": {
"properties": {
"area": {
"description": "Specific area within prefecture (e.g., \"Ginza\", \"Shibuya\")",
"type": "string"
},
"genre": {
"description": "Cuisine type. Available options: \"Sushi\", \"Kaiseki\", \"Tempura\", \"Wagyu\", \"Italian\", \"French\", \"Chinese\", \"Innovative\", \"Spanish\", \"Yakiniku\", \"Yakitori\", \"Teppanyaki\", \"Unagi\", \"Dessert Dining\", \"Kushiage\", \"Shabushabu Sukiyaki\", \"Izakaya\", \"Ramen\", \"Thai\", \"Soba\", \"Tonkatsu\"",
"enum": [
"Sushi",
"Kaiseki",
"Tempura",
"Wagyu",
"Italian",
"French",
"Chinese",
"Innovative",
"Spanish",
"Yakiniku",
"Yakitori",
"Teppanyaki",
"Unagi",
"Dessert Dining",
"Kushiage",
"Shabushabu Sukiyaki",
"Izakaya",
"Ramen",
"Thai",
"Soba",
"Tonkatsu"
],
"type": "string"
},
"offset": {
"default": 0,
"description": "Number of restaurants to skip for pagination (default: 0). Only use this if the user explicitly asks to see additional results beyond the initial 30.",
"minimum": 0,
"type": "number"
},
"prefecture": {
"description": "Prefecture/region filter. Available values: Tokyo, Kyoto, Osaka, Sapporo, Kanazawa, Komatsu, Toyama, Fukuoka, Nagoya, Ise Shima, Kobe, Niseko, Shizuoka, Nagano, Hiroshima, Shikoku, Niigata",
"enum": [
"Tokyo",
"Kyoto",
"Osaka",
"Sapporo",
"Kanazawa",
"Komatsu",
"Toyama",
"Fukuoka",
"Nagoya",
"Ise Shima",
"Kobe",
"Niseko",
"Shizuoka",
"Nagano",
"Hiroshima",
"Shikoku",
"Niigata"
],
"type": "string"
}
},
"type": "object"
},
"name": "search_restaurants",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b5160aa3936218e59b120aa3545c6bc0c6dc095f5dd5d83dfc9607fec20b88c8 | sha256sum