Skip to main content
Glama

tabelog-mcp

An MCP server that finds and books restaurants in Japan on Tabelog (食べログ) for Claude, Codex, Cursor, or any MCP client. It is built for business dinners: a private room for the whole party, near everyone's office, on the next free evening. It drives a real Chrome on your own computer, signed in to your own Tabelog account, and keeps a local memory of your preferences and bookings.

tabelog-mcp demo: an agent calls find_available_restaurants for a private room for 7 within 15 minutes of 有楽町 and 新橋 over the next 3 days; the server fills the dinner window and private room from preferences, checks 30 candidates, and lists 5 restaurants with a room for 7, walking minutes to both stations, and open dinner times

You: Find a restaurant with a private room for 7 people within 15 minutes of 有楽町 and 新橋,
     in the next 3 days, for dinner.

Agent: find_available_restaurants(locations: [有楽町, 新橋], party: 7)
       defaults from preferences: 2026-10-23..25, 17:00-20:00, private room, 15 min walk

       → 30 candidates, 20 within walking range of both, 5 with a room for 7 and open times:
         赤坂璃宮 銀座店        3.74  中華   有楽町 6 min · 新橋 12 min   10/23 17:30-20:00, 10/24 …, 10/25 …
         焼肉うしごろ 並木通り店 3.68  焼肉   有楽町 6 min · 新橋 15 min   10/23 17:00 17:30, 10/24 …
         鮨 冨味               3.66  寿司   有楽町 10 min · 新橋 10 min  10/24 17:00-20:00
         …

You:   Book 鮨 冨味 on the 24th at 19:00. We usually start at 7, by the way.

Agent: set_preferences(dinner_from: 18:30, dinner_to: 20:30)
       prepare_booking(鮨 冨味, 2026-10-24, 19:00, party: 7, plan: 個室)
       → (first time: a Chrome window opens; you sign in with LINE or Apple; it carries on)
       → ready: summary + confirmation token

Agent: Here is the booking: … Shall I confirm it?
You:   Yes.
Agent: confirm_booking(token) → confirmed

The search results above are real output from a run on 2026-10-22. The booking half shows the flow; see Status.

Status

Part

State

find_available_restaurants, search, filters, restaurant details, availability, area lookup

Tested against live tabelog.com

History, preferences, HTTP mode, parallel-session lock, background Chrome on macOS

Tested

Sign-in and the booking steps after it (plan choice, guest form, confirmation, completion)

Tested only against a scripted browser, not yet a signed-in account. Any page the server does not recognize hands the booking to you instead of guessing.

Related MCP server: @striderlabs/mcp-opentable

Requirements

  • Node.js 20.10 or newer. npx comes with it.

  • Google Chrome, installed normally. Set TABELOG_MCP_CHROME to use another Chrome or Chromium binary.

  • A Tabelog account (free). Tabelog signs in through LINE, Apple, Google, Yahoo! JAPAN, docomo, au, SoftBank, X, or a 価格.com ID.

  • A desktop session. Tabelog's Japanese site blocks headless browsers, so the server runs a real Chrome window and parks it off-screen. On macOS it starts Chrome in the background, so it never takes focus or switches your desktop; the window comes forward only for sign-in or a handoff. It works on macOS, Windows, and Linux with a display. It does not work on a server without one.

Install

The server is a command that your MCP client starts. Pick your client.

Claude Code

claude mcp add tabelog -- npx -y tabelog-mcp

Codex (~/.codex/config.toml)

[mcp_servers.tabelog]
command = "npx"
args = ["-y", "tabelog-mcp"]
tool_timeout_sec = 330

Cursor (~/.cursor/mcp.json) and Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "tabelog": { "command": "npx", "args": ["-y", "tabelog-mcp"] }
  }
}

From GitHub instead of npm: replace tabelog-mcp with github:ingrid-wu/tabelog-mcp in any of the above. npm builds it on install. A private repository needs your GitHub access set up for git.

Then restart the client (or run /mcp in Claude Code) and ask for a dinner.

find_available_restaurants can take up to 2 minutes, and a booking can wait up to 3 minutes for you to sign in. The server sends progress messages while it works. If your client still gives up early, raise its tool timeout: tool_timeout_sec above for Codex, or the MCP_TOOL_TIMEOUT environment variable (milliseconds) for Claude Code.

Signing in

There is no separate setup step. The first time a booking needs your account, prepare_booking opens a Chrome window on Tabelog's login page, waits while you sign in, and then carries on with the same booking. Searching and checking availability never need an account.

  • How to sign in: LINE (scan the QR code with your phone) and Apple are the quickest. Google, Yahoo! JAPAN, and 価格.com ID show a CAPTCHA or ask for a code. You type every password and code yourself; the server never sees them.

  • If you take longer than 3 minutes, the booking returns needs_login and the window stays open. Finish signing in, then ask again.

  • How long it lasts: Tabelog does not publish how long a sign-in lasts, and it can end it early (for example when you change your password). When you sign in, the server reads the expiry date of the session cookie Tabelog sets, and tabelog_status shows it as session_expires_at. Until that date, every call reuses the session with no window. After it, the next booking opens the sign-in window again.

  • Where it lives: in the server's own Chrome profile on your computer (see below), not in your everyday Chrome, and never in this repository.

To sign in ahead of time instead, run npx -y tabelog-mcp login.

Tools

Tool

What it does

find_available_restaurants

The main search. One to four locations, walking limit, party size, the next N days (or exact dates), a seating window, private room, cuisine, budget. Returns restaurants within walking range of every location, whether a private room fits the party, and every open time in the window. Unset options come from your preferences. Takes 30 s to 2 min (faster once locations are cached).

set_preferences, get_preferences

What you have told the agent (seating windows, usual party, private room, walking limit, budget, notes), and what your past bookings show.

search_restaurants

Area, keyword, date, time, party size, online-booking-only, private room, budget, sort (rating, trend, reviews, new). Each result lists the bookable times Tabelog shows around the searched time.

find_area

Tabelog's suggestions for a place name: stations, towns, areas.

get_restaurant

Tabelog's information table: genre, address, hours, closed days, budget, payment, receipts (invoice number), seats, private rooms, smoking, children, dress code.

get_availability

The booking calendar (open, few_left, full per day); the open party sizes for a date; the bookable times for a date and party.

prepare_booking

Step 1 of 2. Fills the booking form up to the final button and returns a summary plus a confirmation token. Books nothing.

confirm_booking

Step 2 of 2. Places the prepared booking. Marked destructive, so clients ask before running it.

show_booking_window

Shows the Chrome window with the current booking, so you can finish it by hand.

tabelog_status, tabelog_login

Sign-in state and expiry, data folder; optional early sign-in.

get_booking_history, add_booking_note

The booking memory (see below).

Locations and keywords are Japanese (有楽町, 渋谷駅, 寿司, 焼肉). Agents translate English names before calling. Stations work best, because Tabelog gives their coordinates; "lat,lng" works too, alongside at least one named place.

How the business search works

locations ──> Tabelog's station coordinates
      │
      ▼
for each location × each day: Tabelog search (online booking open, party, private room, budget)
      │  up to 30 top-rated candidates
      ▼
walking time from every location, from each restaurant's map pin   (cached for 30 days)
      │  keep those within the limit for all locations
      ▼
private room: does Tabelog's 個室 row list a room for the party? (6人可, 10~20人可 …)
      │
      ▼
real open times for the party on each day, inside the seating window
  • Walking time is an estimate: straight-line distance × 1.25 for streets, at 80 m per minute (the speed Japanese listings use). It is not transit; Tabelog has no routing.

  • Private room means Tabelog lists a room that fits the party. Which room you get is decided when booking: pick the 個室 plan or seat, or the restaurant assigns it.

  • Defaults (when the request does not say): business purpose, the next 3 days, dinner 17:00 to 20:00, lunch 11:30 to 13:30, private room for business, 15 minutes' walk.

Preferences

Tell the agent how you like to book and it saves that with set_preferences; later searches use it as the default.

  • "We usually start at 7" saves a dinner window of 18:30 to 20:30.

  • "It's normally 6 of us" saves a usual party of 6.

  • "Clients are fine with a 10-minute walk" saves a 10-minute limit.

  • "Avoid 焼肉 for this client" saves a note the agent reads before suggesting.

Business and personal keep separate preferences. Business is the default purpose. Anything you say in a request ("at 7:30 this time") overrides the saved default for that request only.

How booking stays safe

prepare_booking ──> plan choice ──> guest form ──> confirmation page ──┐
                    (asks you if                                        │  stops here:
                     several plans)                                     │  summary + token
                                                                        ▼
            you read the summary and say yes in the chat
                                                                        │
confirm_booking(token) ──> token valid? page unchanged? ──> clicks the final button
                                                         ──> confirmed only if Tabelog's
                                                             completion page appears
  • Nothing is booked without a token. prepare_booking never clicks a final button (予約を確定する and the like). confirm_booking needs a token from it, valid for 5 minutes and usable once.

  • The token is tied to what you saw. If the confirmation page changed after prepare (time, party, price), confirm refuses with SUMMARY_CHANGED.

  • It never claims a booking it did not see. If the page after the final click is not Tabelog's completion page, the result is unclear and the history records it as failed, so you can check Tabelog's reservation list.

  • Some steps are always yours. Card entry, verification codes, and form fields it does not know return needs_user with the page. Call show_booking_window (the Chrome window comes on-screen at that step), or open the handoff_url in your own browser.

  • The agent must ask you first. The server's instructions tell it to show the summary and wait for your yes. confirm_booking is marked destructive, so Claude Code and other clients ask for approval before it runs. Keep it out of your auto-approve list.

  • Narrow tools only. No tool takes an arbitrary URL, script, or selector. Restaurant URLs must be canonical tabelog.com restaurant pages. Text on a web page cannot make the agent navigate anywhere else.

  • The browser loads only Tabelog. While the server drives it, the browser blocks every host except tabelog.com, its image CDN, Cloudflare's visitor check, and Google's CAPTCHA service. Ads and trackers do not load. The block lifts only while the window is on-screen for you (sign-in providers need their own sites).

What stays on your computer

Everything. Nothing goes to a server run by this project; there is none.

Data

Where

What it is

profile/

The data folder

The Chrome profile: Tabelog's session cookies, which are your sign-in. Not your password.

session.json

The data folder

When you signed in and when the session cookie expires

preferences.json

The data folder

What you told the agent

history.jsonl

The data folder

The booking memory

places.json

The data folder

Restaurant map pins and room info, cached for 30 days

http-token

The data folder

Bearer token for HTTP mode

The data folder is ~/Library/Application Support/tabelog-mcp on macOS, %APPDATA%\tabelog-mcp on Windows, and ~/.local/share/tabelog-mcp on Linux. Set TABELOG_MCP_HOME to move it. The folder is readable only by your user account. Delete it to sign out and forget everything.

Treat profile/ like a password: anyone who copies it is signed in as you on Tabelog.

Booking memory

Every booking attempt is saved, not just successes, with its purpose:

  • purpose: personal or business. Required on prepare_booking; the agent asks when it is unclear.

  • What was booked: restaurant, genre, area, score, date, time, party, plan, price, the confirmation summary, and the reservation number.

  • How it went: confirmed, handed_off (with why: card, form field, …), failed (with why), or abandoned (prepared, never confirmed).

  • Notes: what you tell the agent ("client dinner, needs a private room", "loved the counter, go back in spring"). Pass them as notes or with add_booking_note later.

The agent uses it in two ways:

  • get_preferences(purpose) summarizes confirmed bookings into usual genres, areas, party size, time, and repeat restaurants, kept apart for personal and business. The server tells the agent to read it before suggesting places.

  • get_booking_history returns the records with notes, so the agent can answer "where did I take the client last time?"

Export business bookings for expenses:

npx -y tabelog-mcp history --purpose business --csv > tabelog-business.csv

The history is an append-only JSON Lines file. Each line is one event, and several server processes can write to it at once.

MCP server or harness: what lives where

A harness (Claude Code, Codex, Cursor, ChatGPT) runs the model: the agent loop, context management, memory files, skills, subagents, and permission prompts. An MCP server is one thing a harness plugs in: a process that offers tools. It has no model and no loop.

Harness (Claude Code / Codex / Cursor)
 ├─ model, agent loop, context, CLAUDE.md / AGENTS.md, skills, subagents, its own memory
 ├─ asks you before confirm_booking
 └─ MCP ──> tabelog-mcp (this repo, a process on your computer)
              ├─ tools: search, availability, prepare / confirm booking, history
              ├─ rules enforced in code: tokens, slot checks, URL allowlist
              ├─ Chrome with its own profile (your Tabelog session)
              └─ history.jsonl (booking memory)
  • In this server: anything that must always be true (no booking without a token), anything that must work the same every time (finding buttons, parsing pages), and state that belongs to the domain and outlives any one chat (the Tabelog session, the booking history).

  • In the harness: judgment. Which restaurant fits, when to ask you, how to phrase the summary, whether a dinner is personal or business.

So the booking memory lives in the MCP server, not in the harness. Any client you connect gets the same history. The harness's own memory (CLAUDE.md, a memory folder) is separate, and this server cannot read it.

Several sessions at once

Chrome lets one process use a profile at a time. A second Claude Code session that starts its own copy of the server gets BROWSER_BUSY while the first one is using the browser. The browser closes after 10 idle minutes, which frees it.

If you run many sessions, run one shared server instead and point every client at it:

npx -y tabelog-mcp serve --http          # listens on http://127.0.0.1:3217/mcp
npx -y tabelog-mcp token                 # prints the bearer token
claude mcp add --transport http tabelog http://127.0.0.1:3217/mcp \
  --header "Authorization: Bearer $(npx -y tabelog-mcp token)"

HTTP mode listens on loopback only, requires the bearer token on every request, and rejects requests from web pages on other origins.

On macOS the server controls its Chrome through a DevTools port on 127.0.0.1 (a random port, open only while that Chrome runs). Other programs running as you on the same computer could reach that port; nothing off the computer can.

