Skip to main content
Glama
SATISHUD

Atithi Driver Booking MCP Server

by SATISHUD

Atithi Driver Booking MCP Server

TypeScript Model Context Protocol SQLite Tests

Production-ready Model Context Protocol (MCP) server for the Atithi Platform, providing an AI-powered automated driver dispatch and cab booking system for hotel guests.


Table of Contents


Related MCP server: Beckn Mobility MCP Server

Overview

The Atithi Driver Booking MCP Server allows AI Agents (like Claude Desktop or Voice Assistants) to seamlessly manage cab bookings, estimate fares using a $20 \times 20$ distance matrix, and dispatch cab drivers using a 2-tier priority matching algorithm (Hotel Preferred Pool $\rightarrow$ Global Pool).

Key Features

  • 18 Automated MCP Tools: Covering driver onboarding, preferred hotel mapping, fare pricing, 2-tier dispatch, call attempt tracking, and ride lifecycle completion.

  • 2-Tier Dispatch Algorithm: Prioritizes hotel preferred drivers before searching the global driver pool at the pickup location, ordered by driver performance score (driver_score DESC).

  • Driver Score & Penalty Engine: Dynamically awards points (+10 for completion) and applies penalties (-10 for rejection, -20 for driver cancellation) with auto-suspensions (<500 score).

  • Embedded SQLite Persistence: Fast, synchronous local database backed by better-sqlite3.


Architecture

The server communicates via standard I/O (stdio) using JSON-RPC 2.0 protocol specifications defined by Anthropic's Model Context Protocol SDK.

AI Client (Claude Desktop / Voice AI)
  │
  ├─► JSON-RPC over Stdio ──► MCP Server (dist/index.js)
  │                              │
  │                              ├─► Pricing Engine (Matrix Lookup)
  │                              ├─► 2-Tier Dispatch Algorithm
  │                              └─► SQLite Database (better-sqlite3)

For detailed architectural diagrams and state machines, see docs/ARCHITECTURE.md.


Repository Structure

mcpserver3/
├── .gitignore               # Git ignore rules
├── package.json             # NPM scripts and dependencies
├── tsconfig.json            # TypeScript compiler configuration
├── README.md                # Project documentation
├── docs/                    # Technical documentation
│   ├── ARCHITECTURE.md      # Architectural design & PERSISTENCE
│   ├── TOOLS.md             # Complete 18-tool API reference
│   ├── DB_AUDIT_REPORT.md   # Database audit report
│   └── IMPLEMENTATION_PLAN.md # Implementation roadmap
├── src/                     # TypeScript source code
│   ├── config/              # Configuration files
│   ├── tools/               # MCP Tool implementation handlers
│   │   ├── booking.ts       # Booking creation & 2-Tier dispatch
│   │   ├── dispatch.ts      # Call attempt logger & response status
│   │   ├── driver.ts        # Driver onboarding & verification
│   │   ├── hotel.ts         # Preferred driver mapping
│   │   ├── lifecycle.ts     # Ride completion & penalties
│   │   ├── pricing.ts       # Fare estimation & distance matrix
│   │   └── query.ts         # System inspection & status queries
│   ├── db.ts                # SQLite connection & auto-migrations
│   ├── idgen.ts             # Primary key generators
│   ├── index.ts             # Server entry point & stdio transport
│   ├── response.ts          # ToolResult JSON envelope builders
│   ├── seed_distances.ts    # 400 location pair distance seeder
│   ├── seed_expanded_dataset.ts # 150 Drivers & 150 Vehicles dataset generator
│   ├── setup_test_db.ts     # Sandbox DB test seeder
│   ├── test.ts              # 120-test integration test suite
│   ├── types.ts             # TypeScript interfaces & DTO models
│   └── verify.ts            # Verification suite

Installation & Setup

Prerequisites

  • Node.js: v18.0.0 or higher

  • npm: v9.0.0 or higher

Step-by-Step Setup

  1. Clone the repository:

    git clone https://github.com/atithi/driver-booking-mcp.git
    cd driver-booking-mcp
  2. Install dependencies:

    npm install
  3. Build the TypeScript source:

    npm run build

Environment Configuration

The server supports the following environment variable and argument overrides:

Variable / Flag

Description

Default

MCP_TRANSPORT / --transport

Transport mode (stdio or http)

stdio

MCP_PORT / PORT / --port

HTTP server listening port (in http mode)

3000

MCP_HOST / HOST / --host

HTTP server bind host (in http mode)

127.0.0.1

ATITHI_DB_PATH

Absolute path to the SQLite database file

./atithi_dummy_dataset.db


Build & Run Instructions

1. STDIO Mode (Claude Desktop & CLI)

  • Start MCP server (stdio transport):

    npm start
  • Development mode (compile & start):

    npm run dev

