Skip to main content

NetOps API Navigator

Build Python Package Knowledge DB License: MIT Python 3.12+

MCP server for HPE Aruba Networking Central and the HPE GreenLake Platform. It gives an MCP client a graph-backed API catalog, live Central/GreenLake API calls when credentials are configured, and a reusable Python script library for network automation workflows.

The current agent-facing discovery surface is graph-first. Routine endpoint, schema, CLI/YANG, and topology lookup should use the focused graph aliases (query_fts, query_api_schema, query_yang, query_topology) before falling back to broad query_graph Cypher. Compiler artifacts can be enabled for provenance and release-health diagnostics, but they are not a separate endpoint discovery tool surface.

What It Provides

  • OpenAPI discovery for Central and GreenLake from a pre-built LadybugDB graph.
  • Focused Cypher tools for API/schema traversal, full-text search, topology, and YANG/CLI reverse lookup.
  • Authenticated Central and GreenLake API tools in connected mode.
  • Stateless pre-flight API validation against the graph before live API calls.
  • A script library with seed scripts, editable saved scripts, and optional execution with central_helpers injected.
  • Discovery-only and read-only modes for safer review and audit workflows.
  • Optional compiler/v2 projection support for smoke testing, provenance, and graph-health diagnostics.
  • Optional runtime-hydration foundation for graph-backed planning of future live-state observations.

Architecture

MCP client
  |
  | stdio JSON-RPC
  v
FastMCP server
  |
  |-- graph tools
  |     query_fts, query_api_schema, query_yang, query_topology
  |     query_graph, write_graph, get_raw_schema
  |
  |-- live API tools, only with credentials
  |     call_central_api, call_greenlake_api
  |
  |-- script tools
  |     list_scripts, get_script_content, save_script
  |     execute_script, only with credentials
  |
  |-- optional compiler tools
  |     get_openapi_source_detail, get_compiler_graph_health
  |
  |-- optional runtime hydration tools
  |     get_runtime_hydration_status, list_runtime_hydration_candidates
  |
  |-- resources
        api://endpoint-catalog, docs://endpoint-catalog
        graph://schema, graph://seed-status
        docs://central/overview, docs://script-writing-guide
        docs://config-workflows, docs://vsg/list, docs://vsg/{section_id}
        script://seeds

The graph has three main layers:

  • Knowledge layer: build-time API and documentation graph nodes such as ApiEndpoint, Parameter, RequestBody, Response, SchemaComponent, Property, YangPath, CliCommand, DocSection, and Script.
  • Domain layer: runtime network state such as Org, SiteCollection, Site, Device, DeviceGroup, and topology edges populated by seed scripts.
  • Runtime hydration layer: opt-in provenance nodes such as HydrationRun, RuntimeObservation, RuntimeObservedObject, RuntimeObservedField, and RuntimeFact, plus generic RuntimeEntity highway nodes that attach future live observations back to the API graph.

Quick Start

Prerequisites:

  • uv for the native Python path, or Docker for the container path.
  • HPE Aruba Networking Central credentials for connected mode.
  • Optional GreenLake Platform credentials, otherwise GreenLake uses the Central credentials when possible.

Native Python Installation (Windows x64, Apple Silicon, and Linux x64)

This is the production path for local use without Docker or WSL. It runs the server directly on the host and stores data in the operating system's normal per-user application directories.

Install uv with winget install --id=astral-sh.uv -e on Windows, brew install uv on macOS, or the documented installer on Linux, then install the exact release from PyPI:

uv tool install --python 3.12 --no-build netops-api-navigator==0.3.1
netops-api-navigator doctor --profile workshop --skip-credentials

uv installs Python 3.12 when it is not already available. The GitHub release contains the wheel, locked constraints.txt, checksums, source archive, and a ready-to-open VS Code workshop bundle with all supported-platform dependency wheels. The bundle does not need PyPI access after download. Separate .msi, .exe, or .pkg installers are intentionally not required.

The starter configuration is documented in workshop/README.md. It prompts for credentials through VS Code password inputs and launches the strict GET-only workshop profile.

Discovery-Only Docker Profile

Use this first when you want API discovery and script authoring without granting network credentials. Live API tools and script execution are intentionally not registered in this mode.

{
  "mcpServers": {
    "netops-api-navigator-discovery": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull", "always",
        "-v", "central-scripts:/scripts/library",
        "ghcr.io/tbelz/netops-api-navigator:main"
      ]
    }
  }
}

Connected Docker Profile

Add credentials to enable call_central_api, call_greenlake_api, seed-script startup, and execute_script.

{
  "mcpServers": {
    "netops-api-navigator": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull", "always",
        "-v", "central-scripts:/scripts/library",
        "ghcr.io/tbelz/netops-api-navigator:main",
        "--central-url", "https://de1.api.central.arubanetworks.com",
        "--client-id", "REPLACE_WITH_YOUR_CENTRAL_CLIENT_ID",
        "--client-secret", "REPLACE_WITH_YOUR_CENTRAL_CLIENT_SECRET",
        "--glp-client-id", "REPLACE_WITH_YOUR_GLP_CLIENT_ID",
        "--glp-client-secret", "REPLACE_WITH_YOUR_GLP_CLIENT_SECRET"
      ]
    }
  }
}

Add --read-only after the credentials to keep live API access network-side read-only:

"--read-only"

Claude Desktop reads this shape from ~/Library/Application Support/Claude/claude_desktop_config.json on macOS and %APPDATA%\Claude\claude_desktop_config.json on Windows. Claude Code uses the same mcpServers schema in ~/.config/claude-code/config.json.

CLI arguments are visible to local process/container inspection tools. On shared workstations, prefer an env file or platform secret store.

Configuration

You can pass the same settings through the host environment, Docker -e flags, an --env-file, or the CLI flags shown above.

CENTRAL_BASE_URL=https://de1.api.central.arubanetworks.com
CENTRAL_CLIENT_ID=your_client_id
CENTRAL_CLIENT_SECRET=your_client_secret
GREENLAKE_CLIENT_ID=your_glp_client_id
GREENLAKE_CLIENT_SECRET=your_glp_client_secret

Copy the exact account-specific Base URL from Central → Menu → API Gateway → REST API. Do not reuse a Lab or another tenant's cluster URL; a valid token sent to the wrong Central cluster can still be rejected with HTTP 403.

Variable Required Default Description
CENTRAL_BASE_URL Connected mode none Central API base URL
CENTRAL_CLIENT_ID Connected mode none Central OAuth2 client ID
CENTRAL_CLIENT_SECRET Connected mode none Central OAuth2 client secret
GREENLAKE_CLIENT_ID No Central client ID GreenLake OAuth2 client ID
GREENLAKE_CLIENT_SECRET No Central client secret GreenLake OAuth2 client secret
GLP_BASE_URL No https://global.api.greenlake.hpe.com GreenLake API base URL
GLP_INCLUDED_SLUGS No default set Comma-separated GreenLake service slugs, or * for all
MCP_PROFILE No full full or fail-closed workshop profile
READ_ONLY No false Refuse mutating Central/GreenLake HTTP methods
KNOWLEDGE_RELEASE_REPO No this repository GitHub repo (owner/name) to download knowledge DB releases from
KNOWLEDGE_RELEASE_TAG No newest knowledge-db-* release Immutable Knowledge DB release pin
KNOWLEDGE_ASSET_SHA256 No GitHub asset digest Optional explicit archive digest
GRAPH_DB_PATH No per-user application data Runtime LadybugDB graph path
MCP_KNOWLEDGE_PROJECTION No legacy Runtime projection: legacy, v2, or compiler
MCP_COMPILER_TOOLS No false Register compiler provenance and health tools
MCP_RUNTIME_HYDRATION No false Register the opt-in runtime hydration foundation
MCP_COMPILER_DB_PATH No sibling knowledge_db_compiler Compiler projection sidecar path
MCP_COMPILER_AST_DB_PATH No sibling knowledge_db_ast Compiler AST sidecar path
SCRIPT_LIBRARY_PATH No per-user application data Script library path
INVENTORY_CACHE_TTL No 300 Runtime inventory cache TTL in seconds

Native and Docker starts download the newest Knowledge DB release automatically when the runtime graph does not yet exist. Existing runtime graphs are reused. Set KNOWLEDGE_RELEASE_TAG for an immutable workshop snapshot. Downloads use the SHA-256 digest reported by GitHub and are staged before installation.

Partial Central credentials are treated as a configuration error. Provide all of CENTRAL_BASE_URL, CENTRAL_CLIENT_ID, and CENTRAL_CLIENT_SECRET for connected mode, or omit all three for discovery-only mode.

Runtime Modes

Discovery-Only