ChatGPT

ChatGPT does not start local MCP servers. It connects over HTTPS to a server that is already running somewhere. To use this server from ChatGPT (custom connectors need a paid plan), run HTTP mode on your computer and expose it through a tunnel such as OpenAI's Secure MCP Tunnel, cloudflared, or ngrok. ChatGPT's servers then call your computer through the tunnel, and your session and history stay on your computer. This setup is not tested yet.

Hosting one shared copy of this server in the cloud does not work: Tabelog blocks headless and data-center browsers, and the host would hold every user's Tabelog session.

Limits

  • Tabelog has no public API. The server reads Tabelog's pages and the JSON its own pages use, so a Tabelog redesign can break it. Parsers live in src/tabelog/parse.ts and src/booking/page.ts, with page snapshots in tests/fixtures/.

  • Japanese site only. The English site (tabelog.com/en) shows fewer open slots.

  • Requests are paced to one every 1.5 s. Cloudflare sometimes shows new visitors a "しばらくお待ちください" check; the browser passes it on its own and the server waits up to 20 s. Heavy use can still get a temporary BLOCKED; in testing it cleared within about 5 minutes.

  • Automated access and booking may conflict with Tabelog's terms of use. You use it with your own account, at your own risk. Use it for your own bookings at a personal pace.

  • Cancelling or changing a booking is not supported. Do it on Tabelog.

Troubleshooting

Result

What to do

needs_login

The sign-in window is open and waiting. Sign in there, then ask again.

needs_user

Card, code, or an unknown form field. Call show_booking_window and finish in the window, or open handoff_url.

choose_plan

Pick a plan from the list; call prepare_booking again with plan.

BLOCKED

Cloudflare refused the request. Wait a few minutes.

BROWSER_BUSY

Another session holds the browser. Close it, or use HTTP mode.

CHROME_NOT_FOUND

Install Google Chrome, or set TABELOG_MCP_CHROME.

AREA_NOT_FOUND

Use a Japanese place name, or find_area.

SLOT_UNAVAILABLE

error.details.open_times lists what is open.

TOKEN_INVALID, SUMMARY_CHANGED

Call prepare_booking again and show the new summary.

PAGE_CHANGED

Tabelog changed a page. Open an issue with the tool name.

Development

npm install
npm run check     # type check and tests (parsers against real page snapshots, booking safety rules, the MCP surface)
npm run build     # compiles to dist/
node dist/cli.js --help

The tests never touch tabelog.com. tests/booking-service.test.ts drives the booking flow with a scripted browser and checks the safety rules: no final click while preparing, single-use and expiring tokens, refusal when the page changed, and no success without a completion page.

License

MIT. See LICENSE. Not affiliated with Tabelog or Kakaku.com, Inc.

Available Tools

14 tools
add_booking_noteAdd a note to a bookingB

Saves something the user said about a booking (how it went, who came, what to change next time) to the local history.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYes
booking_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-read-only, non-destructive, non-open-world mutation. The description adds that the note is saved to "local history," which confirms local-only behavior, but it does not describe return values, permissions, or side effects beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every clause adds useful context about what is saved and where.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool, the description covers purpose and note content adequately. It leaves gaps around booking_id semantics and expected behavior, but annotations and schema still provide the core safety and validation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives useful meaning for the "note" parameter via examples, but it does not explain "booking_id" at all, leaving one of two required parameters semantically undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ("Saves") and resource ("something the user said about a booking") plus the destination ("local history"). It is clear what the tool does, though it does not explicitly contrast itself with siblings like get_booking_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical examples ("how it went, who came, what to change next time") imply when to use it for capturing user feedback. However, it does not state when not to use it or name an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_bookingConfirm a booking (step 2 of 2)A
Destructive

Places the booking prepared by prepare_booking. Only call after the user has seen that summary and said yes. Fails without a live token, or when the confirmation page changed since prepare. Reports confirmed only when Tabelog's completion page is seen.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmation_tokenYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive, non-idempotent and open-world, and the description adds genuinely new context: prerequisite token liveness, invalidation when the confirmation page changed since prepare, and the exact condition under which 'confirmed' is reported. This tells the agent how failures manifest and how to interpret success, which annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with what the tool does, then precondition, then failure modes, then success criterion. Every sentence carries distinct operational information; nothing is repeated from annotations or the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent confirmation tool with one opaque token and no output schema, the description covers prerequisite, invalidation condition, failure modes, and the meaning of a success result – enough for an agent to call it safely and interpret the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter (confirmation_token) is never described in format or shape beyond the implied 'live token' from prepare. It adds origin context but not the length/reuse/expiry semantics an agent needs for the one required parameter, so it neither compensates fully nor leaves the gap unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and effect ('Places the booking') and ties it explicitly to the artifact produced by the sibling prepare_booking, so the agent can distinguish this from the prepare step and from the read-only siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('Only call after the user has seen that summary and said yes') and names the alternative that produces the required input. Nothing about when-to-call is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_areaFind a Tabelog areaA
Read-only