2. Streamable HTTP Mode (Atithi Platform Integration)

  • Start MCP server (Streamable HTTP transport on http://127.0.0.1:3000/mcp):

    npm run start:http
  • Custom Port/Host via CLI flags:

    node dist/index.js --transport=http --port=8080 --host=0.0.0.0

3. Docker Container Deployment

  • Build Production Docker Image:

    docker build -t atithi-driver-booking-mcp:latest .
  • Run Container (Default Streamable HTTP Mode on Port 3000):

    docker run -d -p 3000:3000 --name atithi-mcp-server atithi-driver-booking-mcp:latest
  • Run with Custom Host SQLite Database Volume Mounting:

    docker run -d -p 3000:3000 \
      -v /path/to/host/atithi_dummy_dataset.db:/app/atithi_dummy_dataset.db \
      -e ATITHI_DB_PATH=/app/atithi_dummy_dataset.db \
      --name atithi-mcp-server atithi-driver-booking-mcp:latest
  • Run with Custom Port and Host Environment Overrides:

    docker run -d -p 8080:8080 \
      -e MCP_PORT=8080 \
      -e MCP_HOST=0.0.0.0 \
      --name atithi-mcp-server atithi-driver-booking-mcp:latest
  • Test HTTP MCP Endpoint from Host:

    curl -X POST http://127.0.0.1:3000/mcp \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Verification & Testing

The repository contains an automated verification suite and an integration test suite covering 120 test cases.

  • Run Quick System Verification:

    npm run verify
  • Run Full Integration Test Suite (120 Tests):

    npm test

MCP Tools Summary

Category

Tools Included

Driver Management

register_driver, verify_driver, update_driver_details, update_driver_availability, update_driver_location

Hotel Preferred

add_preferred_driver, remove_preferred_driver

Pricing & Booking

estimate_fare, create_booking

Dispatch Logic

get_next_driver, update_driver_response, timeout_driver_attempt

Ride Lifecycle

complete_booking, cancel_booking

Queries & Inspection

get_driver_details, get_booking_status, list_available_drivers, get_hotel_preferred_drivers, get_driver_attempt_log, get_locations

For full parameter details, refer to docs/TOOLS.md.


Integration with Claude Desktop

To connect this MCP server to Claude Desktop, add the following entry to your %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "atithi-driver-booking": {
      "command": "node",
      "args": [
        "C:/Users/satish u d/Desktop/atithiproject/mcpserver3/dist/index.js"
      ],
      "env": {
        "ATITHI_DB_PATH": "C:/Users/satish u d/Desktop/atithiproject/mcpserver3/atithi_dummy_dataset.db"
      }
    }
  }
}

Documentation & License

Available Tools

20 tools
add_preferred_driverA

Add a Verified driver to a hotel's preferred driver list. Caller must be a Hotel Manager for that hotel.

ParametersJSON Schema
NameRequiredDescriptionDefault
hotel_idYesHotel ID
driver_idYesDriver ID to add
caller_user_idYesUser ID of the Hotel Manager making this request

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It adds the key authorization constraint (Hotel Manager) and implies the driver must already be verified. However, it does not disclose side effects, idempotency, or error conditions that would be relevant for a mutation operation.

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

Conciseness5/5

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

The description is one concise sentence, front-loaded with the core action and resource, and includes the essential authorization requirement. There is no waste or redundancy.

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

Completeness3/5

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

The description covers the main action, resource, and authorization, which is adequate for a simple add operation. However, it lacks context on behavior for edge cases (e.g., driver already on list) and potential side effects, which are not covered by annotations or an output schema.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by specifying that the driver must be 'Verified,' which augments the driver_id parameter description and informs correct usage. This extra semantic justifies a score above baseline.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Add a Verified driver to a hotel's preferred driver list.' It uses a specific verb ('Add') and identifies the resource (preferred driver list), which effectively distinguishes it from sibling tools like remove_preferred_driver and get_hotel_preferred_drivers.

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

Usage Guidelines4/5

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

The description provides clear context by stating 'Caller must be a Hotel Manager for that hotel,' which defines the required role and permission. However, it does not explicitly discuss alternatives or when-not-to-use scenarios, though the tool name and purpose make its use case evident.

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

cancel_bookingA

Cancel a booking. If cancelled by Driver, applies a -20 score penalty. If no driver was found, set cancelled_by to 'No Driver Available'.

ParametersJSON Schema
NameRequiredDescriptionDefault
booking_idYesBooking ID to cancel
cancelled_byYesWho is cancelling

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It reveals a significant side effect (a -20 score penalty when Driver cancels) and a special case for the cancelled_by field. This goes beyond just saying 'cancel' and gives agents essential context about consequences.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action, and each sentence provides necessary information. There is no redundancy or fluff.

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

Completeness4/5

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

For a simple 2-parameter tool with no output schema, the description covers the core action, a key side effect, and a conditional parameter value. It's missing potential details like what happens after cancellation (e.g., booking status change), but the essentials are present.

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

Parameters4/5

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

