CorporateTravel Dispatch MCP
OfficialThe CorporateTravel Dispatch MCP server provides tools for operational dispatch, flight tracking, and administrative control, focused on aviation and ground transportation logistics primarily in the DC area.
Platform Health & Feed Monitoring
Check service health, feed freshness, and error states for all data sources (TFR, METAR, NWS, NOTAM, Amtrak, ATCSCC, runsheet)
Airspace & Aviation Data
Retrieve active FAA Temporary Flight Restrictions (TFRs), including AI-enriched versions with threat level, movement type (POTUS/Marine One/AF1), and plain-language summaries
Fetch active NOTAMs for DC-area airports
Access the FAA ATCSCC National Operations Plan (ground delays, ground stops, miles-in-trail restrictions)
Weather
Get DC-area METAR snapshots (ceiling, visibility, wind, flight category) for KIAD, KDCA, KBWI
Retrieve active NWS weather alerts (warnings, watches, advisories) for the DC metro region
HEMS & Ground Operations
Query the Critical Predictability State (CPS) — a go/no-go score for HEMS operations based on ceiling, visibility, wind, precipitation, airspace, and GDP
Get ground route impact assessments for DC-area chauffeur corridors with recommended adjustments
Check Amtrak train status at Washington Union Station (Acela, NE Regional)
Access the active trip runsheet with client, pickup, destination, and status details (requires Tailscale)
Daily Briefing
Retrieve an AI-generated daily operational brief synthesizing TFRs, weather, CPS, NWS alerts, and ATCSCC ops plan
VIP Flight Watchlist
List, add, and remove flights/persons/ground subjects from a VIP watchlist for automated ntfy push monitoring
Live Flight Tracking (ADS-B via airplanes.live)
Look up real-time aircraft position by ICAO callsign, tail/registration number, or confirmed ICAO 24-bit hex address
Admin Tools (requires DISPATCH_TOKEN)
Extended health check with internal queue and container status
Force-refresh any named data feed on demand
Trigger immediate CPS recomputation or ATCSCC ops plan snapshot
Send push notifications via ntfy with configurable priority
View the append-only audit log (90-day retention)
Sends push notifications via ntfy.sh for alerting and monitoring.
Click on "Install 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., "@CorporateTravel Dispatch MCPcheck active TFRs near DC"
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.
corporatetravel-dispatch-mcp
Last verified against code: 2026-08-11
Right repo? You want
corporatetravel-dispatch-mcp(this one) for the MCP server. The dispatch platform source lives atcorporatetraveldc-dispatch. The public mirror is atctdi-dispatch.
MCP server exposing the CS Executive Services dispatch platform (Raspberry Pi 5 based), airplanes.live flight tracking, and airframes.io ACARS as portable, agent-agnostic tools. Works with any MCP-compatible agent: Claude Code, Cline, Cursor, Zed, Windsurf, and — via two mcpo HTTP bridges — Open WebUI locally and remote integrations (e.g. a Claude.ai custom connector) publicly.
ALL Public Commits are GPG signed using Key: ABD3976FCC006E0F3FE559177286B3118BA4EFB2. Pubkey is included in this repo as
ABD3976FCC006E0F3FE559177286B3118BA4EFB2.gpg.
Tools (34 total; 26 in public-safe mode)
Tool registration lives in dispatch_mcp/tools/__init__.py:
register(mcp, public_safe: bool). With DISPATCH_MCP_PUBLIC_SAFE=1 the
admin module (7 tools) and second_brain package (1 tool) are never
loaded — not merely gated — leaving the 26-tool public-safe subset. Counts
verified 2026-08-11 with grep -rc "@mcp.tool" dispatch_mcp/tools/ and against
both running mcpo instances' /openapi.json (34 paths private, 26 public).
Dispatch platform — Tier 0 (no auth required) — tools/dispatch.py
Tool | Endpoint | Description |
|
| Service health + snapshot ages |
|
| Feed freshness and error state |
|
| Active TFRs from FAA |
|
| TFRs with AI threat interpretation |
|
| DC-area METAR snapshot |
|
| Active NWS weather alerts |
|
| Active NOTAMs (requires FAA key on Pi) |
|
| Critical Predictability State (HEMS go/no-go) |
|
| Ground route impact assessment |
|
| Amtrak status at WAS |
|
| AI-generated daily operational brief |
|
| FAA ATCSCC National Operations Plan |
|
| Active trip runsheet (Tailscale-only, sends bearer token) |
|
| Pi network data usage (vnstat daily log) |
Dispatch platform — Watchlist — tools/dispatch.py (bearer token sent)
Tool | Method + route | Description |
|
| List active VIP watchlist sessions |
|
| Add subject to watchlist (typed routes; generic/ground/person not yet supported) |
|
| Remove watchlist session |
Dispatch platform — FIDS — tools/fids.py
Tool | Endpoint | Description |
|
| Confirmed gate, baggage carousel, arrival status (DCA/IAD, MWAA) |
|
| FIDS feed health/freshness snapshot (DCA/IAD) |
|
| Forward-looking arrivals, DCA/IAD/BWI (SWIM + website + AeroAPI) |
FAA Aircraft Registry — tools/aircraft.py (local cache on the Pi, updated weekly)
Tool | Endpoint | Description |
|
| Look up aircraft by N-number or ICAO hex |
|
| Local registry cache status |
Admin — tools/admin.py (requires DISPATCH_TOKEN; excluded in public-safe mode)
Tool | Route | Description |
|
| Extended health check |
|
| Force-refresh a named feed (metar, nws, tfr, notam, amtrak, atcscc_opsplan, runsheet) |
|
| Force CPS recomputation |
|
| Force opsplan fetch |
|
| Send ntfy push notification |
|
| View audit log (append-only, 90-day retention) |
|
| Last ctdi-watchdog run result (lives in admin.py, so excluded in public-safe mode despite the name) |
Second Brain — tools/second_brain/remember.py (requires DISPATCH_TOKEN; excluded in public-safe mode)
Tool | Route | Description |
|
| Capture a manual note into the second-brain vault ( |
Flight Tracking — airplanes.live — tools/flight.py (no auth)
Tool | Description |
| ADS-B position lookup by ICAO callsign |
| ADS-B position + hex by tail number |
| ADS-B position by confirmed ICAO 24-bit hex |
Hex resolution order: callsign → registration → hex. Always confirm hex via
flight_get_by_registration before adding to watchlist — hex is airframe-bound;
callsign-to-hex mappings can be stale day-over-day.
ACARS — airframes.io — tools/acars.py (no auth)
Tool | Description |
| Recent ACARS/VDL2/HFDL messages for an airframe hex |
Related MCP server: quads-mcp
Security model: no per-caller auth on admin/second-brain tools
admin._check_token() only verifies the process has a DISPATCH_TOKEN
configured — it does not verify the MCP caller presented anything. Every
outbound admin call uses that one fixed token regardless of caller. These
tools are therefore only safe on instances where reachability itself is the
access control (stdio on your own machine, or the loopback/tailnet mcpo
instance). Any instance fronted by a public hostname must run with
DISPATCH_MCP_PUBLIC_SAFE=1, which never loads them at all. See
docs/mcpo-openwebui.md for the two-instance
deployment that enforces this.
Install
pip install -e .Requires Python 3.11+. Dependencies (declared in pyproject.toml): mcp[cli],
httpx, pydantic, and jsonschema.
Why jsonschema is pinned here:
mcp/server/lowlevel/server.pyimportsjsonschemaunconditionally, but themcppackage does not declare it and themcp[cli]extra does not reliably pull it in. Without it the server crashes at import. Declared explicitly in this repo'spyproject.tomlas of 2026-08-11.
Public mirror gap (2026-08-11): the public GitHub mirror (
corporatetravel-dispatch-mcppublic copy) is missing thepublic_saferegistration-mode commits. Anyone installing from the public repo'spip install git+https://...instructions gets a build with no way to exclude admin/second_brain tools. Until the mirror is re-synced, do not build a publicly exposed instance from the public repo.
Configure
Env var | Default | Notes |
|
| Tailscale address of the Pi — primary. |
|
| Tried only on transport-level failure of the primary (connect/timeout), never on HTTP 4xx/5xx. CF Access gates POST routes there, so admin failover may 401/403. |
| (empty) | Required for admin/second-brain tools ( |
|
| Dispatch HTTP timeout (seconds) |
|
| airplanes.live timeout (seconds) |
|
| airframes.io ACARS aggregator |
|
| airframes.io timeout (seconds) |
|
|
|
|
| Port when transport=http |
| (unset) |
|
Retired hostname:
ops.csexecutiveservices.comis fully retired and hard-rejected app-side (dispatch platformrunner/main.py_RETIRED_HOSTNAMES). It must not appear in any config. Older docs and examples that referenced it as the defaultDISPATCH_BASE_URLare obsolete.
Use with Claude Code
Register at user scope (persists across projects):
claude mcp add dispatch \
-e DISPATCH_BASE_URL=http://100.94.80.100:8000 \
-e DISPATCH_TOKEN=your-token-here \
--scope user \
-- dispatch-mcpOr add to ~/.claude/.claude.json directly under "mcpServers":
{
"mcpServers": {
"dispatch": {
"type": "stdio",
"command": "/full/path/to/dispatch-mcp",
"args": [],
"env": {
"DISPATCH_BASE_URL": "http://100.94.80.100:8000",
"DISPATCH_TOKEN": "your-token-here"
}
}
}
}On the Pi itself, dispatch-mcp-wrapper.sh (repo root) is the preferred
command: it extracts DISPATCH_ADMIN_TOKEN from
/etc/corporatetraveldc/dispatch-secrets.env without sourcing the file as
bash, exports it as DISPATCH_TOKEN, and execs the venv binary at
/opt/corporatetraveldc/corporatetravel-dispatch-mcp/venv/bin/dispatch-mcp.
Both deployed mcpo services use this wrapper.
Use with Cline / Cursor / Zed / Windsurf
Same MCP JSON config block — each supports mcpServers in their settings file.
Point command at the installed dispatch-mcp binary or python -m dispatch_mcp.server.
Use with Open WebUI / Claude.ai / HTTP clients
See docs/mcpo-openwebui.md. Two separate mcpo bridge instances run on the Pi:
Private, full toolset (34):
corporatetraveldc-mcpo.service, port8082, no public hostname — Open WebUI consumes it viahost.containers.internal:8082.Public-safe (26):
corporatetraveldc-mcpo-public.service, port8083(loopback-bound),DISPATCH_MCP_PUBLIC_SAFE=1, fronted by nginx + Cloudflare Tunnel athttps://mcp.csexecutiveservices.com— the endpoint remote integrations (e.g. a Claude.ai custom connector) use.
Context efficiency and plan compatibility
MCP tool responses are structured and compact — each tool returns only the data the agent actually needs, rather than dumping raw API payloads into the context window. This matters for subscription plan users:
Claude Pro — operational dispatch workflows (TFR checks, CPS queries, flight lookups, daily brief) stay well within the message window because context stays lean. Pairing with a context guardian skill (e.g. the
dispatch-context-guardianCowork skill bundled with this deployment) automatically compacts sessions before they hit plan limits.Claude Max / API — compact responses reduce per-request token cost and latency.
Cline / Cursor / Windsurf — same economy; MCP tool calls consume far fewer tokens than equivalent REST-then-paste workflows.
Verify syntax
python -m py_compile \
dispatch_mcp/server.py \
dispatch_mcp/config.py \
dispatch_mcp/client.py \
dispatch_mcp/tools/__init__.py \
dispatch_mcp/tools/dispatch.py \
dispatch_mcp/tools/flight.py \
dispatch_mcp/tools/admin.py \
dispatch_mcp/tools/aircraft.py \
dispatch_mcp/tools/acars.py \
dispatch_mcp/tools/fids.py \
dispatch_mcp/tools/second_brain/__init__.py \
dispatch_mcp/tools/second_brain/remember.py
echo "All clean"Notes
Tier 0 endpoints (
/api/v1/*) require no authentication.dispatch_get_runsheetis Tailscale-gated and only works against the default TailscaleDISPATCH_BASE_URL.Admin endpoints require
DISPATCH_TOKEN. Create tokens on the Pi:csex-token create.dispatch.csexecutiveservices.comhas Cloudflare Access on POST routes; it is the transport-failure fallback only, not the primary.ops.csexecutiveservices.comis retired and hard-rejected — never use it.CUI rules: this server never generates or exposes SHARES/HEARS/HEART frequencies. The platform ships with empty placeholder credential files.
License
MIT
Available Tools
25 toolsdispatch_admin_force_opsplan_snapshotAIdempotent
Force an immediate ATCSCC ops plan snapshot.
Triggers a fetch and parse of the current ATCSCC National Operations Plan outside the normal polling schedule. Requires DISPATCH_TOKEN env var to be set.
Returns: str: JSON confirmation or error string.
Examples: - "Force opsplan refresh" -> call with no params
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: it triggers an immediate fetch/parse and requires a token. No contradiction with annotations. Could mention error behavior if token is missing.
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?
Extremely concise with no wasted words; includes purpose, trigger, requirement, and example in a few sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of an output schema, the description is complete: explains what it does, prerequisite, and usage example.
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 so baseline 4 is appropriate; the description adds no parameter info but also needs none.
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 'force an immediate snapshot' and the resource 'ATCSCC ops plan', and distinguishes from the sibling dispatch_get_opsplan by noting it triggers a fetch outside normal schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides the token requirement and an example, but does not explicitly contrast with alternatives like waiting for normal polling or other dispatch_admin tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_admin_force_recompute_cpsAIdempotent
Force an immediate recomputation of the Critical Predictability State (CPS).
CPS is normally recomputed after each feed update. Use this to trigger recomputation immediately, e.g. after a manual feed refresh. Requires DISPATCH_TOKEN env var to be set.
Returns: str: JSON with new CPS state and score, or error string.
Examples: - "Recompute CPS now" -> call with no params
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it explains the purpose (CPS recomputation), auth requirements (DISPATCH_TOKEN), return format (JSON state/score or error), and includes an example. Annotations already indicate idempotency and non-destructive nature, and the description aligns without contradiction.
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 concise (4 sentences) and front-loaded with the core action. Each sentence serves a purpose: purpose, context, auth, return format, and example. No unnecessary text.
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 zero parameters and a simple action, the description fully covers what the tool does, when to use it, prerequisites, return type, and example. It is complete enough for an agent to understand and invoke correctly.
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 no parameters, so schema coverage is 100%. The description does not need to elaborate on parameters; baseline is 4 per rules for zero-param tools.
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 forces immediate recomputation of CPS, a specific verb and resource. It distinguishes from siblings like dispatch_get_cps (read) and dispatch_admin_refresh_feed (feed refresh) by focusing on the CPS recomputation action.
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 explains when to use the tool (e.g., after a manual feed refresh to trigger immediate recomputation) and notes the required env var. It does not explicitly exclude scenarios but provides clear context and an example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_admin_get_audit_logARead-onlyIdempotent
Get the dispatch platform audit log (append-only, 90-day retention).
Returns recent audit log entries. Log is append-only and never leaves the Pi. Requires DISPATCH_TOKEN env var to be set.
Returns: str: JSON list of audit log entries with timestamp, action, and detail.
Examples: - "Show recent audit log entries" -> call (token required)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it states the log is append-only, never leaves the Pi, and requires a token. It also describes the return format (JSON list with timestamp, action, detail). Annotations already indicate readOnlyHint and idempotence, and the description aligns without contradiction.
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 concise and well-structured, using bullet points and an example. Every sentence adds value: purpose, behavioral context, requirement, return type, and usage example. 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?
Given zero parameters and the presence of an output schema, the description sufficiently covers the tool's behavior and return format. It includes an example and clarifies the token requirement, making it complete for agent 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?
There are no parameters (0 params), so schema coverage is 100%. The description does not need to add parameter info. It mentions the token requirement, which is an environmental variable, adding value. Baseline for 0 params is 4.
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 the dispatch audit log, an append-only log with 90-day retention. The verb 'Get' and resource 'audit log' are specific and unambiguous. Among sibling tools, none are similar, so it is well-distinguished.
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 explicitly mentions the requirement for the DISPATCH_TOKEN env var, which is a usage guideline. It also explains the log's nature (append-only, retention). While it doesn't explicitly contrast with alternatives, the tool's uniqueness makes it clear when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_admin_healthARead-onlyIdempotent
Get extended admin health check for the dispatch platform (requires token).
Returns more detailed health data than the public /healthz endpoint, including internal queue state, container status, and error counts. Requires DISPATCH_TOKEN env var to be set.
Returns: str: JSON admin health object, or error string if token missing/invalid.
Examples: - "Show admin health status" -> call (token required)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: requires token/env var, returns internal queue state, container status, error counts, and error string on failure. Annotations already mark readOnly, non-destructive, idempotent—description aligns and expands.
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 concise and front-loaded, but the example is somewhat redundant (calling becomes clear from the purpose). The Returns section is informative. Slight room for tightening without loss.
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 parameters and an output schema present, the description covers all essential context: token requirement, what the tool returns, and error conditions. It is complete for this simple 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?
There are zero parameters, so baseline is 4. The description mentions the token requirement (env var, not a parameter) and does not need to add schema info. No parameter explanation is necessary.
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 extended admin health check for the dispatch platform', using a specific verb and resource. It distinguishes itself from the public /healthz endpoint and sibling tools like dispatch_health_check, making the purpose unambiguous.
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 explicitly mentions the token requirement and contrasts with public health check. It provides a usage example. However, it does not explicitly state when not to use it or list alternatives among siblings, missing a chance for complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_admin_refresh_feedAIdempotent
Force an immediate refresh of a specific dispatch data feed.
Bypasses the normal polling interval and triggers an immediate fetch for the named feed. Useful when a feed is stale or in an error state. Requires DISPATCH_TOKEN env var to be set.
Args: params (RefreshFeedInput): - feed_name (str): One of: metar, nws, tfr, notam, amtrak, atcscc_opsplan, runsheet
Returns: str: JSON confirmation with refresh result, or error string.
Examples: - "Refresh the TFR feed" -> params.feed_name='tfr' - "Force weather update" -> params.feed_name='metar'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true and openWorldHint=true. The description adds that it bypasses normal polling and requires a token, and that it returns a JSON confirmation or error string. It lacks details on potential side effects (e.g., rate limiting) but is consistent with 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 concise (about 100 words) and well-structured with sections: summary, explanation, Args, Returns, Examples. Every sentence serves a purpose, 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?
Given the tool's simplicity, the description covers purpose, usage, parameter, and return type. It includes the crucial env var requirement. However, it could mention error scenarios or validation details for the feed name.
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 schema has 0% description coverage, so the description carries the full burden. It lists the allowed feed names and provides examples, adding value beyond the schema's minimal description. However, the parameter is simple and well-covered by the description.
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 forces an immediate refresh of a specific dispatch feed, distinguishing it from sibling read-only getters and other admin tools like dispatch_admin_force_opsplan_snapshot. The specific verb 'force refresh' and resource 'dispatch data feed' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly mentions when to use: when a feed is stale or in error state. It also states the prerequisite (DISPATCH_TOKEN env var). However, it does not explicitly list alternatives or when not to use, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_admin_send_push_alertA
Send a push notification via ntfy through the dispatch platform.
Fires a notification to the configured ntfy topics on the Pi. Use priority 5 for urgent alerts (e.g. Marine One TFR, weather emergency). Requires DISPATCH_TOKEN env var to be set.
Args: params (PushAlertInput): - message (str): Alert text, max 1000 chars - title (str, optional): Notification title (default: 'Dispatch Alert') - priority (int, optional): 1-5, default 3 (4=high, 5=urgent)
Returns: str: JSON confirmation or error string.
Examples: - "Send test alert" -> params.message='Test alert from MCP', priority=3 - "Send urgent Marine One alert" -> params.message='Marine One TFR active P-56', priority=5
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the env var requirement, the target (configured ntfy topics on Pi), and the return type (JSON or error string). This adds context beyond annotations (which only indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear overview, Args, Returns, and Examples. It is somewhat repetitive in the first two sentences but overall concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic functionality, env var requirement, and return type. However, it lacks details on failure modes, rate limits, or what happens if the token is missing, which would be helpful given there is no output schema providing such info.
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 Args section explains each sub-parameter (message, title, priority) with max lengths, defaults, and usage hints (e.g., priority 5 for urgent). This adds value beyond the input schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a push notification via ntfy through the dispatch platform. It is distinct from siblings like dispatch_get_alerts and dispatch_admin_health.
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 usage guidance for priority levels and notes the requirement for DISPATCH_TOKEN env var. It includes examples but does not explicitly list when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_alertsARead-onlyIdempotent
Get active National Weather Service alerts for the DC metro region.
Pulls from api.weather.gov for the DC area. Returns warnings, watches, advisories, and statements currently in effect.
Returns: str: JSON list of alert objects. Each alert includes: id (str), event (str, e.g. 'Winter Storm Warning'), headline (str), description (str), severity (str), certainty (str), urgency (str), effective (str), expires (str), areas (list[str]).
Examples: - "Are there any weather alerts for DC?" -> call, check array length - "Any tornado warnings active?" -> call, filter by event containing 'Tornado'
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds value by noting it pulls from an external API, returns active alerts, and specifies the return format with fields and example usage.
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?
Very concise and well-structured: purpose, source, return format, examples. Every sentence adds value.
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?
Fully adequate for a no-parameter read tool with annotations and output schema present. Describes output structure and common use cases.
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, so baseline 4 is appropriate. The description correctly omits parameter details as 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?
Explicitly states it gets active NWS alerts for the DC metro region, with specific verb and resource. Clearly distinguishes from siblings like weather or other dispatch tools.
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 DC weather alerts via api.weather.gov, but does not provide when-to-use vs alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_amtrakARead-onlyIdempotent
Get current Amtrak train status at Washington Union Station (WAS/WASH).
Returns arrival and departure status for trains at WAS. Covers Acela and NE Regional services on the NEC corridor. Requires AMTRAK_FEED_URL to be configured on the Pi (push-primary ingest or poller fallback).
Returns: str: JSON object with 'trains' list. Each train: train_number (str), route_name (str), direction (str: NORTH/SOUTH), scheduled_time (str), estimated_time (str|null), status (str), delay_minutes (int), platform (str|null), last_updated (str).
Examples: - "Is the Acela arriving on time?" -> call, filter route_name by 'Acela' - "How delayed is train 95?" -> call, find by train_number, check delay_minutes
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide read-only and idempotent hints. The description adds value by noting the configuration requirement and detailing the output format (JSON with train list, fields explained), which goes beyond annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, an output specification, and helpful examples. It is relatively concise but the examples add necessary context, justifying a score of 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with a thorough output specification and adequate annotations, the description covers all essential aspects: purpose, prerequisite, and return format. It is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. The description implicitly confirms no input is needed, aligning with the baseline score of 4 for zero-parameter tools.
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 current Amtrak train status at Washington Union Station, specifying the resource (Amtrak trains) and action (get status). It distinguishes from sibling tools by focusing solely on Amtrak, while siblings handle flights or dispatch administration.
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 mentions the prerequisite of AMTRAK_FEED_URL configuration, indicating when the tool can be used. While it doesn't explicitly state when not to use it, the context from sibling tools implies it's the correct choice for Amtrak status queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_briefARead-onlyIdempotent
Get the AI-generated daily operational brief for CS Executive Services.
Synthesizes TFR status, weather, CPS score, NWS alerts, and ATCSCC ops plan into a concise executive brief suitable for morning standup or client briefing. Brief is cached and regenerated periodically by the poller.
Returns: str: JSON object with: brief_text (str: full plain-language brief), generated_at (str: ISO timestamp), cps_state (str: GO/CAUTION/NO-GO at brief generation time), tfr_count (int), alert_count (int).
Examples: - "What's the daily brief?" -> call, return brief_text to user - "Summarize today's operational picture" -> call, synthesize brief_text
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description discloses that the brief is cached and periodically regenerated, helping agents understand possible staleness. No contradictions with 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 front-loaded with the core purpose, followed by the synthesis details, caching behavior, and a structured return format. It is concise with no extraneous content, earning its keep with every sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input (none), output (detailed textual schema), behavioral details (caching), and usage examples. It adequately equips an agent to understand and invoke the tool, though a formal output schema JSON would further enhance 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?
With zero parameters (baseline 4), the description doesn't need to elaborate on parameter details. It instead explains the return format and provides usage examples, which is helpful but not required for parameter semantics.
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 identifies the tool as retrieving an AI-generated daily operational brief for CS Executive Services, specifying the synthesized components (TFR, weather, CPS, alerts, ops plan) and its use case (morning standup/client briefing). This distinguishes it from sibling tools that retrieve individual components.
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 states the brief is suitable for morning standup or client briefing, and examples imply it's for high-level summaries. While it doesn't explicitly contrast with siblings, the synthesis context makes it clear when to use this aggregated view versus specific tools like dispatch_get_cps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_cpsARead-onlyIdempotent
Get the current Critical Predictability State (CPS) — the HEMS go/no-go score.
CPS is computed from six factors: ceiling, visibility, wind, precipitation, airspace restriction, and GDP (Ground Delay Program). Final state is one of: GO, CAUTION, or NO-GO per Part 135.609 thresholds.
Returns: str: JSON object with: state (str: GO/CAUTION/NO-GO), score (float: 0.0-1.0), factors: { ceiling: {value, score, label}, visibility: {value, score, label}, wind: {value, score, label}, precip: {value, score, label}, airspace: {value, score, label}, gdp: {value, score, label} }, computed_at (str: ISO timestamp).
Examples: - "Is it a go for HEMS operations?" -> call, check state field - "What's limiting the CPS score?" -> call, find lowest factor scores
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds significant behavioral detail: explains CPS computation from six factors, final states (GO/CAUTION/NO-GO), and return structure with nested factor objects.
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?
Concise yet informative: clear header, bulleted factors, return type description, and two relevant examples. 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?
Fully describes the tool's purpose, computation, return structure, and example use cases. Given no parameters and supportive annotations, nothing is missing.
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 exist (0 params, schema coverage 100%), so baseline is 4. Description adds no parameter info, which 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 starts with a clear verb and resource: 'Get the current Critical Predictability State (CPS) — the HEMS go/no-go score.' It specifies the purpose (HEMS go/no-go) and distinguishes from sibling tools by focusing uniquely on CPS.
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?
Includes usage examples (e.g., 'Is it a go for HEMS operations?' and 'What's limiting the CPS score?') that clarify when to use the tool. However, it lacks explicit statements about when not to use or alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_feedsARead-onlyIdempotent
Get freshness and error state for all dispatch data feeds.
Returns per-feed metadata: last_updated timestamp, age_seconds, whether the feed is in an error state, and the last error message if any.
Returns: str: JSON dict keyed by feed name (tfr, metar, nws, notam, amtrak, atcscc_opsplan, runsheet). Each entry includes last_updated, age_seconds, error (bool), error_msg (str|null).
Examples: - "Which feeds are stale or erroring?" -> call and filter error==true - "When was weather last updated?" -> call, check metar.last_updated
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by detailing the return structure (per-feed metadata with last_updated, age_seconds, error, error_msg) and examples, without contradicting 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 brief and well-structured: a one-line purpose, a bulleted return format, and concrete examples. Every sentence adds value 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?
Given no parameters and the presence of an output schema, the description is complete. It explains the return format, lists specific feed names, and provides typical use cases.
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, and the input schema is fully covered (100%). The description does not need to add parameter semantics; a baseline of 4 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 explicitly states 'Get freshness and error state for all dispatch data feeds,' using a specific verb and resource. It clearly distinguishes this tool from siblings that fetch individual feed data (e.g., dispatch_get_tfr) by focusing on metadata.
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 example questions implying usage (e.g., checking stale feeds), but it does not explicitly state when to use this tool versus alternatives like dispatch_get_tfr. No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_notamsARead-onlyIdempotent
Get active NOTAMs (Notices to Air Missions) from the dispatch platform.
Requires FAA_NOTAM_API_KEY to be configured on the Pi. Returns NOTAMs from the FAA NOTAM API covering DC-area airports and airspace.
Returns: str: JSON list of NOTAM objects, or feed-error string if key not configured. Each NOTAM includes: id, type, location, effective_start, effective_end, text (raw NOTAM text).
Examples: - "Any NOTAMs for KIAD?" -> call, filter by location=='KIAD' - "Are there any runway closures at DCA?" -> call, filter by location and text
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description discloses the need for an API key, the return type (JSON list or error string), and the content of each NOTAM object. This adds valuable behavioral context without contradicting 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 concise and well-structured, with a clear explanation of purpose, requirements, return format, and examples. It could be slightly more compact, but it effectively communicates all necessary 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?
Despite no parameters and an output schema, the description fully covers prerequisites, return format, usage, and source. It provides examples and explains error conditions, making it complete for an AI 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?
With no parameters, the schema provides full coverage, so the description's mention of API key configuration is sufficient extra context. No further parameter information 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 the tool gets active NOTAMs from the dispatch platform, specifying the source (FAA NOTAM API) and coverage (DC-area airports and airspace). The verb 'Get' and resource 'NOTAMs' are specific, and the tool is easily distinguished from sibling tools like dispatch_get_alerts or dispatch_get_tfr.
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 prerequisite (FAA_NOTAM_API_KEY configuration) and provides usage examples showing how to filter by location or text. However, it does not explicitly state when not to use the tool or compare it to alternatives, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_opsplanARead-onlyIdempotent
Get the current FAA ATCSCC National Operations Plan snapshot.
Returns the current day's ATCSCC ops plan from aviationweather.gov/node/1, which includes ground delay programs, ground stops, miles-in-trail restrictions, and other national ATCSCC advisories.
Returns: str: JSON object with: snapshot_time (str: ISO timestamp), programs (list[dict]): each entry has type, facility, reason, avg_delay_minutes, scope, start_time, end_time. raw_text (str: full ops plan text).
Examples: - "Are there any ground delays at IAD?" -> call, filter programs by facility - "What's the ATCSCC situation today?" -> call, return programs list
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, etc. The description adds value by detailing the return structure and the raw text field. No contradictions; it consistently describes a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: first sentence states purpose, then bullet points for return fields, followed by examples. No unnecessary 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 no parameters and an output schema present (as per context signals), the description fully explains the tool's purpose, output format, and usage examples. No gaps.
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 exist, baseline is 4. The description adds meaning by explaining what the tool does and the structure of its output, beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the FAA ATCSCC National Operations Plan snapshot, specifies the data source, and lists the returned fields (snapshot_time, programs, raw_text). This distinguishes it from sibling tools like dispatch_get_alerts or dispatch_get_weather.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete examples of when to call the tool (e.g., 'Are there any ground delays at IAD?'), showing the usage context. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_routeARead-onlyIdempotent
Get current ground route impact assessment for DC-area chauffeur operations.
Evaluates active TFRs, weather alerts, and airspace restrictions against common executive transportation corridors. Returns impact level and recommended route adjustments.
Returns: str: JSON object with: impact_level (str: NONE/LOW/MODERATE/HIGH/SEVERE), factors (list[str]: active impact sources), recommendations (list[str]: suggested route adjustments), computed_at (str: ISO timestamp).
Examples: - "Will TFRs affect our route today?" -> call, check impact_level - "Any route adjustments needed?" -> call, check recommendations list
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is well-covered. The description adds that it evaluates TFRs, weather, and airspace restrictions, and returns impact levels and recommendations, which complements the annotations but doesn't disclose additional behavioral traits beyond the annotated safe operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, with a clear title, a short description, a well-structured return format, and useful examples. Every sentence adds value, and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, full annotations, and an output schema described inline, the description is complete. It specifies the geographic and operational scope (DC-area chauffeur operations), what factors are evaluated, and the exact return structure. No gaps are apparent.
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 in the input schema, so the description has no parameter details to add. Baseline score of 4 applies as there is no parameter information needed that the schema doesn't already provide.
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 'Get current ground route impact assessment' with specific verb and resource. Distinguishes from sibling tools like dispatch_get_alerts and dispatch_get_tfr by focusing on DC-area chauffeur operations and route impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples of when to call the tool (e.g., 'Will TFRs affect our route today?') and what to check in the response. While it doesn't explicitly state when not to use it, the context is clear and the examples guide appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_runsheetARead-onlyIdempotent
Get the active trip runsheet for today's chauffeur operations.
NOTE: This endpoint is Tier 1 — it requires Tailscale network access (100.x.x.x range) or will return 403. Set DISPATCH_BASE_URL to the Tailscale address (http://100.94.80.100:8000) to access this endpoint.
Returns: str: JSON object with 'trips' list. Each trip includes: trip_id (str), client_name (str), pickup_time (str), pickup_location (str), destination (str), notes (str), status (str: PENDING/ACTIVE/COMPLETE). Returns 403 error if not on Tailscale.
Examples: - "What trips do we have today?" -> call (requires Tailscale) - "What time is the first pickup?" -> call, find earliest pickup_time
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds significant behavioral context: Tailscale network requirement, 403 error if not on Tailscale, and the structure of the return value. No contradiction with 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 about 10 lines, containing a note, return format, and examples. While informative, some parts like the return format could be more concise. It is not overly long but could be streamlined.
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 and the presence of an output schema, the description provides enough context: return value structure, network requirement, and examples. It is fairly complete for a read-only, parameterless 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?
There are no parameters, so schema coverage is 100%. The description adds meaning by detailing the return format and access constraints, which compensates for the lack of parameters.
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 the active trip runsheet for today's chauffeur operations. The verb 'Get' and resource 'active triprunsheet' are specific. However, it does not explicitly differentiate from sibling tools, though the tool name itself offers some distinction.
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 note about network access requirements (Tailscale) and provides example queries that indicate when to call. It does not discuss when not to use or mention alternatives, but the context is clear for this read-only tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_tfrARead-onlyIdempotent
Get all active Temporary Flight Restrictions (TFRs) from the dispatch platform.
Returns raw TFR list parsed from FAA tfr.faa.gov XML feed. Each TFR includes location, altitude floor/ceiling, effective time window, and type code. For AI-enriched TFRs with threat interpretation, use dispatch_get_tfr_enriched.
Returns: str: JSON list of active TFR objects, or error string. Each TFR includes: notam_id, type, location, floor_ft, ceiling_ft, effective_start, effective_end, description.
Examples: - "Are there any active TFRs?" -> call, check array length - "Are there VIP or POTUS TFRs active?" -> call, filter by type or description
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds beyond annotations by detailing the data source (FAA XML feed), return format (JSON list or error string), and the fields included in each TFR object, providing useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single sentence states purpose, followed by one sentence on data source, another on distinction from sibling, then a clear return specification, and practical examples. 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?
Given zero parameters and existing output schema and annotations, the description fully covers the tool's purpose, behavior, return format, and usage guidance with examples. It is complete for this simple 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?
The tool has zero parameters, so schema coverage is 100%. The description does not need to explain parameters but still adds value by describing the return structure and fields, earning a baseline of 4.
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 all active TFRs from the dispatch platform, specifies the resource (TFRs) and action (get all active), and distinguishes from the enriched sibling by noting the lack of AI threat interpretation.
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 explicitly provides an alternative tool ('dispatch_get_tfr_enriched') for AI-enriched TFRs, and gives example use cases (checking for active TFRs, filtering by type), offering good guidance on when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_tfr_enrichedARead-onlyIdempotent
Get active TFRs with AI-generated threat interpretation and enrichment.
Same TFR data as dispatch_get_tfr but with additional fields: threat_level, movement_type (e.g. POTUS, VVIP), pattern match flags for Marine One and Air Force One indicators, and plain-language summary of each TFR.
Returns: str: JSON list of enriched TFR objects. Additional fields beyond raw TFR: threat_level (str), movement_type (str|null), is_marine_one (bool), is_af1 (bool), summary (str).
Examples: - "Any Marine One TFRs right now?" -> call, filter is_marine_one==true - "What's the threat level of active TFRs?" -> call, check threat_level fields
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds that the TFRs are enriched with 'AI-generated threat interpretation' and 'plain-language summary', which provides additional behavioral context. However, it does not disclose potential downsides like latency or cost, so it adds moderate value beyond 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 concise and well-structured: first sentence gives the core purpose, then details the extra fields, then specifies the return type, and ends with practical examples. No extraneous text.
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 zero parameters and the presence of an output schema (though not fully shown), the description covers the return format and fields thoroughly. It provides enough context for an agent to understand what the tool returns. Could be improved by mentioning any access restrictions or data volume, but overall adequate.
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 schema coverage is 100%. The description explains the return value and additional fields, which compensates for the lack of parameters. Baseline for 0-param tools is 4.
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 active TFRs with AI-generated threat interpretation and enrichment.' It distinguishes itself from the sibling dispatch_get_tfr by listing the additional fields (threat_level, movement_type, etc.). This makes the purpose specific and distinct.
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 usage examples for common queries (e.g., 'Any Marine One TFRs right now?'), guiding when to call this tool. However, it does not explicitly state when not to use it or compare with alternatives like dispatch_get_tfr beyond mentioning that it has the same data with extra fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_get_weatherARead-onlyIdempotent
Get the current METAR weather snapshot for DC-area airports.
Returns parsed METARs from AviationWeather.gov ADDS for stations in and around the DC area (KIAD, KDCA, KBWI, KJYO, KHEF, KCGS, etc.). Data includes ceiling, visibility, wind, temperature, altimeter.
Returns: str: JSON dict with 'stations' list. Each station entry: icao (str), obs_time (str), wind_dir (int|null), wind_speed_kt (int), wind_gust_kt (int|null), visibility_sm (float), ceiling_ft (int|null), temp_c (float), dewpoint_c (float), altimeter_inhg (float), flight_category (str: VFR/MVFR/IFR/LIFR), raw_metar (str).
Examples: - "What's the ceiling at Dulles?" -> call, find KIAD entry, check ceiling_ft - "Is it VFR at DC area airports?" -> call, check flight_category per station
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: describes return format, data source (AviationWeather.gov), and example queries; annotations already cover idempotency and read-only nature.
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?
Concise, front-loaded with purpose, followed by structured return fields and usage examples; every sentence adds value.
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?
Completely covers the tool's behavior for a no-param function with rich output; details return format and example use cases, matching the 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?
No parameters exist, so baseline 4 applies; description adds value by detailing output fields and examples, compensating for lack of input parameters.
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 retrieves METAR weather snapshot for DC-area airports, specifying the data source and location, distinguishing it from sibling tools that handle alerts, briefs, 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?
Purpose is implied but no explicit guidance on when to use vs alternatives; context suggests weather-related queries but lacks exclusions or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_health_checkARead-onlyIdempotent
Check the health of the CS Executive Services dispatch platform.
Returns service health summary including API status and snapshot age for each data feed. Use this first to verify the platform is reachable before querying individual feeds.
Returns: str: JSON with 'status' field and per-feed freshness, or error string.
Examples: - "Is the dispatch platform up?" -> call with no params - "How old is the TFR data?" -> call, check 'tfr.age_seconds' in response
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds details on return format (JSON with status and per-feed freshness) and potential error string, which goes beyond annotations but is not extensive.
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 concise at 4 sentences plus examples, front-loaded with purpose, usage, return format, and examples. Every sentence adds value without 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 health check tool with no parameters and annotations present, the description covers purpose, usage, and output format completely. It also provides example queries.
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 0 parameters, so description does not need to explain parameter details. It correctly implies no arguments needed. Baseline score of 4 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 'check' and the resource 'health of the CS Executive Services dispatch platform'. It distinguishes from sibling tools which perform specific data retrieval or admin actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool first to verify platform reachability before querying individual feeds, providing clear usage context and examples of when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_watchlist_addA
Add a subject to the VIP watchlist for automated dispatch monitoring.
Creates a new watchlist session. For flight tracking, provide the confirmed ICAO hex address (use flight_get_by_callsign or flight_get_by_registration to resolve hex before adding). The dispatch poller will send ntfy push alerts for tracked events.
Args: params (WatchlistAddInput): - session_type (str): 'flight', 'ground', or 'person' - subject (str): Human label, e.g. 'KLM651' or 'POTUS' - hex (str, optional): ICAO 24-bit hex, required for flight sessions - registration (str, optional): Aircraft tail number - destination_icao (str, optional): 4-letter ICAO airport code
Returns: str: JSON with new session_id on success, or error string.
Examples: - "Start tracking KLM651" -> first resolve hex via flight_get_by_callsign, then call with session_type='flight', subject='KLM651', hex=
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and description confirms creation of new session. Adds behavioral context: 'dispatch poller will send ntfy push alerts for tracked events.' No contradictions with 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?
Well-structured: brief overview, parameter details, return format, and practical examples. No wasted words; each sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, parameters, return value, and integration with other tools. With annotations and output schema likely available, the description fully equips the 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?
Despite schema description coverage reported as 0%, the description adds substantial context: explains hex requirement for flight sessions, mentions destination_icao, and gives examples of valid values (e.g., 'KIAD'), complementing the schema's minimal property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a subject to the VIP watchlist for automated dispatch monitoring' and explains it creates a new watchlist session. It differentiates from sibling tools like dispatch_watchlist_get and dispatch_watchlist_remove.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use: 'For flight tracking, provide the confirmed ICAO hex address' and directs to alternative tools (flight_get_by_callsign, flight_get_by_registration) for resolving hex. Includes example usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_watchlist_getARead-onlyIdempotent
Get all active VIP watchlist sessions from the dispatch platform.
The watchlist tracks flights, persons, or other subjects of interest. Active sessions receive automatic ntfy push alerts when tracked events occur.
Returns: str: JSON list of watchlist session objects. Each session: session_id (str), session_type (str), subject (str), hex (str|null), registration (str|null), destination_icao (str|null), created_at (str), last_updated (str).
Examples: - "What's on the watchlist?" -> call, return sessions - "Is KLM651 being tracked?" -> call, filter by subject=='KLM651'
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds context about automatic ntfy push alerts when tracked events occur, which is beyond the 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 concise and well-structured: purpose, what is tracked, alerts, return format, and two clear examples. Every sentence adds value.
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 zero parameters, an output schema present, and comprehensive annotations, the description covers all necessary aspects including return format and example use cases.
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 no parameters (100% coverage), so the description correctly omits parameter details. The examples show client-side filtering, which adds 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 starts with a clear verb 'Get' and specifies the resource 'all active VIP watchlist sessions' from the dispatch platform. It distinguishes itself from siblings like dispatch_watchlist_add and dispatch_watchlist_remove.
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?
Examples provide implicit usage guidance (e.g., 'What's on the watchlist?' and 'Is KLM651 being tracked?'). It explains the watchlist purpose and alerts, but lacks explicit when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_watchlist_removeADestructive
Remove a session from the VIP watchlist, stopping automated monitoring.
Provide either session_id (precise) or hex (removes all sessions for that aircraft). At least one of session_id or hex must be provided.
Args: params (WatchlistRemoveInput): - session_id (str, optional): Session ID from dispatch_watchlist_get - hex (str, optional): ICAO hex to remove all sessions for that aircraft
Returns: str: JSON confirmation or error string.
Examples: - "Stop tracking KLM651" -> get hex via flight_get_by_callsign, then call with hex= - "Remove watchlist session abc123" -> call with session_id='abc123'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show destructiveHint=true and readOnlyHint=false. The description confirms the tool is destructive by stating 'stopping automated monitoring' and that it removes data. However, it does not detail additional behavioral traits like irreversibility or authorization needs beyond what annotations hint. With annotations present, the description adds some context but not extensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for Args, Returns, and Examples. It is concise, using only necessary sentences, and is front-loaded with the core purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two optional parameters, destructive behavior) and the presence of annotations and output schema, the description covers the essential aspects: purpose, input usage, and examples. It could be considered complete, though it might benefit from a note on idempotency or error cases.
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 description provides clear semantics for both parameters: session_id removes a specific session, hex removes all sessions for that aircraft. This adds value over the schema's brief descriptions ('Watchlist session ID to remove' and 'ICAO hex of aircraft whose session to remove') by explaining the behavioral difference between the two.
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 'Remove a session from the VIP watchlist, stopping automated monitoring.' It specifies the resource (VIP watchlist) and action (remove), and distinguishes itself from sibling tools like dispatch_watchlist_add and dispatch_watchlist_get.
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 explains when to use: to remove a session from the watchlist, and provides conditions: 'Provide either session_id (precise) or hex (removes all sessions for that aircraft). At least one of session_id or hex must be provided.' It includes examples that reference flight_get_by_callsign, giving context for alternative tool use. It lacks explicit 'when not to use' but is clear overall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flight_get_by_callsignARead-onlyIdempotent
Get current ADS-B position for a flight by ICAO callsign via airplanes.live.
WARNING: Callsign-to-hex mapping can be stale (yesterday's aircraft on today's flight number). After getting the hex from this call, verify it with flight_get_by_registration to confirm the physical airframe. Use the confirmed hex for all subsequent queries and watchlist entries.
Args: params (CallsignInput): - callsign (str): ICAO 3-letter callsign, e.g. 'KLM651', 'UAL925' (normalize: KL->KLM, UA->UAL, AA->AAL, BA->BAW, DL->DAL)
Returns: str: Pipe-delimited aircraft state line: hex | reg | type | callsign | lat lon | alt_baro | gs | hdg | baro_rate | seen_ago | rssi | squawk | nic | rc Or: "No aircraft found" message with guidance for overwater flights.
Examples: - "Where is KLM651 right now?" -> params.callsign='KLM651' - "Track UAL925" -> params.callsign='UAL925', then verify hex via registration
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description discloses that callsign-to-hex mapping can be stale, the data source (airplanes.live), the return format (pipe-delimited string), and possible error messages. This adds significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for warning, args, returns, and examples. It is front-loaded with the primary purpose. While it could be slightly more concise, the information density is appropriate, and the structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no enums, output schema present), the description covers all necessary aspects: purpose, usage guidance, return format, and examples. It also addresses potential pitfalls (stale mapping). The presence of an output schema reduces the burden, but the description still provides complete contextual information.
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 schema already describes the 'callsign' parameter with normalization examples. The tool description adds value by reiterating normalization rules in a different format and providing usage context (e.g., warning about staleness). However, the schema description is already quite comprehensive, so the added value is moderate.
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 current ADS-B position for a flight by ICAO callsign via airplanes.live', which specifies the verb, resource, and data source. It distinguishes from sibling tools like flight_get_by_hex and flight_get_by_registration by focusing on callsign lookup.
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 warning about stale hex mapping and explicitly advises verifying with flight_get_by_registration. It provides normalization rules for airline codes (e.g., KL->KLM) and explains when to use the tool versus alternatives. This offers clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flight_get_by_hexARead-onlyIdempotent
Get current ADS-B position for an aircraft by confirmed ICAO 24-bit hex address.
Hex queries are the most reliable — they bypass callsign privacy filters and avoid stale callsign-to-hex associations. Use this for all position polls once hex has been confirmed via flight_get_by_registration.
Args: params (HexInput): - hex (str): 6-character uppercase hex, e.g. '484150', 'A1B2C3'
Returns: str: Pipe-delimited aircraft state line with full telemetry, or "No aircraft found" (overwater, ground, or hex not in ADS-B coverage).
Examples: - "Poll position for hex 484150" -> params.hex='484150' - "Is hex A1B2C3 still airborne?" -> call, check alt field
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds context beyond annotations: it discloses that the tool returns 'pipe-delimited aircraft state line with full telemetry' or 'No aircraft found' for edge cases. It also mentions the reliability advantage, which helps the agent understand behavior. No contradiction with 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 well-structured and concise: a clear first sentence, followed by usage context, then structured Args and Returns sections, and concrete examples. Every sentence adds value; no redundancy. The overall length is appropriate for the complexity.
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 a single parameter, an output schema, and good annotations, the description covers all necessary aspects: purpose, when to use, parameter details, return format, and edge cases. It also references the related tool flight_get_by_registration, aiding the agent in understanding the workflow.
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 description explains the hex parameter in detail: format (6 uppercase hex), examples, and its reliability (airframe-bound). While the input schema also includes similar text, the description reinforces and adds the context of bypassing privacy filters. The 'Args' section clearly maps to the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get current ADS-B position for an aircraft by confirmed ICAO 24-bit hex address.' It specifies the verb (get), resource (position), and identifier (hex). It also distinguishes from sibling tools by emphasizing hex reliability over callsign-based methods.
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 explicit usage guidance: 'Use this for all position polls once hex has been confirmed via flight_get_by_registration.' It explains when to use (after confirmation) and why (bypasses filters, avoids stale associations), effectively directing the agent away from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flight_get_by_registrationARead-onlyIdempotent
Get ADS-B position and ICAO hex for an aircraft by tail/registration number.
Registration is airframe-bound, making this the preferred way to confirm ICAO hex before adding to watchlist. airplanes.live returns the aircraft's database entry including hex even when the aircraft is not currently transmitting.
Args: params (RegistrationInput): - registration (str): Tail number, e.g. 'N12345', 'PH-BKB', 'G-EUYA'
Returns: str: Pipe-delimited aircraft state line including confirmed hex. Or: "No aircraft found" message (aircraft may be on ground or not in DB).
Examples: - "What's the hex for N12345?" -> params.registration='N12345', extract hex from result - "Confirm the aircraft on KLM651 is PH-BKB" -> call with PH-BKB, verify hex matches callsign result
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by explaining that the database entry including hex is returned even when the aircraft is not transmitting, which is beyond what annotations provide. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples) and front-loads the purpose. It is slightly verbose but each part adds value. Could be more concise, but it's effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of annotations, the description covers the essential behaviors and return format. It explains when to use and what to expect. The output schema is not shown, but the description's return info is adequate.
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 description provides an Args section with a usage example and a clear description of the 'registration' parameter, including format and examples. The input schema also includes a description. Together, this adds meaning beyond the schema alone.
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 ADS-B position and ICAO hex by tail number. It uses a specific verb+resource and distinguishes itself from siblings that query by callsign or hex.
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 context on when to use this tool (preferred for confirming hex before adding to watchlist) and implies it works even when aircraft is not transmitting. It does not explicitly state when not to use or mention alternatives, but the context is clear.
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. Dates show when Glama detected each change.
25 tool updates
v0.1.0- First observed
dispatch_admin_force_opsplan_snapshot - First observed
dispatch_admin_force_recompute_cps - First observed
dispatch_admin_get_audit_log - First observed
dispatch_admin_health - First observed
dispatch_admin_refresh_feed - First observed
dispatch_admin_send_push_alert - First observed
dispatch_get_alerts - First observed
dispatch_get_amtrak - First observed
dispatch_get_brief - First observed
dispatch_get_cps - First observed
dispatch_get_feeds - First observed
dispatch_get_notams - First observed
dispatch_get_opsplan - First observed
dispatch_get_route - First observed
dispatch_get_runsheet - First observed
dispatch_get_tfr - First observed
dispatch_get_tfr_enriched - First observed
dispatch_get_weather - First observed
dispatch_health_check - First observed
dispatch_watchlist_add - First observed
dispatch_watchlist_get - First observed
dispatch_watchlist_remove - First observed
flight_get_by_callsign - First observed
flight_get_by_hex - First observed
flight_get_by_registration
TDQS
Most tools have distinct purposes, but there is some overlap between raw and enriched TFR endpoints (dispatch_get_tfr vs dispatch_get_tfr_enriched) and between multiple refresh admin tools. However, descriptions clarify differences, so agents can usually select correctly.
Tools follow a consistent prefix pattern (dispatch_*, flight_*) with verb_noun structure. However, there are minor inconsistencies such as 'force_opsplan_snapshot' vs 'refresh_feed', and some verbs are ambiguous (e.g., 'get' vs 'health_check').
25 tools is on the higher end but still appropriate for a comprehensive dispatch platform covering weather, flight tracking, alerts, admin, and watchlist features. Each tool has a specific role, and no obvious bloat.
Core data retrieval is well covered, but there are gaps in trip management (no create/update/delete for runsheet) and limited watchlist editing beyond add/remove. Missing CRUD for some entities, but the surface is functional for monitoring and alerting.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP Server for an Agent Task Marketplace
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Corporate travel booking and expense management for TripGain, exposed as an MCP server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA production-grade MCP server designed for multi-tenant, authenticated, and observable AI agent systems, enabling secure tool execution across heterogeneous data sources.62MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with QUADS infrastructure systems via API, enabling resource management and automation through LLM applications.MIT
- AlicenseAqualityCmaintenanceMCP server giving AI agents access to real-time aviation data — live flight tracking, airport weather, airline and airport information.103MIT
- AlicenseBqualityCmaintenanceMCP server for grounded analysis of synthetic electric-taxi operations data, exposing tools for aggregated metrics, charging risk, and policy retrieval.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CorporateTravelDC/corporatetravel-dispatch-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server