No Central credentials are configured. The server exposes the knowledge graph, documentation resources, write_graph, and script CRUD tools. It does not register call_central_api, call_greenlake_api, or execute_script.

OpenAPI files for explorers and API tools

The daily scrape also publishes validated, self-contained OpenAPI 3.1.0 JSON files. Download a file or enter its stable URL into an OpenAPI 3.1-compatible tool:

Export Current URL
Combined Central API central-openapi.json
Monitoring, reporting, troubleshooting and token generation central-monitoring-openapi.json
Configuration central-config-openapi.json
Scrape date, corrections, validation and checksums export-report.json

All references needed to interpret each API definition are inside that file. The exporter corrects unambiguous source formatting errors and keeps conflicting models separate. Source descriptions and provenance are retained on operations. These files contain Central APIs; GreenLake is not included.

Non-deprecated stable APIs are preferred over their explicitly superseded alpha counterparts. The exporter removes an alpha operation only when its deprecation notice names an available stable successor with the same method, resource and servers. Other alpha APIs remain included. The report records every replacement; the original schemas remain in the raw archive.

The workflow runs daily at 04:00 UTC (actual start times may be later). scraped_at in the report identifies the source data, while info.version is a content fingerprint, not the upstream API's version. The scrape date does not guarantee that HPE's documentation matches the newest product release. A new valid publication updates all files together. If scraping, validation or export fails, the current URLs retain the last successful publication: check the report's date for freshness.

Immutable snapshots appear as openapi-* entries in GitHub Releases. The existing knowledge-db-* releases and their central-spec-cache.tar.gz raw-data archives remain available. The raw archive is not an explorer import file.

See OpenAPI export development and publication for local verification, the transformation policy and publication setup.

Connected

Central credentials are configured and validated during startup. The server registers live API calls, script execution, and runtime seed execution. GreenLake tools are registered when effective GreenLake credentials validate.

Read-Only

Set READ_ONLY=true or pass --read-only. The server rejects POST, PUT, PATCH, and DELETE through live API tools and through script helpers. Mutating endpoints are filtered out of api://endpoint-catalog. Local graph writes, script saves, and script execution remain available, so this is an agent guardrail rather than a sandbox for untrusted script authors.

Workshop

Set MCP_PROFILE=workshop or pass --profile workshop for the smallest, fail-closed surface intended for guided onboarding. The profile always enables network read-only mode and exposes graph/API discovery, live topology queries, a secret-free status tool, and—when valid Central credentials are present—GET-only Central API calls plus bounded collection pagination. Two trusted package seeds populate sites, devices, groups, and L2 links in the local graph at startup. User-authored script creation/execution, direct local graph writes, GreenLake, runtime hydration, compiler tools, and prompts remain unavailable.

Run netops-api-navigator doctor --profile workshop before connecting an MCP client. Add --skip-credentials to validate only the local installation. The prebuilt workshop/ starter is included as a ZIP in tagged GitHub releases.

get_server_status.central_connected=true confirms OAuth token issuance only; Central still authorizes each API endpoint for the token's workspace and user role. Use topology_sync and graph://seed-status to detect endpoint-level 403 errors or partial topology refreshes.

Compiler / v2 Smoke

Recent PRs moved v2 API discovery back onto the shared graph aliases and removed the parallel compiler endpoint/context discovery tools. Use this profile to load the compiler/v2 runtime graph and enable the remaining compiler diagnostics:

{
  "mcpServers": {
    "netops-api-navigator-v2-smoke": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull", "always",
        "-v", "netops-api-navigator-v2-data:/data",
        "-v", "central-scripts:/scripts/library",
        "-e", "KNOWLEDGE_RELEASE_REPO=tbelz/netops-api-navigator",
        "-e", "MCP_KNOWLEDGE_PROJECTION=v2",
        "-e", "MCP_COMPILER_TOOLS=true",
        "ghcr.io/tbelz/netops-api-navigator:main"
      ]
    }
  }
}

MCP_COMPILER_TOOLS=true adds only:

  • get_openapi_source_detail
  • get_compiler_graph_health

It does not add find_api_endpoints, get_api_endpoint_context, or get_api_schema_context; those tools were removed. Use query_fts, query_api_schema, and query_yang for normal discovery.

Runtime Hydration Foundation

