utility-network-mcp
An MCP server that lets AI assistants (Claude Desktop, Claude Code, VS Code, Cursor, and others) work with an Esri ArcGIS Utility Network published on ArcGIS Enterprise — run traces, find dirty subnetworks, summarise errors, and inspect associations through the UtilityNetworkServer REST API.
Not affiliated with or endorsed by Esri. ArcGIS and ArcGIS Utility Network are trademarks of Esri.
Tools
| Tool | Type | What it answers |
|---|---|---|
describe_network |
read | Domain networks, tiers, network attributes, categories, system layers |
list_trace_configurations |
read | Named trace configurations stored in the service |
trace |
read | Connected / upstream / downstream / subnetwork / isolation / shortest path / loops — returns a summary by asset group and type, not 100k raw elements |
query_associations |
read | Containment, attachment and connectivity associations for given features |
query_subnetworks |
read | Rows from the Subnetworks table (e.g. ISDIRTY = 1) |
dirty_area_summary |
read | Dirty areas grouped by Status, decoded into pending edits vs. real errors |
network_moments |
read | Whether topology is valid; when it was last enabled |
job_status |
read | Poll an async job |
validate_network_topology |
write | Only when UN_ALLOW_WRITES=true, and each call needs confirm=true |
update_subnetwork |
write | Same gating as above |
Install
pip install utility-network-mcp # or: uvx utility-network-mcp
utility-network-mcp --selftest # offline checks
Configure
| Variable | Required | Meaning |
|---|---|---|
UN_FEATURE_SERVICE_URL |
yes | https://host/server/rest/services/<Service>/FeatureServer |
UN_PORTAL_URL |
for login auth | Portal URL |
UN_CLIENT_ID / UN_CLIENT_SECRET |
option A | OAuth app (client credentials) |
UN_USERNAME / UN_PASSWORD |
option B | Portal login via generateToken (not for SAML-only portals) |
UN_TOKEN |
option C | Pre-issued token |
UN_DEFAULT_VERSION |
no | Default sde.DEFAULT |
UN_ALLOW_WRITES |
no | true registers the write tools |
UN_MAX_IDS |
no | Sample globalIds per group in summaries (default 25) |
Claude Desktop / Claude Code
{
"mcpServers": {
"utility-network": {
"command": "uvx",
"args": ["utility-network-mcp"],
"env": {
"UN_FEATURE_SERVICE_URL": "https://gis.example.com/server/rest/services/Electric/FeatureServer",
"UN_PORTAL_URL": "https://gis.example.com/portal",
"UN_CLIENT_ID": "...",
"UN_CLIENT_SECRET": "..."
}
}
}
}
Requirements and licensing
- ArcGIS Enterprise with the utility network published as a feature service with the Utility Network capability (enterprise deployment; file/mobile geodatabase networks have no REST API).
- Read tools (query, trace) don't need the ArcGIS Advanced Editing user type extension. The write tools do.
Safety
Read-only by default. Write tools need both the server switch and an explicit per-call confirmation, so the agent must ask a human first. Use an account scoped to the one service; never the utility network owner account.
Design notes
See the companion skill's references/mcp/03-building-a-utility-network-mcp-server.md in this repository for the design, REST shapes, auth patterns and pitfalls.
Release files for utility-network-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| utility_network_mcp-0.1.0.tar.gz | 10.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| utility_network_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.3 kB
Release files / utility_network_mcp-0.1.0.tar.gz
| Download URL | utility_network_mcp-0.1.0.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e898c6f345c241e0e57038152a1d56e29a00ac539dd431161439a84ec35bb21a
|
|
BLAKE2b-256 checksum How to use checksums |
e54527f9e53b837d5958629e80ec20320dd8a333a5809e36d5cdd965b4df4f09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency logRelease files / utility_network_mcp-0.1.0-py3-none-any.whl
| Download URL | utility_network_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
21352b06268544441d763213a59c45de5aa0529a73e84703d81b0ae948e07ccc
|
|
BLAKE2b-256 checksum How to use checksums |
d477bb28b629f368d8d21be2e765b5c4ca1f71af5834c0b6da06bb5fa682809a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency log