EasyTerritory MCP
Server Details
Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 47 tools
Many tools target the same domain (account_build/auto_build/direct_build/cluster_points/seed_build are all 'builders'; get_map_selection/get_part_selection/request_part_selection overlap; discover_intent/workflow_advisor/ezt are three routers). Descriptions are unusually explicit about boundaries and anti-patterns, which rescues the set, but an agent still has to read carefully to avoid misselection.
There is a clear verb_noun convention for many tools (get_map_visualization, ingest_accounts, delete_route, configure_map, calculate_route), but it is broken by noun-first build tools (auto_build, account_build, direct_build, seed_build, territory_split/merge/rebalance) plus ep_* and tasks_* prefix families. Readable and mostly predictable, but not a single consistent pattern.
47 tools is heavy (rubric places 25+ at 2), and several clusters look redundant — three routers, three selection tools, three task-mirror tools, and six-plus territory builders. The domain is genuinely large, but the surface feels over-expanded rather than tightly scoped.
Coverage is remarkably full: ingest/geocode, multiple build modes, analyze, routing, periodic scheduling, isochrones, seed growth, realign, split/merge/rebalance, delegation extract/reintegrate, import/export, map config, feedback, knowledge retrieval, and task management. The only absent capabilities (Designer push/pull) are explicitly documented with REST workarounds.
Available Tools
47 toolsaccount_buildAInspect
[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). Prerequisites: ingest_accounts with grouping column; part_layer chosen; viewer connected. Omit ts and ts_handle when the session id argument is already set. That session is the TS. Numeric codes are labels, not balance metrics; scoped builds use in-scope accounts only. Part scope defaults to bbox_intersect (bbox proximity of ingested accounts). When the user names a state/region ('TX ZIPs only'), pass part_scope=explicit and part_filter={state_abbr: TX} — not bbox_intersect. Scope fields are top-level part_filter/part_ids. Progress: linked tasks publish live subphases on Tasks status / MC overlay (grouping → radial seeds → inflate → empty-part assign → interlock polish) with cooperative cancel — same poll loop as auto_build (next_action / sleep_ms). VISIT FREQUENCY: when a cadence column is declared, pass visit_frequency_field to scale workload or ignore_visit_frequency=true for one visit per cycle — do not inherit the column silently. Modern form-capable clients (protocol >= 2026-07-28) may be prompted in-band for missing grouping_field / part_layer / tal_label; legacy hosts keep required-arg / INVALID_REQUEST errors. Next: analyze + load_analysis_panel. Scenarios: ACB-001..004, MC-011.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| part_ids | No | ||
| tal_label | No | ||
| ts_handle | No | ||
| part_layer | No | ||
| part_scope | No | ||
| output_mode | No | tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh. | tal |
| part_filter | No | ||
| point_layer | Yes | ||
| repair_policy | No | default | |
| grouping_field | No | ||
| map_session_id | No | ||
| conflict_policy | No | plurality_account_count | |
| guidance_handle | No | ||
| expected_revision | No | ||
| visit_frequency_field | No | ||
| ignore_visit_frequency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses live subphase publishing on Tasks/MC overlay, cooperative cancel, the shared next_action/sleep_ms poll loop, the rule against silently inheriting a cadence column, and protocol-version-gated in-band prompting vs legacy INVALID_REQUEST behavior. It omits the mutation/permission profile (whether the build overwrites existing territories) and any expected_revision concurrency semantics, keeping it out of the top band.
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 tier and "When" clause are front-loaded and nearly every sentence carries actionable content (scope semantics, progress model, cadence rule, client compatibility). It is nonetheless densely telegraphic, with fragments like "That session is the TS" and opaque scenario codes (ACB-001..004, MC-011) that cost readability without adding selection 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?
An output schema exists, so return values are already covered, and the description supplies everything else an agent needs for this complex 17-param builder: prerequisites, scope selection branching, progress/cancel behavior, cadence handling, and host-compatibility fallbacks. Nothing material to invoking it correctly appears to be 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?
Schema description coverage is only 6% across 17 params, so the description must compensate, and it explains roughly a dozen of them in prose: ts/ts_handle omission when a session id is set, part_scope default of bbox_intersect, part_filter/part_ids placement as top-level scope fields, grouping_field, part_layer, tal_label, visit_frequency_field and ignore_visit_frequency. It leaves the single required parameter (point_layer) and repair_policy/conflict_policy/expected_revision/guidance_handle unexplained, so the coverage gap is narrowed but not closed.
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 tier tag "Attribute Grouping Builder" plus "territories should mirror an account attribute column from CRM exports" states a specific verb (build) and resource (territories grouped by an account attribute), which cleanly separates it from auto_build, seed_build and direct_build siblings. It never states the purpose in one plain sentence, so it is clear but leans on the reader to assemble the meaning from fragments.
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 gives an explicit "When" condition (territories should mirror a CRM attribute column), prerequisites (ingest_accounts with grouping column, part_layer chosen, viewer connected), and a concrete routing rule for the common ambiguity: naming a state/region requires part_scope=explicit with part_filter, not bbox_intersect. It also points to the follow-up (analyze + load_analysis_panel) and names auto_build as the shared poll-loop peer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyzeAInspect
[Tier 1 — Analysis] When: balance diagnostics, cross-TAL comparison, or post-mutation facts. Accepts ts, ts_handle, or completed job_id (inline ts or result.ts_handle from prior compute jobs). Prerequisites: TAL exists; re-run after any TAL or point change (I-2)—never treat stale analysis as current. Returns JSON facts and presentation guidance URI; no prose. metrics: omit to analyze all declared point-layer columns, or pass explicit names. System dimensions (always valid, not point columns): workload (territory hours; alias total_workload_hours), account_count. Point columns must be fields declared at ingest (metric_fields/workload_fields, e.g. Revenue, Units Sold); undeclared columns are discarded at ingest and fail with UNDECLARED_FIELD — re-ingest with the column declared to analyze it. Response includes available_metrics. METRIC COLUMNS ALWAYS RENDER: the territory_metric_grids (and the MC dock) carry Total Count plus a Total column for EVERY declared metric_fields column of the point layer, in declaration order, even when metrics names only account_count or workload — a count-only panel is never the correct outcome when metrics are declared. Declared names may be bare strings (Designer pull) or {field,label,type} objects (ingest). Metric cells are parsed leniently: '14,651', '$1,200.50', and padded strings sum as numbers. DWELL / WORKLOAD (T-171): workload hours need onsite/dwell time — request dwell_time, TAL build_provenance.dwell_time (auto_build), or the point layer's dwell_time_field. When none resolves, Analyze STILL RUNS and reports counts, metrics, classification breakdowns, and balance on those dimensions; workload is OMITTED (no total_workload_hours column, workload_total null) — never drive-only hours. The result then carries workload_omitted {tal_ids, ask_user, retry}: report the statistics FIRST, then relay ask_user verbatim (it asks for an average onsite/dwell time). Re-run analyze with dwell_time only if the user answers; never invent a default (including 30 minutes). Do not ask for dwell before the first analyze just to avoid the note. Prefer analysis_panel=single with map_session_id so the MC dock fills on this call — that is the one-shot post-build path. The completed result then has analysis_panel.status=pushed, and session state has analysis_panel.loaded=true. phase_timings_ms.panel_push is only a duration, not proof the dock opened. Otherwise pass the full Analyze result (or its task_id) to load_analysis_panel. WORKLOAD UNITS: territories[].workload_total is minutes (workload_unit=minutes). Quote hours only from territory_metric_grids cell total_workload_hours.value. When metrics is omitted and dwell resolves, balance_scores includes workload plus declared metrics — not a location-match score. DOCK HIDE: minimizing the table leaves analysis_panel.loaded true; do not call load_analysis_panel again just to restore it. A new analysis_panel_loaded event opens the dock. Chat-only JSON is not completion when a map is open. Use ezt://guidance/analysis-presentation for narrative. Full atom: ezt://guidance/workflows/analyze-and-present. Scenarios: AN-001..007, MC-009, S002.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| scope | No | ||
| job_id | No | ||
| metrics | No | ||
| tal_ids | No | ||
| max_depth | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| part_layer | No | ||
| compare_tals | No | ||
| analysis_panel | No | ||
| map_session_id | No | ||
| guidance_handle | No | ||
| hypothetical_moves | No | ||
| visit_frequency_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden and does so richly: it discloses that workload omission still returns counts/metrics (workload_total null, never drive-only hours), that undeclared columns fail with UNDECLARED_FIELD, that metric cells are parsed leniently, that workload_total is in minutes while hours only come from grids, and that panel push duration is not proof the dock opened. This is far beyond what a schema could convey.
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 guidance is valuable but delivered as a dense wall of text with repetition — workload omission is re-explained multiple times, dock behavior is revisited, and 'never invent a default (including 30 minutes)' restates an earlier point. Some length is justified by tool complexity, but it is not tightly front-loaded or easily scannable.
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?
Because an output schema exists, the description is not obligated to describe return values, and it still covers prerequisites, the failure mode (UNDECLARED_FIELD), units, and panel-state semantics comprehensively. The gap is the unexplained params, but for a tool of this complexity the behavioral coverage is nearly sufficient on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 15 parameters, so the description must compensate and it only partially does. It explains ts/ts_handle/job_id inputs, metrics semantics (omit for all declared columns, bare strings vs {field,label,type}), dwell_time, tal_ids in workload_omitted, and analysis_panel=single with map_session_id. Eight parameters (scope, max_depth, part_layer, compare_tals, guidance_handle, hypothetical_moves, visit_frequency_field) receive no explanation at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific scope: '[Tier 1 — Analysis] When: balance diagnostics, cross-TAL comparison, or post-mutation facts,' which clearly identifies the resource and operation. It is distinct from analyze_routes by implication but never explicitly contrasts with sibling analysis tools. An agent understands what it does, though not the full boundary against nearby 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?
It states explicit trigger conditions (balance diagnostics, cross-TAL comparison, post-mutation facts), prerequisites ('TAL exists; re-run after any TAL or point change (I-2)—never treat stale analysis as current'), and an alternative path ('Otherwise pass the full Analyze result ... to load_analysis_panel'). There is also an explicit prohibition: 'Do not ask for dwell before the first analyze just to avoid the note.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_routesAInspect
[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinates, centroid, bbox (e.g. 'which of my Houston runs has room for one more stop', 'total hours for each route'). Prerequisites: at least one route in the session/TS (map_session_id preferred, else ts_handle); dwell confirmed by the user unless calculate_route already stored it. route_workload_hours = provider drive time + confirmed dwell, with NO visit-frequency multiplier. dwell_hours is one dwell per stop in stop_count. A circuit's stop_count includes the return to the start, so that account is charged dwell twice. Cluster and territory workload charge each account once. This is a DIFFERENT quantity from those hours — never sum, compare, or substitute one for the other. FACTS ONLY: no capacity, no headroom, no ranking, no overloaded flag. Apply constraints like 'nearest route under 7 hours' yourself from centroid + route_workload_hours, then add the stop by re-running calculate_route with that route_id and the revised stop list. Anti-patterns: do NOT call analyze for routes (analyze is TAL/part-grained and returns territory workload); do NOT feed these hours into auto_build, territory_rebalance, or a territory workload figure. Unresolved dwell returns CLARIFICATION_REQUIRED / needs_dwell — ask the user, never invent a default (including 30 minutes). Synchronous: no task_id. Scenarios: RT-011.
| Name | Required | Description | Default |
|---|---|---|---|
| route_ids | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| map_session_id | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares synchronous execution (no task_id), the CLARIFICATION_REQUIRED/needs_dwell failure mode for unresolved dwell, and the FACTS-ONLY contract (no capacity, headroom, ranking, or overloaded flag). It also warns against summing/comparing its hours with cluster/territory workload figures, which is behavior beyond any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the When/Prerequisites and sequences the guidance logically, and nearly every sentence adds decision-relevant content. It is nonetheless dense and long, with some quantity-distinction caveats that verge on repetition, so it stops just short of optimal concision.
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?
An output schema exists, so return values need not be explained, yet the description still clarifies the workload math and quantity meanings where they could be misused. For a fact-reporting tool with 5 inputs and no required params, every decision-relevant piece an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 5 params, so the description must compensate. It does explain map_session_id vs ts_handle ('map_session_id preferred') and dwell_time semantics (one dwell per stop, charged twice for a circuit), but route_ids is only touched obliquely and guidance_handle is never explained, so it only partially fills the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('per-route numbers for routes calculate_route already drew') and enumerates exactly what it returns: drive hours, dwell hours, route_workload_hours, stop coordinates, centroid, bbox. It explicitly differentiates itself from the analyze sibling ('analyze is TAL/part-grained') and from territory/cluster workload quantities, so an agent can place it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit 'When' trigger with concrete example questions, states prerequisites (a route must exist; dwell confirmed unless already stored), and lists anti-patterns ('do NOT call analyze for routes', 'do NOT feed these hours into auto_build, territory_rebalance'). It also names the correct follow-up path (re-run calculate_route with the route_id) and a scenario code, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_buildAInspect
[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, Mode B workload target, Scoped Split). Execution gate: after sizing, balance, dwell, and scope are known, call THIS tool immediately — searching the catalog, get_guidance, or polling Tasks never starts a build. A successful response with a new task_id is the only proof of submit; do not claim started/restarting until then. Then follow do_this_next only with that new task_id. When workflow_advisor returns next_tool=auto_build, call auto_build next. Canonical example — 3 TX ZIP territories, workload-only, 30-min dwell: build_mode={mode: fixed_territory_count, territory_count: 3}, objective={workload_bias: 100}, dwell_time={type: scalar, value: 30, unit: minutes}, part_scope=explicit, part_filter={state_abbr: TX}, map_session_id=. Omit ts and ts_handle when the session id argument is already set. That session is the TS. Do not repost inline ts. build_mode.mode must be exactly one of: fixed_territory_count, fixed_workload_target, scoped_split. For workload targets (e.g. 40-hour territories), use build_mode={mode: fixed_workload_target, target_workload: 40} (territories only approximate the target). ALWAYS ask for dwell/onsite time before calling — Auto Build always computes territory workload hours (drive + dwell), even when balancing on a metric or account count. Pass dwell_time only after they confirm a column ({type: field, field, unit}) or scalar ({type: scalar, value, unit}). Never invent default dwell such as 1 hour or 30 minutes per visit. Server rejects auto_build without resolved dwell_time (CLARIFICATION_REQUIRED). VISIT FREQUENCY: when the point layer has a visit-frequency column, ask whether to aggregate workload across a schedule period (pass visit_frequency_field) or ignore it (pass ignore_visit_frequency=true). Do not inherit the column silently. If no visit-frequency column exists, omit both. Modern clients that negotiate protocol >= 2026-07-28 and declare form elicitation may answer missing sizing/dwell (and optional balance) in-band via Resolve/Elicit; legacy/Cursor hosts without form elicitation keep CLARIFICATION_REQUIRED / ask_user (HITL-025 — not a server failure). build_mode may be omitted when elicitation can fill it. Workload is drive time plus dwell — not Revenue or any metric column. When the user says 'balanced on workload' or 'workload-balanced', use workload_bias=100 with no objective.metric; do not ask which metric column workload means — ask dwell (Q5) only. Confirm balance dimension (Q2) and bias (Q3) with the user when unclear — a workload-hour target is sizing, not permission to silently set workload_bias=100 unless workload is already named as the balance dimension. Declare metric_fields at ingest but ask which column (if any) to balance on before auto_build when the user did not already choose workload balance. After build completes: analyze with map_session_id and analysis_panel=single (or load_analysis_panel) so stats appear in the MC dock — not chat-only. Part scope defaults to bbox_intersect (ZIPs intersecting the account-point bbox) — geographic proximity, not state/attribute scope. When the user names a state or region ('TX ZIPs only', 'Texas only'), pass part_scope=explicit and part_filter={state_abbr: TX} immediately; do not default to bbox_intersect (can pull tens of thousands of national ZIPs) and do not query_parts first for an obvious state filter. Scope fields are top-level part_filter/part_ids — never under objective. A genuinely nationwide ZIP request remains supported: when bbox_intersect resolves at national scale, the job continues at full ZIP-level quality and returns a NATIONAL_PART_SCOPE warning rather than silently switching geography. Long partitions publish named 35–42% subphases (travel cache, power solve, border refinement, compactness, seam polish) and renew their worker lease independently; keep polling via next_action/sleep_ms and do not infer a stall from one long quality pass. Prerequisites: ingest_accounts done, part_layer chosen, viewer connected (human-in-loop). Use direct_build for known assignments; account_build to group by attribute. Appends a TAL; does not replace existing alignments. Dissolved leaves report min_solidity beside mean_polsby_popper and min_polsby_popper. Gate shape from those figures rather than recomputing them from a download. Next: analyze with analysis_panel=single. Full atom: ezt://guidance/workflows/build-from-accounts. Scenarios: S003, AB-001..017, MC-011.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| part_ids | No | ||
| objective | No | ||
| tal_label | Yes | ||
| ts_handle | No | ||
| build_mode | No | ||
| dwell_time | No | ||
| part_layer | Yes | ||
| part_scope | No | ||
| output_mode | No | tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh. | tal |
| part_filter | No | ||
| point_layer | Yes | ||
| repair_policy | No | default | |
| map_session_id | No | ||
| guidance_handle | No | ||
| expected_revision | No | ||
| visit_frequency_field | No | ||
| ignore_visit_frequency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the server-side rejection without resolved dwell_time (CLARIFICATION_REQUIRED), elicitation vs legacy host behavior, long-partition subphase publishing and lease renewal, the NATIONAL_PART_SCOPE warning, and that it appends a TAL rather than replacing alignments. These are non-obvious behavioral traits an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with 'When:' and organized into condition/action blocks, which helps. However the text is very long and repetitive — the dwell-time instruction is restated several times, and multiple parenthetical warnings dilute the key directives, so it is informative but not tightly written.
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 an 18-parameter remote build job, the definition covers the prerequisites, execution gate, dwell/visit-frequency prerequisites, error paths, polling expectations, scope defaults, and post-build analysis steps. With an output schema already handling return values, nothing essential for a correct invocation 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?
Schema coverage is only 6% across 18 parameters, so the description must compensate heavily, and it does for the critical ones: build_mode mode enum values, objective.workload_bias=100 semantics, dwell_time scalar vs field shapes, top-level part_scope/part_filter placement, visit_frequency_field and ignore_visit_frequency. It leaves several parameters undocumented (repair_policy, expected_revision, guidance_handle, part_ids), so it falls short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific verb and resource ('partition account points into N balanced territories over a part layer') and explicitly distinguishes itself from siblings, stating that direct_build is for known assignments and account_build is for grouping by attribute. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit execution gate ('after sizing, balance, dwell, and scope are known, call THIS tool immediately'), names what does NOT start a build (catalog search, get_guidance, polling Tasks), and routes the agent via workflow_advisor returning next_tool=auto_build. This is about as clear a when/when-not as possible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_routeAInspect
[Tier 1 — Routing] When: drive a list of stops in the best sequence — a windshield itinerary, a service run, a delivery sheet (RT-001..RT-008). This tool routes and sequences existing stops; it never creates or rebalances territories. When a visit-frequency column is on the point layer, the word route is ambiguous — confirm the user wants a driving itinerary of those stops, not schedule_visits, before calling this tool. Prerequisites: a TomTom or Azure Maps key on the server; stops referenced by point_layer must already be ingested, or pass inline lat/lon. TERRITORY STOPS: after a TAL is built or analyze linkage runs, account points carry territory_id. Route one territory with stop_sets source.filter.territory_id set to the leaf id from the last build (leaf_territories[].territory_id), not a display label. start is exactly one stop (home, depot, or one point_id). The territory filter belongs on stop_sets, never on start. ORDERED STOP SETS: stop_sets are visited in the order supplied and optimization NEVER moves a stop between sets, which keeps 'start at home, hit the depot, then the day's calls' in the right sequence. Use order='optimize' to let the solver sequence a set, 'as_given' to keep it fixed. group_by_field splits one set into ordered bands on a column value (e.g. route_priority: every 1 precedes every 2, optimized inside each band). ROUTE TYPES: 'circuit' returns to the start; 'tour' finishes at a declared end stop (end is required); 'open_tour' is a one-way run that ends at the last stop the solver picks, never returning to the start. A circuit's stop_count includes that return. analyze_routes charges dwell once per stop, so the start account is charged dwell twice. Cluster and territory workload charge each account once — those hour figures are not this route's hours. Sequencing is solved server-side against straight-line distance, then one provider call returns road distances, durations, and geometry, so reported numbers are always road-accurate. Drive time here is not the territory workload model — auto_build keeps its own. MANY ROUTES ON ONE MAP: each route is stored in the TS under a route_id, so calling this tool again with a NEW route_id ADDS a route (10 Houston routes coexist, each with its own legend row and color). Reusing an EXISTING route_id REPLACES that route in place, which is the way to add or drop a stop: re-route the same route_id with the revised stop list. Never delete and re-add for a stop change, and never omit route_id when you meant to add a second route (an auto-minted id is fine for a one-off). Use delete_route to drop a whole route; per-route workload facts come from analyze_routes, never from analyze. Pass dwell_time when you want route workload recomputable later; it is stored as provenance and never invented. QUOTA: billable provider calls are capped per API key per calendar month, and a long stop list chunked to the vendor waypoint cap costs one call per chunk. A route is all-or-nothing: past the cap it returns PROVIDER_QUOTA_EXCEEDED with limit, used, remaining, and period_resets_at rather than a partial path. An operator must raise the cap, so report those numbers instead of retrying with fewer stops. Async: returns task_id — follow _meta.next_action (sleep_and_poll → consume_result). Pass map_session_id to draw the path and numbered stops on an open map. Full atom: ezt://guidance/workflows/routes-layer. Scenarios: RT-001..RT-011.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | Yes | ||
| route_id | No | ||
| depart_at | No | ||
| stop_sets | Yes | ||
| ts_handle | No | ||
| dwell_time | No | ||
| route_type | Yes | ||
| route_label | No | ||
| travel_mode | No | car | |
| map_session_id | No | ||
| guidance_handle | No | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers: API-key prerequisites, all-or-nothing quota semantics with the PROVIDER_QUOTA_EXCEEDED payload fields, async task_id + _meta.next_action flow, and 'no stop moves between sets' optimization guarantees. It also discloses the route_id add-vs-replace mutation behavior and the dwell double-charge caveat, which are non-obvious side effects an agent must know.
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?
It is long, but front-loaded with the 'When:' trigger and organized under labeled sections (TERRITORY STOPS, ORDERED STOP SETS, ROUTE TYPES, MANY ROUTES, QUOTA), so most sentences earn their place. It is dense rather than bloated, though some quota/route_id detail could be trimmed.
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 an output schema exists (return values need not be explained) and 13 params with nested objects, the description covers workflow context, prerequisites, async behavior, quota failure mode, and multi-route map storage. An agent has everything needed to invoke it correctly and interpret its lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 13 params, so the description must compensate and does so for the critical ones: route_type values ('circuit'/'tour'/'open_tour'), start constraints (exactly one stop), stop_sets ordering, order, group_by_field, filter.territory_id, route_id reuse semantics, and dwell_time provenance. However, several params (depart_at, travel_mode, include_geometry, ts_handle, guidance_handle, route_label) are never addressed, leaving the coverage gap only partially closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('routes and sequences existing stops', 'drive a list of stops in the best sequence') and immediately bounds the scope ('never creates or rebalances territories'). It explicitly distinguishes itself from siblings like schedule_visits, analyze_routes, delete_route, and auto_build, so an agent can select it without opening any schema.
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?
Opens with a 'When:' clause covering the trigger scenarios, then names the disambiguation case (visit-frequency column → confirm against schedule_visits) and the do-not-use case (territory creation/rebalancing). Prerequisites and alternatives are both stated, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_pointsAInspect
[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a TAL. The tool adds group_field (default group_id) to every point and color-classifies that field in the linked Map Component. That write replaces the layer's existing color classification (including a leftover color_classification ramp). Size and shape channels stay. Keep a prior metric as a second encoding with configure_map channel=size or channel=shape after this job — never a second color classification on the same layer. Example — five TX point groups balanced on workload with confirmed 30-minute dwell: point_layer=accounts, build_mode={mode: fixed_territory_count, territory_count: 5}, objective={workload_bias: 100}, dwell_time={type: scalar, value: 30, unit: minutes}. Prerequisite: ingest_accounts completed for point_layer. Omit ts and ts_handle when the session id argument is already set. That session is the TS. Ask the same sizing, balance, bias, visit-frequency, and dwell questions; workload means in-group drive time plus dwell, never a metric column. Never invent dwell. build_mode supports fixed_territory_count and fixed_workload_target only. SUBSET: a named state or region on an already-ingested layer — Florida schools, TX accounts only — uses point_filter on the first call, e.g. point_filter={STATE: FL}. Keys are point properties (one value or a list). Do not re-ingest a filtered extract. Do not pass part_filter or part_scope (those belong to ZIP/part tools). Do not cluster the national layer. Unmatched points stay on the layer with group_field cleared and appear as an Ungrouped legend class. The 10,000-point cap applies after the filter. Empty match is EMPTY_POINT_FILTER; unknown property is UNKNOWN_POINT_PROPERTY. SEEDING BIAS (start locations): when the groups should line up with a set of start locations — technician homes, depots, branch offices — pass seed_point_layer=. It must be a SECOND ingested point layer, not point_layer. Each seed anchors exactly ONE group, so the seed count must match the group count (fixed_workload_target must derive that same count) or the call fails INVALID_REQUEST with blocked_by=seed_count_mismatch. seed_attraction (0-100, default 70) controls the hold on each group centroid: 100 pins it at its seed, 0 lets the seeds pick only the starting points and the solver drift to the workload centroid. Groups stay workload/metric balanced either way — seeds carry NO workload and are never members of the group they anchor. Both layers receive the same group_field value and the same per-group color, so a technician home paints in its group's color; read result.seed_summary.groups for each pairing plus seed_to_centroid_km. Example — 10 technician homes anchor 10 workload-balanced account groups: point_layer=accounts, seed_point_layer=technician_homes, seed_attraction=100, build_mode={mode: fixed_territory_count, territory_count: 10}. This tool does not spatially join points to parts and does not produce a TAL. Use auto_build for territories. Follow the returned task. The result lists groups (group_id, point_count, workload_hours, point_ids). Full atom: ezt://guidance/workflows/cluster-points. Scenarios: CP-001..005.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| objective | No | ||
| ts_handle | No | ||
| build_mode | No | ||
| dwell_time | No | ||
| group_field | No | group_id | |
| point_layer | Yes | ||
| point_filter | No | ||
| metric_fields | No | ||
| map_session_id | No | ||
| guidance_handle | No | ||
| seed_attraction | No | ||
| seed_point_layer | No | ||
| expected_revision | No | ||
| group_label_prefix | No | Group | |
| visit_frequency_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does so richly: it discloses the destructive side effect ('replaces the layer's existing color classification'), unmatched-point handling, the 10,000-point cap after filtering, seed/layer invariants ('seeds carry NO workload and are never members'), and named failure modes (EMPTY_POINT_FILTER, UNKNOWN_POINT_PROPERTY, INVALID_REQUEST with blocked_by=seed_count_mismatch). This is well beyond what structured fields provide.
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 purpose and destructive write are front-loaded with a tier label, and given the tool's genuine complexity most sentences earn their place. However, it is a dense single block with seeding, subset, error, and example concerns interleaved rather than clearly sectioned, which hurts scannability for a 16-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be detailed, yet the description still points at result.seed_summary.groups and the groups list (group_id, point_count, workload_hours, point_ids). Combined with guidance handle, atom reference, and scenarios, nothing an agent needs to call this correctly 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?
Schema coverage is 0% across 16 parameters, so the description must compensate and largely does: build_mode's allowed modes, objective/workload_bias, dwell_time's scalar/value/unit shape, point_filter key semantics, seed_point_layer constraints, seed_attraction's 0-100 default and meaning, and group_field's default are all explained. It leaves metric_fields, map_session_id, guidance_handle, expected_revision, and group_label_prefix undocumented, so it falls short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise verb and resource: 'Partition one ingested point layer directly into balanced point groups with CCPD,' and immediately disambiguates scope with 'without using ZIPs/counties or creating a TAL.' It explicitly routes away from siblings ('Use auto_build for territories', 'those belong to ZIP/part tools'), so an agent can distinguish it without opening any schema.
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?
Explicit when-to-use, when-not, and prerequisite guidance is present: prerequisite 'ingest_accounts completed', subset usage via point_filter with an example, and prohibitions ('Do not pass part_filter or part_scope', 'Do not cluster the national layer', 'never a second color classification'). It also tells the agent which sibling to use for territories, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_mapAInspect
[Tier 2 — Durable Map Config] When: set or update project_name (the durable TS short name used as the Map Component heading), loaded_part_layers, active_part_layer, active_tal_id, point_layer_classifications, classification, presentation, center, or zoom on the TS. project_name is first-class: persists to ts.properties.map_config.project_name and emits config_changed so a linked session refreshes the heading in place. POINT SYMBOLOGY: point_layer_classifications is the way to recolor/resize/reshape points on an open map — never export GeoJSON, compute breaks client-side, and repost a TS. Each entry is {point_layer, field, method: quantile|equal_interval|categorical|manual, class_count (2-12), channel: color|size|shape, optional colors/sizes/shapes, optional style:{color,size,opacity,shape} for the layer base symbol}. Supported shapes: circle|square|triangle|diamond|star|cross|house|pin|flag|hexagon|pentagon|shield|arrow_up|building (aliases home→house, marker/map_pin→pin, hex→hexagon, arrow/up→arrow_up, warehouse/depot→building, plus/x→cross). The server computes breaks from the in-session points, writes point_layers[]._classification, pushes config_changed, and returns the applied classes with per-class counts. Categorical missing values become an Ungrouped class. One classification per channel per layer: a second color entry replaces the first. Two encodings on one layer mix channels (color+size or color+shape). clear:true with point_layer and channel drops that channel classification, including a same-channel classification object. Other channels and the base style stay. active_channels reports the channels still set. Method defaults to quantile for numeric fields and categorical otherwise; pass one entry per layer to give two point layers distinct colors or shapes. classification (without a point_layer) stays a project-level map_config patch and does NOT paint points; a point-layer-targeted classification is routed to symbology with a warning. Optional center ([longitude, latitude]) and zoom (0-24) persist as the TS default camera and jump an open MC when included on this call; Monica's pan is not captured. Prefer map_session_id for an open MC — the live session TS is the patch base; a stale pre-ingest ts_handle must not strip points/part layers. Not the entry tool for browsing a TS — that is get_map_visualization (I-1). Prerequisites: map_session_id, ts_handle, or inline ts; points already ingested before point_layer_classifications; part_layer from ezt://part-layers before builds. Next: build or analyze; if active TAL changes, re-run analyze then load_analysis_panel (I-2). Scenarios: MC-010, MC-012, DS-001, baseline workflow step 4.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| zoom | No | ||
| center | No | ||
| ts_handle | No | ||
| presentation | No | ||
| project_name | No | ||
| active_tal_id | No | ||
| classification | No | ||
| map_session_id | No | ||
| merge_strategy | No | ||
| guidance_handle | No | ||
| active_part_layer | No | ||
| expected_revision | No | ||
| loaded_part_layers | No | ||
| expected_content_hash | No | ||
| point_layer_classifications | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses persistence ('persists to ts.properties.map_config.project_name'), emitted events ('emits config_changed so a linked session refreshes the heading in place'), server-side computation of breaks with returned per-class counts, replace-not-merge semantics ('a second color entry replaces the first'), clear:true behavior, method defaults, categorical missing-value handling ('Ungrouped class'), and camera side effects ('jump an open MC when included on this call; Monica's pan is not captured'). It even warns against a stale ts_handle stripping points/part layers.
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?
It is front-loaded with clear inline labels ('When:', 'POINT SYMBOLOGY:', 'Next:', 'Scenarios:'), which helps navigation, but it reads as a dense wall of text ballooning well past the param list, and some content repeats (config_changed is explained twice). For a tool this complex much is justified, yet trimming redundancy and adding line structure would improve scannability.
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 16 parameters, no annotations, and an existing output schema (so return values need not be documented), the description covers triggers, prerequisites, side effects, defaults, and misuse routing at a high level. It falls short only on the unexplained concurrency parameters (expected_revision, expected_content_hash) and merge_strategy, which matter for safe repeated invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 16 parameters, so the description must and largely does compensate: it defines point_layer_classifications entry structure (point_layer, field, method, class_count range 2-12, channel, optional colors/sizes/shapes, style), supported shape aliases, and the meaning of classification-vs-point_layer_classifications, center ([longitude, latitude]) and zoom (0-24). However merge_strategy, expected_revision, expected_content_hash, and guidance_handle receive no explanation, leaving concurrency/optimistic-locking semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a bracketed tier/role ('Durable Map Config') and an explicit verb list ('set or update project_name, loaded_part_layers, active_part_layer, active_tal_id, point_layer_classifications, classification, presentation, center, or zoom on the TS'), so the resource and scope are unambiguous. It also names the sibling it is NOT ('Not the entry tool for browsing a TS — that is get_map_visualization (I-1)'), letting an agent separate it from sibling tools without opening schemas.
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?
There is an explicit 'When:' trigger, prerequisites ('map_session_id, ts_handle, or inline ts; points already ingested before point_layer_classifications'), follow-on guidance ('Next: build or analyze; if active TAL changes, re-run analyze then load_analysis_panel'), and an explicit anti-pattern ('never export GeoJSON, compute breaks client-side, and repost a TS'). It also routes a misuse case ('a point-layer-targeted classification is routed to symbology with a warning'). Usage is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_territory_from_partsAInspect
[Tier 2 — Territory From Parts] When: create or update one leaf territory from committed part IDs (manual MC-005 build or RL-011/012). Prerequisites: part_ids from selection or agent list; part_layer; viewer connected. Pass map_session_id for the open MC — the server loads that session's TS, appends the new TAL, and rebinds the same session before map_refresh (do not call get_map_visualization just to show the new territory). If result.map_refresh.notified is false or status is rebind_required, call get_map_visualization(job_id=). Completed result includes created_territory.territory_id, leaf_territories, and selection_summary (requested/unique counts plus duplicate_part_ids) — territory_name is a display label only (e.g. T1 → territory_id like tal-t1-t1). Later realign into this territory MUST use created_territory.territory_id (preferred) or the exact leaf display name when unique; never invent shorthand (T3 ≠ Territory 3) — if unclear, ask which leaf from leaf_territories. DWELL: this tool creates a NEW TAL and does not inherit dwell_time from a prior auto_build. Dwell is NOT required to create the territory (same as direct_build). Optional dwell_time={type:scalar,value,unit} stamps build_provenance for later Analyze. Without dwell, Analyze still runs and reports every other statistic but OMITS workload (result.workload_omitted) — present the stats, then relay its ask_user sentence; never invent a default (including 30 minutes). Modern form-capable clients may be prompted in-band for dwell when a hydrated TS shows points without dwell provenance; declining still allows create (HITL-038). Next: repeat for additional territories, realign with created_territory.territory_id, or analyze with confirmed dwell_time. Scenarios: MC-005, RL-011, RL-012.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| tal_id | No | ||
| part_ids | Yes | ||
| dwell_time | No | ||
| part_layer | Yes | ||
| map_session_id | No | ||
| territory_name | Yes | ||
| territory_path | No | ||
| conflict_policy | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: the server loads the session TS, appends a new TAL, and rebinds the session before map_refresh; new TALs do not inherit dwell_time; missing dwell causes workload_omitted in Analyze; declining an in-band dwell prompt still permits creation (HITL-038). These are genuine side effects and failure semantics beyond any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with useful headers (When/Prerequisites/Next/Dwell/Scenarios), but the body is very dense and acronym-heavy (TAL, TS, MC, RL, HITL, DWELL), which taxes readability. Several clauses about downstream Analyze behavior and prompting could be tightened without losing meaning.
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?
An output schema exists, yet the description still usefully names key return fields (created_territory.territory_id, leaf_territories, selection_summary, map_refresh.notified) and the realignment rule that must use territory_id rather than an invented shorthand. It covers the workflow end-to-end; the remaining gap is the five undocumented input parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 10 parameters, so the description must compensate. It meaningfully explains part_ids, part_layer, map_session_id, dwell_time and the display-only nature of territory_name, but says nothing about ts, tal_id, territory_path, conflict_policy, or guidance_handle — roughly half the parameters remain undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'create or update one leaf territory from committed part IDs', and tags the trigger conditions (manual MC-005 build, RL-011/012). It is clearly distinguishable from siblings like auto_build, direct_build, realign and territory_merge, which are named or implied by contrast.
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?
Explicit 'When:', 'Prerequisites:', and 'Next:' sections, plus a negative instruction ('do not call get_map_visualization just to show the new territory') and a routing rule for when to call it (rebind_required / notified=false). Alternatives such as analyze and realign are named with the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_routeAInspect
[Tier 2 — Delete Route] When: drop a whole route from the map and the TS (e.g. 'delete the Tuesday A route', 'remove route houston-tue-a'). Prerequisites: map_session_id for an open MC (preferred), else ts_handle; plus route_id (or an exact unique route label). NOT for removing a single stop — for that, call calculate_route again with the SAME route_id and the remaining stops, which replaces the route in place. Already-absent routes return ok with already_absent=true and no error. An ambiguous label returns AMBIGUOUS_ROUTE with matching_route_ids — pass an explicit route_id rather than guessing. Synchronous: no task_id. Verify the open map legend no longer lists the route. Scenarios: RT-010.
| Name | Required | Description | Default |
|---|---|---|---|
| route_id | Yes | ||
| ts_handle | No | ||
| map_session_id | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does so richly: idempotent semantics (already_absent=true, no error), the AMBIGUOUS_ROUTE error with matching_route_ids, synchronous execution (no task_id), and a verification step via the map legend.
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?
Dense but front-loaded: the 'When' clause comes first, followed by prerequisites, exclusions, and error behavior. Every sentence adds value, though the '[Tier 2 — Delete Route]' prefix and the trailing 'Scenarios: RT-010' are metadata noise.
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?
An output schema exists, yet the description still covers the meaningful return signals (already_absent, AMBIGUOUS_ROUTE). Combined with prerequisites and verification guidance, an agent has everything needed to invoke and interpret the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains route_id (or exact unique label), the preferred map_session_id vs fallback ts_handle, but guidance_handle is never mentioned, leaving one of four parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (delete/drop a whole route) and explicitly scopes what it is not: removing a single stop. It names the sibling that handles that case (calculate_route), so an agent can distinguish the two without opening schemas.
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' triggers with example utterances, prerequisites (map_session_id preferred else ts_handle, plus route_id or a unique label), and a clear exclusion routing single-stop removal to calculate_route. Alternatives and edge cases are enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_talAInspect
[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'TAL') from the TS and open map (e.g. 'remove the territory layer', 'wipe all territories', 'remove the alignment', 'clear tal-tx-10t before rebuild'). Prerequisites: map_session_id for an open MC (preferred), else ts_handle; plus tal_id (or an exact unique TAL label). NOT for deleting one leaf territory — that is delete_territory. Do NOT N× delete_territory to wipe an alignment. Synchronous: no task_id / no Realign progress overlay. Points, part-layer overlays, and routes stay; active_tal_id becomes a remaining TAL, points, or empty. Already-absent returns ok with already_absent=true. Ambiguous label returns AMBIGUOUS_TAL. Next: verify the legend dropped the alignment, then auto_build / account_build / direct_build when rebuilding. Scenarios: HITL-057, T-134.
| Name | Required | Description | Default |
|---|---|---|---|
| tal_id | Yes | ||
| ts_handle | No | ||
| map_session_id | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: synchronous execution (no task_id, no progress overlay), what is preserved (points, overlays, routes), the post-condition of active_tal_id, and the idempotent already-absent=true outcome plus AMBIGUOUS_TAL error path.
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?
Dense but front-loaded, leading with tier and action, then when/prerequisites/exclusions/post-conditions. Nearly every clause carries routing or behavioral value, though the user-language list and scenario IDs add bulk that a tighter phrasing could absorb.
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 destructive delete tool with no annotations, the description supplies prerequisites, side effects, preservation guarantees, error semantics, and follow-up steps. Because an output schema exists, return-value detail is not required, and nothing an agent needs to invoke correctly 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?
Schema description coverage is 0%, so the description must compensate. It explains the role and precedence of map_session_id vs ts_handle and that tal_id accepts an exact unique label, which is meaningful beyond the schema. It does not mention guidance_handle at all, leaving one of four params undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('wipe one whole Territory Alignment Layer') with scope, and explicitly distinguishes itself from the sibling delete_territory ('NOT for deleting one leaf territory'). An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names when to use it (including colloquial user phrasings), explicit prerequisites (map_session_id preferred, else ts_handle, plus tal_id), and an explicit when-not ('Do NOT N× delete_territory'). Alternative tools for the follow-up (auto_build/account_build/direct_build) are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_territoryAInspect
[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS reference — prefer map_session_id for an open MC, else ts_handle or ts; tal_id; territory_id (stable leaf id from created_territory.territory_id / leaf_territories preferred, or an exact unique display name — do not invent shorthand like T3 for Territory 3; ask if unclear). Do NOT invent part_ids or call auto_build. This tool collects the leaf's part_ids and runs Realign remove_parts + remove_empty_territories (same engine as RL-013). To wipe an entire TAL / alignment before rebuild, call delete_tal instead — never N× this tool. Already-absent territories return ok with already_absent=true (no job). Next: follow the returned Tasks status operation until completed, call its result operation once, then verify the open map legend no longer lists the territory AND the territory fill/outline is gone from the canvas (not just the legend) before claiming success. Geography-only delete does not require Analyze. Scenarios: feedback delete-territory, RL-013 wrapper, T-087 last-leaf paint clear.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| tal_id | Yes | ||
| ts_handle | No | ||
| part_layer | No | ||
| territory_id | Yes | ||
| repair_policy | No | default | |
| map_session_id | No | ||
| guidance_handle | No | ||
| expected_revision | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so well: it discloses idempotent behavior ('Already-absent territories return ok with already_absent=true (no job)'), that a follow-up Tasks operation must be polled and its result called once, a verification step against both legend and canvas, and that geography-only deletes skip Analyze. This is unusually rich behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the When clause, prerequisites, prohibitions, and next steps in a tight sequence. It is dense and long, but nearly every clause carries operative information (idempotency, verification, engine identity); a small amount of scenario-tag noise ('feedback delete-territory, RL-013 wrapper, T-087 last-leaf paint clear') is the only padding.
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?
An output schema exists so return values need not be explained, and the description still adds the post-call workflow (poll Tasks, call result once, verify legend AND canvas). The only completeness gap is the four undocumented optional parameters, which matters for a 9-parameter mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 9 parameters, and the description compensates well for ts/ts_handle/map_session_id, tal_id, and territory_id (including valid sources for leaf ids and a warning against invented shorthand). However part_layer, repair_policy, guidance_handle, and expected_revision are never mentioned, leaving four parameters undocumented in both schema and 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?
States a precise verb+resource ('delete one leaf territory from an existing TAL') and immediately distinguishes itself from delete_tal and from auto_build. It also names the underlying engine (Realign remove_parts + remove_empty_territories), so the agent knows exactly what operation is being performed.
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?
Explicit When clause, explicit prerequisites (one TS reference, tal_id, territory_id), explicit exclusions ('Do NOT invent part_ids or call auto_build', 'never N× this tool' for wiping a TAL), and an explicit routing rule to delete_tal. It even tells the agent to ask when the territory reference is ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
direct_buildAInspect
[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_handle must be a server upload handle (aup_...) from POST /assignments/upload or request_assignment_upload — after parsing rows or passing csv_text/csv_file. Legacy spreadsheets (Postal Code + Territory/Region/Division) are auto-mapped when staged. Conflicting duplicate part_ids default to duplicate_part_policy=keep_first (first wins). Prerequisites: part_layer chosen; viewer connected for MC-first; ts/ts_handle optional. Not for account point locations—use ingest_accounts. Not for balanced partitioning—use auto_build. Not for attribute grouping—use account_build. Next: verify TAL in MC (MC-011), analyze + load_analysis_panel. Scenarios: DB-001..005, MC-011.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| tal_id | No | ||
| tal_label | Yes | ||
| ts_handle | No | ||
| part_layer | Yes | ||
| assignments | No | ||
| repair_policy | No | default | |
| map_session_id | No | ||
| guidance_handle | No | ||
| expected_revision | No | ||
| assignments_handle | No | ||
| missing_part_policy | No | fail | |
| duplicate_part_policy | No | keep_first |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a solid job: it discloses legacy auto-mapping behavior, the default duplicate_part_policy=keep_first, upload-handle provenance (aup_...), and prerequisites (part_layer chosen, viewer connected). It does not, however, state mutation semantics such as what existing territories are replaced or why expected_revision matters (optimistic concurrency), leaving a gap for a write 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?
Front-loaded with the 'When:' trigger, followed by preconditions, exclusions, next steps, and scenario codes. Dense but each clause carries routing value; the scenario/Tier/MC references add mild clutter without much agent-facing benefit.
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?
An output schema exists, so return values need not be described. The gap is on the input side: for a 13-parameter mutation with zero schema descriptions, the definition leaves several parameters and the assignments-vs-handle distinction unexplained, so it is not fully complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 13 parameters, so the description must compensate and only partially does: it clarifies assignments_handle format/origin, part_layer, ts/ts_handle optionality, and duplicate_part_policy. Several parameters remain undocumented (repair_policy, missing_part_policy, expected_revision, map_session_id, guidance_handle, the assignments array, tal_id/tal_label), and the relationship between the assignments array and assignments_handle is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action with scope: building a TAL from explicit part-to-territory assignments, tagged as the 'Known Assignments Builder'. It immediately distinguishes itself from siblings like ingest_accounts, auto_build, and account_build by naming each and the condition that selects them.
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?
Explicit when-to-use (user has explicit part-to-territory assignments, spreadsheet/legacy/hierarchical) plus three explicit 'Not for X—use Y' exclusions naming the correct alternatives. Prerequisites and follow-on steps are also stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_intentAInspect
[Tier 1 — Router] Deterministic entry point for ambiguous or open-ended territory requests. When: the user's goal or build type is unclear and you want the correct workflow before acting. Prerequisites: none (static keyword routing; no compute). Returns an intent_category, the recommended tool order, the Tier 1 tool + Tier 2 alternatives, required_inputs, clarifying_questions to ask when inputs are missing, a guidance_uri (ezt://guidance/workflows/{name}) for the full atom, and guidance — the same EMEP atom inlined as {uri, title, excerpt, truncated}, so you do NOT need a second resources/read to get the workflow text. Use it to disambiguate auto_build vs account_build vs direct_build and to route realign / restructure / analyze / delegation / geocode-ingest / load-part-layer-on-map (add zips, show zip codes) / route-stops (drive a list of stops in the best order) / reachable-area (a drive-time or drive-distance area around origins — service area, catchment, coverage, isochrone, which routes to isochrone_build) / periodic-scheduling (a recurring cadence — 'every 30 days', 'twice a month' — and which day each visit lands on, which routes to schedule_visits, never auto_build or cluster_points) / push-to-designer (an EasyTerritory Designer rolodex project from a TS: export_geojson then POST FromTerritorySolution to create or PUT .../Projects/{projectId}/... to update; territories, points, and routes import; ezt_pat_; there is no MCP push tool) / pull-from-designer (a Designer rolodex project into the MCP: GET REST/Agent/Projects then GET .../Projects/{projectId}/TerritorySolution with ezt_pat_, then import_geojson geojson_gzip; there is no MCP pull tool). Scenarios: AB-016, ACB-003, wrong-build-tool.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| user_request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that routing is static keyword-based with no compute ("Prerequisites: none"), enumerates the return fields, and crucially explains that guidance is inlined so "you do NOT need a second resources/read." That behavior/latency note is exactly the kind of trait structured fields don't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tier tag, trigger, and prerequisites, which is good. But the body is a dense wall of run-on parentheticals (isochrone, periodic-scheduling, push/pull-to-designer) with no formatting breaks, and the trailing "Scenarios: AB-016, ACB-003, wrong-build-tool" is cryptic and hard to act on, so size partly works against it.
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 high-fan-out router, it covers purpose, trigger, prerequisites, routing branches, and return contents comprehensively, and it even pre-empts the output-schema lookup by describing returns (though an output schema already exists, so that is redundancy rather than a gap). The only meaningful hole is that its own two input parameters remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither parameter is documented: the description never explains what `user_request` should contain or what shape/keys the free-form `context` object expects. The mentions of "required_inputs" and "clarifying_questions" describe outputs, not inputs, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific role ("Router / deterministic entry point for ambiguous or open-ended territory requests") and enumerates exactly which workflows it disambiguates (auto_build vs account_build vs direct_build, realign, isochrone, periodic-scheduling, push/pull-to-designer, etc.), so its function is unmistakable. It does not, however, differentiate itself from adjacent guidance/routing siblings such as workflow_advisor or get_guidance, which is the one clarity gap.
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?
Gives an explicit trigger ("When: the user's goal or build type is unclear and you want the correct workflow before acting") plus a scoping adjective ("ambiguous or open-ended") that implies the when-not case. It also names the concrete alternatives for each ambiguous scenario, effectively routing the agent to the correct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ensure_map_viewerAInspect
[Tier 1 — MC-First Gate] When: after get_map_visualization returns map_url and before any compute, build, analyze, or selection work with a human in the loop. Prerequisites: map_session_id from get_map_visualization. Next: ingest, configure_map, build, realign, or analyze once viewer_status.connected. Surface-agnostic: the in-chat MCP App shell connects the same session over the same SSE channel, so this gate works unchanged whether the human is looking at the in-chat map or the map_url tab. Do not skip it on an Apps host. Scenarios: MV-001, I-1.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_seconds | No | ||
| map_session_id | Yes | ||
| guidance_handle | No | ||
| poll_interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose important traits: it is a mandatory gate, requires a prior session id, unblocks the rest of the pipeline, and works identically across in-chat and map_url surfaces over SSE. It does not say what happens on timeout/failure or how wait_seconds/poll_interval_ms affect blocking, which is a real gap for a gating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the most decision-relevant information (When/Prerequisites/Next) in a labeled, scannable structure with no filler sentences. It loses a point for opaque references ('Tier 1 — MC-First Gate', 'Scenarios: MV-001, I-1') that add tokens without conveying meaning to an agent.
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?
An output schema exists, so return values needn't be described, and the description supplies prerequisites, sequencing, and surface behavior adequate to call the tool correctly. The main shortfall is the untouched parameter semantics, which leaves timing behavior (wait_seconds, poll_interval_ms) undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all 4 parameters, so the description must compensate. It only identifies the origin of map_session_id (from get_map_visualization); wait_seconds, poll_interval_ms, and guidance_handle are entirely unexplained in both schema and description, leaving their timing/behavioral effect ambiguous.
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 places the tool precisely in a workflow (a Tier 1 gate that runs after get_map_visualization and before compute/build/analyze/selection work), so an agent can distinguish it from siblings like configure_map or analyze. The specific action (verifying/awaiting a connected human viewer) is implied by the name and the 'Next: ... once viewer_status.connected' phrase but never stated outright, and 'MC-First Gate' is opaque jargon.
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?
Explicit When, Prerequisites, and Next clauses define exactly when to invoke it and what condition (viewer_status.connected) releases the workflow. It also gives a clear exclusion — 'Do not skip it on an Apps host' — and names the follow-on tools (ingest, configure_map, build, realign, analyze).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ep_graph_traverseAInspect
[Knowledge Retrieval] Traverse the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to find related guidance, up to depth hops. Returns no edges unless the pack ships a _graph.yaml.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| file_path | Yes | ||
| edge_kinds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a critical behavioral caveat: it returns no edges unless the pack ships a _graph.yaml, plus that traversal is bounded by depth hops. It does not mention permissions or performance, but the empty-result condition is the key operational fact an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with zero filler: the first states purpose and scope, the second states the failure condition. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value shape need not be explained, and the description covers the main input plus the important empty-result caveat. The gap is the undocumented edge_kinds parameter, which is unaddressed in both description and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains file_path (topic file, with example) and depth ('up to depth hops'), but edge_kinds is never mentioned in the description or schema, leaving one of three parameters entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (traverse) and resource (EMEP knowledge graph) with a concrete example path, and distinguishes itself from retrieval siblings like ep_search and get_guidance by describing graph-hop traversal rather than search or direct fetch.
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 '[Knowledge Retrieval]' tag and 'find related guidance' phrase imply when the tool is useful, but it never states when to prefer it over ep_search, ep_list_topics, or get_guidance, nor any prerequisites. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ep_list_topicsAInspect
[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep_search, or to browse the pack. Optional type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the grouping behavior and the enumeration of type categories, but says nothing about permissions, pagination, ordering, or result size. The return shape is covered by the output schema, which offsets some of the gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with a category tag and verb. Every clause carries information (grouping axis, valid types, intended usage). No filler.
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-required-parameter list tool with an output schema, the description provides the grouping model, the type vocabulary, and the intended discovery workflow. Remaining gaps (ordering, pagination, omitted-filter behavior) are minor rather than blocking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema defines no enum for `type`, so the description's enumeration ('concept, workflow, interface, troubleshooting, decision') is genuinely additive meaning. However, it doesn't state filter matching semantics or the behavior when `type` is omitted (absence of filter vs error).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (EMEP topics) and specifies the grouping axis (type) with the exact enum values. It names the sibling ep_search, giving an agent a clear anchor to distinguish it, though it doesn't contrast with other retrieval siblings like ep_graph_traverse or get_guidance.
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 says when to use it: 'to discover what guidance exists before ep_search, or to browse the pack.' This positions it as a precursor/discovery call. It lacks any when-not guidance or alternatives when a topic is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ep_searchAInspect
[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you are unsure which tool or order to use, hit an error, or need product-specific domain context before acting. Returns ranked markdown chunks with source files; atoms pulled in via requires are flagged requires_expanded. Degrades to the ezt://guidance/... resources if retrieval is unavailable. Examples: 'build balanced territories from accounts', 'viewer not connected before compute', 'auto_build vs account_build'.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| type | No | ||
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely does: it discloses the return shape (ranked markdown chunks with source files), the requires_expanded flagging of pulled-in atoms, and graceful degradation to ezt://guidance/... resources. It does not state auth needs, rate limits, or retrieval latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then usage trigger, then return behavior, then fallback, then examples. Dense but every sentence carries information; the trailing example list is the only part that could be trimmed.
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?
An output schema exists, so return values need not be explained, and the description still adds the degradation and requires_expanded behaviors. However, for a four-parameter search tool with 0% schema coverage, the complete absence of parameter semantics leaves a real gap an agent must guess through.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (query, tags, type, max_results), so the description must compensate and does not. It never explains what tags/type filter on, what values are valid, or how max_results affects ranking/expansion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Semantic search over the EZT MCP Expert Pack') plus the content types it covers (workflow guidance, concepts, interfaces, common mistakes). An agent can distinguish it from ep_graph_traverse, ep_list_topics, and get_guidance without opening any schema.
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?
Explicit 'When' clause enumerates triggering situations (unsure which tool/order, hit an error, need domain context) and gives three concrete example queries. It names the fallback resources on unavailability, but does not explicitly contrast itself with sibling advisory tools like workflow_advisor or get_guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_geojsonAInspect
[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features, and route paths + numbered stops). Omit tal_ids / point_layers / route_layers for the full project. Async: returns task_id; follow its Tasks next_action/sleep_ms until completed, then fetch the result once. The result carries geojson_artifact {artifact_id, bytes}, zip (default true = gzip download), and download_url (GET with Bearer API key) — never an inline multi-MB body. Set zip=false for uncompressed GeoJSON. Prerequisites: ts_handle, completed build job_id, or map_session_id. Set include_points=false or include_routes=false to drop a family. Reopen with import_geojson, then get_map_visualization(ts_handle=...). Paint travels with the export: every feature and point_layers[] / route_layers[] entry carries style {color, opacity, size, shape, weight} exactly as shown, so reopen and Designer import need no restyling. An EasyTerritory Designer rolodex project is this download POSTed to Designer REST/Agent/Projects/FromTerritorySolution (new) or PUT to .../Projects/{projectId}/FromTerritorySolution (update). Territories, points, and routes import. There is no MCP push tool (ezt://guidance/workflows/push-to-designer).
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| job_id | No | ||
| tal_ids | No | ||
| ts_handle | No | ||
| point_layers | No | ||
| route_layers | No | ||
| include_points | No | ||
| include_routes | No | ||
| map_session_id | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: async task_id pattern, that the result carries geojson_artifact {artifact_id, bytes} plus download_url requiring a Bearer API key, that there is never an inline multi-MB body, zip defaulting to gzip, and that styling ('paint') travels with the export. These are exactly the non-obvious behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scope, and dense but most sentences carry real information (async contract, artifact shape, Designer integration). It is somewhat overloaded with tangent detail (Designer REST/Agent/Projects endpoints) that burdens the core instruction.
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 10-param, annotation-free tool, the description covers sourcing, filtering, output format, download mechanics, and downstream reopen/import workflows. An output schema exists, yet the extra return-shape prose reinforces rather than pads, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it explains tal_ids/point_layers/route_layers scoping, zip=true/false semantics, include_points/include_routes toggles, and the three alternative source params. Only guidance_handle is left unexplained, so it nearly but not fully closes the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('export'/'Materialize') and resource ('working GeoJSON FeatureCollection — territory polygons with part_ids, point features, and route paths + numbered stops'), and explicitly positions itself as 'the only Territory Solution export', distinguishing it from siblings. An agent knows exactly what it produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names prerequisites (ts_handle, completed build job_id, or map_session_id), states the 'omit tal_ids/point_layers/route_layers for the full project' rule, and routes reopen flows to import_geojson and get_map_visualization. The async follow-up (Tasks next_action/sleep_ms) gives concrete when-and-how guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_tal_branchBInspect
[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; branch rollup or path identified. Next: store branch extract + branch_metadata; delegate opens MC on extract only. Scenarios: DL-001, DL-002.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| tal_id | Yes | ||
| ts_handle | No | ||
| delegate_ref | No | ||
| exclude_locked | No | ||
| map_session_id | No | ||
| guidance_handle | No | ||
| expected_revision | No | ||
| branch_territory_path | No | ||
| expected_content_hash | No | ||
| branch_rollup_territory_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and mostly does not. It implies isolation ('delegate opens MC on extract only') but never says whether extraction mutates or locks the source TS, what the returned extract contains relative to branch_metadata, or how exclude_locked/handles affect behavior. 11 parameters with 0% schema coverage make this a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic and front-loaded: the tier tag, When, Prerequisites and Next are laid out in order with no filler sentences. It is dense with domain jargon rather than purely concise, but every clause carries operational 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?
An output schema exists so return values need not be explained, but for a delegation/mutation-prone tool with no annotations, 11 undocumented parameters, and handle-based session state, the description omits too much: source-object side effects, what a valid delegate_ref is, and how the handles interact.
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?
Eleven parameters at 0% schema description coverage, and the description explains almost none of them. 'Branch rollup or path identified' loosely maps to branch_rollup_territory_id and branch_territory_path, and 'master TS' to ts/ts_handle, but delegate_ref, map_session_id, guidance_handle, expected_revision and expected_content_hash get no meaning at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('extract' a TAL branch) and frames it as a Tier 1 delegation extraction of a regional subtree for bounded editing, which lets an agent place it in the workflow. However, the obvious counterpart/reverse operation (reintegrate_branch) is never named, so sibling differentiation relies on the agent inferring it from the tier label.
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?
Gives an explicit When ('senior planner sends a regional subtree to a delegate'), Prerequisites (master TS with hierarchical TAL; branch rollup or path identified) and Next step (store extract + branch_metadata, delegate opens MC on extract only). It is a real when-to-use block, but no when-not-to-use or named alternative is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eztAInspect
[Tier 1 — Plain-language orchestrator] Use when the exact granular tool is unclear or when a greedy/file-holding client wants to complete an action in one step. Prefer granular tools directly when you know the step. Pass request (your goal) plus optional csv_file / accounts_handle / assignments_handle / map_session_id / ts_handle. For an uploaded CSV, pass csv_file as the ChatGPT/OpenAI file parameter; ezt parses/stages it server-side and can run ingest_accounts with map_session_id so points appear on the open map. For fixed-workload builds, args.target_hours / args.workload_target are normalized to auto_build build_mode.mode=fixed_workload_target. Modern form-capable clients (protocol >= 2026-07-28) may answer missing part_layer, tal_label, sizing, dwell, and optional balance in-band (aligned with auto_build); legacy hosts keep CLARIFICATION_REQUIRED / ask_user (HITL-025).
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| request | Yes | ||
| csv_file | No | ||
| ts_handle | No | ||
| state_facts | No | ||
| map_session_id | No | ||
| accounts_handle | No | ||
| guidance_handle | No | ||
| assignments_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and largely does: it discloses server-side CSV parsing/staging, that it can invoke ingest_accounts with map_session_id, that fixed-workload args are normalized to auto_build fixed_workload_target, and that modern vs legacy clients get different clarification behavior. It omits what happens to unhandled or ambiguous requests and any auth/side-effect scope, but the disclosed traits are substantial.
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?
It is front-loaded with the use case, but it is a single dense block overloaded with opaque jargon ('HITL-025', 'CLARIFICATION_REQUIRED', 'protocol >= 2026-07-28', 'part_layer/tal_label') that an agent must parse rather than act on directly. Several clauses earn their place; the internal reference codes do not.
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?
An output schema exists, so return values need not be described, but for a 9-parameter orchestrator with zero annotation coverage the description does not explain how the request string maps to the many sibling workflows, nor what the caller should do when the request is under-specified beyond the modern/legacy clarification note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate. It explains request, csv_file, accounts_handle, assignments_handle, map_session_id, and ts_handle, plus args keys, but leaves state_facts and guidance_handle entirely unexplained, so a meaningful gap remains.
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 frames 'ezt' as a plain-language orchestrator that carries a goal to the right underlying action, and it distinguishes itself from siblings by telling the agent to prefer granular tools when the step is known. The verb is inherently generic ('orchestrate whatever the request implies'), so the resource is left implicit, but an agent can still tell what class of behavior to expect.
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 gives explicit when-to-use ('when the exact granular tool is unclear or when a greedy/file-holding client wants to complete an action in one step') and an explicit when-not with the alternative ('Prefer granular tools directly when you know the step'). That is a complete routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocode_addressAInspect
[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC-first when human verifies on map. Prefer ingest_accounts for territory builds (it geocodes inline with accept_suboptimal_geocodes default true). Use this tool when the user must verify geocode quality first; set accept_suboptimal_geocodes=true to accept ZIP-centroid/suboptimal matches. Address columns: address/address_line1/street, city, state, postal (CRM headers auto-mapped). QUOTA: billable provider calls are capped per API key per calendar month. Cache hits cost nothing and are never counted, so never set use_cache=false or force_regeocode=true to work around a cap — that turns free hits into paid calls. Past the cap the tool returns PROVIDER_QUOTA_EXCEEDED carrying limit, used, remaining, and period_resets_at; an operator must raise the cap, so report those numbers instead of retrying or splitting the batch. Next: pass result.geocoded_rows to ingest_accounts or export point layer. Scenarios: GC-001..006.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| use_cache | No | ||
| region_hint | No | ||
| country_hint | No | ||
| map_session_id | No | ||
| min_confidence | No | ||
| force_regeocode | No | ||
| guidance_handle | No | ||
| accept_suboptimal_geocodes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses monthly quota capping, that cache hits are free and must not be forced, the PROVIDER_QUOTA_EXCEEDED error with its limit/used/remaining/period_resets_at fields, and the operator-escalation path. Suffix guidance ('report those numbers instead of retrying') is exactly the kind of behavioral context annotations would otherwise provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads tier, when, and prerequisites before details, and every sentence adds operational value. It is dense with internal jargon (GC-001, ts_handle, MC-first) that a cold agent may parse slowly, but there is little outright waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format need not be explained, and the description still points to result.geocoded_rows for chaining. For a 9-param quota-sensitive tool it is nearly complete, missing only explanations of several hint/session parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 9 parameters, so the description must compensate. It explains use_cache, force_regeocode, and accept_suboptimal_geocodes semantics plus the address column mapping for rows, but leaves region_hint, country_hint, map_session_id, min_confidence, and guidance_handle entirely undocumented in both schema and 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?
States a specific verb+resource ('[Tier 1 — Geocode Only]... geocode addresses without full account ingest, or headless bulk geocode') and explicitly distinguishes itself from ingest_accounts. An agent can tell exactly what this tool does and how it differs from the sibling that also geocodes.
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?
Gives explicit when ('when the user must verify geocode quality first'), when-not ('Prefer ingest_accounts for territory builds'), and prerequisites (none for headless; ts_handle + MC-first when human verifies). Alternative routing is spelled out, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guidanceAInspect
[Tier 1 — Startup Guide + Handle] CALL THIS FIRST. Read-only. When: session start, after blocked_by=guidance_required, or when the shared rules are unclear. Returns result.text (the short cross-tool brief, same text as server instructions) and result.guidance_handle (the rotating code every territory/map tool requires). Per-tool rules are on that tool's description. Workflow essays are inlined as guidance on discover_intent, workflow_advisor, and blocked_by. Exempt: get_guidance, submit_feedback, discover_intent, workflow_advisor, ep_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares read-only, discloses that the handle is a rotating code required by territory/map tools, and notes that per-tool rules and workflow essays live elsewhere. These are non-obvious behavioral facts an agent cannot infer from the empty schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'CALL THIS FIRST' and organized into bracketed clauses (Tier, When, Exempt). Every sentence carries information, though the run-on enumeration of ins and outs is slightly dense and could be split for 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?
An output schema exists, so return values need not be fully explained, yet the description still covers what comes back and how the handle feeds other tools. For a zero-param entry-point tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description adds value by explaining the shape of the return payload (result.text and result.guidance_handle), which goes beyond the empty input 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?
States a specific verb+resource and its role ('Startup Guide + Handle'), immediately distinguishes it by naming the two things it returns (result.text brief and result.guidance_handle). An agent can tell it apart from siblings like discover_intent or workflow_advisor without opening any schema.
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?
Gives explicit triggering conditions: session start, after blocked_by=guidance_required, or when shared rules are unclear. It even lists the tools that are exempt, so the agent knows which calls do not require the handle. This is about as complete as routing guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_map_selectionAInspect
[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and then tells the agent what to do with 'my selection' (no prior request_part_selection in this turn). Prerequisites: map_session_id of the open MC. Returns part_layer + part_ids (+ selection_task_id when a first-class task was created). Prefer get_part_selection when you already have selection_task_id and it is still available. Next for 'add these to ': call realign with tal_id, the same map_session_id, and moves=[{part_id, to_territory_id}] derived from every returned part_id using the stable leaf territory_id (created_territory.territory_id / leaf catalog). Display-name aliases need an exact unique name match — do not invent shorthand (T3 ≠ Territory 3). If unclear, ask which leaf. Do not resend the TS or request a new selection. Scenarios: MC-004 variants, user-initiated select.
| Name | Required | Description | Default |
|---|---|---|---|
| map_session_id | Yes | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely does so: it discloses the return shape, the prerequisite, downstream call semantics (realign with moves), and constraints like 'do not invent shorthand' and 'ask which leaf if unclear'. It does not state read-only/idempotency explicitly, but the read framing is implicit throughout.
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?
Dense but information-rich; the tier label and trigger condition are front-loaded, and each clause (prerequisite, return, next-step routing, aliasing warning) carries routing value. Some scenarios/Warnings could be tightened, but little is pure filler.
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?
An output schema exists, so return values need not be fully specified, yet the description still names them. Combined with trigger conditions, prerequisites, and next-step guidance, it is nearly complete for a session-scoped selection reader; the only gap is the undocumented guidance_handle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It gives semantic meaning to map_session_id ('of the open MC') but never mentions guidance_handle at all, leaving one of two parameters undocumented anywhere. Partial compensation, hence a middling score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('read the latest committed MC session selection') and explicitly distinguishes it from siblings get_part_selection and request_part_selection. An agent can tell what this tool returns (part_layer + part_ids) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions (Monica started selection from the legend finger icon, no prior request_part_selection in this turn), prerequisites (open MC's map_session_id), an alternative routing rule (prefer get_part_selection when you have selection_task_id), and even a negative instruction ('Do not resend the TS or request a new selection'). This is textbook when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_map_visualizationAInspect
[Tier 1 — MC-First Entry] FIRST step of non-headless territory work (invariant I-1). When: open a blank map for planning, or open/reuse the user's Map Component for an existing Territory Solution (TS), ts_handle, or completed job. Pass new_project=true to replace the live workspace with an empty project; omitted empty+view reuses the existing project. Optional presentation.view_name: empty | points_only | review | selection (defaults from mode/TS content). Diagnostics: presentation.debug_panel=true. Prerequisites: none (idempotent per user_id). Next: hand user map_url, then ensure_map_viewer until viewer_status.connected. Dual surface (same map_session_id, one map): Apps-capable hosts render this map in chat from ui://easyterritory/map-viewer (_meta.ui.resourceUri); every other client — including Cursor — opens map_url in a browser tab. map_url is always returned. Do not open a second surface or call this tool again to 'fix' a map. Scenarios: MC-000, MC-001, MV-001, S004.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| mode | No | view | |
| job_id | No | ||
| user_id | No | ||
| ts_handle | No | ||
| new_project | No | ||
| presentation | No | ||
| active_tal_id | No | ||
| expiry_seconds | No | ||
| guidance_handle | No | ||
| interaction_flags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely delivers: idempotency per user_id, dual-surface rendering behavior (chat ui:// vs. browser tab for Cursor), and the guarantee that map_url is always returned. These are non-obvious operational traits an agent would otherwise guess wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tier label and the primary action, then organized into When/Prerequisites/Next/Scenarios blocks. Dense but each clause carries operational meaning; slightly over-packed with jargon (I-1, MC-000, S004) that adds little for tool selection.
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?
An output schema exists so return values needn't be described, and the description covers workflow sequencing, the dual surface, and idempotency. Given 11 undocumented params, some input semantics remain thin, but an agent can call it correctly for the primary flows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 11 params, so the description must compensate. It explains new_project, presentation.view_name (with enum values), presentation.debug_panel, mode (as a driver of view defaults), and alludes to ts/ts_handle/job_id as inputs, but leaves expiry_seconds, guidance_handle, active_tal_id, interaction_flags, and user_id undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (open/reuse the map visualization) and its position as the 'FIRST step of non-headless territory work'. It clearly delineates the two use cases (blank planning map vs. reuse an existing TS/job map), letting an agent distinguish it from siblings like ensure_map_viewer and set_map_state.
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?
Explicit 'When:' clause names both entry conditions, gives the new_project=true vs. omitted behavior for reuse, and states prerequisites and the next step (hand user map_url, then ensure_map_viewer until viewer_status.connected). It also gives an explicit when-not: 'Do not open a second surface or call this tool again to fix a map.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_part_selectionAInspect
[Tier 2 — Selection Poll] When: poll or retrieve committed part IDs after request_part_selection OR after Monica starts selection from the MC legend finger icon. Prerequisites: selection_task_id from request_part_selection or from map session state (active_selection_task_id on ezt://map-sessions/{id}/state). Poll loop: while status=awaiting_user_selection, sleep recommended_poll_delay_ms (fallback poll_interval_ms, min 250ms) and poll again until status=committed, expired, or cancelled. Response includes do_this_next and poll_loop while awaiting. If the user already committed and says 'add my selection to …', call once for the committed task (or use get_map_selection) and proceed — do not start a new selection. Next: realign, create_territory_from_parts, or analyze scoped to selection.part_ids. Scenarios: AN-007, RL-008.
| Name | Required | Description | Default |
|---|---|---|---|
| guidance_handle | No | ||
| selection_task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It discloses poll semantics, the awaiting_user_selection → committed/expired/cancelled lifecycle, recommended_poll_delay_ms with fallback and a 250ms floor, and that the response carries do_this_next/poll_loop. It stops short of auth requirements or expiry timeout behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tier tag and When/Prerequisites/Poll-loop/Next structure, which is scannable. It is dense and somewhat long, but nearly every clause conveys actionable routing or loop behavior rather than filler.
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 polling tool with an output schema (which owns return-value detail), the description covers trigger, prerequisite, loop timing, terminal states, and next steps. The only gap is the second parameter and expiry specifics, which are minor given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 2 params, so the description must compensate. It explains where selection_task_id comes from (request_part_selection or active_selection_task_id in map session state) but says nothing about guidance_handle, leaving half the parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — poll/retrieve committed part IDs — and frames it against the sibling that precedes it (request_part_selection) and an alternative (get_map_selection). An agent can distinguish this from request_part_selection and get_map_selection without opening schemas.
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?
Explicit 'When' trigger, prerequisites (selection_task_id source, including the ezt://map-sessions state path), a concrete poll loop with status transitions, and a 'do not start a new selection' exclusion. It also names follow-on tools (realign, create_territory_from_parts, analyze).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_geojsonAInspect
[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — pass ts_handle to get_map_visualization / analyze / export_geojson next; do not repost the GeoJSON body. Arbitrary territory polygons WITHOUT part_ids are rejected (TERRITORY_POLYGONS_WITHOUT_PART_IDS) unless you explicitly pass part_layer plus overlay_policy="centroid_within" to assign parts whose centroids fall inside each polygon. Optional: point_layer (name for imported points), tal_label. Supply geojson (object), geojson_text (JSON or sniffed gzip/zip), or geojson_gzip (base64 gzip/zip). An EasyTerritory Designer rolodex project arrives here too: GET Designer REST/Agent/Projects (list) then GET .../Projects/{projectId}/TerritorySolution with the user's ezt_pat_ Bearer, and pass the (gzipped) file as geojson_gzip. There is no MCP pull tool (ezt://guidance/workflows/pull-from-designer).
| Name | Required | Description | Default |
|---|---|---|---|
| geojson | No | ||
| tal_label | No | ||
| part_layer | No | ||
| point_layer | No | ||
| geojson_gzip | No | ||
| geojson_text | No | ||
| overlay_policy | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses the return shape (ts_handle + summary), the downstream contract, the error code for a failure mode, and the auth requirement (ezt_pat_ Bearer) for the Designer case. It even notes the absence of an MCP pull tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, return value, and next step before the edge cases, so an agent gets the essentials first. It is dense and long, but nearly every sentence carries actionable information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a multi-input import tool: input encodings, rejection rules, follow-on usage, and auth are all covered. The presence of an output schema is not relied upon since the description still clarifies the ts_handle handoff.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage across 8 params, the description compensates substantially: geojson, geojson_text (sniffed gzip/zip), geojson_gzip (base64), part_layer, overlay_policy, point_layer, and tal_label are all explained. Only guidance_handle is left undocumented, so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (import) and resource (GeoJSON FeatureCollection), and immediately delineates the accepted input variants (standard points, export_geojson artifact, gzip/zip). It is clearly distinguishable from siblings like export_geojson.
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 routes the agent to follow-on tools (get_map_visualization/analyze/export_geojson via ts_handle) and warns against reposting the GeoJSON body. It also states the exact rejection condition (TERRITORY_POLYGONS_WITHOUT_PART_IDS) and the workaround (part_layer + overlay_policy='centroid_within'), plus the Designer rolodex path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_accountsAInspect
[Tier 1 — Data Intake] When: load/add account/location rows or account CSV point data into a TS point layer. ALWAYS before account-derived builds (auto_build, account_build). Prerequisites: MC-first + viewer connected when human verifies points; ts/ts_handle optional. Geocodes rows lacking valid coordinates (accept_suboptimal_geocodes defaults true for bulk address-only CSVs). Recognized address columns: address/address_line1/street, city, state, postal columns, plus common CRM headers (e.g. Address 1: Street 1). Coordinate passthrough accepts case-insensitive GIS headers latitude/lat/LAT and longitude/lon/lng/long/LON (no rename required); pass explicit latitude_field/longitude_field for other headers (e.g. Address 1: Latitude). If unused numeric lat/lon-like columns exist and ingest would otherwise bulk-geocode, the job fails fast with CLARIFICATION_REQUIRED / blocked_by=needs_coordinate_fields — set latitude_field/longitude_field or force_regeocode=true; never wait on a national geocode crawl. After submit, if the first Tasks status shows coordinate_passthrough_count=0 with a large geocode_query_count on a file that had coord-like columns, call tasks/cancel or tasks_cancel and fix headers/fields. id_field must be a UNIQUE business key (default row_id). Never use label/name columns — duplicates fail with blocked_by=needs_unique_row_id. If no unique column exists, omit id_field (server synthesizes row-1, row-2, … when row_id is absent) or synthesize a unique row_id client-side before staging. Before this call, inspect headers/samples for metric, dwell-time, and visit-frequency columns. Pass confirmed business metrics as metric_fields and confirmed workload roles as workload_fields plus visit_frequency_field/dwell_time_field so downstream tools can reuse point-layer metadata. If no visit-frequency column exists, omit visit_frequency_field; do not ask for an average/default frequency. DECLARED FIELDS ARE THE RETENTION CONTRACT: the TS keeps only id, coordinates, label, and declared fields. Also declare grouping_fields (columns for account_build grouping), display_fields (columns shown in map callouts), and search_fields (columns searched in the MC) — undeclared columns are discarded at ingest and later operations on them fail with UNDECLARED_FIELD. NEVER pass a client file path in rows or accounts_handle — the server cannot read /mnt/data/... or other sandbox paths. LARGE FILES: parse the CSV client-side, then call request_account_upload(rows= OR csv_text=) (append via upload_handle), then call this tool with accounts_handle instead of rows. TO SHOW THE POINTS ON AN OPEN MAP: pass map_session_id (the open MC's session id from get_map_visualization / the map_url) — the server pushes the new point layer to that map on completion. WITHOUT map_session_id the points land in a DETACHED TS: read the job result (result_resource_uri) for result.ts_handle and result.map_binding, then bind via show_map_overlay / configure_map / get_map_visualization with that ts_handle. ASYNC COMPLETION IS MANDATORY: the submission/geocoding phase is not workflow completion. Follow the returned Tasks do_this_next and sleep_ms until status=completed, then call the indicated result operation once and inspect the terminal one-liner field, viewer_outcome, failed_rows, map_binding, and map_refresh. viewer_outcome.status painted (or sent_unconfirmed with notified=true) means the linked MC got the push; queued_no_viewer means map_refresh.status=viewer_disconnected (or no viewer yet) — follow recovery.args (ensure_map_viewer); needs_show_map_overlay / rebind_required / detached include literal recovery.args. Do not stop until the binding matches the requested map_session_id, map_refresh.notified=true, and the point layer is visible in the already-open MC (or the detached ts_handle is bound). A linked points-only ingest lands on the surrogate points TAL — that is success (map_refresh.status is sent_unconfirmed or applied); do NOT rebind via get_map_visualization(job_id=...) when notified=true and active_tal_id=points. MULTI-OVERLAY COMPOSE: linked ingest is non-destructive for prior part-layer overlays — previously configured loaded_part_layers remain on the session with the new points. Verify both the point layer AND any expected part overlays are still present before claiming compose success; points-only adoption does not mean those overlays disappeared. GEOCODE QUOTA: billable provider calls are capped per API key per calendar month; cached addresses and coordinate passthrough are free and never counted. When the cap runs out mid-file the ingest is NOT refused — rows covered by the remaining budget are geocoded and ingested, and the rest arrive in failed_rows with reason_code=PROVIDER_QUOTA_EXCEEDED plus a result quota block naming limit, used, remaining, unserved_row_count, and period_resets_at. Report that instead of re-running the ingest; the blocked rows need a raised cap, not a retry. Next: configure_map if needed, then choose the build tool. Full atom: ezt://guidance/workflows/geocode-and-ingest. Scenarios: IA-001..005, GC-002, GC-003, S003.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| rows | No | ||
| label | No | Accounts | |
| id_field | No | row_id | |
| ts_handle | No | ||
| use_cache | No | ||
| label_field | No | label | |
| point_layer | No | accounts | |
| region_hint | No | ||
| country_hint | No | ||
| metric_fields | No | ||
| search_fields | No | ||
| display_fields | No | ||
| latitude_field | No | latitude | |
| map_session_id | No | ||
| min_confidence | No | ||
| accounts_handle | No | ||
| force_regeocode | No | ||
| grouping_fields | No | ||
| guidance_handle | No | ||
| longitude_field | No | longitude | |
| workload_fields | No | ||
| dwell_time_field | No | ||
| visit_frequency_field | No | ||
| accept_suboptimal_geocodes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden: geocoding, coordinate passthrough rules, unique id_field requirement, retention contract, async completion mandate, map_session_id binding, viewer_outcome semantics, and quota exhaustion behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded with purpose and when-to-use guidance. Most sentences earn their place given the tool's complexity, though the dense block could be segmented for easier scanning.
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 25 params, async geocoding, and an output schema, the description covers prerequisites, failure modes, completion criteria, recovery paths, and map binding. It is complete enough for an agent to act without further guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It explains many complex params (id_field, latitude_field/longitude_field, force_regeocode, accept_suboptimal_geocodes, metric/workload/search/display/grouping fields, map_session_id, accounts_handle), but omits region_hint, country_hint, use_cache, min_confidence, point_layer, and label/label_field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: loading account/location rows or CSV point data into a TS point layer. Differentiates from siblings by naming auto_build/account_build and request_account_upload for large-file ingestion.
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 says ALWAYS before account-derived builds (auto_build, account_build), and for large files to call request_account_upload then this tool with accounts_handle. Also gives when to call tasks/cancel if coordinate passthrough counts look wrong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isochrone_buildAInspect
[Tier 1 — Isochrone Build] When: draw the area reachable by DRIVING from one or more origins within a time or distance budget — '20-minute drive-time area around each branch', service area, catchment, coverage ring, reachable range, isochrone, isodistance (IS-001..IS-006). It draws reachable area. It has no objective and does not balance workload. Prerequisites: a TomTom or Azure Maps key on the server (no key → ISOCHRONE_NOT_CONFIGURED, no degraded mode — never substitute a straight-line radius); a part_layer (read ezt://part-layers); and, for point-layer origins, ingested points plus ts_handle or map_session_id. Inline origins need no TS. ORIGINS x BANDS: origins are inline {latitude, longitude, label?} or a point-layer reference {point_layer, point_ids?, filter?, label_field?} — '40 minutes around each of my 6 branches' is ONE call. bands are [{time_budget_seconds} | {distance_budget_meters}], one budget per band, and every band in a call must use the SAME unit (mixing returns MIXED_BUDGET_TYPES). One band → one leaf per origin; several bands → a rollup per origin with one leaf per band. Cost is origins x bands provider calls, capped by TOO_MANY_ORIGINS (default 25) / TOO_MANY_BANDS (default 5). QUOTA: those billable calls also draw on a per-API-key monthly cap. The whole fan-out is claimed before any call goes out, so a build that does not fit returns PROVIDER_QUOTA_EXCEEDED with limit, used, remaining, and period_resets_at having spent nothing. An operator must raise the cap; report those numbers instead of retrying with fewer bands. LIMITS: travel_mode is 'car' or 'truck' ONLY — neither provider offers a walking or cycling reachable range, unlike calculate_route. time_budget_seconds <= 21600, distance_budget_meters <= 500000 (BUDGET_OUT_OF_RANGE). depart_at is supported; arrive_at is not. avoid accepts toll_roads, motorways, ferries, unpaved_roads, carpools, border_crossings, tunnels, car_trains, low_emission_zones. GEOMETRY AND PARTS: each territory stores the provider's exact polygon AND part_ids assigned by centroid_within overlay, so analyze and territory stats work normally while the map shows the true drive-time edge. Bands nest and their polygons overlap on purpose (tightest paints on top); part assignment is disjoint — a part joins the tightest band containing it, then the nearer origin. realign can move parts between bands but NEVER moves a polygon, so a realigned isochrone's assignment intentionally diverges from its drawn shape. A band budget is NOT territory workload and NOT route drive time — never report '20-minute band' as 20 minutes of workload or feed it to auto_build. Async: returns task_id — follow _meta.next_action (sleep_and_poll → consume_result) and sleep the authoritative sleep_ms, never estimated_remaining_ms. Partial provider failure still builds the TAL and reports failed_requests[]. Then: analyze(tal_ids=[], map_session_id, analysis_panel='single') for per-band accounts and metrics. Pass map_session_id here to paint the bands on an open map. Full atom: ezt://guidance/workflows/isochrone-territories. Scenarios: IS-001..IS-006.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | ||
| bands | Yes | ||
| tal_id | No | ||
| origins | Yes | ||
| traffic | No | ||
| depart_at | No | ||
| tal_label | No | ||
| ts_handle | No | ||
| part_layer | Yes | ||
| route_type | No | fastest | |
| travel_mode | No | car | |
| part_overlay | No | centroid_within | |
| map_session_id | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and delivers: it names concrete failure codes (ISOCHRONE_NOT_CONFIGURED, MIXED_BUDGET_TYPES, TOO_MANY_ORIGINS, TOO_MANY_BANDS, PROVIDER_QUOTA_EXCEEDED, BUDGET_OUT_OF_RANGE), quota semantics (fan-out claimed up-front, nothing spent on failure, cap raised by operator), async polling rules (follow _meta.next_action, use sleep_ms not estimated_remaining_ms), and partial-failure behavior (failed_requests[]). It also discloses non-obvious invariants: realign moves parts but never polygons, bands nest and overlap, part assignment is disjoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the 'When:' purpose, then organized into labeled blocks (ORIGINS x BANDS, QUOTA, LIMITS, GEOMETRY AND PARTS, Async, Then). Given the complexity it is mostly earned, but it is dense and long enough that some lines (e.g., repeated 'when/when-not' phrasing, scenario-code list) push past necessity.
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?
An output schema exists, so return-shape explanation is not required, and the description instead supplies the missing operational context: prerequisite key, part_layer requirement, async task flow, error recovery path, and the downstream analyze call. For a high-complexity, high-cost batch fan-out tool, an agent has everything needed to invoke it 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?
With 0% schema coverage across 14 params, the description must compensate and largely does: origins shape ({latitude, longitude, label?} or point-layer reference {point_layer, point_ids?, filter?, label_field?}), bands shape ([{time_budget_seconds}|{distance_budget_meters}] with same-unit rule), travel_mode allowed values, avoid value list, depart_at/arrive_at support, and numeric limits. It leaves tal_id, tal_label, traffic, route_type, part_overlay, map_session_id, and guidance_handle semantically unexplained, which is why it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'draw the area reachable by DRIVING from one or more origins within a time or distance budget', reinforced with concrete synonyms (service area, catchment, coverage ring, reachable range, isochrone, isodistance). It explicitly separates itself from siblings by stating it 'has no objective and does not balance workload' and contrasts with calculate_route and auto_build.
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?
There is an explicit 'When:' clause with example phrasings, plus stated exclusions ('no walking or cycling reachable range, unlike calculate_route'; 'never feed it to auto_build'). Prerequisites (key, part_layer, ts_handle/map_session_id) and follow-up steps (analyze(...), realign) are laid out, so an agent knows exactly when to pick this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_analysis_panelAInspect
[Tier 2 — Analysis Panel Display] When: show Analyze JSON in the MC bottom dock (single or comparison) after a completed analyze that omitted analysis_panel. Prefer analyze(analysis_panel=single, map_session_id=...) so the dock fills without this second call. Prerequisites: map_session_id; a full Analyze result — pass task_id/job_id of the completed analyze job, or analyses=[]. The result must include tal_analyses and ts_identity (territory_metric_grids when metrics exist). A thin {tal_analyses} object is INVALID_REQUEST, not an empty dock. presentation_mode is single|compare|executive|diagnostic — territory_metric_grid is default_presentation.view inside the Analyze payload, not a presentation_mode. Does not mutate TS. Re-run analyze after any TAL or point change (I-2). dismiss=true hides the whole dock, header bar included, and keeps the stats on the session. analysis_panel.dismissed is then true. A later analyze with analysis_panel=single shows the dock again. Omit analyses on a dismiss call. Dual surface: the dock renders in the in-chat map on Apps-capable hosts and in the map_url tab everywhere else — same map_session_id, no extra call. Scenarios: MC-009, AN-006, MC-007.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | ||
| job_id | No | ||
| labels | No | ||
| dismiss | No | ||
| task_id | No | ||
| analyses | No | ||
| map_session_id | Yes | ||
| guidance_handle | No | ||
| presentation_mode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: 'Does not mutate TS', re-run analyze after any TAL/point change (I-2), dismiss=true hides the entire dock including header bar while keeping stats and sets analysis_panel.dismissed=true, and a thin {tal_analyses} object returns INVALID_REQUEST rather than an empty dock. These are real behavioral traits beyond any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a bracketed tier tag and 'When:' clause, then prerequisites and edge cases. Every sentence carries information, but the run-on packing of many clauses into single sentences makes it denser than ideal for scanning.
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?
An output schema exists so return values need not be described, and the description still covers prerequisites, invalid inputs, dismiss lifecycle, dual-surface rendering, and re-run rules. Nothing an agent needs to call this correctly 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?
Schema coverage is 0% across 9 params, so the description must compensate; it explains map_session_id, task_id/job_id, the required full-Analyze shape of analyses, the single|compare|executive|diagnostic values of presentation_mode (and that territory_metric_grid is not one of them), and dismiss. It leaves roles, labels, and guidance_handle unexplained, so it is strong but not complete.
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 names a specific verb+resource (show/load the Analyze JSON analysis panel into the MC bottom dock) and explicitly distinguishes itself from the sibling `analyze` tool by telling the agent to prefer `analyze(analysis_panel=single, ...)` when possible. An agent can identify this as the secondary display-only call without opening any schema.
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 states exactly when to use it (after a completed analyze that omitted analysis_panel), the preferred alternative and its parameters, prerequisites (map_session_id plus a full Analyze result via task_id/job_id or analyses), and when NOT to pass analyses (dismiss call). Explicit exclusion and alternative routing are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_partsBInspect
[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Next: direct_build, configure_map, or agent-side join before build. Scenarios: DS-002. Returns part_id and attributes only; no geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| part_ids | No | ||
| page_token | No | ||
| part_layer | Yes | ||
| max_results | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it does disclose a key trait ('Returns part_id and attributes only; no geometry') and a prerequisite source. However, it says nothing about pagination behavior despite a page_token parameter, nor about auth, limits, or mutation risk (implicitly read-only but never stated).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense, labeled, and front-loaded with the When/Prerequisites/Next ordering; no wasted sentences. It reads like a compact routing card rather than prose, which is appropriate here.
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?
An output schema exists, so return values need not be explained, and the routing context is solid. The remaining shortfall is the unexplained parameter set (notably the opaque guidance_handle and pagination via page_token), which leaves an agent guessing on invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. It clarifies part_layer's origin and implies a filter capability, but leaves filter, part_ids, page_token (pagination!), max_results, and the opaque guidance_handle entirely undocumented, which is a substantial gap.
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 '[Tier 2 — Part Metadata]' tag combined with 'enrich or filter parts before build, or inspect attributes without geometry' states a specific verb+resource and clarifies the scope is attributes, not geometry. It is distinguishable from build tools via the 'Next' routing, though it never names a direct alternative among the many selection/part siblings.
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 explicit 'When:', 'Prerequisites:', and 'Next:' structure names the trigger conditions, the required part_layer source (ezt://part-layers), and the downstream tools (direct_build, configure_map). It clearly says when to use it but does not distinguish it from get_part_selection or request_part_selection, which sound closely related.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realignAInspect
[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferred for an open MC), ts_handle, or ts; expected_revision is optional optimistic concurrency (STALE_TS_REVISION → reload and retry). For a committed ad-hoc map selection, call get_map_selection(map_session_id), then pass moves=[{part_id, to_territory_id}] for each returned selection.part_ids plus tal_id and the same map_session_id. Do not repost the full TS and do not start another selection. to_territory_id must be a leaf territory_id (prefer created_territory.territory_id / leaf_territories / legend catalog). A display-name alias is accepted only as an exact unique match to the leaf's actual name (e.g. 'Territory 3' or 'T1' when that is the name) — do NOT invent shorthand expansions (T3 ≠ Territory 3; no T→Territory mapping). It is NOT tal_id. On UNKNOWN_TERRITORY_ID / AMBIGUOUS_TERRITORY read error.details.available_leaf_territories and stop guessing; if the spoken destination is still unclear, ask the user which leaf (id or exact name). Visual moves with a destination known in advance: request_part_selection with purpose=realign. Structural rebalance: territory_split/merge/rebalance. Next: verify the live map refresh. Run analyze + load_analysis_panel only when the TS has a point layer (I-2). For a geography-only ZIP/part edit, skip analyze unless the user requested AN-004; do not create a NO_POINT_LAYER failure after a successful edit. Full atom: ezt://guidance/workflows/realign-by-selection. Scenarios: RL-001..013, S001, MC-004, EV-001.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| moves | No | ||
| tal_id | Yes | ||
| part_ids | No | ||
| ts_handle | No | ||
| part_layer | No | ||
| repair_policy | No | default | |
| map_session_id | No | ||
| guidance_handle | No | ||
| expected_revision | No | ||
| realign_operation | No | ||
| remove_empty_territories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden: it explains optimistic concurrency and STALE_TS_REVISION retry behavior, prohibits reposting the full TS or starting another selection, describes territory alias rules and failure handling, and requires asking the user when the destination is unclear.
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 long but well-structured with When, Prerequisites, Next, Full atom, and Scenarios sections. It is front-loaded and every major sentence adds routing or operational value, though the density is high and some parameter handling is embedded rather than cleanly defined.
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 12-parameter, no-schema-description tool with no annotations and an output schema, the description is substantially complete on workflow, prerequisites, error handling, and alternatives. It remains incomplete on several obscure parameters, but an agent can likely invoke the core realign path 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?
Schema description coverage is 0%, so the description must explain all 12 parameters. It gives strong semantics for map_session_id, ts_handle, ts, expected_revision, moves, and the to_territory_id concept, but leaves repair_policy, part_layer, guidance_handle, realign_operation, and remove_empty_territories unexplained. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and scope: move parts between leaf territories within ONE TAL. It clearly distinguishes this operation from structural siblings like territory_split/merge/rebalance and from visual selection via request_part_selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool, required prerequisites, accepted TS reference parameters, when to fall back to get_map_selection, and when to avoid analyze. It also names the correct alternatives for structural and visual move scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reintegrate_branchAInspect
[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at current lineage. STALE_TS_REVISION if master moved—request fresh extract. Sequential merges only. Next: refresh master Analysis panel (I-2). Scenarios: DL-003, DL-004, DL-006.
| Name | Required | Description | Default |
|---|---|---|---|
| master_ts | No | ||
| proposal_ts | No | ||
| map_session_id | No | ||
| branch_metadata | Yes | ||
| guidance_handle | No | ||
| master_ts_handle | No | ||
| proposal_ts_handle | No | ||
| expected_master_revision | Yes | ||
| expected_master_content_hash | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses useful traits: STALE_TS_REVISION on a moved master and a 'sequential merges only' concurrency constraint. However it doesn't state that this is a mutation, whether it's idempotent, or what permissions it requires, leaving real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads 'When:' and is compact, but the 'Tier 1 — Delegation Reintegrate' tag and trailing 'Scenarios: DL-003, DL-004, DL-006' are opaque tokens whose meaning an agent cannot act on without external references, adding noise rather than 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?
For a complex 9-parameter mutation with an output schema (so returns need no explanation), it covers trigger, prerequisites, an error condition, sequencing, and follow-up. The gap is the unexplained optional parameters and the mutation/permission profile, which a no-annotation tool should disclose more of.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 9 parameters, so the description must compensate. It names branch_metadata and expected_master_revision (both required) and hints at revision meaning via the STALE_TS_REVISION note, but master_ts, proposal_ts, all *_handle fields, map_session_id, and expected_master_content_hash are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: merge an approved proposal TS into master. This is clearly distinct from siblings like territory_merge or realign, and the 'approved proposal' qualifier scopes it. It doesn't explicitly name a competing sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('When: merge an approved proposal TS into master'), prerequisites, and a post-step ('Next: refresh master Analysis panel'). No explicit when-not or named alternative, but the context is clear enough for an agent to know when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_account_uploadAInspect
[Tier 2 — Data Intake helper] When: you have account/location rows or an account CSV that you cannot inline in a single ingest_accounts call (e.g. a large CSV, hundreds/thousands of rows). Stage the rows here in one or more chunks, then call ingest_accounts(accounts_handle=...). If the file includes metric, workload, visit-frequency, or dwell-time fields, stage the file here first, inspect returned csv_headers / row keys, confirm role candidates, then pass metric_fields/workload_fields/visit_frequency_field/dwell_time_field to ingest_accounts. Continue only after ingest_accounts has loaded the points. FOUR WAYS TO STAGE (all return an upload_handle): (A) MCP csv_file: pass the uploaded CSV as a ChatGPT/OpenAI file parameter when available. (B) MCP csv_text: pass csv_text= when file params are unavailable. Preserve multiline newlines — do NOT JSON-encode with PowerShell ConvertTo-Json (that corrupts rows into a single line). Use Python json.dumps or MCP csv_file instead. (C) MCP rows: call with rows=; append more with upload_handle=. (D) HTTP: call with no rows/csv_text to get result.upload_url, then POST rows or csv_text/csv_file. Then: ingest_accounts(accounts_handle=, map_session_id=, label_field=). GIS coordinate headers latitude/lat/LAT and longitude/lon/lng/long/LON passthrough case-insensitively. CRM headers such as Address 1: Latitude and Address 1: Longitude are coordinates too — the sheet stays accounts when Region and Territory are also present. suggested_ingest.args sets latitude_field and longitude_field for those headers; pass them through and do not rename them. If first Tasks status shows coordinate_passthrough_count=0 with a large geocode_query_count on a file that had coord-like columns, call tasks/cancel or tasks_cancel and fix — never wait on national geocode. id_field only when a unique business key exists — never label/name; omit otherwise (server synthesizes row-N). On success the result includes suggested_ingest ({tool, args, confidence, notes, geocode_plan}) — prefer those args for the next ingest_accounts call (fill map_session_id from the open MC). geocode_plan states coordinate_fields_detected, will_geocode, eta_class, and passthrough_likely before you submit. Handle is single-use (claimed by the ingest job) and expires (default 1h). Scenarios: IA-001..005, S003.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | ||
| csv_file | No | ||
| csv_text | No | ||
| ttl_seconds | No | ||
| upload_handle | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: handle is single-use, claimed by the ingest job, and expires (default 1h); chunk-append semantics via upload_handle; coordinate passthrough behavior and suggested_ingest.args handling; and an explicit failure-recovery instruction (tasks/cancel on coordinate_passthrough_count=0 rather than waiting on national geocode). This is well beyond what annotations would normally supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a tier tag and the 'When' trigger, then proceeds through the staged-then-ingest flow and the four methods. It is long but dense with operative detail rather than filler; a few edge-case sentences (e.g. case-insensitive header passthrough) could be tightened, so not a perfect score.
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 6-param, zero-coverage staging tool with an output schema, this is unusually complete: it describes the return (suggested_ingest, upload_handle, geocode_plan fields), the handle lifecycle, and the downstream call contract. Nothing essential for correct invocation appears 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?
Schema coverage is 0% across 6 params, so the description must compensate. It explains rows, csv_file, csv_text, and upload_handle clearly, plus implies TTL via 'expires (default 1h)'. However guidance_handle is never addressed and ttl_seconds is not named, leaving two params with no semantic grounding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (stage account/location rows or CSV) and immediately frames the tool as a pre-step to ingest_accounts, which it explicitly names as the downstream sibling. An agent can distinguish it from ingest_accounts and request_assignment_upload without opening either schema.
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?
Explicit 'When' condition (data too large to inline in a single ingest_accounts call), four enumerated staging methods with the conditions that select each (csv_file vs csv_text vs rows vs HTTP), plus the ordering constraint that ingest_accounts must run afterward. When-to-use and alternatives are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_assignment_uploadAInspect
[Tier 2 — Direct Build intake] When: you have part-to-territory assignment rows or a legacy spreadsheet (e.g. Zip2Terr.csv with Postal Code + Territory/Region/Division) that you cannot inline in direct_build. Stage rows here, then call direct_build(assignments_handle=). FOUR WAYS TO STAGE (all return upload_handle): (A) MCP csv_file: pass the uploaded CSV as a ChatGPT/OpenAI file parameter. (B) MCP csv_text: pass csv_text= — preserve newlines; do NOT JSON-encode with PowerShell ConvertTo-Json (corrupts rows). (C) MCP assignments: pass assignments=; append with upload_handle. (D) HTTP POST /assignments/upload with assignments, csv_text, or csv_file. Legacy columns (Postal Code, Territory, Region, Division) auto-map to part_id + territory_path. Then: direct_build(assignments_handle=, part_layer=..., tal_label=..., map_session_id=...). Handle is single-use and expires (default 1h).
| Name | Required | Description | Default |
|---|---|---|---|
| csv_file | No | ||
| csv_text | No | ||
| assignments | No | ||
| ttl_seconds | No | ||
| upload_handle | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful traits: the handle is single-use, expires (default 1h), legacy columns auto-map, and each staging path returns upload_handle. It omits auth/permission requirements and size or validation limits, so it is strong but not exhaustive.
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?
Dense but well-structured: the 'When:' condition is front-loaded, and the A/B/C/D enumeration makes the branching scannable. It is longer than most definitions but every clause carries actionable content; only the terse parentheticals border on clutter.
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 six parameters, zero schema coverage, and an existing output schema (so return values need no explanation), the description supplies the intake conditions, all staging paths, the auto-mapping behavior, the handle lifecycle, and the exact next call. An agent has everything needed to stage rows and proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain csv_file, csv_text (with the newline/JSON-encoding warning), assignments (appendable via upload_handle), and ttl_seconds indirectly via the 1h expiry note. guidance_handle is never mentioned, leaving one of six parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (stage/upload) on a specific resource (part-to-territory assignment rows or a legacy spreadsheet) and explicitly names its role in a workflow. It clearly distinguishes itself from direct_build by framing itself as the staging step that feeds assignments_handle into direct_build.
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?
Opens with an explicit 'When:' condition, names the alternative (inline in direct_build), enumerates four concrete staging methods (A csv_file, B csv_text, C assignments, D HTTP POST), and states the required follow-up call. Nothing about when to use it vs. alternatives is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_part_selectionAInspect
[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer connected; part_layer; active TAL when realigning. Poll loop: after submit, poll get_part_selection(selection_task_id) using recommended_poll_delay_ms from the response (or scripts/wait_part_selection.py) until status=committed — never ask the human to type committed/done/go. User-initiated path: Monica may also start select mode from the MC legend finger icon on a part-layer row (no prior request_part_selection). When the user refers to 'my selection' / 'the parts I selected', read the open map session's latest committed selection via get_map_selection(map_session_id) or get_part_selection using active_selection_task_id from ezt://map-sessions/{id}/state — do not ask them to select again. Next: realign, create_territory_from_parts, or analyze with selection.part_ids. Dual surface: in an Apps-capable host the human selects on the in-chat map (ui://easyterritory/map-viewer); otherwise they select in the map_url tab. The commit poll loop above is identical on both surfaces. Scenarios: S001, MC-004..006, RL-006..013.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| prompt | No | ||
| purpose | No | generic | |
| user_id | No | ||
| part_layer | Yes | ||
| active_tal_id | No | ||
| new_territory | No | ||
| expiry_seconds | No | ||
| guidance_handle | No | ||
| realign_operation | No | ||
| destination_territory_id | No | ||
| remove_empty_territories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discharges much of it: it discloses the asynchronous task model, the commit poll loop with recommended_poll_delay_ms, the directive never to ask the human to type 'committed/done/go', the dual-surface behavior (Apps host vs map_url tab), and connection prerequisites. It stops short of describing failure/expiry behavior despite an expiry_seconds parameter, so not a full 5.
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-labeled and front-loaded with When/Prerequisites/Poll loop/Next sections, and most sentences carry operational content. It is nonetheless dense and repeats the commit poll loop point ("The commit poll loop above is identical on both surfaces"), adding mild redundancy given the length.
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 complex async human-input tool with an output schema, the description covers the workflow, prerequisites, polling contract, and follow-on tools an agent needs to orchestrate correctly. The remaining gap is parameter-level guidance across the 12-argument schema, which is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 12 parameters, so the description must compensate and largely does not. It only indirectly touches part_layer, active_tal_id ("active TAL when realigning"), and realign_operation; it says nothing about prompt, purpose, expiry_seconds, guidance_handle, new_territory, destination_territory_id, remove_empty_territories, user_id, or ts.
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 states a specific verb+resource – requesting human part selection on the map for realign, manual territory build, or return_list – and distinguishes this initiating tool from siblings like get_part_selection (polling) and get_map_selection (reading committed state). It is clearly not a tautology of the name, though the "[Tier 2 — Human Spatial Input]" prefix front-loads taxonomy rather than the plain purpose.
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?
Explicit when-to-use (realign, manual territory build, return_list), prerequisites (MC-first, viewer connected, part_layer, active TAL when realigning), the user-initiated alternate path via the MC legend finger icon, and the follow-on tools (realign, create_territory_from_parts). It even names the alternative for reading an existing selection and says not to ask the human to re-select.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_visitsAInspect
[Tier 1 — Periodic Scheduling] When: accounts carry a recurring cadence (every 7 days, twice a month) and the user asks which day each visit happens. Expands demand across a repeating horizon and packs it into daily work clusters (buckets) under one technician-day workload cap. This tool decides the day. Neighbors: auto_build, cluster_points, calculate_route. When the user said route and a visit-frequency column exists, confirm they want a schedule, not calculate_route, before calling. It creates no TAL and assigns no technician. Prerequisite: ingest_accounts completed for point_layer with the cadence column declared. Omit ts and ts_handle when the session id argument is already set. That session is the TS. An undeclared column fails with UNDECLARED_FIELD. Required: point_layer, visit_frequency_field, dwell_time, daily_capacity. Ask the user for dwell and the daily cap; never invent them. frequency_unit=interval_days means the value is the maximum days between visits (so a 3-day cadence in a 14-day horizon is 5 visits, not 4); visits_per_horizon means the count across the horizon. Values in never_visit_values (default 0, null, empty) are excluded and reported in excluded_accounts, never silently dropped. Example — weekly and biweekly accounts across 8-hour technician days: point_layer=accounts, visit_frequency_field=service_interval_days, dwell_time={type: scalar, value: 45, unit: minutes}, daily_capacity={mode: not_to_exceed, hours: 8}, max_buckets_per_day=3. bucket_workload_hours is in-bucket drive plus dwell with NO visit-frequency multiplier: it is neither territory workload nor route_workload_hours — never sum or compare them. Re-running with the same visit_layer_name replaces that schedule in place; a different name adds a second one for comparison. After submission, follow do_this_next with the returned task_id: sleep exactly sleep_ms while next_action=sleep_and_poll, fetch the result once on consume_result, and stop on stop_error. Next: calculate_route over the visits layer filtered to one bucket_id to drive that day. Full atom: ezt://guidance/workflows/periodic-visit-schedule. Scenarios: PS-001..PS-008.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| horizon | No | ||
| objective | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| point_layer | Yes | ||
| daily_capacity | No | ||
| frequency_unit | No | interval_days | |
| map_session_id | No | ||
| schedule_label | No | ||
| guidance_handle | No | ||
| emit_visit_layer | No | ||
| visit_layer_name | No | ||
| expected_revision | No | ||
| never_visit_values | No | ||
| max_buckets_per_day | No | ||
| visit_frequency_field | Yes | ||
| cadence_flexibility_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the no-TAL/no-technician side effects, in-place replacement semantics for a repeated visit_layer_name vs. adding a second schedule, the UNDECLARED_FIELD failure mode, exclusion reporting (never silently dropped), and the post-submission sleep/poll/consume protocol. This is far beyond what a name and schema convey.
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?
It is long and dense, but front-loads the tier label, trigger condition, and core behavior before drilling into parameter nuance and workflow handoff. Most sentences carry unique information, though the volume approaches manual territory and a few constraints could be tightened.
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?
An output schema exists, so return values needn't be described, and the description still fills the remaining gaps: prerequisites, error behavior, ambiguity resolution against calculate_route, and the do_this_next follow-up. For a complex 18-parameter scheduler, an agent has everything needed to call it 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?
Schema description coverage is 0% with 18 parameters, so the description must compensate, and it does for the critical ones: it explains ts/ts_handle omission, frequency_unit semantics (interval_days vs. visits_per_horizon), never_visit_values defaults, visit_layer_name behavior, and max_buckets_per_day. However, roughly half the parameters (horizon, objective, map_session_id, schedule_label, guidance_handle, emit_visit_layer, expected_revision, cadence_flexibility_pct) receive no explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource framing ('Expands demand across a repeating horizon and packs it into daily work clusters'), and even states the core decision explicitly ('This tool decides the day'). It distinguishes itself from siblings by naming auto_build, cluster_points, and calculate_route, and by clarifying 'It creates no TAL and assigns no technician.'
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 gives an explicit trigger condition ('When: accounts carry a recurring cadence... and the user asks which day each visit happens'), names the neighbors, and even handles the ambiguity case ('When the user said route and a visit-frequency column exists, confirm they want a schedule, not calculate_route'). Prerequisites (ingest_accounts completed with cadence column declared) and follow-up routing are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seed_buildAInspect
[Tier 1 — Seed Build] When: grow ONE territory outward from a seed location until it holds a target number of locations or a target metric sum — 'a franchise territory around this address with 40 stores', 'grow from this point until it reaches $2M revenue', 'the ZIPs around our new branch that cover 300 stores'. The result is an ordinary part-based territory (ZIPs, counties) appended as a new leaf on an existing layer (tal_id) or as a new layer when tal_id is omitted. It grows one territory from one seed. It does not partition, balance, or route. Prerequisites: an ingested point layer (ingest_accounts) — its locations are the values counted or summed; a part_layer (ezt://part-layers); and the seed as {longitude, latitude}. Resolve an address or POI to coordinates first with the address geocoding tool; a map click already gives coordinates. TARGET: target={type: 'location_count', value: N} or {type: 'metric_sum', field: , value: X}. An undeclared field returns UNDECLARED_FIELD — re-ingest with metric_fields. Fit is CLOSEST: growth adds the nearest adjacent part that still fits, then takes the smallest remaining neighbour only when overshooting lands nearer the target than stopping short. target_status reports reached | closest_under | closest_over | frontier_exhausted | max_parts_reached. NO OVERLAP, EVER: with tal_id, parts already in any territory of that layer are never taken — the new territory drifts away from them instead (blocked_part_count, seed_offset_km). A seed inside an existing territory fails SEED_PART_ASSIGNED; pick another seed or reassign parts with realign. There is no allow_overlap flag. SCOPE: growth reads only the seed's neighbourhood — the point layer is indexed once and parts are materialised ring by ring outward from the seed part; it never joins every location to every part, so a national point layer costs the same as a local one. part_filter / part_ids are an ALLOWLIST (parts outside it do not exist for the walk), not a performance prerequisite: pass part_scope='explicit' + part_filter={state_abbr: 'TX'} only when the user wants the territory confined to that state. bbox_intersect / point_matched are accepted and ignored here; the result reports the materialised part count and ring depth the walk touched. ONE SEED PER CALL: for several franchisees call seed_build once per seed with the same tal_id; earlier territories become blocked for later seeds. Async: returns task_id — follow _meta.next_action (sleep_and_poll → consume_result) and sleep the authoritative sleep_ms. The result is handle-only (ts_handle, no inline ts) with created_territory, the grown part ids, target.{requested, achieved, delta}, and do_this_next. Then: analyze(tal_ids=[], map_session_id, analysis_panel='single') so the map dock shows the territory; without dwell Analyze omits workload and returns workload_omitted.ask_user to relay after the stats. Pass map_session_id here to paint the territory on the open map. Full atom: ezt://guidance/workflows/seed-grown-territory. Scenarios: SB-001..SB-004.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | Yes | ||
| tal_id | No | ||
| target | Yes | ||
| user_id | No | ||
| part_ids | No | ||
| max_parts | No | ||
| tal_label | No | ||
| ts_handle | No | ||
| part_layer | No | ||
| part_scope | No | ||
| part_filter | No | ||
| point_layer | No | ||
| map_session_id | No | ||
| territory_name | No | ||
| guidance_handle | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the no-overlap rule, error codes (SEED_PART_ASSIGNED, UNDECLARED_FIELD), async task_id flow with sleep_and_poll, handle-only result, target_status values, and scope behavior (ring-by-ring materialisation). This is far beyond what annotations would provide.
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 long but well-structured with headers (TARGET, SCOPE, etc.) and front-loads the When-conditions and examples. Every section adds actionable detail, though some sentences (e.g., ring materialisation mechanics) could be trimmed without loss for an agent deciding to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters, nested objects, no annotations, and an output schema, the description is remarkably complete: it covers prerequisites, async handling, error cases, overlap constraints, result structure, and the follow-up analyze call. Nothing an agent needs to invoke it correctly 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?
Schema coverage is 0%, so the description must explain all 15 parameters. It covers the critical ones—seed format, target types, tal_id behavior, part_filter/part_ids as allowlist, part_scope='explicit', point_layer, and map_session_id—but omits meaning for user_id, tal_label, ts_handle (as input), territory_name, and guidance_handle. Strong compensation overall, but not complete.
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 gives a specific verb (grow) and resource (one territory from a seed) and explicitly distinguishes it from siblings by stating 'It does not partition, balance, or route.' An agent can immediately tell this apart from auto_build, direct_build, or territory_split without opening schemas.
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 provides explicit 'When:' conditions with concrete examples, prerequisites (ingested point layer via ingest_accounts, part_layer, seed coordinates), and the alternative geocoding step. Exclusions are stated ('does not partition, balance, or route'), and it tells you to call once per seed for multiple franchisees.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_map_stateAInspect
[Tier 2 — Low-Level MC State] When: switch MC mode, active TAL, or pending job ref, or jump the open MC camera with center ([longitude, latitude]) and/or zoom (0-24). Camera here is session-only and does not write the TS — use configure_map to persist a default view. Prerequisites: map_session_id. Prefer configure_map for durable TS map_config. Prefer request_part_selection for selection workflows. Scenarios: residual backlog (no dedicated scenario by design).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| zoom | No | ||
| center | No | ||
| active_tal_id | No | ||
| map_session_id | Yes | ||
| guidance_handle | No | ||
| pending_job_reference | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key trait: the camera is session-only and does not write the TS, with configure_map named for persistence. It also states the prerequisite. It stops short of covering failure behavior, unspecified-field handling, or permissions, so it is strong but not exhaustive.
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?
Dense but front-loaded: the 'When', prerequisite, and alternatives come in a logical order and each sentence routes the agent. Minor waste in the jargon header ('Tier 2 — Low-Level MC State') and the trailing 'Scenarios: residual backlog' line, which adds little.
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 7-parameter tool with only one required param and an output schema present, the description is nearly complete: it covers the primary mutable fields, the session-scoped semantics, and the alternatives. The only real gap is the undocumented guidance_handle, and return values need not be described given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it adds genuine meaning beyond the schema: center is a [longitude, latitude] pair and zoom is bounded 0-24, neither of which the schema states. It covers mode, active TAL, pending job ref, center, zoom, and map_session_id, but leaves guidance_handle entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (set MC map state) and enumerates exactly what it controls: MC mode, active TAL, pending job ref, and camera jump via center/zoom. It explicitly distinguishes itself from configure_map (durable persistence) and request_part_selection, so an agent can place it among siblings without opening schemas.
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 an explicit 'When:' trigger list, a prerequisite (map_session_id), and two named alternatives with the condition that selects them ('Prefer configure_map for durable TS map_config', 'Prefer request_part_selection for selection workflows'). Routing guidance is unusually complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_map_overlayAInspect
[Tier 1 — Map Overlay] When: customer wants something on the map — US ZIP codes, counties, accounts/points, or a territory alignment — in any phrasing ('add US zip codes to the map', 'show zip codes', 'add zips'). Prerequisites: ts_handle (or inline ts) from get_map_visualization; viewer connected for live MC refresh. Pass user_request alone (e.g. 'add US zip codes to the map') or overlay_kind (part_layer | point_layer | tal | route) with optional overlay_id. Resolves the four MC overlay families and calls the correct underlying step (configure_map for part layers and active TAL; point layers must already be in the TS from ingest_accounts). Source the TS via ts_handle, inline ts, OR map_session_id (preferred for points: reads the LIVE session TS so points pushed by ingest_accounts(map_session_id=...) are found without threading a new ts_handle). Returns overlay_kind, overlay_id, viewer_hint, and for part layers a visibility block (state, min_zoom, camera_action). An open map_session_id zooms the MC to min_zoom (camera_action=fit_to_visible). When the user already named a center and zoom, do_this_next.tool is configure_map: call it once with that center and zoom before ingest or a point classification, so the fit does not replace it. Skip that call when no center was named, and do not invent one. Do not call configure_map again unless a later result also reports camera_action=fit_to_visible. Do not use ezt_test/focusAt. POINT LAYERS with map_session_id: status=already_on_map is verified against the live session render payload; when the layer is in the TS but missing from the session, the tool pushes a refresh and returns status=refreshed with a map_refresh block — check its render_ack before claiming points are visible. ROUTE overlay (overlay_kind=route) needs map_session_id and only re-shows or hides routes calculate_route already drew — 'hide/remove/clear the route' clears them; with no route yet it returns blocked_by=needs_route pointing at calculate_route. Pass route_id to target ONE of several routes; omit it to act on all of them. To delete a route for good use delete_route; to change a route's stops re-run calculate_route with the same route_id. calculate_route already draws its own result, so this is recovery, not the normal path. Prefer this over raw configure_map for show/add-on-map asks. Part-layer overlays are written onto the live session even when map_push_status=viewer_not_connected (session durability); SSE paint still needs a connected viewer. A later linked ingest_accounts keeps those overlays (non-destructive compose with points). Dual surface: the overlay lands on the in-chat map on Apps-capable hosts and in the map_url tab everywhere else — same map_session_id, no extra call. Scenarios: MC-010, ChatGPT/external MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| route_id | No | ||
| ts_handle | No | ||
| overlay_id | No | ||
| overlay_kind | No | ||
| user_request | No | ||
| map_session_id | No | ||
| merge_strategy | No | ||
| guidance_handle | No | ||
| expected_revision | No | ||
| expected_content_hash | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers unusual depth: session durability when map_push_status=viewer_not_connected, status=already_on_map validated against the live render payload, status=refreshed with a map_refresh block and render_ack check, blocked_by=needs_route, non-destructive compose with a later ingest_accounts, and dual in-chat/map_url surfaces under the same session id.
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 structure is sensible — When, Prerequisites, dispatch behavior, then scenario tags — and the routing constraints are front-loaded. But it is a dense wall of near-run-on sentences with a lot of trailing edge-case detail (SSE paint, merge strategy, route recovery notes) that could be tightened considerably without losing meaning.
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 an 11-parameter, zero-required dispatch tool with no annotations, this is close to complete: prerequisites, dispatch rules, return fields (overlay_kind, overlay_id, viewer_hint, visibility block), failure/blocked states, and the dual-surface behavior are all covered. An output schema exists, so return-value explanation is bonus rather than obligation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so prose must compensate. It does explain ts_handle, inline ts, map_session_id (including why it is preferred for points), user_request, overlay_kind (enumerating part_layer/point_layer/tal/route), overlay_id, and route_id semantics. However merge_strategy, guidance_handle, expected_revision, and expected_content_hash are never mentioned, leaving roughly a third of the surface undocumented in both schema and 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 opens with a Tier-scoped statement of exactly what the tool does: resolve the four MC overlay families (part_layer, point_layer, tal, route) and dispatch to the correct underlying step. It differentiates from siblings by name — 'Prefer this over raw configure_map', 'use delete_route', 'calculate_route already draws its own result' — so an agent can route without opening any schema.
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?
Explicit When clause with literal user phrasings, prerequisites (ts_handle from get_map_visualization, connected viewer), and conditions for calling configure_map first ('when the user already named a center and zoom') versus skipping it ('Skip that call when no center was named, and do not invent one'). It also states when NOT to use it for route deletion and route editing, naming the correct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_feedbackAInspect
[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next: continue or end session after acknowledgement. Scenarios: GC-006. No secrets, credentials, raw customer data, or PII. Do not paste Territory Solution JSON, GeoJSON FeatureCollections, or account/CSV tables — those blocks are stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | other | |
| severity | No | medium | |
| user_goal | Yes | ||
| confidence | No | medium | |
| session_id | No | ||
| client_name | No | ||
| related_tool | No | ||
| what_happened | Yes | ||
| client_version | No | ||
| correlation_id | No | ||
| context_summary | No | ||
| include_context | No | ||
| expected_capability | No | ||
| related_product_area | No | ||
| suggested_improvement | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses that context blocks (Territory Solution JSON, GeoJSON, account/CSV tables) are stripped, forbids secrets/PII, and states an acknowledgement is returned. It stops short of saying where feedback goes, whether it's durable or anonymous, or how acknowledgement affects subsequent calls.
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?
Five labelled fragments (When / Prerequisites / Next / Scenarios / content rules) are front-loaded and waste-free, with the triggering condition first. It is slightly telegraphic — 'Scenarios: GC-006' is opaque without external context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the when/prerequisites/next flow is fully covered. The material gap is the 15-parameter surface: with 0% schema description coverage, the description should carry parameter meaning but does not, leaving a substantial completeness hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 15 parameters, and the description never maps its guidance to specific fields — it does not distinguish user_goal from what_happened, nor explain category/severity/confidence enums, include_context, related_tool, or correlation_id. The content restrictions loosely imply what belongs in free-text fields, but most parameters get no explanation in either the schema or 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 bracketed tag names the tier and function ('Quality Feedback'), and the 'When' clause makes the resource (feedback submission about workflow/tool quality) unambiguous. It doesn't name a contrasting sibling, but the purpose is immediately intelligible without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates trigger conditions ('workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs'), states 'Prerequisites: none', and specifies the follow-up ('Next: continue or end session after acknowledgement'). An agent knows exactly when to call this and what to do afterward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_cancelAInspect
[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/cancel. Use only when this mirror appears in tools/list; Tasks-capable clients use tasks/cancel instead. Prerequisite: task_id from the immediately preceding async submission. Returns the same Task status fields and EZT poll metadata as the native method. Cancellation is cooperative; confirm TS unchanged or partial per the originating tool contract. Scenarios: OP-001.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does well: it states that cancellation is cooperative, that the task state may remain unchanged or become partial, and that the return shape matches the native method. It does not cover permission requirements or error behavior, so it falls short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core purpose and usage rules, then adds prerequisite, return, and cancellation semantics. The internal tier and scenario labels add some noise, but the overall structure is efficient and appropriately sized for the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter cancellation tool with no annotations and an existing output schema, the description covers purpose, usage conditions, prerequisite, return shape, and cooperative cancellation behavior. It is nearly complete, though it omits auth/error details that an agent might need in edge 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?
Schema description coverage is 0%, so the description must add meaning for the sole task_id parameter. It does clarify that task_id comes from the immediately preceding async submission, which is useful, but it does not describe the ID format or any constraints beyond that origin.
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 identifies the tool as the tool-only equivalent of native tasks/cancel, which makes the cancel-task purpose clear from the name and text. It does not explicitly contrast with sibling tools such as tasks_get or tasks_result, but the operation is distinguishable from those by intent.
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 gives explicit when-to-use guidance ('Use only when this mirror appears in tools/list'), names the alternative for Tasks-capable clients (native tasks/cancel), and states the prerequisite that task_id must come from the immediately preceding async submission. This leaves little ambiguity about selecting or invoking the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_getAInspect
[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/get. Use only when this mirror appears in tools/list; Tasks-capable clients use tasks/get. Prerequisite: task_id from the immediately preceding async submission. Polling never starts work. next_action and sleep_ms sit on this document (the same fields as the submit result) and are repeated under _meta. Follow next_action exactly: sleep_and_poll means sleep the single authoritative sleep_ms value, call tasks_get once, then re-read both fields; consume_result means call tasks_result once now; stop_error means stop. status=cancelled is a user stop — do not resubmit the same tool unless asked. Never sleep on estimated_remaining_ms and never poll HTTP /result for status. While a task is still queued, _meta also carries queue_position (1-based within its worker lane), queue_depth, queue_lane (io|compute), and estimated_start_ms — report these to explain a wait; estimated_start_ms is advisory and never a sleep duration. The result is the same Task status document returned by native tasks/get. Scenarios: OP-002, tool-only MCP clients.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discharges it: it discloses that polling never starts work, that sleep_ms is the single authoritative sleep value, that estimated_remaining_ms must never be used as a sleep duration, that status=cancelled is a user stop not to be resubmitted, and that _meta carries queue_position/queue_depth/queue_lane/estimated_start_ms for explaining waits.
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?
Dense and long, but the length is largely earned by the state-machine semantics (next_action vocabulary, queue metadata, anti-patterns) that an agent must follow. The mirror-vs-native constraint and prerequisite are front-loaded, though a couple of clauses (e.g., re-stating that next_action/sleep_ms are mirrored under _meta) are mildly redundant.
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?
An output schema exists, so return values needn't be enumerated, and the description even confirms 'The result is the same Task status document returned by native tasks/get.' Combined with the routing rules, prerequisites, and discouraged behaviors, an agent has everything needed to invoke and sequence this tool 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?
One required param with 0% schema description coverage, so the description must compensate, and it does: 'Prerequisite: task_id from the immediately preceding async submission' tells the agent exactly where the identifier comes from. It stops short of format specifics (e.g., string shape/length), so not a full 5.
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 names a specific verb+resource (retrieve the Task status document for a submitted async task) and explicitly frames itself as the 'tool-only client equivalent of native tasks/get.' It distinguishes itself from siblings tasks_result and tasks_cancel, telling the agent it is the polling/status read, not the result fetch or cancel.
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 states when to use it ('Use only when this mirror appears in tools/list'), when not to (Tasks-capable clients use tasks/get), the prerequisite (task_id from the immediately preceding async submission), and routes each next_action value to the correct follow-up call (sleep_and_poll, consume_result, stop_error). Exclusions and alternatives are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_resultAInspect
[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/result. Call exactly once after tasks_get returns status=completed and _meta.next_action=consume_result. Prerequisite: task_id from that completed Task. Returns the originating tool's terminal handle-only result (ts_handle, counts, timings, map binding/shortcut); it never returns inline TS when a handle exists. Do not poll this operation while working. After build results, pass ts_handle or the same task_id as job_id to analyze with explicit tal_ids; never resubmit a build to recover from an Analyze lookup error.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the prerequisite, the exactly-once/idempotency expectation, that the result is handle-only (never inline TS when a handle exists), and the no-polling constraint. It stops short of stating what happens if called before completion or whether repeated calls error, which a mutation-adjacent consume step would benefit from.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the tier/mirror identity and the trigger condition, then layers prerequisite, return shape, and follow-up routing. Dense and jargon-heavy ('ts_handle', '_meta.next_action') but every sentence carries operational information; nothing is redundant.
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?
An output schema exists so return values need not be fully spelled out, yet the description still characterizes the return as the originating tool's terminal handle-only result. Combined with the workflow preconditions and post-conditions, an agent has everything needed to invoke it correctly at the right moment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single task_id parameter, and it does: it specifies the value is the task_id from the completed Task returned by tasks_get, and an alternative reuse of the same task_id as job_id. It does not state behavior for an invalid or incomplete task_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — retrieving the terminal result of a completed Task — and explicitly frames it as the tool-only mirror of native tasks/result. It is clearly distinguishable from siblings tasks_get (which produces the status this tool consumes) and tasks_cancel.
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?
Gives precise invocation conditions: call exactly once after tasks_get returns status=completed and _meta.next_action=consume_result, and do not poll while working. It also routes follow-up work (pass ts_handle or task_id as job_id to analyze with explicit tal_ids) and forbids the wrong recovery path (never resubmit a build on an Analyze lookup error).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
territory_mergeBInspect
[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption. Prerequisites: adjacent territory_id_a and territory_id_b in source TAL. Open MC preferred args: map_session_id + source_tal_id + territory_id_a/b (live session TS is authoritative — do not repost GeoJSON). Headless: ts_handle or Compact/GeoJSON ts. Modern form-capable clients may be prompted in-band for missing ids / workload dwell; legacy hosts keep CLARIFICATION_REQUIRED. Next: verify merged TAL in MC, analyze. Scenarios: MG-001..004, EV-001.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| objective | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| part_layer | No | ||
| point_layer | No | ||
| new_tal_label | No | ||
| repair_policy | No | default | |
| source_tal_id | No | ||
| map_session_id | No | ||
| territory_id_a | No | ||
| territory_id_b | No | ||
| guidance_handle | No | ||
| balance_tolerance | No | ||
| disruption_weight | No | ||
| visit_frequency_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that the live session TS is authoritative, that GeoJSON must not be reposted, that form-capable clients may be prompted in-band, and that legacy hosts return CLARIFICATION_REQUIRED. It never states that the two source territories are consumed/replaced or whether the merge is reversible — a notable gap for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is front-loaded (Tier tag, When, Prerequisites, Args, Next) and every clause carries signal, but the telegraphic jargon (TS, MC, TAL, MG-001..004) makes it hard for an agent without domain context to parse, and the scenario codes add little operational 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?
An output schema exists, so return values need no explanation, and the description does cover the main invocation paths. However, for a 16-parameter, annotation-free mutation, the unexplained rebalancing knobs (balance_tolerance, disruption_weight, repair_policy) leave the agent unable to fully control the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 16 parameters, so the description must compensate and only partially does. It explains map_session_id, source_tal_id, territory_id_a/b, ts_handle/ts, and hints at dwell_time, but leaves balance_tolerance, disruption_weight, repair_policy, part_layer, point_layer, visit_frequency_field, objective, and guidance_handle entirely undefined despite being central to the 'minimal disruption' claim.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'merge two adjacent territories and rebalance with minimal disruption', which implicitly separates it from territory_split and territory_rebalance. It does not name those siblings explicitly, so the agent must infer the boundary rather than being routed to the right tool.
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?
'When:' and 'Prerequisites: adjacent territory_id_a and territory_id_b in source TAL' give clear context, and it distinguishes the Open MC path from the Headless path. It stops short of explicit when-not conditions or naming console alternatives like territory_split/territory_rebalance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
territory_rebalanceAInspect
[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_session_id + source_tal_id (+ objective/dwell) — the live session TS is authoritative; do not invent a ts_handle or repost multi-MB GeoJSON when a map session is open. Headless: ts_handle or Compact TS v2 / GeoJSON ts (both valid). Prerequisites: source TAL, refreshed point_layer; viewer connected for MC-first. The source assignment is the non-regression baseline: if no generated candidate improves the requested objective, the derived TAL stays unchanged and returns NO_IMPROVING_REBALANCE_FOUND. Read solver_diagnostics for source/generated/accepted objectives and convergence. Modern form-capable clients may be prompted in-band for missing source_tal_id / uninferable part_layer / unresolved workload dwell; legacy hosts keep CLARIFICATION_REQUIRED (HITL-025). Next: report retention_pct and diagnostics, then analyze before/after with analysis_panel=single. Scenarios: RB-001..005, EV-003.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| objective | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| part_layer | No | ||
| point_layer | No | ||
| new_tal_label | No | ||
| repair_policy | No | default | |
| source_tal_id | No | ||
| map_session_id | No | ||
| guidance_handle | No | ||
| balance_tolerance | No | ||
| disruption_weight | No | ||
| visit_frequency_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the non-regression baseline, the NO_IMPROVING_REBALANCE_FOUND outcome, CLARIFICATION_REQUIRED vs in-band prompting (HITL-025), and points to solver_diagnostics for objectives/convergence. It omits mutation/destructive semantics, permission requirements, and any rate/limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information density is high and largely relevant, but it is delivered as one long, jargon-saturated block (MDR, TAL, MC, TS, RB-001..005) rather than a front-loaded summary followed by detail. Several clauses are packed into single sentences, making it hard to scan quickly.
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 14-parameter tool with an output schema, the description covers invocation modes, prerequisites, non-regression behavior, failure/clarification paths, and follow-up steps, so an agent has enough to call it correctly. The outstanding gap is the undocumented parameters and no explicit statement of whether the operation mutates state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, so the description must compensate. It usefully explains map_session_id, source_tal_id, ts_handle, objective/dwell_time, point_layer and part_layer, but leaves new_tal_label, repair_policy, balance_tolerance, disruption_weight, visit_frequency_field and guidance_handle entirely unexplained.
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 tier label 'Minimal-Disruption Rebalance' plus 'alignment should stay close to current' makes the operation understandable: it recomputes a territory alignment while minimizing disruption. The resource (territory/TAL alignment) and behavior are clear, though the description never states the verb plainly and does not name siblings like realign or territory_split to sharpen the 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?
It gives an explicit 'When' condition (account data changed but alignment should stay near current), mode-specific invocation guidance (Open MC preferred args vs Headless paths), and prerequisites (source TAL, refreshed point_layer, viewer connected). It stops short of stating when NOT to use it or naming the alternative tool for larger-disruption realignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
territory_splitAInspect
[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with target territory; viewer connected for MC-first. Open MC preferred args: map_session_id + source_tal_id + target_territory_id (live session TS is authoritative — do not repost GeoJSON). Headless: ts_handle or Compact/GeoJSON ts. Distinct from auto_build Scoped Split (balanced-from-scratch). Modern form-capable clients may be prompted in-band for missing source/target ids (and unresolved workload dwell); legacy hosts keep CLARIFICATION_REQUIRED. Next: compare derived TAL in MC, analyze disruption_summary. Scenarios: SP-001..004.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | No | ||
| objective | No | ||
| ts_handle | No | ||
| dwell_time | No | ||
| part_layer | No | ||
| point_layer | No | ||
| new_tal_label | No | ||
| repair_policy | No | default | |
| source_tal_id | No | ||
| map_session_id | No | ||
| guidance_handle | No | ||
| balance_tolerance | No | ||
| disruption_weight | No | ||
| new_territory_label | No | ||
| target_territory_id | No | ||
| visit_frequency_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load and does substantial work: it declares that the live session TS is authoritative ('do not repost GeoJSON'), describes the in-band clarification path for modern clients versus CLARIFICATION_REQUIRED for legacy hosts, and warns the agent to compare the derived TAL and inspect disruption_summary next. It does not state what the split mutates/destroys in the existing alignment or any permission requirements, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a labeled structure (When / Prerequisites / Headless / Distinct / Next / Scenarios) and no filler sentences, though the extremely dense domain jargon and abbreviation stacking (TAL, MC, TS, SP-001..004) make it harder to parse than a plainer two-sentence statement.
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 16-parameter mutation tool with zero annotation coverage, the description covers the workflow and mode-selection well, and an output schema exists so return values need no prose. However, the majority of undocumented parameters and the absence of any statement about what the split changes or requires leave real gaps for an agent to fill by guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 16 parameters with no enums, so the description must compensate. It does explain the key args (map_session_id, source_tal_id, target_territory_id, ts_handle/ts, dwell time) and the MC-vs-headless choice, but roughly half the parameters (repair_policy, balance_tolerance, disruption_weight, part_layer, point_layer, label fields, guidance_handle, visit_frequency_field, objective) get no meaning, format, or default guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('split one oversized territory') with an explicit scope qualifier ('minimal disruption to the rest of the alignment'), and explicitly distinguishes itself from the nearest sibling: 'Distinct from auto_build Scoped Split (balanced-from-scratch).' An agent can pick this over auto_build/territory_rebalance without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit When clause, prerequisites ('existing TAL with target territory; viewer connected for MC-first'), the two invocation modes (Open MC preferred args vs headless ts_handle/Compact/GeoJSON ts), and a named alternative with the condition that separates them. Scenarios SP-001..004 and a Next step point the agent onward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_advisorAInspect
[Tier 1 — Workflow Advisor] Deterministic read-only next-action advisor for multi-step workflows. When: you know the intent (use discover_intent first if not) and want the validated next tool call instead of guessing the order. Prerequisites: none (static state machine; executes nothing). Pass intent_category (builds: build_from_accounts | account_grouping | known_assignments; edits: realign_existing | restructure; map overlay: load_part_layer for add/show ZIP or part layer; routing: route_stops for driving a known list of stops; reachable areas: reachable_area for a drive-time or drive-distance area around origins, with isochrone_build accepted as an alias; scheduling: periodic_scheduling for a recurring cadence, with schedule_visits accepted as an alias), agent-supplied state (viewer_connected, point_layer, part_layer, tal_present, analysis_fresh; realign adds selection_requested/selection_committed/realign_applied; restructure adds source_tal_id), and optional inputs (builds: part_layer, territory_count, grouping_field, assignments_handle, tal_label; realign: tal_id, moves or realign_operation+part_ids, to_territory_id, analysis_requested; restructure: operation=split|merge|rebalance, source_tal_id, target_territory_id, territory_id_a/territory_id_b; load_part_layer: user_request for ZIP inference; route_stops: route_type=circuit|tour|open_tour, start, stop_sets, end for tour, stops_need_ingest when the stops are not in the TS yet; reachable_area: origins, bands, part_layer, travel_mode=car|truck, origins_need_ingest when the origins are not in the TS yet — the advisor never invents a budget; periodic_scheduling: visit_frequency_field, frequency_unit, dwell_time or dwell_minutes/dwell_hours, daily_capacity or daily_capacity_hours, horizon_days, max_buckets_per_day — the advisor reports cadence/dwell/capacity as missing rather than inventing them). Returns next_tool + drafted next_args, missing_inputs, blocked_by, remaining_steps, guidance_uri, and guidance (the EMEP atom inlined as {uri, title, excerpt, truncated} — no resources/read needed); enforces mc_first, viewer_before_compute, build_after_ingest, and conditional analysis_freshness (realign only queues Analyze when a point layer exists or analysis_requested=true). Call it again after each completed step with updated state until done. Other categories (delegate, manual_selection, analyze_present, ...) return a discover_intent/guidance fallback. Scenarios: AB-016, ACB-003, DB-001, WI-001, WI-002, wrong-build-tool, build-before-ingest.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| inputs | No | ||
| intent_category | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares read-only, deterministic, static-state-machine behavior that 'executes nothing', describes the return payload (next_tool, drafted next_args, missing_inputs, blocked_by, remaining_steps, guidance inlined), and names the enforced invariants (mc_first, viewer_before_compute, build_after_ingest, conditional analysis_freshness) plus the 'never invents a budget' guarantee.
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?
Purpose and 'When:' are front-loaded, which is good, but the bulk of the description is a single dense run-on parenthetical enumerating every category, state key, and input, which is hard to scan. The content earns its place but the structure is not well-segmented.
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 routing/advisor tool with an output schema and a stateful multi-step contract, the description is complete: it covers prerequisites, per-category inputs, enforced ordering invariants, return fields, fallback behavior, and even scenario tags. Nothing an agent needs to invoke it correctly 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?
Schema coverage is 0% with no enums, so the description must compensate and does: it enumerates valid intent_category values (builds, edits, map overlay, routing, reachable areas, scheduling), lists the agent-supplied state keys per category, and details optional inputs including aliases and conditional requirements for each category.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific role ('deterministic read-only next-action advisor for multi-step workflows') with a clear verb and resource, and explicitly distinguishes itself from siblings like discover_intent and the concrete action tools it routes to (isochrone_build, schedule_visits, load_part_layer). An agent can tell immediately this is a planning/orchestration tool, not an executor.
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?
Explicit 'When:' clause states the triggering condition (you know the intent and want the validated next call instead of guessing order), names discover_intent as the prerequisite alternative when intent is unknown, and prescribes re-calling after each completed step. It also documents the fallback for unsupported categories, leaving little to inference.
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.
47 tool updates
- First observed
account_build - First observed
analyze - First observed
analyze_routes - First observed
auto_build - First observed
calculate_route - First observed
cluster_points - First observed
configure_map - First observed
create_territory_from_parts - First observed
delete_route - First observed
delete_tal - First observed
delete_territory - First observed
direct_build - First observed
discover_intent - First observed
ensure_map_viewer - First observed
ep_graph_traverse - First observed
ep_list_topics - First observed
ep_search - First observed
export_geojson - First observed
extract_tal_branch - First observed
ezt - First observed
geocode_address - First observed
get_guidance - First observed
get_map_selection - First observed
get_map_visualization - First observed
get_part_selection - First observed
import_geojson - First observed
ingest_accounts - First observed
isochrone_build - First observed
load_analysis_panel - First observed
query_parts - First observed
realign - First observed
reintegrate_branch - First observed
request_account_upload - First observed
request_assignment_upload - First observed
request_part_selection - First observed
schedule_visits - First observed
seed_build - First observed
set_map_state - First observed
show_map_overlay - First observed
submit_feedback - First observed
tasks_cancel - First observed
tasks_get - First observed
tasks_result - First observed
territory_merge - First observed
territory_rebalance - First observed
territory_split - First observed
workflow_advisor
Related MCP Connectors
AI-ready GIS, geofencing, DataSynch, CRM, inventory, routing, APIs, telemetry and workflows.
- mcpOAuthai.factori
Real-world location intelligence: foot traffic, trade areas, demographics, site scoring, and more.
Maps built for agents: routing incl. truck/ADR, geocoding, matrices, isochrones — 34 tools.
- VepathosOAuthcom.vepathos
Import orders, manage your fleet, and generate optimized last-mile delivery routes at scale.
Related MCP Servers
- FlicenseAqualityBmaintenancePlans and optimizes last-mile delivery routes with capacity and time-window constraints, offering tools for managing deliveries, vehicles, routes, and what-if scenarios.10-

Magic Lane MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.89 npm7Apache 2.0
ThinAir Geoofficial
AlicenseAqualityCmaintenanceLocation & routing intelligence for AI agents — geocoding, truck routing, traffic, weather, and place search.161942 npm1MIT- AlicenseAqualityDmaintenanceGeospatial API tools for AI agents — geocoding, reverse geocoding, routing, isochrone, distance matrix, static maps, H3 hexagons, elevation, GPS map-matching, point-in-polygon, address normalisation, timezone lookup, and batch geocoding. Built on OpenStreetMap infrastructure. Cost-effective alternative to Google Maps API.1819 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.