MBTA MCP Server
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., "@MBTA MCP Serverwhen is the next Red Line train arriving at Kendall Square?"
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.
MBTA MCP Server
An MCP (Model Context Protocol) server for the MBTA V3 API, providing access to Boston's public transit data.
Features
Routes: Get information about MBTA routes (subway, bus, commuter rail, ferry)
Stops: Find transit stops by location, route, or ID
Predictions: Real-time arrival predictions
Schedules: Scheduled service times
Trips: Trip information and details
Alerts: Service alerts and disruptions
Vehicles: Real-time vehicle positions
Trip Planning: Intelligent multi-modal journey planning with real-time data
Route Alternatives: Alternative routing options with transfer optimization
External APIs: Vehicle positions and alerts from external sources
Track Predictions: Machine learning-powered track assignment predictions
Historical Data: Access to historical track assignments and performance metrics
Caching: Memory-based caching with configurable TTL for improved performance
Related MCP server: mcp-mbta
Installation
Option 1: Direct run with uv (Easiest)
No installation required! Just run directly:
uv tool run mbta-mcpSet your MBTA API key as an environment variable:
export MBTA_API_KEY=your_api_key_here
uv tool run mbta-mcpOption 2: Install as a tool
Install directly with uv tool:
uv tool install mbta-mcpSet your MBTA API key:
export MBTA_API_KEY=your_api_key_hereRun the server:
mbta-mcpOption 3: Development Setup
Clone and install dependencies:
git clone https://github.com/cubismod/mbta-mcp.git cd mbta-mcp uv syncConfigure your MBTA API key:
cp .env.example .env # Edit .env and add your MBTA_API_KEYGet an API key from https://api-v3.mbta.com
Usage
MCP Server (for AI clients)
Run the MCP server for use with AI clients like Claude Desktop:
# Direct run (no installation needed)
uv tool run mbta-mcp
# If installed as a tool
mbta-mcp
# If using development setup
uv run mbta-mcpCLI Interface (for direct usage)
For direct command-line access to MBTA and Amtrak data:
# Show available commands
uv run mbta-cli --help
# Get Amtrak trains
uv run mbta-cli trains --limit 5
# Get Amtrak trains in JSON format
uv run mbta-cli trains --json --limit 3
# Test MBTA routes
uv run mbta-cli routes
# Show available MCP tools
uv run mbta-cli toolsAvailable Tools
Core Transit Data:
mbta_get_routes- Get MBTA routes (subway, bus, commuter rail, ferry)mbta_get_stops- Get MBTA stops by ID, route, or locationmbta_get_predictions- Get real-time arrival predictionsmbta_get_schedules- Get scheduled service timesmbta_get_trips- Get trip information and detailsmbta_get_alerts- Get service alerts and disruptionsmbta_get_vehicles- Get real-time vehicle positions
Trip Planning:
mbta_plan_trip- Plan multi-modal journeys with real-time data and transfer optimizationmbta_get_route_alternatives- Find alternative routes with different transit modes
Extended Features:
mbta_get_services- Get service definitions and calendarsmbta_get_shapes- Get route shape/path information for mappingmbta_get_facilities- Get facility information (elevators, escalators, parking)mbta_get_live_facilities- Get real-time facility status and outagesmbta_search_stops- Search for stops by name or near a locationmbta_get_nearby_stops- Get stops near a specific locationmbta_get_predictions_for_stop- Get all predictions for a specific stop
External API Tools:
mbta_get_vehicle_positions- Get real-time vehicle positions from external API (GeoJSON format)mbta_get_external_alerts- Get general alerts from external API (delays, disruptions, service info)
Boston Amtrak Tracker API:
mbta_get_amtrak_trains- Get all tracked Amtrak trains from Boston Amtrak Tracker APImbta_get_amtrak_trains_geojson- Get Amtrak trains as GeoJSON for mapping applicationsmbta_get_amtrak_health_status- Get health status of the Boston Amtrak Tracker API
IMT Track Prediction API:
mbta_get_track_prediction- Predict which track a train will use at a stationmbta_get_chained_track_predictions- Get multiple track predictions in a single requestmbta_get_prediction_stats- Get prediction statistics and accuracy metricsmbta_get_historical_assignments- Get historical track assignments for analysis
Tool Reference
Core Transit Data Tools
mbta_get_routes
Get information about MBTA routes including subway, bus, commuter rail, and ferry services.
Parameters:
route_id(optional),route_type(optional),page_limit(default: 10)Route Types: 0=Light Rail, 1=Subway, 2=Commuter Rail, 3=Bus, 4=Ferry
mbta_get_stops
Find transit stops by location, route, or ID with optional filtering.
Parameters:
stop_id(optional),route_id(optional),latitude/longitude(optional),radius(optional),page_limit(default: 10)
mbta_get_predictions
Get real-time arrival predictions for MBTA services.
Parameters:
stop_id(optional),route_id(optional),trip_id(optional),page_limit(default: 10)
mbta_get_schedules
Get scheduled service times and departure information.
Parameters:
stop_id(optional),route_id(optional),trip_id(optional),direction_id(optional),page_limit(default: 10)
mbta_get_trips
Get trip information and details for MBTA services.
Parameters:
trip_id(optional),route_id(optional),direction_id(optional),page_limit(default: 10)
mbta_get_alerts
Get service alerts and disruptions affecting MBTA services.
Parameters:
alert_id(optional),route_id(optional),stop_id(optional),page_limit(default: 10)
mbta_get_vehicles
Get real-time vehicle positions and status information.
Parameters:
vehicle_id(optional),route_id(optional),trip_id(optional),page_limit(default: 10)
Extended Features Tools
mbta_get_services
Get service definitions and calendars for MBTA operations.
Parameters:
service_id(optional),page_limit(default: 10)
mbta_get_shapes
Get route shape/path information for mapping and visualization.
Parameters:
shape_id(optional),route_id(optional),page_limit(default: 10)
mbta_get_facilities
Get facility information including elevators, escalators, and parking areas.
Parameters:
facility_id(optional),stop_id(optional),facility_type(optional),page_limit(default: 10)
mbta_get_live_facilities
Get real-time facility status and outage information.
Parameters:
facility_id(optional),page_limit(default: 10)
mbta_search_stops
Search for stops by name or near a specific location.
Parameters:
query(required),latitude/longitude(optional),radius(optional),page_limit(default: 10)
mbta_get_nearby_stops
Get stops near a specific location within a specified radius.
Parameters:
latitude(required),longitude(required),radius(default: 1000),page_limit(default: 10)
mbta_get_predictions_for_stop
Get all predictions for a specific stop with optional filtering.
Parameters:
stop_id(required),route_id(optional),direction_id(optional),page_limit(default: 10)
External API Tools
mbta_get_vehicle_positions
Get real-time vehicle positions from external API in GeoJSON format.
Parameters: None
Returns: GeoJSON with vehicle locations, routes, status, speed, and bearing information
mbta_get_external_alerts
Get general alerts from external API including delays, disruptions, and service information.
Parameters: None
Returns: JSON with alert details, severity levels, affected routes/stops, and active periods
Boston Amtrak Tracker API Tools
mbta_get_amtrak_trains
Get all tracked Amtrak trains from the Boston Amtrak Tracker API.
Parameters: None
Returns: JSON with real-time Amtrak train locations, routes, status, speed, and other information
mbta_get_amtrak_trains_geojson
Get Amtrak trains as GeoJSON for mapping applications.
Parameters: None
Returns: GeoJSON feature collection with train locations suitable for mapping
mbta_get_amtrak_health_status
Get health status of the Boston Amtrak Tracker API.
Parameters: None
Returns: JSON with server health status and last data update time
IMT Track Prediction API Tools
mbta_get_track_prediction
Predict which track a train will use at a specific station using machine learning.
Parameters:
station_id(required),route_id(required),trip_id(required),headsign(required),direction_id(required),scheduled_time(required)Returns: Track prediction with confidence score and prediction method
mbta_get_chained_track_predictions
Get multiple track predictions in a single request for batch processing.
Parameters:
predictions(required) - Array of prediction request objectsReturns: Array of track predictions with confidence scores
mbta_get_prediction_stats
Get prediction statistics and accuracy metrics for a station and route.
Parameters:
station_id(required),route_id(required)Returns: Statistics including accuracy rate, total predictions, correct predictions, and average confidence
mbta_get_historical_assignments
Get historical track assignments for analysis and pattern recognition.
Parameters:
station_id(required),route_id(required),days(default: 30)Returns: Historical track assignment data with actual usage patterns
Trip Planning Tools
The MBTA MCP server provides intelligent trip planning capabilities that combine real-time transit data with multi-modal journey optimization. These tools help plan efficient journeys across the MBTA network with support for accessibility requirements and transfer preferences.
mbta_plan_trip
Plan multi-modal journeys with real-time data and transfer optimization. This tool finds the best transit routes between two locations, considering walking distance, transfer limits, and accessibility requirements.
Parameters:
origin_lat(required): Origin latitude coordinateorigin_lon(required): Origin longitude coordinatedest_lat(required): Destination latitude coordinatedest_lon(required): Destination longitude coordinatedeparture_time(optional): ISO 8601 formatted departure time (e.g., "2025-01-01T10:00:00-05:00")max_walk_distance(optional): Maximum walking distance in meters (default: 800)max_transfers(optional): Maximum number of transfers allowed (default: 2)prefer_fewer_transfers(optional): Prioritize routes with fewer transfers (default: true)wheelchair_accessible(optional): Only include accessible routes and vehicles (default: false)
Returns: JSON with trip options including:
Origin and destination coordinates with nearby transit stops
Multiple route alternatives with detailed segments
Walking directions and transit connections
Real-time departure predictions and schedule information
Transfer points and walking times between stations
Accessibility information for each route option
Example Usage:
Plan a trip from MIT to Harvard Square:
- origin_lat: 42.3601
- origin_lon: -71.0942
- dest_lat: 42.3736
- dest_lon: -71.1190
- max_walk_distance: 600
- prefer_fewer_transfers: truembta_get_route_alternatives
Find alternative routes with different transit modes. This tool excludes specified primary route types to discover backup options, useful when primary routes have service disruptions.
Parameters:
origin_lat(required): Origin latitude coordinateorigin_lon(required): Origin longitude coordinatedest_lat(required): Destination latitude coordinatedest_lon(required): Destination longitude coordinateprimary_route_modes(optional): Array of route type IDs to exclude (e.g., ["1"] to exclude subway)departure_time(optional): ISO 8601 formatted departure timemax_walk_distance(optional): Maximum walking distance in meters (default: 800)max_transfers(optional): Maximum transfers (default: 2)wheelchair_accessible(optional): Require accessible routes (default: false)
Route Type IDs:
"0"- Light Rail (Green Line branches)"1"- Subway (Red, Orange, Blue Lines)"2"- Commuter Rail"3"- Bus"4"- Ferry
Returns: Alternative route options excluding the specified primary modes, with the same detailed structure as mbta_plan_trip.
Example Usage:
Find bus alternatives when subway is disrupted:
- origin_lat: 42.3601
- origin_lon: -71.0942
- dest_lat: 42.3736
- dest_lon: -71.1190
- primary_route_modes: ["1", "0"] // Exclude subway and light rail
- max_walk_distance: 1000Trip Planning Use Cases
Morning Commute Planning:
Use mbta_plan_trip with departure time to find the best route for your daily commute, considering real-time delays and service alerts.
Accessibility-First Routing:
Enable wheelchair_accessible: true to ensure all suggested routes are fully accessible, including elevators and ramps at stations.
Service Disruption Backup:
When alerts indicate subway delays, use mbta_get_route_alternatives to find bus routes that avoid the affected lines.
Event Planning: For large events, plan trips with longer walking distances and more transfers to distribute passenger load across the transit network.
Tourist Assistance: Combine trip planning with nearby stops and predictions to help visitors navigate Boston's transit system efficiently.
Integration with LLMs
Claude Desktop
Option 1: Using uv tool run (Easiest - No Installation Required)
Add to Claude Desktop configuration:
On macOS, edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mbta": {
"command": "uv",
"args": ["tool", "run", "mbta-mcp"],
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
}
}On Windows, edit %APPDATA%\Claude\claude_desktop_config.json with the same content.
Option 2: Using uv tool install (Recommended for Regular Use)
Install the MCP server:
uv tool install mbta-mcpAdd to Claude Desktop configuration:
On macOS, edit
~/Library/Application Support/Claude/claude_desktop_config.json:{ "mcpServers": { "mbta": { "command": "mbta-mcp", "env": { "MBTA_API_KEY": "your_api_key_here" } } } }On Windows, edit
%APPDATA%\Claude\claude_desktop_config.jsonwith the same content.
Option 3: Using development setup
Clone and setup the MCP server:
git clone https://github.com/cubismod/mbta-mcp.git cd mbta-mcp task install-dev task verify # Ensure everything worksConfigure your MBTA API key:
cp .env.example .env # Edit .env and add: MBTA_API_KEY=your_api_key_hereAdd to Claude Desktop configuration:
On macOS, edit
~/Library/Application Support/Claude/claude_desktop_config.json:{ "mcpServers": { "mbta": { "command": "uv", "args": ["run", "mbta-mcp"], "cwd": "/path/to/your/mbta-mcp", "env": { "MBTA_API_KEY": "your_api_key_here" } } } }On Windows, edit
%APPDATA%\Claude\claude_desktop_config.jsonwith the same content.
Restart Claude Desktop and you'll see "mbta" in the 🔌 icon, indicating the MCP server is connected.
Other MCP-Compatible LLMs
Continue.dev
Using uv tool run (easiest):
{
"mcpServers": [
{
"name": "mbta",
"command": "uv",
"args": ["tool", "run", "mbta-mcp"],
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
]
}Using uv tool installation:
{
"mcpServers": [
{
"name": "mbta",
"command": "mbta-mcp",
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
]
}Or with development setup:
{
"mcpServers": [
{
"name": "mbta",
"command": "uv",
"args": ["run", "mbta-mcp"],
"cwd": "/path/to/your/mbta-mcp",
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
]
}Codeium
Using uv tool run (easiest):
{
"mcp": {
"servers": {
"mbta": {
"command": ["uv", "tool", "run", "mbta-mcp"],
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
}
}
}Using uv tool installation:
{
"mcp": {
"servers": {
"mbta": {
"command": ["mbta-mcp"],
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
}
}
}Or with development setup:
{
"mcp": {
"servers": {
"mbta": {
"command": ["uv", "run", "mbta-mcp"],
"cwd": "/path/to/your/mbta-mcp",
"env": {
"MBTA_API_KEY": "your_api_key_here"
}
}
}
}
}Generic MCP Client
Using uv tool run (easiest):
Command:
uv tool run mbta-mcpEnvironment:
MBTA_API_KEY=your_api_key_here
Using uv tool install:
Command:
mbta-mcpEnvironment:
MBTA_API_KEY=your_api_key_here
Using development setup:
Command:
uv run mbta-mcpWorking Directory:
/path/to/your/mbta-mcpEnvironment:
MBTA_API_KEY=your_api_key_here
Usage Examples
Once connected, you can ask your LLM questions like:
Core Transit Information:
"What are the next Red Line trains from Harvard?"
"Are there any service alerts for the Green Line?"
"Find the nearest T stops to 42.3601° N, 71.0589° W"
"What bus routes serve Kendall Square?"
"Show me the schedule for Route 1 bus"
"Get real-time vehicle positions for all MBTA vehicles"
"What are the current service alerts and delays?"
Trip Planning:
"Plan a trip from MIT (42.3601, -71.0942) to Harvard Square (42.3736, -71.1190)"
"How do I get from Back Bay to Logan Airport using only accessible routes?"
"Find alternative routes from Downtown Crossing to Fenway that avoid the Green Line"
"Plan a wheelchair-accessible journey from South Station to Cambridge with minimal walking"
"What's the best way to get from Kendall Square to Copley at 8:30 AM tomorrow?"
"Show me bus alternatives from Harvard to MIT when the Red Line is down"
"Plan a trip allowing up to 1200 meters of walking and 3 transfers maximum"
Advanced Features:
"Predict which track the 3:30 PM Providence train will use at South Station"
"Show me track prediction accuracy statistics for South Station"
"Get historical track assignments for the last 30 days"
"Get all current Amtrak trains in the Boston area"
"Show me Amtrak trains as GeoJSON for mapping"
"Check the health status of the Amtrak tracker API"
Troubleshooting
Server not connecting:
Verify the path in your config is correct
Ensure
uvis installed and in your PATHCheck that the MBTA API key is valid
Run
task test-serverto verify the server works
API rate limiting:
The MBTA API has rate limits; the server includes pagination to manage this
Some endpoints work without an API key, but having one increases limits
Configuration issues:
Ensure your
.envfile is in the project rootAPI key should be set as
MBTA_API_KEY=your_key_hereCheck Claude Desktop logs if the server fails to start
API Key Requirements
Free access: Many endpoints work without an API key (with lower rate limits)
API key benefits: Higher rate limits and access to all features
Get a key: Register at https://api-v3.mbta.com
Usage: Set in
.envfile or environment variableMBTA_API_KEY
External APIs
This MCP server integrates with additional external APIs to provide enhanced functionality:
Vehicle Positions API
Endpoint: https://vehicles.ryanwallace.cloud/
Format: GeoJSON with real-time vehicle locations, routes, and status
No authentication required
Data: Vehicle coordinates, route information, speed, bearing, occupancy status
External Alerts API
Format: JSON with service alerts, delays, and disruptions
No authentication required
Data: Alert headers, effects, severity levels, affected routes/stops, active periods
IMT Track Prediction API
Endpoint: https://imt.ryanwallace.cloud/
Format: JSON with machine learning-powered track predictions
No authentication required
Data: Track predictions, confidence scores, historical assignments, accuracy metrics
Boston Amtrak Tracker API
Endpoint: https://bos.ryanwallace.cloud/
Format: JSON and GeoJSON with real-time Amtrak train tracking
No authentication required
Data: Train locations, routes, status, speed, and health information
Development
This project uses Task for build automation. Install it and run:
task --list # Show available tasksCommon Tasks
task install-dev # Install dependencies including dev tools
task check # Run all checks (format, lint, typecheck)
task test-server # Test MCP server functionality
task run # Run the MBTA MCP server
task verify # Full project verificationManual Commands
Install dev dependencies:
uv sync --devRun formatters and linters:
task format # or: uv run ruff format mbta_mcp/
task lint # or: uv run ruff check mbta_mcp/
task typecheck # or: uv run mypy mbta_mcp/Available Tools
32 toolsmbta_get_alertsC
Get MBTA service alerts and disruptions.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | No | Specific alert ID to get | |
| route_id | No | Filter alerts by route ID | |
| stop_id | No | Filter alerts by stop ID | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It merely states 'Get MBTA service alerts and disruptions' without disclosing behavior like filtering, pagination, rate limits, or whether results are sorted. This is insufficient for a tool with 4 optional parameters.
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 very concise at one sentence, with no filler. It is front-loaded with the action, but it may be too brief to be helpful. Still, it earns points for brevity.
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 no output schema and no annotations, the description is incomplete. It does not explain what a typical response looks like, how alerts are structured, or how to interpret them. The tool has multiple optional filters but their combined effect is unstated.
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 coverage is 100%, with all four parameters having descriptions (alert_id, route_id, stop_id, page_limit). The tool description adds no extra meaning beyond the schema, meeting the baseline. It does not enhance understanding of parameter usage.
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 gets MBTA service alerts and disruptions, using a specific verb and resource. However, it does not differentiate from sibling tools like mbta_list_all_alerts or mbta_get_external_alerts, which have overlapping purposes.
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 is provided on when to use this tool versus alternatives such as mbta_list_all_alerts or mbta_get_external_alerts. The description lacks context for choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_amtrak_health_statusA
Get health status of the Boston Amtrak Tracker API. Returns server health status and last data update time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It mentions returning server health and last update time but lacks details on potential errors, rate limits, or response format. This is insufficient for a tool with no annotations.
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 two sentences with no wasted words. It front-loads the main action ('Get health status') and concisely lists returns.
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 no parameters, no output schema, and no annotations, the description minimally covers purpose and output. However, it could mention usage context (e.g., designed for quick API health checks) to fully support agent decision-making.
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 zero parameters with 100% coverage, so the baseline is 4. The description adds no param info, which is acceptable since none exist.
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 gets the health status of the Boston Amtrak Tracker API, using a specific verb and resource. It distinguishes itself from siblings which focus on data retrieval like alerts, trains, and predictions.
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 is provided on when to use this tool versus alternatives. With many siblings (e.g., mbta_get_amtrak_trains), a note on using this for initial health checks before other Amtrak calls would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_amtrak_trainsA
Get all tracked Amtrak trains from the Boston Amtrak Tracker API. Returns real-time train locations, routes, status, and other information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It mentions the tool gets real-time data but omits details like authentication, rate limits, pagination, or any side effects. The word 'all' suggests a complete list but is unqualified.
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 clear sentences with no redundancy. Every word adds value, and the purpose is stated upfront.
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 simple, parameterless tool, the description covers the essential function and output. However, it lacks any usage context or mention of alternative data formats, which would aid completeness.
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?
There are zero parameters, so the input schema is fully covered. The baseline for 0-parameter tools is 4, and no additional parameter info is 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?
The description explicitly states the tool retrieves all tracked Amtrak trains, naming the source API and listing returned data types. It distinguishes itself from siblings like mbta_get_amtrak_trains_geojson by not specifying a format, implying a generic 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 guidance on when to use this tool versus the GeoJSON sibling or other MBTA tools. No context about prerequisites, limitations, or typical use cases is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_amtrak_trains_geojsonA
Get Amtrak trains as GeoJSON for mapping applications. Returns train data formatted as GeoJSON suitable for mapping.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states it returns GeoJSON-formatted train data but does not disclose other traits like data freshness, authentication, rate limits, or any side effects. It is minimally adequate for a read-only 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?
The description is two sentences (14 words) and front-loads the key information: action, resource, and format. Every word is purposeful with no redundancy.
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 simple tool with no parameters and no output schema, the description is largely complete. It explains the output format and use case. It could mention the relationship to 'mbta_get_amtrak_trains' for added clarity, but overall it is sufficient.
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 tool has zero parameters, so the input schema already covers 100%. According to the instructions, a baseline of 4 is appropriate. The description adds no parameter info, but none is 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?
The description clearly states it retrieves Amtrak trains as GeoJSON for mapping, using a specific verb ('Get') and resource ('Amtrak trains as GeoJSON'). It distinguishes from the sibling tool 'mbta_get_amtrak_trains' by specifying the output format.
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 for mapping applications but provides no explicit guidance on when to prefer this over alternatives like 'mbta_get_amtrak_trains' (which likely returns a different format). No when-not or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_chained_track_predictionsA
Get multiple track predictions in a single request using IMT API. Useful for batch predictions of multiple trips.
| Name | Required | Description | Default |
|---|---|---|---|
| predictions | Yes | Array of prediction requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose any behavioral traits such as rate limits, array size constraints, or whether the operation is read-only. For a batch API, lack of limits is a significant gap.
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 front-load the purpose and use case. No wasted words; every sentence 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 no output schema and no annotations, the description lacks details on output format, error handling, and constraints on the predictions array. Incomplete for safe autonomous 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?
Schema coverage is 100%, so each parameter has a description in the schema. The description adds 'batch predictions' context but no additional detail about parameter semantics beyond the schema. Adequate but not value-added.
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 explicitly states 'get multiple track predictions' and 'batch predictions', clearly distinguishing from singular sibling 'mbta_get_track_prediction' and other prediction tools. Verb 'Get' and resource 'track predictions' are specific.
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?
States 'useful for batch predictions of multiple trips', implying when to use this tool over alternatives. However, doesn't explicitly state when not to use or mention alternatives like calling the singular version repeatedly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_external_alertsA
Get general alerts from external API. Returns real-time service alerts, delays, disruptions, and other service information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description lacks behavioral details such as rate limits, data freshness, or what constitutes 'external API'. It only states that it returns real-time alerts.
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 a single, front-loaded sentence with no wasted words, effectively conveying the tool's 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 tool has no parameters, no output schema, and no annotations, the description is sufficiently complete for a simple fetch operation. It clearly states the tool returns real-time alerts from an external API.
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 zero parameters, so schema description coverage is 100%. Per guidelines, 0 parameters earns a baseline of 4. No additional parameter info is 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?
The description uses a specific verb ('Get') and resource ('general alerts from external API'), clearly distinguishing from sibling tools like mbta_get_alerts (internal) and mbta_list_all_alerts (list all).
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 does not provide any guidance on when to use this tool versus alternatives, nor does it mention context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_facilitiesB
Get facility information (elevators, escalators, parking).
| Name | Required | Description | Default |
|---|---|---|---|
| facility_id | No | Specific facility ID to get | |
| stop_id | No | Filter facilities by stop ID | |
| facility_type | No | Filter by facility type (ELEVATOR, ESCALATOR, PARKING_AREA, etc.) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It merely states 'Get facility information' without disclosing any behavioral traits like read-only nature, potential side effects, or whether it returns static vs. live data. This is insufficient.
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 a single concise sentence that front-loads the action and resource. It is efficient, though slightly under-specified.
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 no output schema, no annotations, and four parameters, the description does not explain return format, pagination, or behavior when no parameters are provided. It lacks completeness for a tool of this complexity.
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?
All four parameters have descriptions in the input schema (100% coverage), so the description adds no additional meaning. Baseline of 3 is appropriate.
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 verb 'Get' and the resource 'facility information' with specific examples (elevators, escalators, parking). This distinguishes it from siblings like 'mbta_list_all_facilities' which lists all facilities, and 'mbta_get_live_facilities' which implies real-time data.
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 is provided on when to use this tool versus alternatives such as 'mbta_list_all_facilities' or 'mbta_get_live_facilities'. There are no exclusions or context hints for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_historical_assignmentsC
Get historical track assignments for analysis using IMT API. Shows actual track assignments from past trips.
| Name | Required | Description | Default |
|---|---|---|---|
| station_id | Yes | Station ID to get historical data for | |
| route_id | Yes | Route ID to get historical data for | |
| days | No | Number of days to look back (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description only states the tool 'shows' data, implying a read operation. It does not disclose potential side effects, data source nuances, or limitations like rate limits or data freshness, which are crucial for a historical data endpoint.
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 a single, direct sentence without redundancy. It is appropriately concise, though adding a bit more structure (e.g., bullet points or examples) could improve clarity without sacrificing brevity.
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 lack of output schema and only three parameters, the description is minimal. It does not specify the return format, error handling, or data range constraints (e.g., maximum 'days' allowed), leaving the agent with gaps 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?
Schema description coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema; for example, it does not clarify station_id format or the 'days' parameter boundaries, but the schema already provides adequate definitions.
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 retrieves historical track assignments using the IMT API, which distinguishes it from real-time or predictive tools among siblings. However, it could more explicitly contrast with similar history retrieval tools if any exist.
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 is provided on when to use this tool versus alternatives like predictions or schedules. The description lacks any mention of preferred contexts or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_live_facilitiesC
Get real-time facility status and outages.
| Name | Required | Description | Default |
|---|---|---|---|
| facility_id | No | Specific facility ID to get status for | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full responsibility. It lacks details on return format, data freshness, or any side effects. Minimal disclosure beyond the action.
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?
Single concise sentence, front-loaded with main purpose. However, it omits important details that could be included without making it verbose.
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 simple tool with 2 optional params and no output schema, description is somewhat complete, but missing explanation of return value (e.g., list of facility statuses) and how facility IDs are obtained.
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 covers both parameters with descriptions (100% coverage), so baseline is 3. Description adds no extra parameter insight, but does not detract.
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 verb 'Get' and resource 'real-time facility status and outages', distinguishing from static facility tools like mbta_get_facilities. However, it could be more specific about what types of facilities are covered.
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 tool versus siblings like mbta_get_facilities or mbta_list_all_facilities. Agent must infer use case from name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_nearby_stopsC
Get stops near a specific location.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | Latitude of the location | |
| longitude | Yes | Longitude of the location | |
| radius | No | Search radius in meters (default: 1000) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden of behavioral disclosure. The description only states the basic function, omitting details about sorting by distance, handling of no results, rate limits, or any side effects. This is insufficient for a tool with no annotations.
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 very concise (6 words) but lacks structure and additional useful details. While not verbose, it does not enrich the agent's understanding beyond the name and parameter names. It could include information about result sorting or default parameters to earn 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 the tool has 4 parameters and no output schema, the description is too sparse. It does not mention that results are sorted by distance, that radius defaults to 1000m, or how to interpret the output. The agent would benefit from contextual hints about when to use this over similar tools like mbta_search_stops.
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 description coverage is 100% with clear parameter descriptions for latitude, longitude, radius, and page_limit. The tool description adds no new information beyond what is in the schema, so it meets the baseline of 3 without adding extra value.
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 'Get stops near a specific location' clearly states the action (get) and resource (stops) with a specific criterion (near a location). It distinguishes from sibling tools like mbta_search_stops (likely name-based) and mbta_get_stops (likely ID-based). However, it could be more explicit about the geographic proximity aspect.
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 usage guidelines are provided. The description does not mention when to use this tool versus alternatives like mbta_search_stops or mbta_get_stops. The agent receives no context on appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_predictionsC
Get real-time predictions for MBTA services.
| Name | Required | Description | Default |
|---|---|---|---|
| stop_id | No | Filter predictions by stop ID | |
| route_id | No | Filter predictions by route ID | |
| trip_id | No | Filter predictions by trip ID | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It only states 'Get real-time predictions' without mentioning pagination, rate limits, data freshness, or any other behavioral traits beyond the input schema.
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 very concise at one sentence, but it lacks structure and important details. It could be expanded with usage notes without losing conciseness.
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 has 4 parameters, no output schema, and no annotations, the description is too minimal. It does not explain the return format, pagination behavior, or other important context, making it incomplete for an agent to use effectively.
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 100%, so the input schema already documents all parameters. The description adds no additional meaning beyond what is in the schema, resulting in a baseline score of 3.
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 retrieves real-time predictions for MBTA services, using a specific verb and resource. However, it does not differentiate from many sibling tools with similar prediction-related purposes.
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 is provided on when to use this tool versus alternatives. For example, there are tools like mbta_get_predictions_for_stop and mbta_get_prediction_stats, but the description offers no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_predictions_for_stopC
Get all predictions for a specific stop.
| Name | Required | Description | Default |
|---|---|---|---|
| stop_id | Yes | Stop ID to get predictions for | |
| route_id | No | Filter by specific route | |
| direction_id | No | Filter by direction (0 or 1) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It only says 'Get all predictions' without specifying time horizon (real-time vs future), data freshness, error handling for invalid stop IDs, or any rate limits. This is insufficient for a tool with no annotations.
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?
One sentence, no fluff. However, it could be slightly expanded without sacrificing conciseness. Still efficient.
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?
No output schema exists, and the description does not explain what the predictions contain (e.g., arrival/departure times, vehicles, status). This leaves the agent guessing about the return structure.
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 covers all 4 parameters with descriptions (100% coverage). Description adds no extra meaning beyond schema; it just reiterates 'for a specific stop' which matches stop_id. Baseline of 3 is appropriate.
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 'Get all predictions for a specific stop,' but does not differentiate from the sibling 'mbta_get_predictions' which might also return predictions. The name itself implies the scope, but the description could explicitly mention that this tool is scoped to a single stop.
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 tool versus alternatives like mbta_get_predictions, mbta_get_chained_track_predictions, or mbta_get_prediction_stats. No when-not-to-use or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_prediction_statsC
Get prediction statistics and accuracy metrics for a station and route.
| Name | Required | Description | Default |
|---|---|---|---|
| station_id | Yes | Station ID to get stats for | |
| route_id | Yes | Route ID to get stats for |
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 of behavioral disclosure. It does not mention data freshness, pagination, rate limits, or error handling. The description only states the basic operation, leaving the agent unaware of important behavioral traits like whether the stats are real-time or historical.
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 extremely concise at one sentence, with no wasted words. It front-loads the action ('Get') and resource. However, the lack of any supporting structure (e.g., examples, context) limits its utility, though the brevity is appropriate for a simple 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?
For a tool with 2 simple parameters and no output schema, the description is minimal but covers the basic operation. However, it omits information about the output format, which may be expected when no output schema is present. Additionally, absence of behavioral details reduces completeness.
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 description coverage is 100%, with each parameter having a basic description. The description adds no additional semantic value beyond what the schema provides. Per the rule, high coverage allows a baseline of 3, but the description does not clarify formats or constraints, such as possible ID values or data sources.
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 retrieves prediction statistics and accuracy metrics for a given station and route. The verb 'Get' and the resource 'prediction statistics' are specific, and the mention of 'station and route' distinguishes it from sibling tools like mbta_get_predictions, which likely return raw predictions. However, it could be more explicit about what specific stats are included.
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 like mbta_get_predictions or mbta_get_track_prediction. There are no statements about prerequisites, limitations, or scenarios where this tool is preferred. The agent must infer usage solely from the name and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_route_alternativesB
Get alternative route options by excluding certain modes of transport. Useful for finding backup routes when primary transit modes are disrupted.
| Name | Required | Description | Default |
|---|---|---|---|
| origin_lat | Yes | Origin latitude | |
| origin_lon | Yes | Origin longitude | |
| dest_lat | Yes | Destination latitude | |
| dest_lon | Yes | Destination longitude | |
| primary_route_modes | No | Route types to exclude from alternatives (0=Light Rail, 1=Subway, 2=Commuter Rail, 3=Bus, 4=Ferry) |
TDQS
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. It only states that the tool returns 'alternative route options' without detailing output format, authentication requirements, or behavior in edge cases (e.g., no alternatives found). This is insufficient for a tool with no annotations.
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 two sentences long, front-loaded with the core functionality. Every sentence adds value, with no redundant or vague phrases. It is concise 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?
Despite having 5 parameters and no output schema, the description provides minimal information. It lacks details about the output format (e.g., whether results include transit directions, timing, or stops), pagination, or error handling. A more complete description would cover these aspects, especially given the absence of 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?
The input schema has 100% description coverage, with all parameters documented. The description adds the context that the tool works 'by excluding certain modes,' which aligns with the primary_route_modes parameter. However, it does not provide additional semantic meaning beyond what the schema already offers, 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.
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 alternative route options by excluding certain modes of transport.' It specifies the verb (Get), the resource (route alternatives), and the mechanism (excluding modes). This distinguishes it from sibling tools like mbta_plan_trip, which plans full trips, and mbta_get_routes, which lists all routes.
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 includes a usage context: 'useful for finding backup routes when primary transit modes are disrupted.' However, it does not explicitly state when not to use this tool or compare it to alternatives. The usage is implied but lacks exclusions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_routesC
Get MBTA routes. Optionally filter by route ID or type.
| Name | Required | Description | Default |
|---|---|---|---|
| route_id | No | Specific route ID to get | |
| route_type | No | Filter by route type (0=Light Rail, 1=Subway, 2=Commuter Rail, 3=Bus, 4=Ferry) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as read-only nature, side effects, or response details. The name implies a read operation, but this is not stated.
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 a single, front-loaded sentence with no wasted words. It is concise but could include more detail without sacrificing brevity.
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 and no output schema, the description lacks essential context about return format, pagination behavior, or filtering semantics. Minimal completeness for a tool in a large sibling set.
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 100%, so the description adds no new meaning beyond the parameter descriptions. It restates 'optionally filter by route ID or type', which is redundant.
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 'Get MBTA routes' with optional filtering by route ID or type. It distinguishes from sibling 'mbta_list_all_routes' which likely lists all routes without filtering, so purpose is clear but could be more specific.
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 tool versus alternatives like 'mbta_list_all_routes'. With many sibling tools, explicit usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_schedulesC
Get scheduled MBTA service times.
| Name | Required | Description | Default |
|---|---|---|---|
| stop_id | No | Filter schedules by stop ID | |
| route_id | No | Filter schedules by route ID | |
| trip_id | No | Filter schedules by trip ID | |
| direction_id | No | Filter by direction (0 or 1) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden for behavioral disclosure. It does not mention that this is a read-only operation, whether it requires authentication, or what data range it covers (e.g., current or future schedules). The description is too brief to provide transparency.
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 extremely concise at one sentence. It is front-loaded and efficient, but could benefit from a little more detail without becoming verbose.
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 lack of output schema and the tool having 5 optional parameters, the description should specify what the response contains or typical usage. It does not explain return format, pagination, or default behavior, making it incomplete for an agent to fully understand the tool's capabilities.
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 description coverage is 100%, meaning the input schema already documents all parameters. The description adds no additional meaning beyond what the schema provides. Baseline score of 3 is appropriate.
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 'Get scheduled MBTA service times', specifying a verb ('Get') and a resource ('scheduled MBTA service times'). However, it does not differentiate from sibling tools like mbta_get_schedules_by_time, which may cause confusion about when to use this one.
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 is provided on when to use this tool versus alternatives. Given the presence of multiple schedule-related siblings (e.g., mbta_get_schedules_by_time), the description should indicate typical use cases or filtering scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_schedules_by_timeB
Get MBTA schedules filtered by specific times and dates. Use this to find transit schedules for particular time windows, dates, or specific trips.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter by service date (YYYY-MM-DD format) | |
| min_time | No | Filter schedules at or after this time (HH:MM format, use >24:00 for next day) | |
| max_time | No | Filter schedules at or before this time (HH:MM format) | |
| route_id | No | Filter by specific route ID | |
| stop_id | No | Filter by specific stop ID | |
| trip_id | No | Filter by specific trip ID | |
| direction_id | No | Filter by direction (0 or 1) | |
| page_limit | No | Maximum number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only restates filtering purpose without disclosing behavioral traits like pagination, default limits, or read-only nature. Schema includes page_limit default but description adds no transparency beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with action and then usage context. No wasted words.
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?
With 8 optional parameters and no output schema, the description lacks details on return structure, behavior with no filters, or interaction between parameters. Incomplete for a complex filter 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?
Schema description coverage is 100%, so description adds minimal semantic value beyond reinforcing filtering by times/dates. Baseline 3 is appropriate.
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 'Get MBTA schedules filtered by specific times and dates' and 'Use this to find transit schedules for particular time windows, dates, or specific trips.' It distinguishes from sibling 'mbta_get_schedules' which likely provides unfiltered schedules.
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 for time and date filtering, but no explicit guidance on when not to use or alternative tools like mbta_get_schedules for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_servicesC
Get MBTA service definitions and calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | No | Specific service ID to get | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only says 'Get' which implies read-only but does not explicitly state non-destructive nature or other behavioral traits like whether multiple services can be fetched.
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?
Single sentence is concise and front-loaded. Could include more detail without being verbose, but remains appropriately sized.
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?
No output schema and description provides minimal information about return values ('service definitions and calendars' is vague). Lacks completeness for understanding what the tool returns.
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 100% with descriptions for both parameters. The description adds no additional meaning beyond the schema, earning the baseline score.
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 uses specific verb 'Get' and resource 'MBTA service definitions and calendars,' clearly indicating the tool's purpose. However, it does not differentiate from sibling 'mbta_list_all_services' which likely lists services.
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 tool versus alternatives like 'mbta_list_all_services' or when specific filters apply. The description lacks context for proper selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_shapesC
Get route shape/path information for mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| shape_id | No | Specific shape ID to get | |
| route_id | No | Filter shapes by route ID | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It only says 'for mapping,' which is vague. It does not mention data freshness, rate limits, required permissions (if any), or the response structure. For a tool returning geometric data, this is insufficient.
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 a single short sentence with no wasted words. It is front-loaded and easy to parse. However, it could be slightly more informative without becoming verbose.
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 absence of an output schema, the description should indicate what the response contains (e.g., points, polylines). It does not explain default behavior when no parameters are provided (e.g., returns all shapes or first 10). The complexity is low, but the description lacks critical details for a mapping 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?
Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; it repeats the purpose but not parameter details. The schema itself is minimal (e.g., 'Specific shape ID to get'), and the description does not explain how parameters interact or typical use cases.
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 retrieves route shape/path information for mapping, using a specific verb 'Get' and resource 'route shape/path.' It distinguishes from siblings like mbta_get_routes which focus on route metadata, but could be more precise about what 'shape/path information' includes (e.g., polyline coordinates).
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 is given on when to use this tool versus alternatives such as mbta_get_routes or mbta_get_trips. There is no mention of prerequisites, filtering strategies, or scenarios where this tool is preferred, leaving the agent without decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_stopsC
Get MBTA stops. Filter by stop ID, route, or location.
| Name | Required | Description | Default |
|---|---|---|---|
| stop_id | No | Specific stop ID to get | |
| route_id | No | Filter stops by route ID | |
| latitude | No | Latitude for location-based search | |
| longitude | No | Longitude for location-based search | |
| radius | No | Search radius in meters (used with lat/lng) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states filtering capabilities but does not mention read-only nature, pagination behavior beyond 'page_limit', or any side effects. The description adds little beyond the input schema.
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 a single sentence, which is concise, but it restates the tool name ('Get MBTA stops') and does not structure information for quick parsing. It is adequate but not exemplary.
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 has 6 parameters, no output schema, and many sibling tools, the description is too minimal. It does not explain return format, pagination limits (beyond default 10), or how to combine filters. The agent lacks context for effective use.
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 has 100% description coverage for all 6 parameters, so the baseline is 3. The description paraphrases the filters ('stop ID, route, or location') but adds no new meaning beyond 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 clearly states the tool retrieves MBTA stops and can filter by stop ID, route, or location. However, it does not explicitly distinguish itself from sibling tools like mbta_list_all_stops or mbta_search_stops, which could cause confusion.
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 alternative sibling tools for stops. With multiple stop-related tools, this omission makes it harder for an AI agent to select the correct one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_track_predictionC
Get track prediction for a specific trip using IMT API. Predicts which track a train will use at a station.
| Name | Required | Description | Default |
|---|---|---|---|
| station_id | Yes | Station ID where prediction is needed | |
| route_id | Yes | Route ID (e.g., CR-Providence) | |
| trip_id | Yes | Trip ID for the specific train | |
| headsign | Yes | Destination/headsign (e.g., South Station) | |
| direction_id | Yes | Direction (0 or 1) | |
| scheduled_time | Yes | Scheduled departure/arrival time (ISO format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only mentions 'predicts' without disclosing if it is real-time, data freshness, or potential errors.
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 sentences and 15 words is concise, but the second sentence is largely redundant with the first, reducing efficiency.
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?
With 6 required parameters and no output schema, the description is too brief, lacking details on return values or error handling.
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 100% with good parameter descriptions. The tool description adds no extra meaning beyond the schema, which is acceptable per baseline.
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 gets a track prediction for a specific trip, distinguishing it from general predictions. However, it does not differentiate from the sibling 'mbta_get_chained_track_predictions'.
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 tool versus alternatives such as mbta_get_predictions or mbta_get_chained_track_predictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_tripsC
Get MBTA trip information.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_id | No | Specific trip ID to get | |
| route_id | No | Filter trips by route ID | |
| direction_id | No | Filter by direction (0 or 1) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description is minimal. It does not disclose whether the tool returns a single trip or a list, how pagination works (though page_limit parameter implies it), or any rate limits, data freshness, or side effects. The behavioral transparency is poor given no annotations to lean on.
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 very concise at one sentence, but it sacrifices informativeness. It is front-loaded with the verb and resource, but lacks structural elements like usage context or parameter hints. It is appropriately sized for a trivial tool, but given the complexity of the API, more detail would be justified without being verbose.
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?
With no output schema, the description should clarify return values, but it does not. The tool has 4 optional parameters, yet no guidance on default behavior (e.g., retrieving all trips vs. requiring at least one filter). Given the number of sibling tools, this lack of completeness hinders effective use.
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 100%, so each parameter already has a description. The tool description adds no extra meaning beyond what the schema provides. For example, it does not explain how direction_id values map to direction names or how pagination interacts with other filters. Baseline score of 3 is appropriate.
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 'Get MBTA trip information.' clearly states the verb ('Get') and resource ('trip information'). However, it is generic and does not differentiate from sibling tools like mbta_get_routes or mbta_get_schedules, which also retrieve related data. The schema hints at filtering by trip_id, route_id, etc., but the description lacks specificity about scope.
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 is provided on when to use this tool compared to alternatives such as mbta_get_schedules, mbta_get_predictions, or mbta_get_vehicle_positions. The description does not mention any use cases or exclusions, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_vehicle_positionsB
Get real-time vehicle positions from external API. Returns GeoJSON data with vehicle locations, routes, status, and other real-time information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions 'from external API' hinting at a network call but omits details on rate limits, authentication, or caching behavior.
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 with no redundant information; effectively conveys purpose and output format.
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?
Lacks differentiation from similar tools and does not clarify that no parameters implies all vehicle positions are returned; marginal completeness.
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?
No parameters defined; baseline score of 4 applies as schema covers 100% and description adds no additional param meaning.
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?
Clearly states it gets real-time vehicle positions and returns GeoJSON data, but does not explicitly differentiate from the similar sibling mbta_get_vehicles.
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 tool versus alternatives like mbta_get_vehicles or other data tools; lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_get_vehiclesB
Get real-time MBTA vehicle positions.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | No | Specific vehicle ID to get | |
| route_id | No | Filter vehicles by route ID | |
| trip_id | No | Filter vehicles by trip ID | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must handle behavioral disclosure, but it only states the purpose. It omits important traits like data freshness, authentication, rate limits, or pagination behavior (despite a page_limit parameter). The user cannot infer real-time update frequency or how results are ordered.
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 a single, concise sentence that immediately communicates the core function. No unnecessary words, and it is front-loaded with the key action and resource.
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 4 optional parameters and no output schema, the description is incomplete. It fails to explain return format, field names, or how to use filters effectively. A real-time data tool requires more context for proper usage.
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 descriptions cover 100% of parameters with basic explanations. The tool description adds no additional value beyond what the schema already provides. Baseline 3 is appropriate.
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 ('Get'), the resource ('real-time MBTA vehicle positions'), and is specific. It distinguishes this tool from siblings like mbta_get_predictions or mbta_get_routes by focusing on vehicle position data.
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 mention context, prerequisites, or exclusions, such as when to prefer mbta_get_predictions or mbta_get_schedules instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_alertsB
List all MBTA alerts with optional fuzzy filtering. Returns all alerts without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter alerts by header or description | |
| max_results | No | Maximum number of results to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It only mentions 'client-side fuzzy search' and default behavior, omitting details like authentication, rate limits, data freshness, or error handling. This is insufficient for an accurate behavioral model.
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 two sentences long, with the most important information (verb, resource, optional filtering) in the first sentence. Every word is functional, and there is no redundancy or unnecessary detail.
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 simple list tool with no output schema and two intuitive parameters, the description captures the core functionality. However, it lacks details on output structure, default sorting, or limits, which could leave an agent uncertain about what to expect from the response.
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 already describes both parameters (query, max_results) with 100% coverage. The description adds the phrase 'optional fuzzy filtering' and 'client-side fuzzy search,' which aligns with the query parameter but does not provide additional semantic meaning beyond 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 clearly states 'List all MBTA alerts with optional fuzzy filtering,' specifying the verb and resource. However, it does not explicitly differentiate from sibling tools like mbta_get_external_alerts, which may have overlapping 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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or scenarios where other tools (e.g., mbta_get_alerts) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_facilitiesB
List all MBTA facilities with optional fuzzy filtering. Returns all facilities without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter facilities by name | |
| max_results | No | Maximum number of results to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions 'client-side fuzzy search' and 'returns all facilities without specific filters', which are helpful. However, it does not mention pagination or limits, though max_results in schema partially covers this.
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 sentences, front-loaded with the core purpose and filtering capability. No redundant information.
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?
The tool has no output schema, so the description should explain return structure. It only says 'returns all facilities', leaving the response format unspecified. For a list tool, this is a significant gap.
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 description coverage is 100%, and the description adds 'client-side' detail to the query parameter. This adds marginal value, but baseline is 3 due to high schema coverage.
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 lists MBTA facilities with optional fuzzy filtering. It distinguishes from sibling list tools by specifying the resource type, but does not explicitly differentiate from mbta_get_facilities.
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 for listing facilities with or without a fuzzy query, but does not provide guidance on when to use this tool versus alternatives like mbta_get_facilities for specific lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_linesA
List all MBTA lines with optional fuzzy filtering. Returns all lines without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter lines by name | |
| max_results | No | Maximum number of results to return (default: 50) |
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 client-side fuzzy search behavior and implies a read-only operation, but does not detail data freshness, response size limits, or pagination behavior beyond the max_results parameter.
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 succinct sentences that front-load the core purpose and immediately follow with the key qualifier (optional fuzzy filtering). No redundant or extraneous information.
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 simple list tool with two optional parameters and no output schema, the description covers the main functionality and behavior. It could mention the output format or any inherent limits, but is largely complete 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?
Schema coverage is 100%, and the description adds value by specifying that filtering is 'client-side' and 'fuzzy' beyond the schema's description of 'Optional fuzzy search query'. The 'max_results' default is already 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 clearly states the action ('List'), the resource ('all MBTA lines'), and the optional feature ('fuzzy filtering'). It distinguishes from sibling tools that list routes or alerts by specifying 'lines'.
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 for retrieving lines with optional filtering, but does not explicitly state when to prefer this tool over alternatives like 'mbta_get_routes' or 'mbta_list_all_routes'. No 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_routesA
List all MBTA routes with optional fuzzy filtering. Returns all routes without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter routes by name | |
| max_results | No | Maximum number of results to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only mentions client-side fuzzy search, leaving out auth needs, rate limits, or response traits.
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 sentences, no fluff, front-loaded with core 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?
No output schema; description doesn't specify return format or pagination. Adequate for a simple list but gaps remain.
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 covers 100% of params; description adds context that query is fuzzy and client-side, and max_results limits output, going beyond 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?
Verb 'List' + resource 'all MBTA routes' is specific and distinguishes from siblings like mbta_get_routes. Optional fuzzy filtering adds clarity.
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 use for fetching all routes or filtered results, but no explicit when-to-use vs alternatives (e.g., mbta_get_routes) or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_servicesB
List all MBTA services with optional fuzzy filtering. Returns all services without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter services by description | |
| max_results | No | Maximum number of results to return (default: 50) |
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 mentions 'client-side fuzzy search' but lacks details on data freshness, pagination, or authentication. Behavioral context is minimal.
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 two sentences with no redundant information. It is tightly written and front-loads the core 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 no output schema and no annotations, the description covers the basics but lacks details on return format, result limits, or behavior when no query is provided. It is adequate but not thorough.
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 100%, and the description adds value by explaining the fuzzy search is client-side, beyond the schema's parameter descriptions. This enhances understanding of the filtering behavior.
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 verb 'list' and resource 'all MBTA services' with optional fuzzy filtering. It is specific and distinct from sibling tools like mbta_get_services, though no explicit differentiation is provided.
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 tool versus alternatives like mbta_get_services or other list tools. The description only states functionality without context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_list_all_stopsC
List all MBTA stops with optional fuzzy filtering. Returns all stops without specific filters, with client-side fuzzy search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional fuzzy search query to filter stops by name | |
| max_results | No | Maximum number of results to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility. It mentions client-side fuzzy search but lacks details on performance implications, data freshness, rate limits, or pagination (though max_results is noted). The description is thin on behavioral traits.
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 two concise sentences with no unnecessary wording, front-loading the main action clearly.
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?
Despite the tool not having an output schema or annotations, the description does not cover important aspects like error handling, potential performance with large datasets, or the nature of the return values. It is minimal for a list-all 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?
Schema coverage is 100%, so the schema already describes both parameters. The description adds the concept of 'client-side fuzzy search' for the query parameter, which adds some context beyond the schema, but not significantly more.
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 lists all MBTA stops with optional fuzzy filtering, using specific verb and resource. It distinguishes itself from siblings like 'mbta_get_stops' and 'mbta_search_stops' by indicating it returns all stops without filters and handles search client-side.
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 tool versus alternatives like 'mbta_get_stops' or 'mbta_search_stops'. The description does not provide context for selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_plan_tripA
Plan a trip between two locations using MBTA public transit. Returns optimal route options with transfers, walking times, and real-time data.
| Name | Required | Description | Default |
|---|---|---|---|
| origin_lat | Yes | Origin latitude | |
| origin_lon | Yes | Origin longitude | |
| dest_lat | Yes | Destination latitude | |
| dest_lon | Yes | Destination longitude | |
| departure_time | No | Preferred departure time in ISO format (defaults to now) | |
| arrival_time | No | Required arrival time in ISO format (overrides departure_time) | |
| max_walk_distance | No | Maximum walking distance in meters (default: 800) | |
| max_transfers | No | Maximum number of transfers allowed (default: 3) | |
| prefer_fewer_transfers | No | Prioritize routes with fewer transfers (default: true) | |
| wheelchair_accessible | No | Only include wheelchair accessible routes (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses return of 'optimal route options' but lacks details on data freshness, rate limits, error handling, or whether it supports real-time or historical data. Adequate but not thorough.
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?
Single sentence is maximally concise and front-loads the purpose. No redundant information.
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?
With 10 parameters, no output schema, and a description that does not explain parameter interactions or return format, the tool lacks completeness. It fails to convey that the output likely includes multiple itineraries, transit modes, or how to interpret optimality.
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 100%, so baseline is 3. Description adds no parameter-specific value beyond the schema. It mentions 'transfers, walking times, and real-time data' but does not elaborate on parameter roles like departure_time vs arrival_time.
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 verb ('Plan a trip'), resource ('MBTA public transit'), and output ('optimal route options with transfers, walking times, and real-time data'). It distinctly separates from sibling tools which are all data retrieval (alerts, schedules, etc.).
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?
Description implicitly defines usage by stating 'Plan a trip,' which sets clear context against sibling getters. However, it lacks explicit when-to-use or when-not-to-use guidance, such as scenarios better suited for other tools like schedules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mbta_search_stopsC
Search for stops by name or near a location.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for stop names | |
| latitude | No | Latitude for location-based search | |
| longitude | No | Longitude for location-based search | |
| radius | No | Search radius in meters (default: 1000) | |
| page_limit | No | Number of results to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure responsibility, but it only states a generic action. It omits details like whether query is needed for location searches, return format, or any side effects (none expected), leaving behavior largely undefined.
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 extremely concise (7 words, one sentence) and front-loaded. While it wastes no words, it is arguably too terse to provide sufficient context, but conciseness itself is good.
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 parameters and no output schema, the description is too minimal. It fails to explain combined name/location search behavior, output format, or how it relates to siblings like 'mbta_get_nearby_stops' and 'mbta_get_stops', leaving significant gaps for an agent.
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 100% with clear descriptions for all 5 parameters. The description adds the phrase 'near a location' to hint at the role of latitude/longitude, but this is already implicit from the schema. The tool description does not significantly enhance param understanding beyond 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 clearly states the tool searches for stops by name or location. While it captures the core function, it does not explicitly distinguish from sibling tools like 'mbta_get_nearby_stops' (location-only) or 'mbta_get_stops' (by ID), leaving some ambiguity.
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 is given on when to use this tool versus alternatives. For example, it doesn't compare to 'mbta_get_nearby_stops' for location-only searches or 'mbta_list_all_stops' for unfiltered lists, making selection harder for an agent.
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.
32 tool updates
v0.1.0- First observed
mbta_get_alerts - First observed
mbta_get_amtrak_health_status - First observed
mbta_get_amtrak_trains - First observed
mbta_get_amtrak_trains_geojson - First observed
mbta_get_chained_track_predictions - First observed
mbta_get_external_alerts - First observed
mbta_get_facilities - First observed
mbta_get_historical_assignments - First observed
mbta_get_live_facilities - First observed
mbta_get_nearby_stops - First observed
mbta_get_prediction_stats - First observed
mbta_get_predictions - First observed
mbta_get_predictions_for_stop - First observed
mbta_get_route_alternatives - First observed
mbta_get_routes - First observed
mbta_get_schedules - First observed
mbta_get_schedules_by_time - First observed
mbta_get_services - First observed
mbta_get_shapes - First observed
mbta_get_stops - First observed
mbta_get_track_prediction - First observed
mbta_get_trips - First observed
mbta_get_vehicle_positions - First observed
mbta_get_vehicles - First observed
mbta_list_all_alerts - First observed
mbta_list_all_facilities - First observed
mbta_list_all_lines - First observed
mbta_list_all_routes - First observed
mbta_list_all_services - First observed
mbta_list_all_stops - First observed
mbta_plan_trip - First observed
mbta_search_stops
TDQS
Scored across 32 tools
Most tools have distinct purposes, but some overlap exists (e.g., mbta_get_vehicles and mbta_get_vehicle_positions, multiple alert tools). Descriptions help differentiate, but slight ambiguity remains.
All tools follow a consistent mbta_verb_noun pattern (e.g., mbta_get_predictions, mbta_list_all_alerts). No style mixing; very predictable.
32 tools is high, but the MBTA domain is complex, covering alerts, predictions, schedules, facilities, vehicles, etc. The number is justified, though slightly above ideal.
The tool set comprehensively covers transit operations: real-time data, predictions, schedules, routes, stops, facilities, alerts, and trip planning. No obvious gaps for common use cases.
Maintenance
Related MCP Connectors
Read-only airport delay, weather, and 24h forecast tools for AI assistants. Airport-level only.
Provides AI assistants with direct access to Mapbox developer APIs and documentation.
Provides access to Civic Plus - See Click Fix, allowing you to interact with your data via an LLM.…
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to access real-time Transport for London data, including tube/bus arrivals, line status, journey planning, and disruptions.1-
- AlicenseNot gradedqualityCmaintenanceEnables real-time access to Boston MBTA transit data (subway, bus, commuter rail, etc.) via the MBTA v3 API.4 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides real-time San Francisco Bay Area Rapid Transit data, enabling queries about BART schedules, routes, and station information through natural language.2 npmMIT
- FlicenseAqualityCmaintenanceProvides read-only access to live Bay Area transit data, including routes, stops, real-time departures, vehicle positions, and service alerts, for use by large language models.6-