Although the schema already documents both parameters, the description adds meaning beyond the enum by explaining the score penalty for 'Driver' and the special 'No Driver Available' value. This helps agents choose the correct cancelled_by value for different scenarios.

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

Purpose5/5

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

The description opens with 'Cancel a booking' – a specific verb+resource that immediately identifies the tool's function. It also distinguishes from sibling tools like create_booking, complete_booking, and get_booking_status by focusing on cancellation.

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

Usage Guidelines4/5

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

The description provides a specific usage condition ('If no driver was found, set cancelled_by to...') that guides correct invocation. It doesn't explicitly name alternatives or exclusions, but the tool has no direct sibling that also cancels, so the guidance is adequate.

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

complete_bookingA

Mark a booking as completed when the guest reaches the destination. Frees the driver and awards +10 score.

ParametersJSON Schema
NameRequiredDescriptionDefault
booking_idYesBooking ID to complete

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It reveals key side effects: freeing the driver and awarding +10 score. It does not mention irreversibility or prerequisites, but the disclosed effects go beyond the basic schema and help the agent understand consequences.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It efficiently states the action, condition, and consequences in a clear order. Every word earns its place, making it an excellent example of concise writing.

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

Completeness4/5

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

The tool is simple (one parameter, no output schema), and the description covers the action, trigger, and effects. While it could mention whether the booking must be in a specific status, the provided context is sufficient for an agent to use it correctly. The description is complete enough for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description 'Booking ID to complete' is simple but adequate. The tool description does not add further nuance about the parameter, but since the schema is clear and the tool only has one parameter, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's action: 'Mark a booking as completed' when the guest reaches the destination. This specific verb+resource distinguishes it from sibling tools like cancel_booking or create_booking, and the additional effects (frees driver, awards score) further clarify its purpose.

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

Usage Guidelines4/5

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

The description provides a clear usage context: use this when the guest reaches the destination. It does not explicitly exclude alternative scenarios like cancellations, but the trigger condition is explicit enough to guide the agent. Sibling tools like cancel_booking handle other lifecycle events, so the context is sufficiently differentiated.

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

create_bookingA

Create a new guest ride booking with passenger count and estimated fare. Returns booking_id. Then call get_next_driver() to begin driver search.

ParametersJSON Schema
NameRequiredDescriptionDefault
hotel_idYesHotel ID making the booking
guest_nameYesGuest full name
booking_typeYesType of ride
estimated_fareNoOptional confirmed estimated fare in INR
passenger_countNoNumber of passengers (default: 1)
pickup_datetimeNoOptional: Pickup date and time in format 'YYYY-MM-DD HH:MM'. Defaults to current real-time timestamp if omitted.
drop_location_idYesDrop-off location ID (or 'HOTEL')
pickup_location_idYesPickup location ID (or 'HOTEL')
required_vehicle_typeNoOptional required vehicle type

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It communicates that the tool creates a booking, returns a booking_id, and that driver search is a separate step, but it does not disclose side effects, prerequisites, or error conditions expected of a mutating operation.

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

Conciseness5/5

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

The description is two concise sentences: the first states the action and key parameters, the second gives a clear follow-up. No wasted words and the core purpose is front-loaded.

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

Completeness4/5

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

Given the richly detailed schema and the description covering the essential return value and next workflow step, the tool is reasonably well understood. However, the absence of annotations and minimal discussion of side effects leaves some contextual gaps for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all parameters. The description mentions only passenger_count and estimated_fare, which are already detailed in the schema, adding no additional semantic value beyond what the structured data provides.

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

Purpose5/5

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

The description uses a specific verb 'Create' with the resource 'guest ride booking', clearly stating the core function. It also mentions key parameters and the return value, and the follow-up instruction 'Then call get_next_driver()' distinguishes it from sibling tools like complete_booking and cancel_booking.

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

Usage Guidelines4/5

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

Provides an explicit next step after creation, indicating when this tool should be used in the workflow. However, it does not mention any alternative tools or conditions under which this tool should not be used, focusing only on the sequence after creation.

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

estimate_fareA

Calculate distance and estimated fare in INR for a ride based on pickup, drop-off, passenger count, and vehicle type. Present this fare to the guest for confirmation before calling create_booking().

ParametersJSON Schema
NameRequiredDescriptionDefault
hotel_idNoOptional: Hotel ID (required if using 'HOTEL' alias)
vehicle_typeNoVehicle type preference
passenger_countNoNumber of passengers (default: 1)
drop_location_idYesDrop-off location ID (or 'HOTEL')
pickup_location_idYesPickup location ID (or 'HOTEL')

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool calculates and presents an estimated fare, and the phrase 'before calling create_booking()' implies this tool does not itself create a booking. However, it does not detail return structure or potential side effects, leaving some ambiguity.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action ('Calculate...'), and every word adds value. It succinctly captures the inputs, output, and workflow without redundancy.

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

Completeness4/5

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

The description is adequate for a fare estimation tool: it covers purpose, key inputs, output (fare in INR), and workflow. However, it lacks explicit return value fields or error conditions, which would be helpful given there is no output schema.

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

Parameters3/5

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

The input schema has 100% description coverage for all 5 parameters, so the schema already documents each parameter. The description adds only 'INR' and 'distance' as output context, which does not significantly enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool calculates distance and estimated fare in INR based on specific inputs, which is a distinct function among the sibling tools. It also explicitly references create_booking(), differentiating it as a pre-booking estimation step.

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

Usage Guidelines4/5

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

The description provides clear workflow guidance by instructing to present the fare to the guest for confirmation before calling create_booking(). It does not explicitly mention alternatives or when not to use it, but the integration with create_booking() establishes a clear usage context.

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

get_booking_statusB

Get the current status and full details of a booking, including assigned driver info.

ParametersJSON Schema
NameRequiredDescriptionDefault
booking_idYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. The verb 'Get' implies a safe read operation, but the description does not explicitly confirm there are no side effects, does not mention required permissions, error handling, or what happens if the booking ID is invalid. This lack of explicit behavioral context is a notable gap.

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

Conciseness4/5

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

The description is a single sentence that is appropriately concise and front-loaded with the core action ('Get the current status and full details'). It earns its place by including the useful detail about driver info. It is not overly verbose, though it could benefit from additional context without becoming bloated.

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

Completeness3/5

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

For a simple read operation with a single parameter, the description provides a reasonable amount of context (what the tool returns). However, it lacks guidance on when to use it relative to sibling tools, does not describe return format, and does not cover error cases. The tool is simple enough that a score of 3 is fair, but not higher due to these omissions.

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

Parameters2/5

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

Schema description coverage is 0% (no parameter descriptions in the schema), and the tool description does not directly explain the 'booking_id' parameter. While it is implicitly understood that the booking_id identifies the booking of interest, the description adds little beyond the schema's bare 'string' type, leaving the agent to infer the parameter's role and any constraints.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get the current status and full details of a booking, including assigned driver info.' This uses a specific verb ('Get') and a specific resource ('booking'), distinguishing it from sibling tools like create_booking, cancel_booking, or get_driver_details.

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

Usage Guidelines3/5

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

The description implies the tool is used when you need booking status or details, but it does not explicitly state when to use it versus alternatives, nor does it provide exclusion criteria or mention related tools. The context is clear enough for a simple lookup, but guidance is implied rather than explicit.

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

get_driver_attempt_logA

Get the full call attempt history for a booking, ordered by attempt number.

ParametersJSON Schema
NameRequiredDescriptionDefault
booking_idYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosure. It adds ordering by attempt number and indicates the full history, but it does not mention return format, whether failed attempts are included, or any pagination behavior.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the core function and includes the key ordering detail. No unnecessary words or repetition.

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

Completeness4/5

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

Given the low complexity (one parameter, no output schema), the description is mostly complete for a simple retrieval tool. However, it could benefit from a brief note on what the returned history contains, such as attempt statuses or timestamps.

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

Parameters4/5

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

The schema has one required parameter, booking_id, and the description links it clearly by saying 'for a booking'. Even though schema coverage is 0%, the sole parameter is self-explanatory and the description reinforces its purpose.

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

Purpose5/5

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

The description clearly states the tool retrieves the full call attempt history for a booking, with a specific verb ('Get') and resource ('call attempt history'). It is distinct from sibling tools like timeout_driver_attempt, which imply individual attempt actions, by emphasizing 'full history'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool compared to alternatives such as timeout_driver_attempt or get_next_driver. The description only states what the tool does, not when it should be invoked.

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

get_driver_detailsA

Get full profile, vehicle info, and performance score for a driver.

ParametersJSON Schema
NameRequiredDescriptionDefault
driver_idYes

TDQS

A3.5/5.0
Behavior3/5

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

There are no annotations, so the description must communicate the tool's behavior. It indicates a read operation via 'Get' and specifies what is returned, but does not disclose side effects, permissions, or output structure. Given the tool's likely read-only nature, the lack of additional behavioral notes is acceptable but not exemplary.

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

Conciseness5/5

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

The description is a single concise sentence that is front-loaded with the action and object. Every word adds meaning, and there is no redundancy or filler.

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

Completeness4/5

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

For a simple getter with one parameter and no output schema, the description covers the main purpose and return categories. However, it lacks any mention of the input parameter or potential edge cases, though these are relatively obvious from the tool name and schema.

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

Parameters1/5

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

The input schema exposes a single required driver_id property with no description, and the description does not mention this parameter at all. With 0% schema coverage and no parameter explanation in the description, the agent receives no guidance on how to supply the driver identifier.

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

Purpose5/5

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

The description uses the specific verb 'Get' with the resource 'driver details' and enumerates the data categories (profile, vehicle info, performance score), making the tool's function unambiguous. It clearly differentiates from sibling tools like update_driver_details or verify_driver by focusing on retrieval of comprehensive data.

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

