Maître d'MCP
Enables users to sync their restaurant reservations by generating one-click links to add booking details directly to Google Calendar.
Integrates with the Google Places API to provide restaurant discovery features, including ratings, reviews, and proximity-based searches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Maître d'MCPFind a quiet Italian spot for 4 on Saturday at 7pm that handles peanut allergies."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Maître d'MCP
An MCP-based that provides a set of tools to discover restaurants, checks availability, and books reservations through natural conversation with chat agents that integrate with MCP.
Note: Three MCP servers for Resy reservations already exist in the ecosystem (see Prior Art), but none combine Google Places discovery, weather integration, dining companion tracking, and real booking across both Resy and OpenTable — that gap is this project's value proposition.
What It Does
You: "Book me a quiet Italian place near home for Saturday at 7"
Claude: I found 3 Italian spots within 10 min walk of your home:
1. Carbone (4.7★) - 6:30 PM, 9:15 PM on Resy
2. L'Artusi (4.5★) - 7:00 PM on OpenTable
3. Via Carota (4.6★) - 8:45 PM on Resy
Your wife has a peanut allergy - I've verified these don't
have nut-heavy menus. Which would you like?
You: "L'Artusi at 6:30"
Claude: ✓ Booked! Carbone, Saturday 6:30 PM, 2 people
Confirmation: RESY-ABC123
Add to Google Calendar: https://calendar.google.com/calendar/render?...Related MCP server: opentable-mcp
Key Features
Feature | Description |
Smart Discovery | Google Places ratings + reviews, filtered by your preferences |
Multi-Platform Booking | Resy (automated), OpenTable (automated) |
Dietary Awareness | Remembers your restrictions and your dining companions' |
Group Dining | Save people (with their restrictions) and groups for easy booking |
Recency Tracking | Won't suggest Mexican if you had it yesterday |
Weather Aware | No outdoor seating suggestions in winter/rain |
Visit History | Tracks where you've been, resurfaces favorites |
Calendar Sync | Add reservations to Google Calendar with one click |
Cost Tracking | Monitor your API usage costs |
Resilient | Retry with backoff, circuit breakers, graceful fallbacks |
Remote Hosting | Docker + Cloudflare Tunnel for access from any device over HTTPS |
Quick Start
1. Prerequisites
Python 3.11+
Claude Desktop installed
Google Cloud API key (Places API enabled)
2. Clone & Install
git clone <repo>
cd restaurant-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
playwright install chromium3. Run Setup
The interactive setup encrypts all secrets into the local database and generates your Claude Desktop config:
source .venv/bin/activate
python -m src.setupYou will be prompted for:
Google API Key (required) — Google Cloud Console → Places API (New)
OpenWeather API Key (optional) — openweathermap.org (free tier: 1000/day)
Resy credentials (optional) — for automated Resy booking
OpenTable session (optional) — CSRF token + browser cookies for OpenTable booking
The script outputs a ready-to-paste Claude Desktop config with a single RESTAURANT_MCP_KEY env var.
OpenTable's API requires authenticated browser session cookies to bypass bot protection. Without this step, OpenTable availability checks and bookings will fail.
During python -m src.setup, when you provide an OpenTable email you'll be prompted for:
OpenTable x-csrf-token — from browser DevTools
OpenTable Cookie header — from browser DevTools
How to get these values (re-run setup when cookies expire, typically every few days):
Open https://www.opentable.com in Chrome and log in
Open DevTools (
Cmd+Option+Ion macOS,F12on Windows)Go to the Network tab
Navigate to any restaurant page (e.g. search for "Carbone" and click it)
In the Network list, click any request to
www.opentable.comFind any request to a
/dapi/endpoint (POST) and copy thex-csrf-tokenheader valueIn the Headers tab, copy the full
Cookieheader valueSave the cookie value into a temp file that can be referenced in the
src.setupcommand. This is due to the paste size being too large.
Why is this needed? OpenTable uses Cloudflare bot protection that blocks plain HTTP requests. By storing your browser's session cookies, the MCP server can make API calls as your authenticated session. The cookies are encrypted at rest using the same Fernet encryption as all other credentials.
4. Configure Claude Desktop
Copy the JSON output from step 3 into your Claude Desktop MCP config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
The config should look like:
{
"mcpServers": {
"restaurant": {
"command": "/path/to/restaurant-mcp/.venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/restaurant-mcp",
"env": {
"RESTAURANT_MCP_KEY": "your-generated-master-key"
}
}
}
}Replace paths with the actual paths from the setup output.
5. (Optional) Remote Hosting via Docker
For access from Claude.ai, Claude Code, or mobile — run the server on a home server / NAS / Raspberry Pi:
# Copy env template and fill in values from setup
cp .env.example .env
# Edit .env — add MCP_AUTH_TOKEN, RESTAURANT_MCP_KEY, and TUNNEL_TOKEN
# Build and start
docker compose up --build -d
# Verify
curl http://localhost:8000/health
# → {"status":"ok"}Then configure Claude Desktop for remote access:
{
"mcpServers": {
"restaurant": {
"url": "https://mcp.yourdomain.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_AUTH_TOKEN"
}
}
}
}Or Claude Code:
claude mcp add restaurant --transport streamable-http \
--url https://mcp.yourdomain.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN"See Remote Hosting Spec for full Cloudflare Tunnel setup instructions.
6. Restart Claude Desktop
Quit and reopen Claude Desktop. You should see the restaurant tools available (hammer icon in the chat input).
7. First Run — Set Up Your Profile
Start a conversation with Claude:
You: "Help me set up my restaurant preferences"
Claude: Let's get you set up! First, what's your home address?
(I'll use this as "near home" when you search)
You: "123 Main St, New York, NY 10001"
Claude: Got it. Where do you work?
You: "456 Park Ave, New York, NY 10022"
Claude: What are your favorite cuisines?
You: "Italian, Japanese, Mexican"
Claude: Any dietary restrictions?
You: "None for me"
Claude: ✓ Profile saved! You're all set.8. Add Dining Companions
You: "Add my wife — she has a nut allergy and a seed allergy"
Claude: ✓ Saved! I'll remember her allergies when searching restaurants.
You: "Create a group called 'date night' with my wife"
Claude: ✓ Group 'date night' created. Merged restrictions: nut allergy, seed allergy.Security Model
Layer | Protection |
Setup script |
|
Single secret | One master key ( |
Encryption at rest | Fernet (AES-128-CBC) via PBKDF2-derived key; all config in SQLite |
Legacy mode |
|
Resy password | NOT persisted after authentication — only email + auth token stored |
OpenTable session | CSRF token + browser cookies stored encrypted; no password needed |
File permissions | Credentials dir 0o700, all files 0o600 |
Install the optional keyring dependency for OS keyring support (legacy mode):
pip install -e ".[security]"Example Prompts
Discovery
"Find Italian restaurants near home"
"What's good for dinner near work tonight?"
"Show me highly-rated sushi places within walking distance"
"Find restaurants good for a group of 6 near Union Square"
Booking
"Check availability at Carbone for Saturday at 7 PM, party of 2"
"Book L'Artusi for Friday at 8, party of 4"
"What reservations do I have coming up?"
"Cancel my reservation at Via Carota"
Group Dining
"Find a restaurant for date night this Saturday"
"Search for a place that works for the whole family — remember everyone's allergies"
Recommendations
"What should we try tonight? We haven't been out in a week"
"Recommend something new — I'm tired of Italian"
"What's good for outdoor dining today?" (checks weather automatically)
History & Preferences
"Log that we went to Lilia last night — it was amazing, 5 stars"
"Where have we eaten in the last month?"
"Update my preferences — add Thai to my favorite cuisines"
"Blacklist TGI Friday's — never suggest it again"
Cost Tracking
"How much have I spent on API calls this month?"
MCP Tools (22 total)
Tool | Purpose |
| First-run profile setup (home, work, cuisines, dietary) |
| View current preferences |
| Change specific preferences |
| Add/update/remove dining companions |
| Show all saved companions |
| Create/update/remove groups |
| Show all saved groups |
| Block/unblock restaurants |
| Find restaurants by cuisine, location, rating |
| Check time slots across Resy + OpenTable |
| Book a table (with calendar link) |
| Cancel a booking |
| View upcoming reservations |
| Save Resy login (encrypted) |
| Save OpenTable login (encrypted) |
| Record a restaurant visit |
| Rate a past visit |
| View dining history |
| Get personalized suggestions |
| Find restaurants for a group (merged dietary needs) |
| View API usage costs and cache stats |
API Costs
API | Cost | Usage |
Google Places | ~$17/1000 detail calls | Primary discovery |
OpenWeatherMap | Free (1000/day) | Weather context |
Resy | Free (unofficial) | Booking |
OpenTable | Free (DAPI + browser session) | Booking |
Estimated monthly cost for heavy use: $3-8 (with caching)
Use api_costs to monitor your spending at any time.
Architecture
Technical Stack
Language: Python 3.11+
Framework: FastMCP — auto-generates tool schemas from type hints
Transport: stdio (local) or streamable-http (remote hosting)
Storage: SQLite (local, WAL mode) with aiosqlite
Auth: Bearer token via FastMCP's
TokenVerifier(constant-time comparison)Browser Automation: Playwright (for auth + OpenTable)
APIs: Google Places (New), OpenWeatherMap, Resy (unofficial), OpenTable (automation)
Calendar: Google Calendar URL generation (zero-config)
Containerization: Docker + Cloudflare Tunnel for remote hosting
Resilience: tenacity (retry), custom CircuitBreaker, InMemoryCache (LRU + TTL)
Resilience Features
Retry with exponential backoff — transient errors (429, 5xx) are automatically retried up to 3 times
Circuit breakers — per-service (Resy, Google Places, OpenTable, Weather) to prevent hammering failed APIs
3-layer booking fallback — Resy API -> OpenTable Playwright -> deep links with manual instructions
In-memory caching — LRU cache with TTL for search results, reducing API costs
User-friendly errors — all exceptions are mapped to actionable messages for Claude to relay
Project Structure
restaurant-mcp/
├── .ai/
│ ├── AGENTS.md # Agent instructions
│ └── ENGINEERING-STANDARDS.md # Code patterns, testing mandate
├── docs/
│ ├── specs/ # EPICs, architecture plan, research
│ └── adr/ # Architecture Decision Records
├── scripts/
│ ├── validate.sh # Full validation: lint + test + coverage
│ ├── test.sh # Run tests with coverage
│ └── lint.sh # Ruff linting only
├── src/
│ ├── server.py # FastMCP entry point + health endpoint
│ ├── auth.py # Bearer token verifier for remote access
│ ├── config.py # Environment configuration
│ ├── models/ # Pydantic data models
│ ├── storage/ # SQLite + encrypted credentials
│ ├── clients/ # API clients + resilience + cache
│ ├── matching/ # Cross-platform venue ID resolution
│ └── tools/ # MCP tool definitions
├── tests/ # 1193 tests, 100% branch coverage
├── data/ # Runtime: DB, logs, credentials (gitignored)
├── Dockerfile # Container build for remote hosting
├── docker-compose.yml # MCP + Cloudflare Tunnel orchestration
├── pyproject.toml
├── .env.example
└── README.mdDevelopment
# Activate virtual environment
source .venv/bin/activate
# Run full validation (lint + tests + coverage + import check)
bash scripts/validate.sh
# Run tests only
bash scripts/test.sh
# Run linter only
bash scripts/lint.shTesting: 1193 unit tests with 100% branch coverage (fail_under = 100 enforced).
Integration Tests
On-demand integration tests exercise the full stack against live Resy and OpenTable APIs:
# Run all integration tests
python -m pytest tests/integration/ -m integration -v
# Resy only
python -m pytest tests/integration/test_resy_integration.py -m integration -v
# OpenTable only (requires session cookies — see step 9 above)
python -m pytest tests/integration/test_opentable_integration.py -m integration -v
# With a specific restaurant / date
INTEGRATION_RESTAURANT="Lilia" INTEGRATION_DATE="2026-03-15" \
python -m pytest tests/integration/ -m integration -vIntegration tests are excluded from validate.sh and default pytest runs. They require real credentials in the credential store (set up via python -m src.setup).
Prior Art
Several MCP restaurant reservation servers already exist — these serve as reference implementations:
Repository | Language | What It Does |
TypeScript | Most complete — unified Resy+OpenTable search, direct Resy booking, | |
Python | Claude Desktop focused — encrypted storage, multi-account, calendar export (ICS) | |
Python | PyPI-published ( | |
TypeScript | Google Maps discovery with mood-based filtering (mock booking only) |
What we add: Full Google Places integration, weather-aware outdoor seating, dining companion dietary tracking, visit history with reviews, and true dual-platform booking (Resy + OpenTable).
Documentation
Document | Description |
Agent instructions — primary entry point for AI engineers | |
Code patterns, architecture rules, testing mandate | |
Master EPIC guide — dependency graph, tool inventory | |
High-level architecture, API landscape, data models | |
EPIC-08 resilience implementation decisions | |
Remote hosting: Docker, streamable-http, bearer auth |
Risks & Mitigations
Risk | Mitigation |
Resy API brittleness | 3-6 month breakage cycle; 3-layer fallback (API -> Playwright -> deep links) |
Resy blocks unofficial API | Low request rates; OpenTable fallback |
Resy auth tokens expire | Auto-refresh via Playwright login |
OpenTable bot detection | Realistic delays (>30s); Playwright browser automation |
Google API costs spike | In-memory LRU cache with 5-min TTL; cost tracking via |
Account deactivation | Personal accounts only; no commercial patterns |
Legal Considerations
The NY Restaurant Reservation Anti-Piracy Act (S.9365A, effective February 2025) prohibits third-party services from listing or selling restaurant reservations without written restaurant agreements. Penalties: $1,000/violation/day.
For this project: Personal-use automation is not explicitly prohibited, but both Resy's and OpenTable's Terms of Service prohibit automated access. This is a personal tool, not a commercial service.
Future Ideas
LA expansion (after NYC is stable)
Shared preferences with partner (two-user mode)
Restaurant deal tracking (NYC Restaurant Week, etc.)
Tock integration (ticketed dining experiences)
Yelp integration (official MCP server exists with booking support)
Google Calendar API (OAuth2) for automatic sync (currently URL-based)
SQLite cache tier for cross-session persistence
Status: All 8 EPICs complete. Remote hosting via Docker + Cloudflare Tunnel. 1193 tests, 100% branch coverage. Integration tests for Resy and OpenTable.
Available Tools
23 toolsapi_costsB
Show API usage costs broken down by provider.
Args: days: Number of days to look back (default 30).
Returns: Formatted table of API costs per provider.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It partially satisfies this by describing the return value as a 'Formatted table,' but fails to disclose what 'providers' refers to (likely OpenTable/Resy given siblings), whether this operation is cached or hits live endpoints, cost implications, or rate limits. It does correctly imply this is read-only via 'Show'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a structured docstring format (Args/Returns) that is clear and front-loaded with the main purpose. While slightly verbose compared to single-sentence descriptions, the structure is appropriate for the parameter documentation needed given poor schema coverage. No sentences are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's placement among restaurant reservation APIs, the description inadequately explains the domain context—it should clarify that this tracks costs for the third-party restaurant APIs (OpenTable/Resy) managed by this server. While it documents the single parameter and mentions output format, the lack of domain linkage to siblings creates ambiguity about which APIs' costs are being tracked.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage (the 'days' property has no description field), requiring the description to compensate. The Args section successfully provides this: 'Number of days to look back (default 30)' explains both the semantics and default value, effectively compensating for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Show[s] API usage costs broken down by provider' with a specific verb (Show) and resource (API usage costs). However, given that all 19 siblings are restaurant/reservation management tools (make_reservation, store_opentable_credentials, etc.), the description fails to clarify that this tracks costs for those specific restaurant APIs (OpenTable/Resy), which would help distinguish its purpose within this domain context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not indicate whether this should be checked periodically, before/after heavy usage, or how it relates to the credential storage tools. No 'when-not-to-use' or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_reservationA
Cancel an existing reservation (Resy or OpenTable).
Provide either the restaurant name (cancels most recent upcoming) or a specific confirmation ID.
Args: restaurant_name: Restaurant name to look up. confirmation_id: Specific confirmation ID.
Returns: Cancellation confirmation or error.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | No | ||
| confirmation_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It explains the selection logic (most recent upcoming when using restaurant name) and mentions return types. However, for a cancellation operation, it omits critical safety context such as irreversibility, refund implications, or notification side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a structured docstring format with Args and Returns sections that frontload the essential information. The content is dense with no redundancy, though the Returns section is slightly superfluous given the existence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description appropriately avoids detailing return values. However, for a destructive operation (cancellation) with zero security annotations, the description should include warnings about irreversibility or required permissions to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by documenting both parameters in the Args section. It clarifies that restaurant_name triggers a lookup while confirmation_id is specific, providing sufficient semantic context for the AI to populate arguments correctly despite the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Cancel) and resource (reservation), specifying support for Resy and OpenTable platforms. While it identifies the domain effectively, it does not explicitly differentiate from siblings like 'make_reservation' beyond the implicit verb difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on parameter selection logic: 'Provide either the restaurant name... or a specific confirmation ID.' It clarifies that using the restaurant name triggers cancellation of the 'most recent upcoming' reservation, which is critical for correct invocation. Lacks explicit 'when not to use' guidance or named alternatives to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_availabilityA
Check reservation availability at a restaurant. Searches both Resy and OpenTable when available.
Args: restaurant_name: Name of the restaurant. date: Date to check — "2026-02-14", "Saturday", "tomorrow", etc. party_size: Number of diners. preferred_time: Preferred time like "19:00". Results are sorted by proximity to this time if provided.
Returns: Available time slots with platform info, or a message if none found.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| date | Yes | ||
| party_size | No | ||
| preferred_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses multi-platform search scope (Resy/OpenTable), sorting behavior ('sorted by proximity to this time'), and empty-result handling ('message if none found'). Missing: explicit readOnly/safety declaration, rate limits, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses efficient docstring format with clear Args/Returns sections. Front-loaded with core action. No redundant text—every sentence adds value (platform scope, date examples, sorting logic). Well-structured for parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive given constraints. Covers 4 parameters with 0% schema coverage, explains output schema content ('time slots with platform info'), and behavioral nuances. Output schema exists so return values don't need full detailing. Could mention credential requirements for the platforms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description fully compensates by documenting all 4 parameters with rich semantics: date includes flexible parsing examples ('Saturday', 'tomorrow'), party_size clarifies 'diners', preferred_time notes sorting side-effect. Comprehensive parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb 'Check' + resource 'reservation availability'. Explicitly mentions searching 'both Resy and OpenTable', which distinguishes it from sibling 'make_reservation' (which books) and 'search_restaurants' (which finds restaurants, not slots).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides implicit context by describing multi-platform search behavior, but lacks explicit guidance on when to use this vs 'make_reservation' (e.g., 'use this to find available slots before booking'). No mention of prerequisites like stored credentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_preferencesA
Show all your current restaurant preferences including dietary restrictions, favorite cuisines, saved locations, and dining defaults.
Returns: A formatted summary of all preferences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It correctly identifies the read-only nature via 'Show' and documents the return value ('formatted summary'), but omits details about authentication requirements, rate limits, data persistence, or whether results are cached versus real-time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two efficient sentences with zero redundancy. The first sentence front-loads the core purpose with specific content categories; the second documents the return value. No filler text or tautology present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with existing output schema, the description is fully complete. It defines the resource scope (four preference categories) and acknowledges the return structure, satisfying all informational needs without over-documenting what the output schema already provides.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema contains zero properties. Per scoring rules, zero parameters establishes a baseline of 4. The description appropriately avoids inventing parameter documentation where none exist in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Show' with resource 'restaurant preferences' and enumerates exact scope (dietary restrictions, favorite cuisines, saved locations, dining defaults). The term 'current' clearly positions this as a retrieval operation, distinguishing it from sibling tools 'setup_preferences' (creation) and 'update_preferences' (modification).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies read-only usage through 'Show' and 'current' but provides no explicit guidance on when to use this versus 'setup_preferences' or 'update_preferences'. The agent must infer from verb semantics rather than explicit directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsA
Get personalized restaurant recommendations based on your history, preferences, and current context (weather, recent visits).
Args: occasion: The type of dining occasion. Options: "date_night" - romantic, quieter spots "casual" - relaxed, neighborhood places "group_dinner" - accommodates larger parties "special" - high-end, celebration-worthy "quick" - fast, nearby options Leave empty for general recommendations. party_size: Number of diners. location: "home", "work", or an address. group: Name of a saved group — their restrictions will be applied. exclude_recent_days: Don't recommend places visited in the last N days.
Returns: Curated list of 3-5 restaurants with reasons for each recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| occasion | No | ||
| party_size | No | ||
| location | No | home | |
| group | No | ||
| exclude_recent_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It effectively documents behavioral inputs (considers weather, recent visit history, group restrictions) and output characteristics (curated list of 3-5 items with reasoning). Missing only side-effect or rate-limit disclosures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear summary, Args, and Returns sections. While verbose compared to highly condensed descriptions, the detail is necessary given zero schema coverage. Information is front-loaded and every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 optional parameters and output complexity, the description covers all inputs and describes return values (since no formal output schema exists). Could benefit from mentioning relationship to 'manage_group' for the group parameter, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the Args section comprehensively documents all 5 parameters, including semantic enums for 'occasion' (date_night, casual, etc.) and valid values for 'location' (home/work/address). The description fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Get personalized restaurant recommendations') and clearly identifies the resource type. It distinguishes from sibling 'search_restaurants' by emphasizing personalization factors (history, preferences, weather) versus generic search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description implies usage context through personalization emphasis (history, recent visits), it lacks explicit guidance on when to choose this tool over 'search_restaurants' or 'search_for_group'. The occasion parameter examples provide implicit usage guidance but no explicit 'when to use/when not to use' statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsB
List all saved groups with their members and merged dietary restrictions.
Returns: Formatted list of groups with member details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses 'merged dietary restrictions' revealing aggregation logic/computation on member data, which is valuable behavioral context. However, lacks disclosure on auth requirements, pagination, or performance characteristics for 'all' groups retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The 'Returns:' label is slightly formal/structured rather than flowing prose, but content is efficient with no wasted words. Business logic (merged restrictions) is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list operation. Given output schema exists, the description appropriately avoids redundant return value specification while highlighting key business logic (dietary restriction merging) that schema likely doesn't capture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters exist (empty schema), which per guidelines sets a baseline of 4. No parameter documentation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (List) + resource (saved groups) with specific scope including members and merged dietary restrictions. However, it does not explicitly differentiate from sibling tools like 'search_for_group' or 'manage_group' which likely overlap in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this versus 'search_for_group' (likely search/filter capability) or 'manage_group' (likely modification capability). No prerequisites or conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_peopleA
List all saved dining companions with their dietary restrictions and notes.
Returns: Formatted list of all people and their preferences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States it returns a 'Formatted list,' indicating read-only behavior, but lacks safety disclosures (e.g., 'does not modify data'), rate limits, or caching behavior. Adequate but minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with action. Two sentences total. The 'Returns:' section is slightly redundant given output schema exists, but overall efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Appropriate for complexity: 0 params, output schema present. Description provides essential domain context (dining companions, dietary restrictions) not present in structural fields. Sufficient for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters present per empty schema. Baseline score applies; description correctly implies no filtering arguments by stating 'all saved' companions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Excellent specificity: 'List' (verb) + 'saved dining companions' (resource) + 'dietary restrictions and notes' (scope/data). Clearly distinguishes from generic 'manage_person' sibling by emphasizing bulk retrieval of preferences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or contrast with siblings. Missing direction such as 'use manage_person to edit individual companions' or when filtering is needed vs listing all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_visitA
Log a restaurant visit (for places booked outside the system). Visits booked through this assistant are logged automatically.
Args: restaurant_name: Name of the restaurant you visited. date_str: Date of visit, e.g. "2026-02-10" or "last Tuesday" (default: today). party_size: Number of diners. companions: Names of who you dined with, e.g. ["Alice", "Bob"]. cuisine: Type of cuisine, e.g. "italian", "mexican".
Returns: Confirmation with visit ID for adding a review.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| date_str | No | ||
| party_size | No | ||
| companions | No | ||
| cuisine | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so full burden on description. It discloses the mutation (logging) and return value (visit ID), but lacks details on idempotency, duplicate handling, or persistence guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured Args/Returns format is appropriate for 0% schema coverage. Every section earns its place, though the docstring-style format is slightly verbose compared to prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete given constraints: handles zero schema coverage via Args block, references output schema value (visit ID), and connects to sibling functionality (adding reviews). Could explicitly reference rate_visit tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args section fully compensates by documenting all 5 parameters with semantic meaning and examples (e.g., date formats, companion array structure). Minor deduction for slight discrepancy between schema default (null) and described default ('today').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with specific verb 'Log' and resource 'restaurant visit', immediately clarifying scope with parenthetical '(for places booked outside the system)' that distinguishes it from automatic logging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when to use ('booked outside the system') and implies when not to use ('Visits booked through this assistant are logged automatically'), though it doesn't explicitly name alternative tools like make_reservation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_reservationA
Book a reservation at a restaurant via Resy or OpenTable. Only call this after the user has confirmed they want to book.
Args: restaurant_name: Name of the restaurant. date: Reservation date — "2026-02-14", "Saturday", etc. time: Reservation time — "19:00" or "7:00 PM". party_size: Number of diners. special_requests: E.g. "birthday", "quiet table".
Returns: Confirmation with details and confirmation number.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| date | Yes | ||
| time | Yes | ||
| party_size | No | ||
| special_requests | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions external platforms and return format but fails to disclose critical behavioral traits: requires prior credential storage (evident from store_*_credentials siblings), potential API costs (api_costs sibling exists), error handling for unavailable slots, and idempotency concerns. Lacks disclosure of mutation consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear purpose statement upfront followed by constraint. Args section is necessary given poor schema coverage. Returns section is somewhat redundant given output schema exists, and docstring format adds slight verbosity, but overall efficient with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core functionality and all parameters well. However, for a complex external integration tool with 5 parameters and authentication dependencies (evident from sibling tools), it lacks critical context about credential prerequisites, cost implications, and error scenarios that would help an agent handle failures gracefully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args section comprehensively compensates by documenting all 5 parameters with clear semantics and concrete examples (e.g., date formats '2026-02-14'/'Saturday', time formats '19:00'/'7:00 PM', special_requests examples). Essential given schema lacks descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Book a reservation at a restaurant via Resy or OpenTable' with specific verb (book), resource (reservation/restaurant), and platform mechanism. Clearly distinguishes from siblings like check_availability (query) and cancel_reservation (deletion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states prerequisite 'Only call this after the user has confirmed they want to book', preventing premature invocation. However, omits mention that check_availability should logically precede booking and fails to reference credential storage requirements implied by store_resy_credentials/store_opentable_credentials siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_blacklistA
Add or remove restaurants from your blacklist. Blacklisted restaurants will never appear in search results or recommendations.
Args: restaurant_name: Name of the restaurant. action: "add" to blacklist, "remove" to un-blacklist. reason: Why you're blacklisting (for your records).
Returns: Confirmation of the action.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| action | No | add | |
| reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and successfully discloses the side effect on search/recommendation results and the personal scope ('your blacklist'). However, it lacks details on idempotency, error handling for invalid restaurant names, or persistence guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a structured docstring format with clear Args and Returns sections. It is front-loaded with the core purpose and maintains appropriate length, though the Returns section is somewhat redundant given the output schema context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters with zero schema coverage, the description adequately compensates with Args documentation. It covers the tool's primary effect and return confirmation, appropriate for a moderately complex mutation tool with an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args section compensates effectively by documenting all three parameters: it clarifies restaurant_name, provides the specific enum values for action ('add'/'remove'), and explains reason's purpose. This adds substantial value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with specific verbs ('Add or remove') and the resource ('restaurants from your blacklist'), then explains the functional consequence ('will never appear in search results or recommendations') which distinguishes it from sibling tools like manage_wishlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the side effect explanation (use when you want to hide restaurants from search), but lacks explicit when-not guidance or direct comparison to siblings like manage_wishlist or search_restaurants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_groupA
Create, update, or remove a named group of dining companions.
Args: group_name: Name for the group, e.g. "work_team", "family". action: "add" to create/update, "remove" to delete the group. members: List of people names (must already be saved via manage_person).
Returns: Confirmation with group details and merged dietary restrictions.
| Name | Required | Description | Default |
|---|---|---|---|
| group_name | Yes | ||
| action | No | add | |
| members | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and successfully discloses key behaviors: 'add' performs an upsert (create/update), 'remove' deletes, and return values include 'merged dietary restrictions'. It also notes the referential integrity constraint on members.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a standard docstring format with clear Args and Returns sections that are easy to parse. The Returns section is potentially redundant given the output schema exists, but the structure remains efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a 3-parameter tool: covers operational semantics, prerequisite workflows, constraint handling, and return value structure. The description adequately compensates for the lack of schema annotations and the missing title field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the Args block fully compensates by documenting all three parameters: group_name includes examples ('work_team'), action maps values to CRUD operations ('add' to create/update), and members specifies the data type and external dependency constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with specific verbs ('Create, update, or remove') and the exact resource being managed ('named group of dining companions'), clearly distinguishing it from siblings like 'manage_person' (individuals) and 'list_groups' (read-only operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisite guidance that members 'must already be saved via manage_person', establishing a clear workflow dependency. However, it lacks explicit guidance on when to prefer 'list_groups' for verification or the specific consequences of duplicate group names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_personA
Add, update, or remove a dining companion.
Args: name: Person's name (case-insensitive matching). action: "add" to create/update, "remove" to delete. dietary_restrictions: Their restrictions, e.g. ["nut_allergy", "vegan"]. no_alcohol: True if they don't drink alcohol. notes: Any other notes, e.g. "Prefers window seats".
Returns: Confirmation of the action taken.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| action | No | add | |
| dietary_restrictions | No | ||
| no_alcohol | No | ||
| notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds: it discloses case-insensitive name matching, upsert behavior (add creates OR updates), destructive capability (remove), and return value (confirmation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a structured docstring format (Args/Returns) that efficiently packs information. Slightly more verbose than pure prose but appropriate given the schema coverage gap; zero wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a CRUD person-management tool: covers all parameters, return values, and behavioral quirks. Given the 0% schema coverage, the description successfully provides everything needed for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Exceptional compensation for 0% schema coverage: documents all 5 parameters with rich semantics including examples (e.g., ['nut_allergy', 'vegan']), allowed values ('add'/'remove'), and behavior (case-insensitive).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with specific verbs (Add, update, remove) and a clear resource (dining companion), distinguishing it from siblings like list_people (read-only) and manage_group (group-level).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear internal usage guidance for the 'action' parameter (add vs remove) and explains that 'add' creates or updates, but lacks explicit comparison to sibling tools like list_people or manage_group.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_wishlistA
Add or remove restaurants from your wishlist — places you want to try in the future. Wishlisted restaurants get a boost in recommendations when you're nearby.
The restaurant must already appear in search results (search first).
Args: restaurant_name: Name of the restaurant. action: "add" to wishlist, "remove" to un-wishlist. notes: Free-text notes (e.g. "get the tasting menu"). tags: Comma-separated tags for filtering, e.g. "date night, special occasion". Common tags: date night, group dinner, special occasion, brunch, solo, outdoor, weeknight.
Returns: Confirmation of the action.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| action | No | add | |
| notes | No | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden, revealing the side effect ('boost in recommendations'), return type ('Confirmation'), and prerequisite constraint. Lacks details on idempotency or error states, but covers primary behavioral traits well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Follows a logical structure (purpose → side effects → prerequisites → parameters → returns). The common tags list is lengthy but justified as it substitutes for absent schema enums. No tautological waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (4 parameters, mutation semantics) and presence of output schema hints ('Returns:' section), the description adequately covers the workflow chain (search→wishlist→recommendation boost). Would benefit from explicitly referencing 'my_wishlist' for verification, but remains complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the text fully compensates by providing rich semantics: 'action' values explained ('add' vs 'remove'), 'notes' includes concrete example ('get the tasting menu'), and 'tags' documents format ('comma-separated'), examples, and enumerates common values serving as surrogate enum constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specifies the exact mutating actions (add/remove) on the wishlist resource and distinguishes from sibling tools like 'my_wishlist' (view-only) and 'search_restaurants' (discovery), while clarifying these are 'places you want to try in the future' vs immediate reservations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisite workflow: 'The restaurant must already appear in search results (search first)', directing users to the 'search_restaurants' sibling tool before invocation, and implies temporal use (future dining plans vs immediate booking).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_reservationsA
Show all your upcoming reservations across Resy and OpenTable.
Returns: Formatted list of upcoming reservations with dates, times, party sizes, and confirmation numbers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. It valuablely specifies the dual-platform scope (Resy/OpenTable) and return structure. However, it omits safety characteristics (read-only vs destructive), rate limits, or the definition of 'upcoming' time window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly constructed sentences with purpose front-loaded and return values secondary. No redundant words. Appropriate length for a parameter-less retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple retrieval tool with existing output schema (per context signals). The description covers data source systems and return format. Minor gap: lacks explicit temporal scope definition for 'upcoming' and read-only safety assurance given the presence of destructive siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters present, establishing baseline of 4 per rubric. Description correctly implies no filtering is available (returns 'all'), which matches the empty schema. No parameter explanation required or provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (Show) and resource (reservations) with specific scope (upcoming, across Resy/OpenTable). Distinguishes from visit_history (past) and cancel/make siblings by specifying read-only retrieval, though 'Show' is slightly less precise than 'List'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use versus alternatives like visit_history or my_wishlist. No mention of prerequisites (e.g., requiring stored credentials from the store_resy_credentials or store_opentable_credentials siblings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_wishlistA
Show your restaurant wishlist, optionally filtered by tag.
Args: tag: Filter by a single tag (e.g. "date night").
Returns: Numbered list of wishlisted restaurants with details.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return format ('Numbered list...with details') which adds value, but omits behavioral details like empty result handling, pagination, or caching behavior expected for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose statement, Args documentation, and Returns documentation. Every sentence earns its place; no verbosity or tautology. Front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read operation with existing output schema, the description provides adequate coverage: it explains the parameter, the filtering behavior, and the return format. While additional behavioral details would help, it meets the bar for completeness given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates effectively via the 'Args:' section, explaining 'tag' semantics ('Filter by a single tag') and providing a concrete example ('date night'). This compensates for the undocumented schema property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Show' and resource 'restaurant wishlist' establish specific purpose. However, it fails to explicitly distinguish from sibling 'manage_wishlist' (modification vs. viewing) or clarify read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions optional filtering ('optionally filtered by tag') but lacks explicit guidance on when to use this tool versus alternatives like 'search_restaurants' or 'manage_wishlist'. Sibling differentiation is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rate_visitA
Rate a restaurant you recently visited. Used to improve future recommendations.
Args: restaurant_name: Name of the restaurant. would_return: True if you'd go back, False if not. overall_rating: 1-5 stars (optional). noise_level: "quiet", "moderate", or "loud" — helps calibrate future recs. dishes: List of dishes with ratings, e.g. [{"name": "cacio e pepe", "rating": 5, "order_again": true}]. notes: Any additional notes, e.g. "Great for date night".
Returns: Confirmation that the review was saved.
| Name | Required | Description | Default |
|---|---|---|---|
| restaurant_name | Yes | ||
| would_return | Yes | ||
| overall_rating | No | ||
| noise_level | No | ||
| dishes | No | ||
| notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries full burden. It adequately discloses persistence ('review was saved') and side effects ('improve future recommendations'), but omits error handling, idempotency, or validation rules (e.g., verifying the restaurant exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured docstring format with clear Args/Returns sections. Minor redundancy ('future recs' appears twice). Front-loaded purpose sentence is effective. Returns section is present despite output schema existing, which is acceptable but not strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters with empty schema, the description achieves completeness by fully documenting each parameter's semantics and providing return value description. Lacks only advanced behavioral edge cases (duplicate ratings, restaurant existence validation).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Excellent compensation for 0% schema description coverage. Documents all 6 parameters with constraints (1-5 stars, enum values for noise_level), optionality markers, and rich examples including JSON structure for dishes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb ('Rate') + resource ('restaurant') + scope ('recently visited'). Distinguishes from sibling 'log_visit' by implying evaluation vs mere recording, and from 'get_recommendations' by being a write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides implied context ('recently visited', 'improve future recommendations') suggesting when to use, but lacks explicit guidance distinguishing it from 'log_visit' or prerequisites like whether the visit must be logged first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_for_groupA
Search for restaurants suitable for a saved group. Automatically merges all members' dietary restrictions and finds restaurants that work for everyone.
Args: group_name: Name of the saved group (e.g., "work_team", "family"). location: Where to search near. date: Date for the dinner. time: Preferred time. cuisine: Specific cuisine (optional).
Returns: Restaurant recommendations with notes on dietary compatibility.
| Name | Required | Description | Default |
|---|---|---|---|
| group_name | Yes | ||
| location | No | work | |
| date | No | today | |
| time | No | 18:00 | |
| cuisine | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully explains the key behavioral trait of automatically merging dietary restrictions across group members and discloses the return value structure ('Restaurant recommendations with notes on dietary compatibility'). It does not address potential rate limits or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the value proposition front-loaded in the first two sentences, followed by Args and Returns sections. While the docstring format is slightly verbose, it is necessary given the zero schema coverage; every sentence adds value either explaining core logic or parameter semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description appropriately focuses on the tool's unique group-based filtering logic rather than return value details. It adequately covers the single required parameter constraint (group_name) and the tool's specific domain (dietary compatibility).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args block in the description provides crucial semantic meaning for all five parameters (e.g., 'group_name: Name of the saved group,' 'location: Where to search near'), fully compensating for the lack of JSON schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Search[es] for restaurants suitable for a saved group' and distinguishes itself from the sibling 'search_restaurants' by emphasizing automatic merging of 'members' dietary restrictions.' However, it stops short of explicitly naming the sibling tool or contrasting use cases directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by referencing 'saved group,' which suggests prerequisite setup via 'manage_group.' However, it lacks explicit guidance on when to prefer this over 'search_restaurants' (e.g., for individuals vs. groups) or warnings about required group existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_restaurantsA
Search for restaurants matching your criteria near a location. Automatically applies your dietary restrictions, cuisine preferences, minimum rating threshold, and blacklist.
Args: cuisine: Type of food, e.g. "italian", "mexican", "sushi". Leave empty to search all cuisines. location: Where to search near. Use "home", "work", or a specific NYC address. party_size: Number of diners. price_max: Maximum price level 1-4. Leave empty to use your saved price preferences. outdoor_seating: True if outdoor seating is specifically desired. query: Free-text search for specific restaurants or features, e.g. "rooftop bar", "Carbone". max_results: Maximum restaurants to return (default 5, max 10).
Returns: Formatted list of matching restaurants with ratings, prices, walking distance, and cuisine info.
| Name | Required | Description | Default |
|---|---|---|---|
| cuisine | No | ||
| location | No | home | |
| party_size | No | ||
| price_max | No | ||
| outdoor_seating | No | ||
| query | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Adds valuable behavioral context: automatically applies saved dietary restrictions, cuisine preferences, rating thresholds, and blacklist. Describes return payload composition (ratings, prices, walking distance). Missing operational details: no mention of result caching, API rate limits, empty result handling, or whether 'blacklist' refers to personal or group exclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear Args/Returns sections. Front-loaded purpose statement followed by auto-filtering behavior. Parameter descriptions are dense but necessary given zero schema coverage. Single minor redundancy: Returns section documents output format despite existence of output schema, though this adds field-level detail that may supplement the structured schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for tool complexity (7 optional parameters, behavioral auto-filtering). Compensates completely for lack of schema descriptions via Args section. Specifies return data fields. Could improve by noting NYC-only limitation implied by location parameter examples, and error handling for invalid addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Exemplary compensation for 0% schema description coverage. Documents all 7 parameters with rich semantics: 'location' accepts magic strings ('home', 'work') or NYC addresses; 'price_max' uses 1-4 scale with fallback to saved preferences; 'max_results' caps at 10; 'query' supports free-text features. Examples and constraints provided for every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb-resource-scope: 'Search for restaurants matching your criteria near a location.' Specifies automatic application of dietary restrictions and blacklist, distinguishing it from generic search tools. However, it does not explicitly differentiate from sibling 'get_recommendations' or 'search_for_group' despite their functional overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage context through parameter documentation (e.g., 'Leave empty to search all cuisines'), but lacks explicit when-to-use guidance contrasting with 'get_recommendations' (algorithmic curation vs. criteria-based search) or 'search_for_group' (group context vs. individual). No exclusion criteria or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_preferencesB
Set up or update your restaurant preferences. Call this when the user first configures the assistant or wants to change their profile.
Args: name: User's first name. home_address: Home address for "near home" searches. work_address: Work address for "near work" searches. dietary_restrictions: E.g. ["vegetarian", "nut_allergy"]. favorite_cuisines: Cuisines you love, e.g. ["italian", "korean"]. cuisines_to_avoid: Cuisines you dislike, e.g. ["fast_food"]. price_levels: Acceptable price levels 1-4, e.g. [2, 3]. noise_preference: "quiet", "moderate", or "lively". seating_preference: "indoor", "outdoor", or "no_preference". max_walk_minutes: Maximum walking time from location (default 15). default_party_size: Usual party size (default 2). rating_threshold: Minimum Google rating to show (default 4.0).
Returns: Confirmation message with saved preferences summary.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| home_address | No | ||
| work_address | No | ||
| dietary_restrictions | No | ||
| favorite_cuisines | No | ||
| cuisines_to_avoid | No | ||
| price_levels | No | ||
| noise_preference | No | moderate | |
| seating_preference | No | no_preference | |
| max_walk_minutes | No | ||
| default_party_size | No | ||
| rating_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return value ('Confirmation message with saved preferences summary') and documents all parameters, but omits critical behavioral details like whether calling this overwrites existing preferences, merges data, or requires specific authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses an appropriate docstring format with clear Args and Returns sections. Well-structured for a 12-parameter tool, though the Returns section could be more detailed. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 params) and lack of schema descriptions, the parameter documentation is thorough. However, it critically lacks differentiation from the 'update_preferences' sibling, which is essential context for a tool that claims to handle updates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the Args section comprehensively documents all 12 parameters with types, examples (e.g., '["vegetarian", "nut_allergy"]'), and semantic context that compensates completely for the bare JSON schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it handles 'restaurant preferences' with specific verbs ('Set up or update'), but it actively claims functionality ('update') that overlaps with the sibling tool 'update_preferences', creating ambiguity about tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies when to call the tool ('when the user first configures the assistant or wants to change their profile'), but fails to mention the sibling 'update_preferences' or clarify when to prefer that tool over this one, despite the functional overlap implied by 'or update'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_opentable_credentialsA
Save your OpenTable DAPI credentials for automated booking.
The CSRF token (x-csrf-token) is required for booking. To get it:
Log into opentable.com in your browser
Open DevTools → Network tab
Make any action (search, etc.)
Find any request to
/dapi/and copy thex-csrf-tokenheader value
Recommended: Set OPENTABLE_CSRF_TOKEN as an environment variable so it never appears in chat history.
Args: csrf_token: The x-csrf-token value from your browser session (or set OPENTABLE_CSRF_TOKEN env var). email: Your OpenTable account email (or set OPENTABLE_EMAIL env var). first_name: First name for reservations. last_name: Last name for reservations. phone: Phone number for reservations.
Returns: Confirmation that credentials were saved.
| Name | Required | Description | Default |
|---|---|---|---|
| csrf_token | No | ||
| No | |||
| first_name | No | ||
| last_name | No | ||
| phone | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It successfully explains the security-sensitive nature (credential persistence) and privacy implications (chat history exposure risk). However, it omits details about storage persistence scope, encryption, or error conditions that would be valuable for a credential storage tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Excellent structure with front-loaded purpose statement, followed by necessary setup instructions, then Args/Returns sections. The CSRF extraction steps are lengthy but essential for usability. No redundant or wasted language—every sentence provides necessary guidance or context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive coverage for a credential management tool: explains purpose, security best practices, parameter semantics, return values, and setup prerequisites. Despite having no annotations and a schema with no descriptions, the description provides everything needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantic meaning for all 5 parameters in the Args section. It explains not just what each parameter is (csrf_token, email, etc.) but also environmental variable alternatives and the purpose of personal data fields (reservations).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the specific action (save/store) and resource (OpenTable DAPI credentials) for the specific purpose of automated booking. The name and description clearly distinguish this from the sibling tool 'store_resy_credentials' by specifying the OpenTable platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides excellent step-by-step instructions for obtaining the CSRF token and strongly recommends environment variables to avoid exposing secrets in chat history. Lacks explicit contrast with 'store_resy_credentials' regarding when to use each platform, though this is implicitly clear from the naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_resy_credentialsA
Save your Resy account credentials for automated booking.
Recommended: Set RESY_EMAIL and RESY_PASSWORD as environment variables (or in your .env file) so credentials never appear in chat history. If env vars are set, call this tool with no arguments.
Credentials are encrypted and stored locally — never sent anywhere except to Resy's own servers for authentication. The password is NOT persisted after authentication.
Args: email: Your Resy account email (or set RESY_EMAIL env var). password: Your Resy account password (or set RESY_PASSWORD env var).
Returns: Confirmation that credentials were saved and verified, or an error if login failed.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden and excels: it explains encryption, local-only storage, that data is only sent to Resy servers, and crucially that 'The password is NOT persisted after authentication.' It also clarifies immediate verification behavior ('error if login failed').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and well-structured with clear paragraph breaks and bold headers. Every sentence earns its place, particularly the security guarantees which are critical for a credential tool. Slightly verbose formatting with Args/Returns sections, but necessary given the lack of schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Excellent completeness for a sensitive security operation. Covers purpose, security model, storage lifecycle (password not persisted), parameter semantics, and return behavior. Since output schema exists, the brief return summary is appropriate and adds context about verification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description comprehensively compensates by documenting both parameters in the Args section and explaining their relationship to environment variables ('or set RESY_EMAIL env var'), which the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Save' with the exact resource 'Resy account credentials' and clarifies the purpose is 'for automated booking.' It clearly distinguishes from the sibling store_opentable_credentials by specifying the Resy platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to call with no arguments ('If env vars are set, call this tool with no arguments') versus providing credentials inline. However, it does not explicitly mention when to prefer this over store_opentable_credentials, though the distinction is implied by the platform names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_preferencesA
Update specific preferences without resetting everything. Only provided fields are changed; everything else stays the same.
Args: dietary_restrictions: Replace full dietary list. add_favorite_cuisine: Add a single cuisine to favorites. remove_favorite_cuisine: Remove a cuisine from favorites. add_avoid_cuisine: Add a cuisine to avoid list. noise_preference: "quiet", "moderate", or "lively". seating_preference: "indoor", "outdoor", or "no_preference". rating_threshold: Minimum Google rating. default_party_size: Usual party size. max_walk_minutes: Maximum walking time.
Returns: Confirmation of what was changed.
| Name | Required | Description | Default |
|---|---|---|---|
| dietary_restrictions | No | ||
| add_favorite_cuisine | No | ||
| remove_favorite_cuisine | No | ||
| add_avoid_cuisine | No | ||
| noise_preference | No | ||
| seating_preference | No | ||
| rating_threshold | No | ||
| default_party_size | No | ||
| max_walk_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It clearly discloses the PATCH-like merge behavior and states the return value ('Confirmation of what was changed'). Could improve by explicitly stating this is non-destructive to unspecified fields or mentioning idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with 'Args:' and 'Returns:' sections. Front-loaded purpose statement. Slightly verbose due to 9 parameters requiring inline documentation, but every line earns its place given the schema gap. Could be tightened by removing boilerplate 'Args:' and 'Returns:' labels.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive given complexity: documents all 9 optional parameters, explains partial-update semantics for the PATCH-like behavior, and mentions return confirmation. Output schema exists per context signals, so return value need not be detailed further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description compensates exceptionally by documenting all 9 parameters with specific semantics: operation types (Replace full list vs Add/Remove single items), enum values for noise/seating preferences, and clear descriptions for thresholds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Update') + resource ('preferences') + specific scope constraint ('without resetting everything'). The phrase 'Only provided fields are changed; everything else stays the same' precisely defines the partial-update semantics, distinguishing it from a full replacement operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the critical partial-update pattern ('Only provided fields are changed'), which implicitly guides when to use this vs. a full setup/reset operation. However, it doesn't explicitly reference sibling tools like 'setup_preferences' or 'get_my_preferences' that would provide explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visit_historyB
Show your recent restaurant visit history.
Args: days: How many days back to look (default 90). cuisine: Filter by cuisine type (optional).
Returns: Formatted list of recent visits with dates, ratings, and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| cuisine | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return format ('Formatted list...with dates, ratings, and notes'), which is helpful. However, omits pagination behavior, data freshness guarantees, or what happens when no history exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses structured 'Args:' and 'Returns:' sections that efficiently organize information. First sentence establishes purpose immediately. Slightly verbose repetition of default values already present in schema, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Appropriate for a read-only query tool with two optional parameters. Explains return values despite existence of output schema (per context signals). Could mention pagination for large histories, but sufficient for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates by documenting both parameters: 'days' includes semantics (lookback period) and default value; 'cuisine' notes filtering purpose. Loses a point for vague cuisine value format (no examples or constraints provided).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb 'Show' and resource 'restaurant visit history'. However, lacks explicit differentiation from siblings like 'log_visit' (which records visits) or 'my_reservations' (which could overlap conceptually).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like 'my_reservations' or 'log_visit'. Missing prerequisites (e.g., authentication requirements) or exclusion criteria.
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.
23 tool updates
v0.1.0- First observed
api_costs - First observed
cancel_reservation - First observed
check_availability - First observed
get_my_preferences - First observed
get_recommendations - First observed
list_groups - First observed
list_people - First observed
log_visit - First observed
make_reservation - First observed
manage_blacklist - First observed
manage_group - First observed
manage_person - First observed
manage_wishlist - First observed
my_reservations - First observed
my_wishlist - First observed
rate_visit - First observed
search_for_group - First observed
search_restaurants - First observed
setup_preferences - First observed
store_opentable_credentials - First observed
store_resy_credentials - First observed
update_preferences - First observed
visit_history
TDQS
Scored across 23 tools
Most tools have distinct purposes, but some overlap exists. For example, 'search_restaurants' and 'get_recommendations' both provide restaurant suggestions, though the latter is personalized and contextual. Similarly, 'check_availability' and 'search_for_group' both find available restaurants, but the latter focuses on group compatibility. Descriptions help clarify these distinctions, but an agent might occasionally misselect between them.
Tool names follow a consistent snake_case pattern with clear verb_noun structures. Examples include 'check_availability', 'manage_blacklist', 'store_resy_credentials', and 'update_preferences'. There are no deviations in naming style, making the set predictable and easy to understand.
With 23 tools, the count is on the higher side but reasonable for the comprehensive dining assistant domain. It covers reservations, preferences, groups, history, and credentials management. While slightly heavy, each tool appears to serve a specific function without obvious redundancy, justifying its inclusion.
The toolset provides complete coverage for a dining assistant, including CRUD operations for reservations, preferences, groups, and wishlists. It handles search, recommendations, availability checks, visit logging, rating, and credential management. There are no apparent gaps; agents can perform end-to-end workflows from setup to booking to review.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for Meitre restaurant reservations.
AI-native restaurant discovery: verified/menu-indexed/discovered tiers + signed allergy-safety data.
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
Related MCP Servers
- AlicenseAqualityFmaintenanceAn AI-powered server that helps users discover and book restaurants based on location, cuisine preferences, mood, and event type, with integration to Google Maps Places API for accurate recommendations.516MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for anonymous OpenTable restaurant discovery and availability checking, enabling restaurant search, autocomplete, and table availability queries without an account.635 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that integrates with Google Places API to enable AI clients to search for restaurants and get food recommendations based on location and preferences.1-
- AlicenseNot gradedqualityDmaintenancePersonalized restaurant recommendations, table bookings, and delivery via MCP, CLI, or API, learning user taste and acting proactively.MIT