Tabelog's own suggestions for a Japanese place name: stations, towns, and areas. Use when a search's resolved_area looks wrong.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesJapanese place name, e.g. 銀座 or 恵比寿駅.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description usefully signals that results come from Tabelog's own index rather than an external geocoder, but it says nothing about what comes back (candidate names, IDs, counts) or how to feed a result back into a search — relevant since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: what it returns first, when to use it second. Zero filler, no repetition of the title, and the important context is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only lookup with full schema coverage and no output schema, this covers purpose and trigger adequately. The only real gap is what a result looks like and how to use it to correct resolved_area, which a short clause could have closed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema itself supplies the format guidance with examples (銀座, 恵比寿駅) plus length bounds. The description only restates 'Japanese place name', adding no syntax or normalization hints, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description establishes that this returns Tabelog's own place-name suggestions covering stations, towns, and areas, which distinguishes it from restaurant-search siblings like search_restaurants. The verb is implicit ('suggestions for') rather than an explicit 'look up', but the resource and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when a search's resolved_area looks wrong' gives a concrete triggering condition tied to another tool's output, which is exactly the kind of routing signal an agent needs. It stops short of naming alternatives or stating when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_available_restaurantsFind restaurants near several places, with open slotsA
Read-only

The main search for business dinners. Finds restaurants within walking range of every location, bookable online for the party on the next days within a time window, optionally with a private room, and returns each one's walking minutes and open times. Unset options come from saved preferences (dinner 17:00-20:00, business: private room, 15 minutes). Walking time is estimated from map distance, not transit. Takes 30 s to 2 min.

ParametersJSON Schema
NameRequiredDescriptionDefault
mealNodinner
datesNoExact dates instead of days_ahead.
partyNo
keywordNoJapanese cuisine or keyword: 寿司, 和食, 焼肉.
purposeNobusiness (default) or personal.
time_toNoLatest seating time; overrides the saved window.
locationsYesJapanese station or place names (丸の内, 虎ノ門駅), or "lat,lng".
time_fromNoEarliest seating time; overrides the saved window.
days_aheadNoToday and the following days, Japan time.
max_resultsNo
private_roomNo
budget_max_yenNo
max_walk_minutesNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only/open-world annotations, the description discloses several important behavioral traits: unset options come from saved preferences, walking time is estimated from map distance rather than transit, the call takes 30 seconds to 2 minutes, and the result includes walking minutes and open times. These are exactly the operational details an agent needs before invoking it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the primary purpose, and every sentence adds useful information about scope, defaults, estimation caveats, or latency. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter search tool with no output schema, the description is largely complete: it explains what is returned, how defaults are applied, and the main caveat about walking-time estimation. It stops short of mentioning some parameters such as budget and max_results, but those are partly covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 54% schema description coverage across 13 parameters, the description meaningfully supplements the schema by documenting defaults for unset options: dinner 17:00–20:00, business private room, and 15-minute walking limit. It also explains that walking time is an estimate. It does not cover every parameter, but it adds important semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it finds restaurants within walking range of multiple locations that are bookable online. It is clearly a search tool and conveys the business-dinner context. It does not explicitly distinguish itself from the sibling search_restaurants or get_availability tools, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description frames this as the main search for business dinners and describes the intended context: locations, bookable slots over the next days, optional private room. It does not explicitly name alternatives or say when not to use it, so it lacks the explicit routing guidance of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_availabilityOnline-booking availabilityA
Read-only

The booking calendar (each day open, few_left, or full). With date: which party sizes are open that day. With date and party: the bookable times.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
partyNo
restaurant_urlYesA tabelog.com restaurant page URL, as returned by search_restaurants.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the return vocabulary (open / few_left / full), which is genuinely useful behavioral context, but says nothing about freshness, scraping cost, rate limits, or failure modes for a live third-party booking calendar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses, each one mapping a calling pattern to a result shape, with the no-parameter case front-loaded. No filler or restated metadata.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with no output schema and only three parameters, the description covers the result shape well enough to call the tool correctly and interpret the response. Minor omissions are the restaurant_url requirement (already in the schema) and any note on how stale the availability data may be.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only restaurant_url is documented), so the description must carry weight — and it does, explaining the compositional semantics: date alone yields party-size availability, date+party yields bookable times. Format constraints (YYYY-MM-DD, party 1-50) are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool returns at three ascending levels of detail (calendar day status, party sizes for a date, bookable times for date+party), which is a precise resource statement rather than a restatement of the name. It does not explicitly differentiate itself from sibling find_available_restaurants, which is the main remaining gap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'With date:' / 'With date and party:' construction effectively tells the agent which call shape to use for which question, which is real usage guidance baked into the parameter documentation. It stops short of stating when to prefer this over find_available_restaurants or prepare_booking.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_booking_historyBooking historyB
Read-only

