{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_gh8jg29hnj34","handle":"easyterritory-mcp","url":"https://wellknown.network/agents/easyterritory-mcp","links":{"self":"https://wellknown.network/agents/easyterritory-mcp/record.json","html":"https://wellknown.network/agents/easyterritory-mcp","markdown":"https://wellknown.network/agents/easyterritory-mcp/record.md","api":"https://wellknown.network/api/v1/agents/easyterritory-mcp","status":"https://wellknown.network/api/v1/agents/easyterritory-mcp/status","claim":"https://wellknown.network/agents/easyterritory-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/easyterritory-mcp/claim.json","badge":"https://wellknown.network/agents/easyterritory-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/easyterritory-mcp/history","tools":"https://wellknown.network/api/v1/agents/easyterritory-mcp/tools"},"ard":{"identifier":"urn:air:mcp.easyterritory.ai:server:easyterritory-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"EasyTerritory MCP","summary":"Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.","description":"Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.","publisher":{"name":"ai.easyterritory","url":null},"homepage":"https://easyterritory.ai","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.easyterritory.ai","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-29T16:03:31.246014Z","publishedAt":"2026-09-29T16:03:31.246014Z","registryName":"ai.easyterritory/ezt-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":1,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":1,"provenance":"derived"},{"slug":"knowledge.knowledge-graph","name":"Knowledge Graphs","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":1,"provenance":"derived"},{"slug":"data.vector-search","name":"Vector Search","confidence":0.583,"provenance":"derived"},{"slug":"automation.orchestration","name":"Agent Orchestration","confidence":0.583,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":0.54,"provenance":"derived"}],"categories":["analytics","automation","data","dev","documents","knowledge","productivity"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 1h ago.","lastOkAt":"2026-10-10T13:24:50.213Z","lastProbedAt":"2026-10-10T13:24:50.213Z","statusComputedAt":"2026-10-10T13:26:39.790Z","reliability30d":{"probes":39,"successRate":1,"p50Ms":97,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":39,"ok":39,"authBoundaryOk":0,"serviceOk":39,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T13:24:50.213Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":93,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territor"},{"name":"get_guidance","description":"Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, "},{"name":"discover_intent","description":"Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tie"},{"name":"workflow_advisor","description":"Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_ac"},{"name":"ep_search","description":"Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source fi"},{"name":"ep_list_topics","description":"Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter."},{"name":"ep_graph_traverse","description":"Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless"},{"name":"ensure_map_viewer","description":"Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per "},{"name":"submit_feedback","description":"Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement "},{"name":"query_parts","description":"Returns attributes (no geometry) for parts of a part layer listed at ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither"},{"name":"direct_build","description":"Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via t"},{"name":"auto_build","description":"Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) and adds them as a new al"},{"name":"cluster_points","description":"Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group"},{"name":"schedule_visits","description":"Schedules recurring visits: expands each account's cadence (e.g. every 7 days, twice a month) across a horizon and packs the visits into daily work clusters (bu"},{"name":"account_build","description":"Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflic"},{"name":"realign","description":"Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to"},{"name":"delete_tal","description":"Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Nee"},{"name":"delete_territory","description":"Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Te"},{"name":"territory_split","description":"Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). N"},{"name":"territory_merge","description":"Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the ne"},{"name":"territory_rebalance","description":"Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory"},{"name":"extract_tal_branch","description":"Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate"},{"name":"reintegrate_branch","description":"Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns "},{"name":"request_part_selection","description":"Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territ"},{"name":"get_part_selection","description":"Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status "},{"name":"create_territory_from_parts","description":"Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the liv"},{"name":"analyze","description":"Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric tota"},{"name":"ingest_accounts","description":"Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them t"},{"name":"request_account_upload","description":"Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file t"},{"name":"request_assignment_upload","description":"Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns uplo"},{"name":"geocode_address","description":"Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, s"},{"name":"calculate_route","description":"Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time"},{"name":"isochrone_build","description":"Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a"},{"name":"seed_build","description":"Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, "},{"name":"delete_route","description":"Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, p"},{"name":"analyze_routes","description":"Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no vis"},{"name":"tasks_cancel","description":"Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the "},{"name":"tasks_get","description":"Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id. next_action is sle"},{"name":"tasks_result","description":"Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task st"},{"name":"set_map_state","description":"Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Ses"},{"name":"get_map_selection","description":"Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from re"},{"name":"load_analysis_panel","description":"Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze re"},{"name":"configure_map","description":"Updates durable map settings on the Territory Solution and refreshes the live map: project_name (map heading), loaded_part_layers ([] hides ZIP/part outlines; b"},{"name":"show_map_overlay","description":"Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer"},{"name":"export_geojson","description":"Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes wi"},{"name":"import_geojson","description":"Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and "},{"name":"ezt","description":"Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_han"}],"toolCount":47,"toolsHash":"845ace7deee1ac8ba02c72d3645e251e9738a7c27e392693561686c6e68f9efe","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T07:24:22.432Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":94,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territor"},{"name":"get_guidance","description":"Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, "},{"name":"discover_intent","description":"Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tie"},{"name":"workflow_advisor","description":"Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_ac"},{"name":"ep_search","description":"Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source fi"},{"name":"ep_list_topics","description":"Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter."},{"name":"ep_graph_traverse","description":"Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless"},{"name":"ensure_map_viewer","description":"Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per "},{"name":"submit_feedback","description":"Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement "},{"name":"query_parts","description":"Returns attributes (no geometry) for parts of a part layer listed at ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither"},{"name":"direct_build","description":"Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via t"},{"name":"auto_build","description":"Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) and adds them as a new al"},{"name":"cluster_points","description":"Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group"},{"name":"schedule_visits","description":"Schedules recurring visits: expands each account's cadence (e.g. every 7 days, twice a month) across a horizon and packs the visits into daily work clusters (bu"},{"name":"account_build","description":"Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflic"},{"name":"realign","description":"Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to"},{"name":"delete_tal","description":"Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Nee"},{"name":"delete_territory","description":"Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Te"},{"name":"territory_split","description":"Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). N"},{"name":"territory_merge","description":"Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the ne"},{"name":"territory_rebalance","description":"Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory"},{"name":"extract_tal_branch","description":"Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate"},{"name":"reintegrate_branch","description":"Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns "},{"name":"request_part_selection","description":"Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territ"},{"name":"get_part_selection","description":"Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status "},{"name":"create_territory_from_parts","description":"Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the liv"},{"name":"analyze","description":"Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric tota"},{"name":"ingest_accounts","description":"Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them t"},{"name":"request_account_upload","description":"Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file t"},{"name":"request_assignment_upload","description":"Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns uplo"},{"name":"geocode_address","description":"Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, s"},{"name":"calculate_route","description":"Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time"},{"name":"isochrone_build","description":"Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a"},{"name":"seed_build","description":"Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, "},{"name":"delete_route","description":"Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, p"},{"name":"analyze_routes","description":"Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no vis"},{"name":"tasks_cancel","description":"Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the "},{"name":"tasks_get","description":"Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id. next_action is sle"},{"name":"tasks_result","description":"Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task st"},{"name":"set_map_state","description":"Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Ses"},{"name":"get_map_selection","description":"Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from re"},{"name":"load_analysis_panel","description":"Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze re"},{"name":"configure_map","description":"Updates durable map settings on the Territory Solution and refreshes the live map: project_name (map heading), loaded_part_layers ([] hides ZIP/part outlines; b"},{"name":"show_map_overlay","description":"Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer"},{"name":"export_geojson","description":"Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes wi"},{"name":"import_geojson","description":"Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and "},{"name":"ezt","description":"Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_han"}],"toolCount":47,"toolsHash":"845ace7deee1ac8ba02c72d3645e251e9738a7c27e392693561686c6e68f9efe","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T01:25:21.505Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territor"},{"name":"get_guidance","description":"Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, "},{"name":"discover_intent","description":"Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tie"},{"name":"workflow_advisor","description":"Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_ac"},{"name":"ep_search","description":"Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source fi"},{"name":"ep_list_topics","description":"Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter."},{"name":"ep_graph_traverse","description":"Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless"},{"name":"ensure_map_viewer","description":"Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per "},{"name":"submit_feedback","description":"Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement "},{"name":"query_parts","description":"Returns attributes (no geometry) for parts of a part layer listed at ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither"},{"name":"direct_build","description":"Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via t"},{"name":"auto_build","description":"Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) and adds them as a new al"},{"name":"cluster_points","description":"Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group"},{"name":"schedule_visits","description":"Schedules recurring visits: expands each account's cadence (e.g. every 7 days, twice a month) across a horizon and packs the visits into daily work clusters (bu"},{"name":"account_build","description":"Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflic"},{"name":"realign","description":"Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to"},{"name":"delete_tal","description":"Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Nee"},{"name":"delete_territory","description":"Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Te"},{"name":"territory_split","description":"Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). N"},{"name":"territory_merge","description":"Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the ne"},{"name":"territory_rebalance","description":"Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory"},{"name":"extract_tal_branch","description":"Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate"},{"name":"reintegrate_branch","description":"Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns "},{"name":"request_part_selection","description":"Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territ"},{"name":"get_part_selection","description":"Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status "},{"name":"create_territory_from_parts","description":"Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the liv"},{"name":"analyze","description":"Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric tota"},{"name":"ingest_accounts","description":"Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them t"},{"name":"request_account_upload","description":"Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file t"},{"name":"request_assignment_upload","description":"Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns uplo"},{"name":"geocode_address","description":"Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, s"},{"name":"calculate_route","description":"Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time"},{"name":"isochrone_build","description":"Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a"},{"name":"seed_build","description":"Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, "},{"name":"delete_route","description":"Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, p"},{"name":"analyze_routes","description":"Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no vis"},{"name":"tasks_cancel","description":"Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the "},{"name":"tasks_get","description":"Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id. next_action is sle"},{"name":"tasks_result","description":"Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task st"},{"name":"set_map_state","description":"Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Ses"},{"name":"get_map_selection","description":"Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from re"},{"name":"load_analysis_panel","description":"Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze re"},{"name":"configure_map","description":"Updates durable map settings on the Territory Solution and refreshes the live map: project_name (map heading), loaded_part_layers ([] hides ZIP/part outlines; b"},{"name":"show_map_overlay","description":"Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer"},{"name":"export_geojson","description":"Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes wi"},{"name":"import_geojson","description":"Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and "},{"name":"ezt","description":"Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_han"}],"toolCount":47,"toolsHash":"845ace7deee1ac8ba02c72d3645e251e9738a7c27e392693561686c6e68f9efe","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T19:25:45.517Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":94,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territor"},{"name":"get_guidance","description":"Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, "},{"name":"discover_intent","description":"Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tie"},{"name":"workflow_advisor","description":"Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_ac"},{"name":"ep_search","description":"Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source fi"},{"name":"ep_list_topics","description":"Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter."},{"name":"ep_graph_traverse","description":"Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless"},{"name":"ensure_map_viewer","description":"Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per "},{"name":"submit_feedback","description":"Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement "},{"name":"query_parts","description":"Returns attributes (no geometry) for parts of a part layer listed at ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither"},{"name":"direct_build","description":"Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via t"},{"name":"auto_build","description":"Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) and adds them as a new al"},{"name":"cluster_points","description":"Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group"},{"name":"schedule_visits","description":"Schedules recurring visits: expands each account's cadence (e.g. every 7 days, twice a month) across a horizon and packs the visits into daily work clusters (bu"},{"name":"account_build","description":"Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflic"},{"name":"realign","description":"Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to"},{"name":"delete_tal","description":"Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Nee"},{"name":"delete_territory","description":"Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Te"},{"name":"territory_split","description":"Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). N"},{"name":"territory_merge","description":"Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the ne"},{"name":"territory_rebalance","description":"Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory"},{"name":"extract_tal_branch","description":"Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate"},{"name":"reintegrate_branch","description":"Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns "},{"name":"request_part_selection","description":"Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territ"},{"name":"get_part_selection","description":"Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status "},{"name":"create_territory_from_parts","description":"Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the liv"},{"name":"analyze","description":"Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric tota"},{"name":"ingest_accounts","description":"Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them t"},{"name":"request_account_upload","description":"Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file t"},{"name":"request_assignment_upload","description":"Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns uplo"},{"name":"geocode_address","description":"Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, s"},{"name":"calculate_route","description":"Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time"},{"name":"isochrone_build","description":"Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a"},{"name":"seed_build","description":"Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, "},{"name":"delete_route","description":"Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, p"},{"name":"analyze_routes","description":"Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no vis"},{"name":"tasks_cancel","description":"Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the "},{"name":"tasks_get","description":"Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id. next_action is sle"},{"name":"tasks_result","description":"Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task st"},{"name":"set_map_state","description":"Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Ses"},{"name":"get_map_selection","description":"Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from re"},{"name":"load_analysis_panel","description":"Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze re"},{"name":"configure_map","description":"Updates durable map settings on the Territory Solution and refreshes the live map: project_name (map heading), loaded_part_layers ([] hides ZIP/part outlines; b"},{"name":"show_map_overlay","description":"Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer"},{"name":"export_geojson","description":"Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes wi"},{"name":"import_geojson","description":"Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and "},{"name":"ezt","description":"Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_han"}],"toolCount":47,"toolsHash":"845ace7deee1ac8ba02c72d3645e251e9738a7c27e392693561686c6e68f9efe","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T12:29:50.225Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":99,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a8fa953d3f782dd5281976248b3384531f0e72d8b6a711676ff45ce1a8eb7989","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T06:21:57.858Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":104,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a8fa953d3f782dd5281976248b3384531f0e72d8b6a711676ff45ce1a8eb7989","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:26:28.808Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":112,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a8fa953d3f782dd5281976248b3384531f0e72d8b6a711676ff45ce1a8eb7989","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T18:27:56.651Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":97,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a2c6b4a7ab7dd819e7362e8b9908e66a8f941c1f400d601f752e8355ccbe662d","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T12:26:18.317Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a2c6b4a7ab7dd819e7362e8b9908e66a8f941c1f400d601f752e8355ccbe662d","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:23:34.498Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":96,"error":null,"detail":{"tools":[{"name":"get_map_visualization","description":"[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"},{"name":"get_guidance","description":"[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. Ret"},{"name":"discover_intent","description":"[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 corr"},{"name":"workflow_advisor","description":"[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) a"},{"name":"ep_search","description":"[Knowledge Retrieval] Semantic search over the EZT MCP Expert Pack (EMEP) for targeted workflow guidance, concepts, interfaces, and common mistakes. When: you a"},{"name":"ep_list_topics","description":"[Knowledge Retrieval] List EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Use to discover what guidance exists before ep"},{"name":"ep_graph_traverse","description":"[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` hop"},{"name":"ensure_map_viewer","description":"[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. P"},{"name":"submit_feedback","description":"[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next"},{"name":"query_parts","description":"[Tier 2 — Part Metadata] When: enrich or filter parts before build, or inspect attributes without geometry. Prerequisites: part_layer from ezt://part-layers. Pa"},{"name":"direct_build","description":"[Tier 1 — Known Assignments Builder] When: user has explicit part-to-territory assignments (spreadsheet, legacy file, hierarchical territory_path). assignments_"},{"name":"auto_build","description":"[Tier 1 — Balanced Territory Builder] When: partition account points into N balanced territories over a part layer (for example, ten territories; Mode A count, "},{"name":"cluster_points","description":"[Tier 1 — Balanced Point Grouping] Partition one ingested point layer directly into balanced point groups with CCPD, without using ZIPs/counties or creating a T"},{"name":"schedule_visits","description":"[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 de"},{"name":"account_build","description":"[Tier 1 — Attribute Grouping Builder] When: territories should mirror an account attribute column from CRM exports (rep name, territory_name, territory code). P"},{"name":"realign","description":"[Tier 1 — Realign] When: move parts between leaf territories within ONE TAL. Prerequisites: existing TAL plus ONE current TS reference: map_session_id (preferre"},{"name":"delete_tal","description":"[Tier 1 — Delete TAL] When: wipe one whole Territory Alignment Layer (user language: territory layer, alignment, all territories, active alignment — not only 'T"},{"name":"delete_territory","description":"[Tier 1 — Delete Territory] When: delete one leaf territory from an existing TAL (e.g. 'delete T1', 'remove territory West'). Prerequisites: ONE current TS refe"},{"name":"territory_split","description":"[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with t"},{"name":"territory_merge","description":"[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their terr"},{"name":"territory_rebalance","description":"[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_sess"},{"name":"extract_tal_branch","description":"[Tier 1 — Delegation Extract] When: senior planner sends a regional subtree to a delegate for bounded editing. Prerequisites: master TS with hierarchical TAL; b"},{"name":"reintegrate_branch","description":"[Tier 1 — Delegation Reintegrate] When: merge an approved proposal TS into master. Prerequisites: branch_metadata, expected_master_revision; proposal TS at curr"},{"name":"request_part_selection","description":"[Tier 2 — Human Spatial Input] When: Monica selects parts on the map for realign, manual territory build, or return_list. Prerequisites: MC-first + viewer conne"},{"name":"get_part_selection","description":"[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"},{"name":"create_territory_from_parts","description":"[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 f"},{"name":"analyze","description":"[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_"},{"name":"ingest_accounts","description":"[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, a"},{"name":"request_account_upload","description":"[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, "},{"name":"request_assignment_upload","description":"[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/D"},{"name":"geocode_address","description":"[Tier 1 — Geocode Only] When: geocode addresses without full account ingest, or headless bulk geocode (GC-001). Prerequisites: none for headless; ts_handle + MC"},{"name":"calculate_route","description":"[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"},{"name":"isochrone_build","description":"[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 aroun"},{"name":"seed_build","description":"[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 te"},{"name":"delete_route","description":"[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_s"},{"name":"analyze_routes","description":"[Tier 2 — Route Facts] When: you need per-route numbers for routes calculate_route already drew — drive hours, dwell hours, route_workload_hours, stop coordinat"},{"name":"tasks_cancel","description":"[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"},{"name":"tasks_get","description":"[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/ge"},{"name":"tasks_result","description":"[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"},{"name":"set_map_state","description":"[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 ("},{"name":"get_map_selection","description":"[Tier 2 — MC Selection Poll] When: read the latest committed MC session selection — especially when Monica started selection from the legend finger icon and the"},{"name":"load_analysis_panel","description":"[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. Pr"},{"name":"configure_map","description":"[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_la"},{"name":"show_map_overlay","description":"[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 "},{"name":"export_geojson","description":"[Tier 2 — Project save] The only Territory Solution export. Materialize the working GeoJSON FeatureCollection (territory polygons with part_ids, point features,"},{"name":"import_geojson","description":"[Tier 2 — Project reopen] Import a GeoJSON FeatureCollection (standard points or an export_geojson artifact, including gzip/zip). Returns ts_handle + summary — "},{"name":"ezt","description":"[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."}],"toolCount":47,"toolsHash":"a2c6b4a7ab7dd819e7362e8b9908e66a8f941c1f400d601f752e8355ccbe662d","serverName":"ezt-mcp","capabilities":["experimental","prompts","resources","tasks","tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_map_visualization","description":"Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territor"},{"name":"get_guidance","description":"Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, "},{"name":"discover_intent","description":"Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tie"},{"name":"workflow_advisor","description":"Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_ac"},{"name":"ep_search","description":"Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source fi"},{"name":"ep_list_topics","description":"Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter."},{"name":"ep_graph_traverse","description":"Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless"},{"name":"ensure_map_viewer","description":"Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per "},{"name":"submit_feedback","description":"Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement "},{"name":"query_parts","description":"Returns attributes (no geometry) for parts of a part layer listed at ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither"},{"name":"direct_build","description":"Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via t"},{"name":"auto_build","description":"Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) and adds them as a new al"},{"name":"cluster_points","description":"Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group"},{"name":"schedule_visits","description":"Schedules recurring visits: expands each account's cadence (e.g. every 7 days, twice a month) across a horizon and packs the visits into daily work clusters (bu"},{"name":"account_build","description":"Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflic"},{"name":"realign","description":"Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to"},{"name":"delete_tal","description":"Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Nee"},{"name":"delete_territory","description":"Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Te"},{"name":"territory_split","description":"Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). N"},{"name":"territory_merge","description":"Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the ne"},{"name":"territory_rebalance","description":"Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory"},{"name":"extract_tal_branch","description":"Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate"},{"name":"reintegrate_branch","description":"Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns "},{"name":"request_part_selection","description":"Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territ"},{"name":"get_part_selection","description":"Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status "},{"name":"create_territory_from_parts","description":"Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the liv"},{"name":"analyze","description":"Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric tota"},{"name":"ingest_accounts","description":"Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them t"},{"name":"request_account_upload","description":"Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file t"},{"name":"request_assignment_upload","description":"Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns uplo"},{"name":"geocode_address","description":"Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, s"},{"name":"calculate_route","description":"Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time"},{"name":"isochrone_build","description":"Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a"},{"name":"seed_build","description":"Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, "},{"name":"delete_route","description":"Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, p"},{"name":"analyze_routes","description":"Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no vis"},{"name":"tasks_cancel","description":"Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the "},{"name":"tasks_get","description":"Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id. next_action is sle"},{"name":"tasks_result","description":"Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task st"},{"name":"set_map_state","description":"Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Ses"},{"name":"get_map_selection","description":"Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from re"},{"name":"load_analysis_panel","description":"Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze re"},{"name":"configure_map","description":"Updates durable map settings on the Territory Solution and refreshes the live map: project_name (map heading), loaded_part_layers ([] hides ZIP/part outlines; b"},{"name":"show_map_overlay","description":"Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer"},{"name":"export_geojson","description":"Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes wi"},{"name":"import_geojson","description":"Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and "},{"name":"ezt","description":"Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_han"}],"package":null,"toolSurface":{"id":"ts_fhdcws7k8t4w","endpointId":"ep_vmnrghzkstau","hash":"845ace7deee1ac8ba02c72d3645e251e9738a7c27e392693561686c6e68f9efe","toolCount":47,"serverName":"ezt-mcp","serverVersion":"0.2.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-09T19:25:45.515Z","lastSeenAt":"2026-10-10T13:24:50.213Z","observations":4,"toolNames":["get_map_visualization","get_guidance","discover_intent","workflow_advisor","ep_search","ep_list_topics","ep_graph_traverse","ensure_map_viewer","submit_feedback","query_parts","direct_build","auto_build","cluster_points","schedule_visits","account_build","realign","delete_tal","delete_territory","territory_split","territory_merge","territory_rebalance","extract_tal_branch","reintegrate_branch","request_part_selection","get_part_selection","create_territory_from_parts","analyze","ingest_accounts","request_account_upload","request_assignment_upload","geocode_address","calculate_route","isochrone_build","seed_build","delete_route","analyze_routes","tasks_cancel","tasks_get","tasks_result","set_map_state","get_map_selection","load_analysis_panel","configure_map","show_map_overlay","export_geojson","import_geojson","ezt"],"distinctSurfaces":5},"endpointFacts":[{"id":"ep_vmnrghzkstau","url":"https://mcp.easyterritory.ai","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T19:25:45.539Z","auth":{"observedAt":"2026-10-09T19:25:45.724Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://mcp.easyterritory.ai/.well-known/oauth-protected-resource","resource":"https://mcp.easyterritory.ai/","authorizationServers":["https://mcp.easyterritory.ai/"],"scopesSupported":["ezt.mcp"]},"authorizationServer":{"url":"https://mcp.easyterritory.ai/.well-known/oauth-authorization-server","issuer":"https://mcp.easyterritory.ai/","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none","client_secret_post","client_secret_basic"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-09T19:25:45.917Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.easyterritory.ai","issuer":{"commonName":"GeoTrust TLS RSA CA G1","organization":"DigiCert Inc"},"validFrom":"2026-08-11T00:00:00.000Z","validTo":"2027-02-11T23:59:59.000Z","daysToExpiry":124,"sanCount":1,"fingerprint256":"46:28:04:BA:3A:F7:14:9C:B0:49:BA:00:EE:B0:FA:87:00:37:1D:D4:92:ED:48:27:AB:61:6D:DE:1B:57:51:8E"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"ai.easyterritory/ezt-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/ai.easyterritory%2Fezt-mcp","firstSeenAt":"2026-09-30T07:18:42.653Z","fetchedAt":"2026-10-08T22:20:31.748Z","normalizedAt":"2026-10-08T22:20:31.748Z"}]},"firstSeenAt":"2026-09-30T07:18:42.653Z","updatedAt":"2026-10-10T13:27:25.686Z"}