Usage Guidelines3/5

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

The description implies usage when a complete driver profile is needed but provides no explicit guidance on when to choose this over alternative tools like verify_driver or get_next_driver. No when-not conditions or alternative references are given, leaving the context to be inferred.

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

get_hotel_preferred_driversA

Get all preferred drivers for a hotel, sorted by driver score.

ParametersJSON Schema
NameRequiredDescriptionDefault
hotel_idYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description must carry the behavioral burden. It discloses that the tool returns all preferred drivers and that the results are sorted by driver score, making the read operation and ordering transparent. It does not detail return format or empty-list behavior, but these are minor for a straightforward read.

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

Conciseness5/5

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

The description is a single, concise sentence that fully conveys the purpose and sorting criteria. No wasted words or repetition.

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

Completeness4/5

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

For a tool with one parameter and no output schema, the description captures the essential behavior (retrieving all preferred drivers) and ordering. It does not mention potential empty results or response shape, but these are not critical for the tool's basic usage.

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

Parameters2/5

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

The input schema only defines hotel_id as a required string with no description (0% coverage). The tool description mentions 'for a hotel' but does not explicitly explain that hotel_id is the hotel identifier or any expected format. The description should compensate more for the bare schema.

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

Purpose5/5

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

The description clearly states a specific action ('Get all preferred drivers'), a resource ('for a hotel'), and an additional qualifier ('sorted by driver score'). This distinguishes it from sibling tools like add_preferred_driver, remove_preferred_driver, and list_available_drivers.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when you need the list of preferred drivers for a given hotel) but does not explicitly mention alternatives or exclusion cases. It lacks guidance on how it differs from get_next_driver or list_available_drivers.

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

get_locationsA

Get all available pickup/drop locations. Optionally filter by location type.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_typeNoOptional location type filter

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden. It correctly implies a read-only operation ('Get') and suggests that 'available' is a key qualifier, but it does not disclose any additional behavioral context such as whether the result list is paginated, whether it includes both pickup and drop in a single list, or any potential limitations. For a simple list tool, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the essential information without redundant words. It is appropriately sized for the tool's simplicity.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description adequately explains the tool's purpose and filtering capability. However, since there is no output schema, the description could slightly elaborate on what the returned locations look like (e.g., names, codes), but the current wording is sufficient for basic use.

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

Parameters3/5

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

The input schema already provides 100% coverage with a clear description and enum for 'location_type', so the description's mention of 'filter by location type' adds minimal value beyond the schema. The baseline of 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description uses the specific verb 'Get' with the resource 'all available pickup/drop locations,' making the tool's function unambiguous. It is clearly distinct from all sibling tools, which focus on drivers, bookings, and fares, none of which relate to location listing.

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

Usage Guidelines4/5

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

The description clearly states the primary use case: retrieving pickup/drop locations, and mentions the optional location_type filter. Since no sibling tools overlap functionally, there is no need for explicit alternatives or exclusions. The 'optionally' phrasing conveys that filtering is not required.

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

get_next_driverA

Get the next best available driver for a booking. Searches Preferred Pool first, then Global Pool, matching passenger seating capacity. Returns driver & full vehicle contact info.

ParametersJSON Schema
NameRequiredDescriptionDefault
booking_idYesBooking ID to find a driver for

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the algorithm (search Preferred then Global Pool), the capacity matching constraint, and the return payload (driver & full vehicle contact info). It does not explicitly state whether the operation has side effects, but the 'Get' verb implies read-only, and the description adds meaningful behavioral details.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the primary action, and every sentence adds value. It efficiently conveys the search order, the capacity matching, and the return information without fluff.

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

Completeness4/5

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

For a single-parameter tool with no output schema, the description covers the essential context: purpose, search order, constraints, and return contents. It is complete enough for an agent to decide to call the tool and to understand what outcome to expect. A slight gap is that 'next best' is not fully defined beyond pool order and capacity, but the overall context is solid.

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

Parameters3/5

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

The input schema already fully documents the single parameter 'booking_id' with a clear description. The tool description adds marginal value beyond this, just reiterating that a booking is involved. With 100% schema coverage, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool gets the next best available driver for a booking, specifying the resource and action. It distinguishes itself from siblings like list_available_drivers or get_driver_details by focusing on booking-driven driver selection with a defined search order (Preferred then Global Pool).

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when a driver needs to be allocated to a booking. It explains the search order and capacity matching, giving enough context. However, it does not explicitly mention when not to use it or name alternatives, so it stops short of a 5.

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

list_available_driversB

List all currently available Verified drivers. Optionally filter by current location.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idNoOptional: filter by current location ID

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits. It states the core action but does not mention whether results are sorted, paginated, or include all driver fields. It also does not clarify what 'available' means or if any implicit filters apply, and no side effects or permissions are mentioned.

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

Conciseness5/5

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

The description is a single sentence of nine words. It starts with the primary action and resource, then adds the optional filter. There is no wasted wording or repetition.

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

Completeness3/5

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

For a simple listing tool with one optional parameter and no output schema, the description is minimally adequate but lacks detail on result ordering, pagination, response shape, or clarity on what 'available' means. Given the rich sibling set, it could benefit from a brief behavioral note (e.g., 'Returns all active verified drivers' or 'Read-only operation').

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

Parameters3/5

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

The input schema fully documents the optional location_id parameter with 100% coverage. The description paraphrases the schema ('filter by current location') without adding additional detail such as expected format, matching semantics, or how location nesting works. It meets the baseline of 3, as the schema does the heavy lifting.

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

Purpose5/5

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

The description uses the specific verb 'List' and identifies the resource as 'currently available Verified drivers', which clearly distinguishes it from siblings like get_driver_details (retrieves a single driver) or get_next_driver (selects one for booking). The optional location filter adds additional scope.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus siblings such as get_next_driver, get_driver_details, or get_hotel_preferred_drivers. The description does not mention exclusions, prerequisites, or alternative tools, leaving the agent to infer appropriate usage.

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

register_driverB

Register a new driver and their vehicle in the Atithi system.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address
phoneYesUnique phone number
full_nameYesDriver full name
make_modelYesVehicle make and model
vehicle_typeYesType of vehicle (e.g. SUV, Sedan)
license_numberYesUnique driving license number
seating_capacityYesNumber of passenger seats
current_location_idYesCurrent location ID (from Locations table)
registration_numberYesVehicle registration plate number

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of explaining side effects. It only says 'Register', which implies creation, but does not disclose what happens on duplicate phone/email/license, whether the operation is idempotent, or what response is returned. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no superfluous content. It clearly communicates the core purpose without wasting tokens.

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

Completeness2/5

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

Given the tool's complexity (9 required parameters, no output schema, no annotations), the description is too sparse. It does not explain what 'register' entails—such as success/failure behavior, unique constraints, or workflow implications—leaving the agent with insufficient context for a write operation.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema fully documents all 9 parameters. The description adds no additional meaning beyond grouping them into 'driver and vehicle', so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Register' with the resource 'a new driver and their vehicle' in the 'Atithi system'. This distinguishes it from sibling tools like verify_driver and update_driver_details, which imply different actions on existing drivers.

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

Usage Guidelines3/5

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

The description implies use for adding new drivers, but does not explicitly state when to use this tool versus alternatives such as update_driver_details. No prerequisites, exclusions, or alternative tool recommendations are provided.

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

remove_preferred_driverA

Remove a driver from a hotel's preferred driver list. Caller must be a Hotel Manager for that hotel.

ParametersJSON Schema
NameRequiredDescriptionDefault
hotel_idYesHotel ID
driver_idYesDriver ID to remove
caller_user_idYesUser ID of the Hotel Manager making this request

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses an authorization requirement (caller must be a Hotel Manager) but does not mention side effects, error behavior, or whether the driver must currently be on the list. This adds some value but lacks depth.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and resource, followed by the authorization requirement. No redundancy or filler words.

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

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description covers purpose and authorization. It omits potential details like return value or precondition on driver_id, but remains adequate for the tool's simplicity.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The description adds minimal extra meaning beyond reinforcing that caller_user_id belongs to the Hotel Manager. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

Description uses the specific verb 'Remove' and names the resource 'driver from a hotel's preferred driver list', which distinguishes it from siblings like add_preferred_driver and get_hotel_preferred_drivers.

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

Usage Guidelines4/5

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

The description provides a clear context for use (removing a driver from a hotel's preferred driver list) and states a prerequisite (caller must be a Hotel Manager for that hotel). It doesn't explicitly exclude alternatives but the purpose is unambiguous.

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

timeout_driver_attemptA

Record a 30-second timeout or dropped voice call for a driver. Automatically logs 'No Response' and returns next_action: GET_NEXT_DRIVER.

ParametersJSON Schema
NameRequiredDescriptionDefault
driver_idYesDriver ID whose call timed out
booking_idYesBooking ID
pool_sourceNoWhich pool driver came from

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states that it logs 'No Response' and returns a next_action, which is useful. However, it does not mention any side effects beyond logging (e.g., whether driver availability changes, attempt count increments, or if any permissions are needed). This is a moderate disclosure, but gaps remain.

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

Conciseness5/5

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

The description is two concise sentences, immediately stating the action and its automatic side effect. It is front-loaded with the core purpose and wastes no words.

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

Completeness4/5

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

Given the moderate complexity (3 parameters, no output schema), the description covers the action, the automatic log, and the return value (next_action). It is sufficiently complete for an agent to understand what the tool does and what it returns. It does not elaborate on edge cases or the full response structure, but the key context is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already fully describes each parameter. The description does not add extra meaning to the parameters beyond what the schema provides, fitting the baseline of 3.

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

Purpose5/5

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

The description clearly states the tool's function: 'Record a 30-second timeout or dropped voice call for a driver.' It uses a specific verb ('Record') with a concrete resource (driver call timeout), and the automatic logging of 'No Response' plus the returned next_action distinguishes it from siblings like update_driver_response and get_next_driver.

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

Usage Guidelines4/5

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

The description specifies when to use the tool: when a 30-second timeout or dropped voice call occurs. It does not explicitly mention alternatives or when not to use it, but the condition is clear. The mention of returning next_action: GET_NEXT_DRIVER provides context on how it fits into the workflow. Lacks explicit exclusions, so not a 5.

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

update_driver_availabilityA

Replace a driver's entire weekly schedule. All existing entries are replaced.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduleYesArray of weekly schedule entries
driver_idYesDriver ID

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explicitly states that 'All existing entries are replaced,' which is a critical destructive/replacement behavior. It does not mention permissions, response format, or error conditions, but the core side effect is clearly communicated.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the primary action and followed by a clarifying detail. Every word earns its place, with no redundancy or filler.

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

Completeness4/5

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

For this relatively simple tool with fully documented parameters and no output schema, the description sufficiently conveys the tool's purpose and key destructive effect. It could slightly improve by adding usage guidance, but given the low complexity and high schema coverage, it is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds the key semantic that the schedule array constitutes the entire new schedule, but it does not provide additional per-parameter details beyond what the schema already documents.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Replace a driver's entire weekly schedule.' The second sentence reinforces the full-replacement semantics, distinguishing it from related sibling tools like update_driver_details or update_driver_location.

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

Usage Guidelines3/5

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

The description implies the use case of updating a driver's complete weekly availability, but it does not explicitly state when to use this tool versus alternatives. It does not mention exclusions or provide alternative tool names, though the 'entire weekly schedule' wording helps signal that partial updates are not supported.

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

update_driver_detailsA

Update a driver's personal or vehicle details. Only provide fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoNew email address
phoneNoNew phone number
driver_idYesDriver ID (required)
make_modelNoUpdated make and model
vehicle_typeNoUpdated vehicle type
license_numberNoNew license number
seating_capacityNoUpdated seating capacity
current_location_idNoNew current location ID
registration_numberNoUpdated registration number

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does reveal a key behavior: partial updates (only provided fields change). However, it does not disclose return behavior, validation, permissions, or side effects. This is a meaningful disclosure but leaves significant behavioral context unstated.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action, and contains no filler or redundant schema repetition. Every word earns its place.

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

Completeness3/5

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

The description is adequate for a simple update tool: purpose and partial update behavior are clear, and the schema covers all parameters. However, without annotations or an output schema, the return format and post-update behavior remain undisclosed, and with 9 parameters, slightly more contextual detail would improve completeness.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that only desired change fields need to be provided, which enhances understanding of the optional parameters without repeating each schema description.

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

Purpose4/5

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

The description 'Update a driver's personal or vehicle details' clearly identifies the action and resource, and the scope ('personal or vehicle details') distinguishes it from sibling tools like update_driver_availability and update_driver_location. It is specific and not a tautology, though it doesn't explicitly name alternatives.

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

Usage Guidelines4/5

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

The instruction 'Only provide fields you want to change' provides clear usage guidance for partial updates, implying this tool is for modifying existing driver details and that only changed fields need be supplied. It gives context but does not explicitly list when-not-to-use or alternatives, so it stops short of a 5.

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

update_driver_locationB

Update a driver's current real-time location.

ParametersJSON Schema
NameRequiredDescriptionDefault
driver_idYesDriver ID
location_idYesNew location ID from Locations table

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not state side effects, validation behavior, error handling, or whether it overwrites the existing location. The phrase 'current real-time location' hints at a live update but lacks depth.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler or redundant phrasing. It efficiently conveys the core action, making it easy to parse. The brevity is appropriate for the tool's simplicity.

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

Completeness2/5

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

Given the lack of annotations, no output schema, and a terse description, the tool's complete behavior is not sufficiently explained. It does not mention return values, prerequisites, side effects, or edge cases. Though the tool is simple, the description leaves significant gaps for a mutation operation.

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

Parameters3/5

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

The input schema has 100% coverage, describing both driver_id and location_id adequately ('Driver ID', 'New location ID from Locations table'). The description adds no additional parameter semantics beyond what the schema already provides, so it meets the baseline for high schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('Update') and resource ('driver's current real-time location'), clearly distinguishing it from sibling tools like update_driver_availability and update_driver_details. It precisely identifies the action and the object.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, lacks prerequisites (e.g., driver must exist, driver must be active), and does not mention any exclusions or alternative tools. It simply states the action without any context.

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

update_driver_responseA

Record a driver's response to a booking call. Updates driver score. Returns next_action: RIDE_STARTED or GET_NEXT_DRIVER.

ParametersJSON Schema
NameRequiredDescriptionDefault
responseYesDriver response
driver_idYesDriver ID who was called
booking_idYesBooking ID
pool_sourceYesWhich pool this driver came from
attempt_orderYesSequential number of this call (1-based)
call_placed_atYesISO timestamp when the call was placed

TDQS

A4.2/5.0
Behavior4/5

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

Without annotations, the description discloses the key side effect (driver score update) and the return value with possible enumeration values. It also clarifies that this is a record operation on a call response. It does not delve into failure modes or idempotency, but the disclosed behavior is directly relevant.

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

Conciseness5/5

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

Two sentences, no filler, relevant information front-loaded. Every word earns its place.

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

Completeness4/5

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

The tool has a simple purpose, 6 required parameters, and no output schema. The description explains the return value sufficiently ('next_action' with enumerated values). It doesn't cover edge cases like duplicate responses, but for a straightforward record tool, it's reasonably complete.

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

Parameters3/5

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

The schema already documents all 6 parameters with descriptions and enums (100% coverage). The description adds no parameter-level detail beyond what the schema provides, so baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb ('Record') and resource ('a driver's response to a booking call'), and also notes the side effect (updates driver score) and return value (next_action). It distinguishes itself from sibling tools like update_driver_details or timeout_driver_attempt by focusing on recording responses to calls.

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

Usage Guidelines4/5

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

It implies usage when a driver responds to a booking call, and the return value guides next steps (RIDE_STARTED or GET_NEXT_DRIVER). However, it does not explicitly mention when not to use it or compare to alternatives like timeout_driver_attempt, despite the sibling tool existing.

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

verify_driverB

Admin: Approve or reject a pending driver registration.

ParametersJSON Schema
NameRequiredDescriptionDefault
decisionYesApproval decision
driver_idYesDriver ID to verify

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits on its own. It does mention that this is an admin action, implying permission requirements, but it does not describe side effects such as whether the decision is final, what happens to the driver record, or any notifications. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single sentence that is concise and front-loaded with 'Admin:' to set context. It efficiently communicates the tool's core function without unnecessary words.

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

Completeness2/5

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

This is a state-changing admin operation with no annotations or output schema, yet the description is minimal. It does not explain the lifecycle of a driver registration, whether the action is reversible, or what the outcome looks like. The description is insufficient for an agent to fully understand the operational context.

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

Parameters3/5

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

The schema already covers both parameters with clear descriptions (driver_id and decision with enum). The description does not add new meaning beyond the schema; it merely paraphrases the decision values. Given 100% schema coverage, the baseline for this dimension is 3.

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

Purpose5/5

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

The description clearly states the tool's purpose: to approve or reject a pending driver registration. It uses a specific verb ('approve or reject') and identifies the resource ('pending driver registration'), which distinguishes it from sibling tools like update_driver_details or register_driver.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description only says 'Admin: Approve or reject a pending driver registration' but does not mention prerequisites, such as the driver must be in a pending state, nor does it point to alternative tools for other scenarios.

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

Tool Schema Changelog

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

  1. 20 tool updatesv1.0.0
    • First observedadd_preferred_driver
    • First observedcancel_booking
    • First observedcomplete_booking
    • First observedcreate_booking
    • First observedestimate_fare
    • First observedget_booking_status
    • First observedget_driver_attempt_log
    • First observedget_driver_details
    • First observedget_hotel_preferred_drivers
    • First observedget_locations
    • First observedget_next_driver
    • First observedlist_available_drivers
    • First observedregister_driver
    • First observedremove_preferred_driver
    • First observedtimeout_driver_attempt
    • First observedupdate_driver_availability
    • First observedupdate_driver_details
    • First observedupdate_driver_location
    • First observedupdate_driver_response
    • First observedverify_driver

TDQS

A4/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct resource and action, such as driver registration/verification/updates, booking lifecycle, and queries. The workflow tools (get_next_driver, update_driver_response, timeout_driver_attempt) are clearly sequenced and separated.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, e.g., verify_driver, create_booking, get_booking_status. There are no mixed conventions or vague verbs.

Tool Count4/5

With 20 tools, the server is slightly above the typical 3-15 range, but each tool is necessary for the driver booking domain, covering driver management, booking workflow, and queries. The count is well-scoped for its purpose.

Completeness5/5

The tool set covers the full lifecycle: driver registration/verification/updates, booking creation, driver assignment, response handling, completion/cancellation, and a rich set of queries. No major gaps that would block core workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Hotel booking MCP server — the first transaction-complete hotel booking integration for AI agents. Search 300K+ properties in 140+ countries, get live rates and room details, and generate secure checkout URLs. No payment in the AI conversation — guests complete booking at a hosted checkout page and receive a real hotel confirmation number. Set your own booking fee via Stripe Connect.
    8
    5 npm
    3
    -