Past bookings made through this server, newest first: status, restaurant, date, party, plan, price, notes, failure reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
purposeNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description still adds real value by disclosing the sort order and the set of fields returned, but it says nothing about pagination/limit behavior or whether results are scoped to the authenticated user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single fragment sentence is dense and front-loaded with the resource and ordering before the field list. Nothing is wasted, though the list-style phrasing sacrifices a little readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, enumerating the returned fields is genuinely useful and largely covers the return value. However, the tool has three optional parameters whose semantics are absent from both description and schema, so the definition is not fully complete for an agent deciding how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description must carry the burden for limit, status, and purpose. Instead, 'status' appears only as a returned field, never as a filter, and neither limit nor purpose is mentioned, leaving the agent to infer filtering capability purely from raw enum definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as past bookings made through this server and adds the ordering (newest first), which lets an agent distinguish it from mutation siblings like prepare_booking or confirm_booking. It never names a sibling explicitly, and the verb is implied rather than stated, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus alternatives such as show_booking_window or get_availability, and no mention of the filtering options an agent could use. Usage can only be inferred from the phrase 'past bookings,' which is minimal guidance for a tool with three optional filters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_preferencesBooking preferencesA
Read-only

Saved preferences (what the user said: seating windows, party, private room, walking limit, budget, notes) and learned ones (from confirmed bookings: usual genres, areas, party, time, repeat restaurants).

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeNobusiness (default) or personal.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe read-only, non-destructive, closed-world operation. The description adds valuable transparency about provenance: saved preferences come from what the user said, while learned preferences are inferred from confirmed bookings, which helps an agent interpret reliability of the data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core distinction between saved and learned preferences. The parenthetical field lists are efficient, though they make the sentence slightly harder to scan at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with no output schema, the description gives a solid inventory of returned data and distinguishes saved from learned sources. The only meaningful gap is the unmentioned 'purpose' filter and the absence of usage guidance, but the core return content is adequately covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single optional 'purpose' parameter is fully documented in the schema, including its business default. The description does not mention this parameter or add any semantics beyond the schema, so it meets but does not exceed the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as saved and learned booking preferences, and enumerates the kinds of data returned (seating, party size, budget, genres, areas, etc.). It does not explicitly contrast with the sibling set_preferences, but the read-oriented 'saved/learned preferences' framing makes the purpose distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns but gives no guidance on when to call it versus set_preferences or other booking tools. There are no conditions, prerequisites, or exclusions to help an agent choose this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_restaurantRestaurant detailsB
Read-only

Tabelog's information table for one restaurant: genre, address, hours, closed days, budget, payment, seats, private rooms, smoking.

ParametersJSON Schema
NameRequiredDescriptionDefault
restaurant_urlYesA tabelog.com restaurant page URL, as returned by search_restaurants.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful field-level context by listing the restaurant data returned, but it does not describe authentication needs, rate limits, failure modes, or response structure beyond the field names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with the scope front-loaded and a concise field list. It is appropriately sized, though "information table" is slightly telegraphic compared with using a clear retrieval verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with one fully documented parameter and safety annotations, the definition is largely complete. Because there is no output schema, enumerating the returned fields adds helpful context; only error behavior or URL validation details are missing, which are minor for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the sole parameter is fully documented as a tabelog.com restaurant page URL returned by search_restaurants. The description does not add syntax, validation, or format detail beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool returns Tabelog information for one restaurant and enumerates the fields available, such as genre, address, hours, budget, and payment. It distinguishes a single-restaurant lookup from list/search tools by scoping to "one restaurant," though it does not explicitly name search_restaurants as the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance, prerequisites, or alternatives. The only routing cue is the phrase "for one restaurant," while the schema separately notes that restaurant_url comes from search_restaurants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_bookingPrepare a booking (step 1 of 2)A

