Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

EasyTerritory MCP

REMOTE · MCP.EASYTERRITORY.AI · SCANNED OCT 7

Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.

+3 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability69
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 21018 tokens (~404/item across 52 items; 47 tools + 5 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management26
  • Stability check failed: schema churn in the 8 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage72
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 2% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_tal" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 49 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the EasyTerritory MCP server?

EasyTerritory MCP is a hosted endpoint at https://mcp.easyterritory.ai/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.easyterritory.ai

# add to Claude Code
claude mcp add --transport http ai-easyterritory-ezt-mcp 'https://mcp.easyterritory.ai/'
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-easyterritory-ezt-mcp": {
      "url": "https://mcp.easyterritory.ai/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-easyterritory-ezt-mcp": {
      "type": "http",
      "url": "https://mcp.easyterritory.ai/"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ai-easyterritory-ezt-mcp]
url = "https://mcp.easyterritory.ai/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-easyterritory-ezt-mcp": {
      "type": "remote",
      "url": "https://mcp.easyterritory.ai/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-easyterritory-ezt-mcp --url 'https://mcp.easyterritory.ai/' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ai-easyterritory-ezt-mcp:
    url: "https://mcp.easyterritory.ai/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-easyterritory-ezt-mcp": {
      "Transport": "http",
      "Url": "https://mcp.easyterritory.ai/"
    }
  }
}
# add to Vellum
assistant mcp add ai-easyterritory-ezt-mcp -t streamable-http -u 'https://mcp.easyterritory.ai/'
// mcp.json
{
  "mcpServers": {
    "ai-easyterritory-ezt-mcp": {
      "type": "http",
      "url": "https://mcp.easyterritory.ai/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 7 Oct 26 +1
    • Stability: 0.17 → fail ▼ security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “analyze” rewrote its description, which is the text the model reads security
    • Tool “delete_territory” rewrote its description, which is the text the model reads security
    • Tool “ensure_map_viewer” rewrote its description, which is the text the model reads security
    • Tool “set_map_state” rewrote its description, which is the text the model reads security
    • Tool “territory_merge” rewrote its description, which is the text the model reads security
    • Tool “territory_rebalance” rewrote its description, which is the text the model reads security
  • 4 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Sept 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 29 Sept 26 72

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 9 Oct 2026 · Probed https://mcp.easyterritory.ai/

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.easyterritory.ai CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US 11 Aug 2026 11 Feb 2027 RSA 2048 SHA256-RSA 9e95ccc46c8a973dd1d2d3db065a823
SANs: mcp.easyterritory.ai
CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US 2 Nov 2017 2 Nov 2027 RSA 2048 SHA256-RSA d07782a133fc6f9a57296e131ffd179
CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US 1 Aug 2013 15 Jan 2038 RSA 2048 SHA256-RSA 33af1e6a711a9a0bb2864b11d09fae5

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.easyterritory.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
easyterritory.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer realm="EZT MCP", resource_metadata="https://mcp.easyterritory.ai/.well-known/oauth-protected-resource", scope="ezt.mcp"

Bearer realm="EZT MCP", resource_metadata="https://mcp.easyterritory.ai/.well-known/oauth-protected-resource", scope="ezt.mcp"

Protected resource metadata

Document https://mcp.easyterritory.ai/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.easyterritory.ai/
Authorisation server https://mcp.easyterritory.ai/

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.easyterritory.ai/ Verified 200
http (plaintext) http://mcp.easyterritory.ai/ HTTPS enforced 301 https://mcp.easyterritory.ai/
MCP tools · 47 exposed · ~20,266 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
submit_feedback ~191

[Tier 2 — Quality Feedback] When: workflow blocked, partial, workaround required, confusing tool response, or missing capability/docs. Prerequisites: none. Next: continue or end session after acknowledgement. Scenarios: GC-006. No secrets, credentials, raw customer data, or PII. Do not paste Territory Solution JSON, GeoJSON FeatureCollections, or account/CSV tables — those blocks are stripped.

NameTypeReqDescription
category–––
client_name–––
client_version–––
confidence–––
context_summary–––
correlation_id–––
expected_capability–––
include_contextboolean––
related_product_area–––
related_tool–––
session_id–––
severity–––
suggested_improvement–––
user_goalstringyes–
what_happenedstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

tasks_cancel ~106

[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/cancel. Use only when this mirror appears in tools/list; Tasks-capable clients use tasks/cancel instead. Prerequisite: task_id from the immediately preceding async submission. Returns the same Task status fields and EZT poll metadata as the native method. Cancellation is cooperative; confirm TS unchanged or partial per the originating tool contract. Scenarios: OP-001.

NameTypeReqDescription
task_idstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

tasks_get ~252

[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/get. Use only when this mirror appears in tools/list; Tasks-capable clients use tasks/get. Prerequisite: task_id from the immediately preceding async submission. Polling never starts work. next_action and sleep_ms sit on this document (the same fields as the submit result) and are repeated under _meta. Follow next_action exactly: sleep_and_poll means sleep the single authoritative sleep_ms value, call tasks_get once, then re-read both fields; consume_result means call tasks_result once now; stop_error means stop. status=cancelled is a user stop — do not resubmit the same tool unless asked. Never sleep on estimated_remaining_ms and never poll HTTP /result for status. While a task is still queued, _meta also carries queue_position (1-based within its worker lane), queue_depth, queue_lane (io|compute), and estimated_start_ms — report these to explain a wait; estimated_start_ms is advisory and never a sleep duration. The result is the same Task status document returned by native tasks/get. Scenarios: OP-002, tool-only MCP clients.

NameTypeReqDescription
task_idstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

tasks_result ~139

[Tier 2 — MCP Tasks mirror] Tool-only client equivalent of native tasks/result. Call exactly once after tasks_get returns status=completed and _meta.next_action=consume_result. Prerequisite: task_id from that completed Task. Returns the originating tool's terminal handle-only result (ts_handle, counts, timings, map binding/shortcut); it never returns inline TS when a handle exists. Do not poll this operation while working. After build results, pass ts_handle or the same task_id as job_id to analyze with explicit tal_ids; never resubmit a build to recover from an Analyze lookup error.

NameTypeReqDescription
task_idstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

territory_merge ~424

[Tier 1 — Minimal-Disruption Merge] When: merge two adjacent territories and rebalance with minimal disruption — including a rep who quits or leaves (their territory is absorbed by its neighbors) and going from N to N-1 territories on an existing alignment. Pass the territory that goes away as territory_id_b and one adjacent neighbor as territory_id_a (it keeps its id); the same job then rebalances every remaining territory, so do not follow it with territory_rebalance. Not delete_territory (that leaves the parts unassigned) and not a new auto_build (that discards the alignment). One call removes one territory. On NON_ADJACENT_TERRITORIES pick another neighbor. Prerequisites: adjacent territory_id_a and territory_id_b in source TAL. Open MC preferred args: map_session_id + source_tal_id + territory_id_a/b (live session TS is authoritative — do not repost GeoJSON). Headless: ts_handle or Compact/GeoJSON ts. Modern form-capable clients may be prompted in-band for missing ids / workload dwell; legacy hosts keep CLARIFICATION_REQUIRED. Next: verify merged TAL in MC, analyze. Scenarios: MG-001..005, EV-001.

NameTypeReqDescription
balance_tolerance–––
disruption_weight–––
dwell_time–––
guidance_handle–––
map_session_id–––
new_tal_label–––
objective–––
part_layer–––
point_layer–––
repair_policystring–Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). r…
source_tal_id–––
territory_id_a–––
territory_id_b–––
ts–––
ts_handle–––
visit_frequency_field–––

Structured output declared, but exposes no named fields.

No examples provided.

territory_rebalance ~467

[Tier 1 — Minimal-Disruption Rebalance] When: underlying account data changed but alignment should stay close to current (MDR). Open MC preferred args: map_session_id + source_tal_id (+ objective/dwell) — the live session TS is authoritative; do not invent a ts_handle or repost multi-MB GeoJSON when a map session is open. Headless: ts_handle or Compact TS v2 / GeoJSON ts (both valid). Prerequisites: source TAL, refreshed point_layer; viewer connected for MC-first. point_layer may be omitted: the source TAL's build point layer, else the TS's only point layer, is used. CLARIFICATION_REQUIRED details.reason=ambiguous_point_layer (pass point_layer from details.point_layers) or zero_workload (workload_bias>0 but no account maps to a part — check point_layer and dwell; never rerun as is). The source assignment is the non-regression baseline: if no generated candidate improves the requested objective, the derived TAL stays unchanged and returns NO_IMPROVING_REBALANCE_FOUND. Read solver_diagnostics for source/generated/accepted objectives and convergence. Modern form-capable clients may be prompted in-band for missing source_tal_id / uninferable part_layer / unresolved workload dwell; legacy hosts keep CLARIFICATION_REQUIRED (HITL-025). Next: report retention_pct and diagnostics, then analyze before/after with analysis_panel=single. Scenarios: RB-001..005, EV-003.

NameTypeReqDescription
balance_tolerance–––
disruption_weight–––
dwell_time–––
guidance_handle–––
map_session_id–––
new_tal_label–––
objective–––
part_layer–––
point_layer–––
repair_policystring–Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). r…
source_tal_id–––
ts–––
ts_handle–––
visit_frequency_field–––

Structured output declared, but exposes no named fields.

No examples provided.

territory_split ~328

[Tier 1 — Minimal-Disruption Split] When: split one oversized territory with minimal disruption to the rest of the alignment. Prerequisites: existing TAL with target territory; viewer connected for MC-first. Open MC preferred args: map_session_id + source_tal_id + target_territory_id (live session TS is authoritative — do not repost GeoJSON). Headless: ts_handle or Compact/GeoJSON ts. Distinct from auto_build Scoped Split (balanced-from-scratch). Modern form-capable clients may be prompted in-band for missing source/target ids (and unresolved workload dwell); legacy hosts keep CLARIFICATION_REQUIRED. Next: compare derived TAL in MC, analyze disruption_summary. Scenarios: SP-001..004.

NameTypeReqDescription
balance_tolerance–––
disruption_weight–––
dwell_time–––
guidance_handle–––
map_session_id–––
new_tal_label–––
new_territory_label–––
objective–––
part_layer–––
point_layer–––
repair_policystring–Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). r…
source_tal_id–––
target_territory_id–––
ts–––
ts_handle–––
visit_frequency_field–––

Structured output declared, but exposes no named fields.

No examples provided.

workflow_advisor ~602

[Tier 1 — Workflow Advisor] Deterministic read-only next-action advisor for multi-step workflows. When: you know the intent (use discover_intent first if not) and want the validated next tool call instead of guessing the order. Prerequisites: none (static state machine; executes nothing). Pass intent_category (builds: build_from_accounts | account_grouping | known_assignments; edits: realign_existing | restructure; map overlay: load_part_layer for add/show ZIP or part layer; routing: route_stops for driving a known list of stops; reachable areas: reachable_area for a drive-time or drive-distance area around origins, with isochrone_build accepted as an alias; scheduling: periodic_scheduling for a recurring cadence, with schedule_visits accepted as an alias), agent-supplied state (viewer_connected, point_layer, part_layer, tal_present, analysis_fresh; realign adds selection_requested/selection_committed/realign_applied; restructure adds source_tal_id), and optional inputs (builds: part_layer, territory_count, grouping_field, assignments_handle, tal_label; realign: tal_id, moves or realign_operation+part_ids, to_territory_id, analysis_requested; restructure: operation=split|merge|rebalance, source_tal_id, target_territory_id, territory_id_a/territory_id_b; load_part_layer: user_request for ZIP inference; route_stops: route_type=circuit|tour|open_tour, start, stop_sets, end for tour, stops_need_ingest when the stops are not in the TS yet; reachable_area: origins, bands, part_layer, travel_mode=car|truck, origins_need_ingest when the origins are not in the TS yet — the advisor never invents a budget; periodic_scheduling: visit_frequency_field, frequency_unit, dwell_time or dwell_minutes/dwell_hours, daily_capacity or daily_capacity_hours, horizon_days, max_buckets_per_day — the advisor reports cadence/dwell/capacity as missing rather than inventing them). Returns next_tool + drafted next_args, missing_inputs, blocked_by, remaining_steps, guidance_uri, and `guidance` (th…

NameTypeReqDescription
inputs–––
intent_categorystringyes–
state–––

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the EasyTerritory MCP server?

EasyTerritory MCP is listed in the public MCP registry as ai.easyterritory/ezt-mcp. Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map. This page covers its hosted endpoint (https://mcp.easyterritory.ai/).

Is the EasyTerritory MCP server safe to use?

EasyTerritory MCP scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the EasyTerritory MCP server expose?

EasyTerritory MCP exposes 47 tools: get_map_visualization, get_guidance, discover_intent, workflow_advisor, ep_search, and 42 more. Their descriptions and schemas cost roughly 20,266 tokens of context every time the server is loaded.

Does the EasyTerritory MCP server require authentication?

Yes. EasyTerritory MCP asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the EasyTerritory MCP server still maintained?

EasyTerritory MCP is still listed as active in the MCP registry. We last reached this channel on 7 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.