Set MCP_RUNTIME_HYDRATION=true to register the opt-in runtime hydration foundation. This adds status and candidate-planning tools plus a bounded GET-only hydrate_runtime_endpoint executor that calls a selected endpoint and persists raw runtime observations with provenance back to the API graph. Runtime observations can be inspected with list_runtime_observations and get_runtime_observation, and clear-identity observations can be promoted into generic RuntimeFact nodes with materialize_runtime_facts. Agents can also ask plan_runtime_hydration for a read-only plan that combines endpoint capability, supplied parameters, provider readiness, existing observations, freshness, and materialized facts before making live calls. Clear-identity facts can be rolled up with promote_runtime_entities into generic RuntimeEntity highways keyed by provider, entity type, and identity key. This keeps the common path fast without requiring one hand-written table per Central domain.

Tool Surface

Graph And Discovery Tools

Tool Mode Purpose
query_fts Always Full-text search over endpoint, property, doc, script, and runtime indexes. Use this for keyword-first discovery.
query_api_schema Always Focused Cypher over endpoints, parameters, request/response bodies, schema components, properties, and API/YANG edges.
query_yang Always YANG path, CLI command, and config-profile reverse lookup.
query_topology Always Runtime topology graph queries over orgs, sites, devices, groups, and neighbor edges.
query_graph Always Broad read-only Cypher escape hatch for cross-domain graph queries.
get_raw_schema Always Fetch raw OpenAPI JSON for known SchemaComponent IDs when graph fields are not enough.
write_graph Full profile Local graph writes for enrichment and script metadata.

The read tools support batch mode with queries=[...]. Responses are capped to keep MCP payloads manageable; oversized cells return truncation envelopes with next-step hints.

Live API Tools

Tool Mode Purpose
call_central_api Connected Authenticated Central REST call with graph-backed pre-flight validation.
paginate_central_api Connected workshop Complete, bounded GET-only Central collection fetch with cursor/offset auto-detection.
call_greenlake_api Connected plus GLP credentials Authenticated GreenLake Platform REST call with validation.

Script Tools

Tool Mode Purpose
list_scripts Always List saved and seed scripts, optionally by tag.
get_script_content Always Read a script from the library.
save_script Always Save or update a reusable Python script.
execute_script Connected Run a script with Central/GreenLake helpers injected.

Compiler Tools

Tool Mode Purpose
get_openapi_source_detail MCP_COMPILER_TOOLS=true Resolve a compiler projection row back to projection data, provenance, AST metadata, and raw OpenAPI source.
get_compiler_graph_health MCP_COMPILER_TOOLS=true Run bounded traversal-health samples against compiler artifacts.

Runtime Hydration Tools

Tool Mode Purpose
get_runtime_hydration_status MCP_RUNTIME_HYDRATION=true Report the opt-in hydration stage, graph availability, provider readiness, and schema tables.
list_runtime_hydration_providers MCP_RUNTIME_HYDRATION=true List supported provider boundaries, aliases, configured status, and hydration client availability.
list_runtime_hydration_candidates MCP_RUNTIME_HYDRATION=true List GET endpoints that can be planned for future generic hydration from the compiled API graph.
plan_runtime_hydration MCP_RUNTIME_HYDRATION=true Plan whether to use facts, materialize observations, hydrate, refresh, configure a provider, or ask for parameters.
hydrate_runtime_endpoint MCP_RUNTIME_HYDRATION=true plus credentials Execute one bounded GET hydration and persist raw observation/provenance nodes.
list_runtime_observations MCP_RUNTIME_HYDRATION=true List previously persisted runtime observations without calling live APIs.
get_runtime_observation MCP_RUNTIME_HYDRATION=true Fetch one observation with observed objects and fields.
get_runtime_hydration_state MCP_RUNTIME_HYDRATION=true Report whether hydrated state for an endpoint is missing, fresh, stale, or unknown.
materialize_runtime_facts MCP_RUNTIME_HYDRATION=true Promote observed objects with clear identity into generic RuntimeFact nodes.
list_runtime_facts MCP_RUNTIME_HYDRATION=true List materialized facts by endpoint, entity type, or identity key.
get_runtime_fact MCP_RUNTIME_HYDRATION=true Fetch one materialized fact with provenance back to observation, run, and endpoint.
promote_runtime_entities MCP_RUNTIME_HYDRATION=true Roll clear-identity facts into generic provider-scoped RuntimeEntity highway nodes.
list_runtime_entities MCP_RUNTIME_HYDRATION=true List generic entity highways by provider, endpoint, entity type, or identity key.
get_runtime_entity MCP_RUNTIME_HYDRATION=true Fetch one generic entity highway with fact-level provenance.
  1. Read api://endpoint-catalog or docs://endpoint-catalog for a path-tree overview when the endpoint family is already obvious.
  2. Use query_fts when starting from a keyword such as a feature name, field, config concept, or CLI term.
  3. Use query_api_schema to inspect exact parameters, request bodies, response schemas, COMPOSED_OF, PROPERTY_OF_TYPE, and HAS_ITEM_SCHEMA traversal.
  4. Use query_yang when mapping YANG paths, CLI commands, or config-profile concepts back to API endpoints and schema properties.
  5. Use get_raw_schema only for a known component when the structured graph omits source detail that you need.
  6. In connected mode, call call_central_api or call_greenlake_api after validating the method, path, parameters, and body shape.

Knowledge DB Startup

When KNOWLEDGE_RELEASE_REPO is set, the server downloads the latest released knowledge artifact before opening a new graph. Existing runtime graphs are not automatically refreshed, because they also contain local state. MCP_KNOWLEDGE_PROJECTION=legacy uses knowledge_db.tar.gz; v2 or compiler uses knowledge_db_compiler.tar.gz.

The local manifest records the release tag, selected artifact, archive member, and projection so the server does not confuse same-release legacy and v2 installs. If GitHub is unavailable but a local DB exists, startup keeps using the local copy. WAL corruption and short page reads stop startup with a diagnostic; the server never deletes the database or its sidecars to hide the error.

For an explicit restore or knowledge upgrade, stop every process using the graph, preserve the entire graph directory (including .wal, .shadow, and manifest.json), and select a new empty GRAPH_DB_PATH in a separate directory. The next start installs a verified snapshot there. This restores knowledge only; local graph changes must be recreated or recovered separately. Do not remove only the WAL or mix an old WAL with a replacement database.

On STDIO EOF or SIGTERM, the server cancels automatic seed scripts, drains graph IPC requests, and releases the database. Native statements already executing must finish before close; SIGKILL or a client grace period shorter than that work can still prevent cleanup. See the restart investigation.

Development

Use uv for local Python commands.

uv sync
uv run netops-api-navigator

Fast local test loops:

bash scripts/dev_test.sh
bash scripts/test_changed.sh

The full suite is slower and is normally left to CI or broader validation:

uv run pytest

Build the Docker image locally:

docker build -t netops-api-navigator .

Python Releases

Every pull request builds the Python distribution and smoke-tests the exact wheel on Windows x64, macOS Apple Silicon, and Linux. These jobs run the installed doctor command and a real MCP stdio initialize/tool-list handshake.

Pushing a version tag such as v0.3.0 runs the same gates and, after they pass, publishes the wheel and source distribution to PyPI using Trusted Publishing. It also creates a GitHub release containing the distributions, locked runtime constraints, checksums, and the ready-to-open workshop ZIP. Repository and PyPI Trusted Publishing must be configured before the first tagged release.

See docs/DEVELOPMENT.md for build-pipeline details and test-marker guidance. Architecture decisions live in docs/adr/.

License

MIT

Metadata

Release files for netops-api-navigator 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for netops-api-navigator 0.3.1
File Size Uploaded
netops_api_navigator-0.3.1.tar.gz 225.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for netops-api-navigator 0.3.1
File Interpreter ABI Platform
netops_api_navigator-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 489.8 kB

Release files / netops_api_navigator-0.3.1.tar.gz

Download URL netops_api_navigator-0.3.1.tar.gz
Size 225.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8e4551e809cea7f52a60b826e31ec6f6a5f855bdd54044d3346fdd722f800b2b
BLAKE2b-256 checksum
How to use checksums
6bbb34c963e82aae082e2b2438f540257b9b9e06c4f2b7ebf953db5ea66d13cc
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 Oct 15, 2026.

Transparency log

Release files / netops_api_navigator-0.3.1-py3-none-any.whl

Download URL netops_api_navigator-0.3.1-py3-none-any.whl
Size 264.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d963e1272d18e01dade1df77ffc05a8facb11b825f51be9c0d00fc82884e9833
BLAKE2b-256 checksum
How to use checksums
da00ff9fbeffc96c5e5a454248c7eb36658bc35c4c9462a3a1213c9acb874650
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 Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.2

2 release files

This release

0.3.1 This release

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page