Fills Tabelog's booking form up to, never through, the final button. Signs in first if needed (a Chrome window opens for the user). Returns status ready with a summary and a single-use confirmation_token (5 minutes), or choose_plan (call again with plan), needs_login (sign-in still open), or needs_user (card, code, or unknown field: the user finishes). Books nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
planNo"seat_only", or part of a plan or seat name from a choose_plan result (e.g. 個室).
timeYes
notesNoOccasion, guests, preferences. Saved with the booking history.
partyYes
purposeNobusiness (default) or personal.
restaurant_urlYesA tabelog.com restaurant page URL, as returned by search_restaurants.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior well beyond the annotations: a Chrome window opens, sign-in may be required, the token is single-use with a 5-minute TTL, and each of the four return statuses is spelled out. This is consistent with readOnlyHint=false and destructiveHint=false (it mutates a form but books nothing).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core constraint in the first clause, then enumerates return statuses compactly. Dense but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return-value burden and does so fully: status names, token lifetime and single-use semantics, and the user-handoff condition. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 57% schema coverage, the description compensates by explaining the plan parameter's role in the choose_plan loop and by naming the cases (card, code, unknown field) that fall to needs_user. It adds little on date/time/party, but those are self-evident and pattern-constrained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fills Tabelog's booking form') with the crucial scope boundary 'up to, never through, the final button' and repeats 'Books nothing'. Combined with the title 'step 1 of 2', an agent can cleanly separate it from confirm_booking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly routes the agent: 'call again with plan' for choose_plan, 'the user finishes' for needs_user, and 'Books nothing' signals that confirm_booking is the next step. It never names the sibling confirm_booking explicitly, so one inference is left.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_restaurantsSearch TabelogA
Read-only

Search restaurants with Tabelog's filters. With date, time, and party, each result lists the online-booking times Tabelog shows around that time. 20 results per page; total is Tabelog's count.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoJapanese place name: 銀座, 渋谷駅, 恵比寿.
dateNo
pageNo
sortNorating
timeNo
partyNo
keywordNoJapanese cuisine or keyword: 寿司, 焼肉, イタリアン, or a restaurant name.
budget_forNodinner
private_roomNo
budget_max_yenNo
online_booking_onlyNoOnly restaurants bookable online for the date and time.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds real behavioral context the annotations do not: page size of 20, that 'total' is Tabelog's own count (not a computed value), and that per-result booking times are only populated when date, time, and party are supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then the conditional result behavior, then pagination. No filler and nothing repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 optional parameters, no output schema, and low schema description coverage, the description does a fair job explaining result shape and pagination but leaves several filters (sort, budget_for, budget_max_yen, private_room, online_booking_only) without prose support. An agent can call it, but may pick filters incorrectly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 27% across 11 parameters, so the description carries extra burden. It explains the conditional interaction between date/time/party and the returned booking times, but says nothing about area/keyword language expectations, sort options, budget fields, or private_room, leaving most parameters defined only by bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search restaurants') and scopes it to Tabelog's filter set, which separates it from generic listing tools. It does not explicitly distinguish itself from the closer siblings find_available_restaurants and get_availability, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrase 'Search restaurants with Tabelog's filters' and by the conditional note about date/time/party, which hints at when the richer result appears. However, there is no explicit when-to-use or when-not-to-use guidance versus find_available_restaurants, get_availability, or find_area.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_preferencesSave a preferenceA

Saves a lasting preference the user stated, used as the default for later searches and bookings: seating windows, party size, private room, walking limit, budget, or a free-text note.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoAnything else to remember, e.g. "client is vegetarian", "avoid 焼肉".
partyNo
purposeNobusiness (default) or personal.business
lunch_toNo
dinner_toNo
lunch_fromNo
dinner_fromNo
private_roomNo
budget_max_yenNo
max_walk_minutesNo
make_default_purposeNoUse this purpose when a request does not say.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a non-destructive write operation. The description adds useful behavioral context by explaining that the saved value becomes a default for later searches and bookings, but it omits critical mutation semantics such as whether omitted fields are cleared or whether existing preferences are merged or replaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the action and effect without filler. The enumerated fields are dense but appropriate for orienting the agent quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter write tool with no output schema and low schema coverage, the description covers purpose and persistence but leaves important gaps: whether this replaces or merges existing preferences, what happens to omitted fields, and how the time-window parameters are formatted beyond the schema patterns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 27%, so the description must compensate. It does map several parameter groups to natural-language concepts (seating windows, party size, private room, walking limit, budget, note), but it does not explain formats, units, or the lunch/dinner time distinction beyond what the parameter names already imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (saves) and resource (lasting preference) and enumerates the kinds of preferences stored. It clearly distinguishes saving from reading preferences, though it does not explicitly name get_preferences as the read counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: save when the user states a lasting preference that should become the default for later searches and bookings. It does not state when not to use it or mention alternatives, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_booking_windowShow the booking windowA
Read-only

Brings the Chrome window with the current booking on-screen, so the user can finish a needs_user booking by hand.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as read-only, non-destructive, and not open-world. The description adds useful behavioral context beyond annotations: it surfaces a Chrome window and hands control back to the user for manual completion, which tells the agent this is an interactive UI action rather than a data-returning operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and follows with the reason. Every clause earns its place by combining purpose and usage context without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter schema, rich annotations, and no output schema, the description provides enough information to select and invoke the tool correctly. A minor gap is that it does not state what happens if no current booking exists, but the core behavior and manual-completion scenario are clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is no parameter semantics burden. The baseline for a zero-parameter tool is 4, and the description does not need to compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: it brings the Chrome window with the current booking on-screen. It also explains the intended outcome, letting the user finish a needs_user booking manually. It does not explicitly contrast itself with sibling tools such as prepare_booking or confirm_booking, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so the user can finish a needs_user booking by hand' gives clear usage context: this tool is for bookings in a needs_user state that require manual completion. It does not list exclusions or name alternative tools, but the triggering condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tabelog_loginSign in to TabelogA

Optional: sign in ahead of time. prepare_booking already signs in by itself when needed. Opens the Chrome window on Tabelog's login page and waits while the user signs in (LINE, Apple, Google, …). The user types credentials and codes themselves; this tool never sees them. The session is saved in the local browser profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_minutesNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only say non-readonly, non-destructive, open-world), the description discloses that this blocks/waits on a human, that credentials never reach the tool, and that the session persists in the local browser profile. That is exactly the behavioral context annotations cannot convey. It stops short of saying what happens if the user never completes login before the timeout.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the optionality warning so an agent stops reading early if it doesn't need the tool. Every sentence adds a distinct fact: optionality, alternative, mechanism, credential safety, session persistence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A one-parameter, no-output-schema tool is well covered: the agent knows it launches a browser, waits for a human, and leaves a persistent session. Only the timeout semantics and post-timeout state are unaddressed, which is minor for this tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter timeout_minutes has zero schema description coverage, and the description never names or explains it — no statement of what happens when the wait expires or whether the session is kept. The name and default/range in the schema make it inferable, so this is a gap rather than a failure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action (sign in) against a concrete resource (Tabelog) and describes the mechanism: opens the Chrome window on the login page and waits for the user. It also distinguishes itself from prepare_booking, which handles sign-in implicitly, so an agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks itself as optional and says prepare_booking already signs in by itself when needed — a direct when-not-to-use rule plus a named alternative. That is the highest-value guidance an agent can get for a redundant-looking auth tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tabelog_statusTabelog statusA
Read-only

Where data is stored, whether this browser profile is signed in to Tabelog, and when the sign-in expires (read from Tabelog's session cookie at sign-in). Starts Chrome in the background if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/openWorld/non-destructive, but the description adds genuinely new behavioral facts beyond them: the expiry is read from Tabelog's session cookie captured at sign-in (implying staleness), and the call can spawn a background Chrome process as a side effect. That side effect is exactly the kind of trait annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the returned information and closes with the side-effect caveat. Every clause carries information, though the phrasing 'Where data is stored' is slightly oblique compared with a plain 'Returns the data directory'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return values and does so by naming all three fields; combined with the zero-parameter schema and read-only annotations, an agent has enough to call it correctly. It stops short of stating the response shape or what the storage path actually looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate and it correctly avoids inventing inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates the three concrete facts the call reports (storage location, sign-in state for this browser profile, sign-in expiry), which is specific enough to distinguish it from siblings like tabelog_login or get_preferences. The verb is implicit (a noun phrase rather than 'Returns...'), which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is a diagnostic/pre-flight call, but the description never says when to call it or that tabelog_login is the follow-up when the profile is not signed in. No exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv0.1.0
    • First observedadd_booking_note
    • First observedconfirm_booking
    • First observedfind_area
    • First observedfind_available_restaurants
    • First observedget_availability
    • First observedget_booking_history
    • First observedget_preferences
    • First observedget_restaurant
    • First observedprepare_booking
    • First observedsearch_restaurants
    • First observedset_preferences
    • First observedshow_booking_window
    • First observedtabelog_login
    • First observedtabelog_status

TDQS

A3.6/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and the prepare/confirm booking split is especially clear. The main overlap is between search_restaurants, find_available_restaurants, and get_availability, which all deal with availability/search and could be confused despite helpful descriptions.

Naming Consistency4/5

The set is mostly consistent snake_case with action-oriented names like search_restaurants, prepare_booking, and get_availability. Minor deviations are the tabelog_ prefix on tabelog_status/tabelog_login and the mix of verbs such as find, get, search, and show.

Tool Count5/5

Fourteen tools is well within the appropriate range for a restaurant search and booking assistant. Each tool maps to a clear role: status/login, search, restaurant detail, availability, booking preparation/confirmation, preferences, and history.

Completeness3/5

The surface covers search, availability, restaurant details, sign-in, booking preparation/confirmation, preferences, and history well. However, booking lifecycle coverage is incomplete: there is no tool to cancel or modify/reschedule an existing booking, which are notable missing operations for a booking-focused server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers