Ask your AI a network question
MCP — the Model Context Protocol — is the open standard AI assistants use to call tools in other systems. Netmon runs the server end of it, on the network monitoring appliance itself. Point Claude, ChatGPT, Codex, Gemini CLI, Cursor, VS Code or anything else that speaks MCP at it, and your assistant can read the devices, interfaces, alerts, syslog, Windows event logs, Suricata IDS events, NetFlow records and packet captures it already collects — and run a ping, a traceroute, an SNMP walk or a port scan when it needs one. Thirty-six tools, none of which can change a monitored host, all of it running on your own hardware.
- 36 tools, none that change a host
- 3 investigation playbooks
- Claude, ChatGPT, Codex, Cursor and six more
- Scoped tokens you can revoke
- Runs on your own appliance
- Your permissions, your tag restrictions
Try it on demonstration data
The demo server answers from a recorded dataset: ninety devices, a week of logs, and a pile of Suricata alerts worth arguing about. Point a client at it and ask the things you would ask your own monitoring. It costs nothing and takes about a minute to set up.
| Client | How to add it |
|---|---|
| Claude Code | claude mcp add --transport http netmon-demo https://netmon.com/mcp-demo/mcp |
| Claude Desktop | Settings → Connectors → Add custom connector; paste the URL, authentication None. |
| ChatGPT | Developer mode → Connectors → create; paste the URL, authentication None. Plus, Pro, Business, Enterprise and Edu, on the web. |
| OpenAI Codex CLI, IDE extension and desktop app share one config | codex mcp add netmon-demo --url https://netmon.com/mcp-demo/mcp |
| Cursor | ~/.cursor/mcp.json → {"mcpServers":{"netmon-demo":{"url":"https://netmon.com/mcp-demo/mcp"}}} |
| VS Code (Copilot agent mode) | code --add-mcp '{"name":"netmon-demo","type":"http","url":"https://netmon.com/mcp-demo/mcp"}' |
| Gemini CLI | gemini mcp add --transport http --scope user netmon-demo https://netmon.com/mcp-demo/mcp |
| Cline | ~/.cline/mcp.json → {"mcpServers":{"netmon-demo":{"type":"streamableHttp","url":"https://netmon.com/mcp-demo/mcp"}}} |
| opencode | ~/.config/opencode/opencode.json → {"mcp":{"netmon-demo":{"type":"remote","url":"https://netmon.com/mcp-demo/mcp","enabled":true}}} |
| Kimi Code CLI | /mcp-config in the TUI, or ~/.kimi-code/mcp.json → {"mcpServers":{"netmon-demo":{"transport":"http","url":"https://netmon.com/mcp-demo/mcp"}}} |
| Anything else | It is a standard streamable-HTTP MCP server at https://netmon.com/mcp-demo/mcp, with no authentication. Point your client at it. |
Then ask it something real
“What’s down right now, and how long has it been down?”
“Show me the high-severity IDS alerts from the last week. Is any of it real?”
“Which host is using the most bandwidth, and who is it talking to?”
“Walk the switch on device 8. Which ports are live, and what is plugged into them?”
The demo plays back a recording, so everyone who asks gets the same answers and nothing you type touches a live network. The timestamps roll forward as you read, so it always looks like the last day or so. The devices and addresses in it are invented.
See it work
Two sessions. The first is a walk-through of an ordinary Monday morning, written with demo data and shortened tool output. The second was run against the demo server above, so you can repeat it yourself and get the same answers.
“The internet feels slow at the Windsor office this morning” Chasing a saturated WAN link, from a fleet rollup to the process responsible
The internet feels slow at the Windsor office this morning. Can you figure out what's eating the bandwidth?
I'll start with a fleet overview, then look at who is actually moving traffic.
overwatch_summary(){ "devices": 42, "up": 41, "warning": 1, "down": 0,
"warnings": [
{ "device": "fw-edge-01", "reason": "WAN interface utilization 94% (30-min avg)" }
] }top_bandwidth({ "minutes": 30 }){ "top_talkers": [
{ "ip": "10.10.4.61", "avg_mbps": 612.4, "direction": "outbound" },
{ "ip": "10.10.2.8", "avg_mbps": 88.1, "direction": "internal" },
{ "ip": "10.10.4.23", "avg_mbps": 12.7, "direction": "outbound" },
"…" ] }Your edge firewall is at 94% WAN utilization, and one host — 10.10.4.61 — is responsible for most of it: about 612 Mbps outbound over the last half hour. Let me identify that host.
get_network_entity_info({ "ip": "10.10.4.61" }){ "device_id": 118, "label": "WKS-ENG-14", "ip": "10.10.4.61",
"profile": "Windows Workstation (Agent)", "tags": ["workstation", "engineering"],
"agent": { "enrolled": true, "version": "7.0.20" },
"switch_port": { "device": "core-sw-01", "port": "Gi1/0/14" } }netflow_search({ "ip": "10.10.4.61", "minutes": 30 }){ "flows": [
{ "dst": "203.0.113.181:443", "proto": "tcp", "bytes": "21.4 GB",
"dst_name": "ingest-us2.cloudvault.example" },
{ "dst": "10.10.2.8:445", "proto": "tcp", "bytes": "310 MB" },
"…" ] }The host is WKS-ENG-14, an engineering workstation with the Netmon agent enrolled, patched into core-sw-01 port Gi1/0/14. Nearly all of its traffic — 21.4 GB in 30 minutes — is TLS to a CloudVault backup ingest endpoint. Since the agent is on the box, I can check what's running.
agent_processes({ "device_id": 118 }){ "processes": [
{ "name": "CloudVaultSync.exe", "cpu_pct": 11.2, "read_mb_s": 74.8, "user": "SYSTEM" },
{ "name": "chrome.exe", "cpu_pct": 3.1, "read_mb_s": 0.2 },
"…" ] }Found it. CloudVaultSync.exe on WKS-ENG-14 is reading the disk at ~75 MB/s and pushing it to CloudVault over TLS — this looks like an initial full backup running during business hours, saturating your WAN uplink.
Nothing is broken and nothing looks malicious: the destination is a known backup service, the process runs as SYSTEM as a backup agent would, and the flow pattern is one sustained upload, not scatter-shot. The fix is scheduling, not security — move that workstation's first full backup to an overnight window, or rate-limit the backup client, and the office link frees up immediately.
Nice. Can you make sure we hear about it before the WAN saturates next time?
alerts_list(){ "alerts": [
{ "label": "Device down — all devices", "class": "legacy", "enabled": true },
{ "label": "Syslog: FortiGate critical events", "class": "syslog_log", "enabled": true },
"…" ],
"note": "no interface-utilization alert found for fw-edge-01 WAN" }You have device-down and FortiGate syslog alerts, but nothing watching WAN utilization on fw-edge-01. This session is signed in with read scopes (mcp:devices, mcp:vne, mcp:logs, mcp:alerts), so I can't create alerts for you — that's by design.
An operator can add it in about a minute: on fw-edge-01's device dashboard, set a threshold on the WAN interface tracker, then in the Alert Manager route it wherever your team lives — email, a webhook, Slack, Microsoft Teams, or Discord. Once it exists, I'll see it and can check its history whenever you ask.
Five calls from the complaint to the process responsible, and no dashboards opened along the way: fleet state, top talkers, the host behind the address, where its traffic was going, and what was running on it. Netmon already had the flow records, the switch-port mapping and an agent on the host. The assistant did the reasoning; Netmon supplied the evidence.
“Anything I should be worried about?” 1,224 high-severity IDS events in a week, and whether any of them matter
A vague question with a large number behind it. The sequence below is the one an analyst would follow by hand; here each step is a single tool call.
-
Fleet status first
overwatch_summary({})90 devices and 12 open alerts, all medium and all single-device ping alerts on access points, printers, a switch, a server and two UPS units. Availability is a separate question; nothing here points at a security event.
-
Event counts by severity
log_severity_summary({stream: "eve", hours: 168})1,224 high-severity IDS events in seven days, against 239 medium and 577 low. The high-severity count is the one to explain.
-
The newest high-severity events
eve_search({hours: 168, severity: 1})All 25 of the newest share one source, one destination and one port:
10.10.1.88 → 10.10.1.31:902. Six rule families are involved, including log4j remote-code-execution and shellcode signatures. Six unrelated rules firing on a single flow is more consistent with content that happens to contain the matched byte sequences than with an exploitation attempt, but at this point that is a hypothesis, not a finding. -
One address across every stream
search_ip({ip: "10.10.1.88", hours: 24})709 IDS events and 821 flow records in 24 hours, one ARP entry, no syslog and no Windows event log. The host is not in the inventory: the ARP entry has no device attached, and the MAC’s OUI belongs to VMware. It is an unmanaged virtual machine that Netmon knows only from ARP and flow.
-
Traffic volume
top_bandwidth({minutes: 1440})The same host is the largest source of traffic on the network by a wide margin: about a terabyte in 24 hours to one address, and a further 364 GB to 10.10.1.31, the destination of the alerts. Sustained volume at that scale is characteristic of a scheduled transfer rather than an attack.
-
One event in full
eve_get({id: 3715})A single flow carrying 3.7 million packets and 5.5 GB toward the destination. The payload is 54% printable and Suricata could not identify the application protocol. Port 902 is VMware’s management data channel, and the shellcode rule that matched dates from 2010.
-
Assessment
Not an intrusion. The evidence describes a scheduled bulk transfer, most likely a backup or replication job, whose content contains the short byte sequences the rules look for. Content-matching rules test for patterns anywhere in a stream, so a large enough transfer of the right kind of data will trigger them with no exploit present. Every observed property fits: one long-lived flow, one direction, high volume, an unidentified protocol on a VMware port, from a VMware guest.
-
Recommended actions
Confirm the job with whoever owns the host, then suppress these signatures for that flow only, so a known-benign transfer stops producing 1,224 high-severity events a week and masking anything real. Add the host to the inventory: the largest traffic source on the network has no device record and no logs. Check that the transfer volume matches what the job is expected to move.
Six calls. The IDS events, the flow records, the ARP table and the inventory were queried from one system, which is what made the correlation quick.
The tools did not classify the traffic. They produced the evidence an analyst needs to classify it, and a view limited to the 1,224 alert rows would have escalated it.
What it can read
Thirty-six tools. Each one wraps a Netmon API endpoint and carries a permission scope that gets checked before the call runs.
| Area | Scope | Tools |
|---|---|---|
| Devices & fleet | mcp:devices | device_list, device_get, device_find, device_metric_summary, overwatch_summary, tags_list, snmp_test |
| Traffic & topology | mcp:vne, mcp:devices | top_bandwidth, netflow_search, netflow_raw_search, flow_summary, get_network_entity_info, arp_table, interfaces_search |
| Logs & security | mcp:logs | syslog_search, eventlog_search, eve_search, eve_get, log_severity_summary, syslog_facets |
| Alerts | mcp:alerts | alerts_list, alerts_history, maintenance_windows_list |
| Windows agent | mcp:devices | agent_processes, agent_services, agent_disk_usage |
| Live diagnostics | mcp:tools, mcp:capture | ping, traceroute, arp_lookup, port_map, snmp_walk_run, snmp_walk_last, search_ip, speedtest_history, capture_list, capture_get |
Three playbooks ship with it too, so an assistant can follow a known procedure instead of inventing one: triage (fleet rollup to log fan-out to device drill-down), host post-mortem (identity, logs, in-host state, traffic, timeline) and security review (IDS triage, repeat-offender pivots, log correlation).
Where the limits are
Read-only
Thirty-five of the thirty-six tools are pure reads. The exception, snmp_walk_run, re-polls a device you already monitor and refreshes the appliance's own cached walk — it writes to Netmon, never to your host. Netmon's agent write paths — killing a process, stopping a Windows service, deleting a file, running PowerShell — are excluded at the MCP layer no matter what the token's permissions would otherwise allow. Today that means an assistant reads your monitoring and reports back; it does not reconfigure it or act on a managed host.
It sees what you see
A token acts as the user who minted it. Tag restrictions apply: an operator limited to the branch-office tag gets an assistant limited to the same devices. It's the permission model already governing the web interface and every other API client — not a second one.
Nothing leaves the building
The MCP server runs on the appliance, on your network. Nothing about an MCP session reaches Netmon Services. On an air-gapped install the Netmon side works the same; your client is the part that may want the internet.
Revocable at any time
Revoke the token under System → Users and the assistant loses access within a minute. Tokens can be scoped narrowly at mint time — mcp:logs only, say — so an assistant that should read logs can't enumerate devices.
Connecting your own appliance
Your appliance serves the same thing at https://<your-netmon>/mcp. How you connect depends on which client you use and whether it will trust the certificate your appliance is serving.
The bridge
A small local process that speaks stdio to your client and HTTPS to your appliance. It handles the self-signed certificate for you, and because it runs on your own machine it reaches an appliance that is not on the public internet. Ships with the appliance under System → System Settings → Downloadables as a Claude Desktop extension, runs as a plain command for anything else, and its source is on GitHub.
Direct, with a token
Mint a personal access token under System → Users, pick the scopes, send it as a bearer token. The account needs the API permission. Scopes cannot be widened after minting, and a revoked token stops working within a minute. The API & Integrations page of the product guide covers tokens and sign-in in detail.
Questions
What is MCP?
The Model Context Protocol is an open standard for connecting AI assistants to external systems. A server exposes tools; a client — Claude Desktop, Claude Code, and a growing list of others — calls them on the user's behalf. Netmon implements the server side, on the network monitoring appliance.
Does my monitoring data go to an AI company?
Only what you ask about, and only through your own client. The Netmon server runs on your appliance and answers your client directly; nothing is sent to Netmon Services. The results your assistant receives are then handled by whoever makes that client, under their terms — which is the reason token scopes are worth setting narrowly.
Does it work on an air-gapped network?
The Netmon side does — the server runs on the appliance and needs nothing external. Your MCP client is the part that may need internet access, depending on which one you use.
Which Netmon version do I need?
7.0.20 or newer. The MCP server is included; there is no separate licence or add-on.
Is the demo running against real equipment?
No. It plays back a recording, so nothing you ask reaches real equipment and two people asking the same question get the same answer. The tools and the shape of what comes back are identical to a live appliance.
Which AI assistants can connect?
Anything that speaks MCP. The ten in the table above cover most people: Claude Code, Claude Desktop, ChatGPT, OpenAI Codex, Cursor, VS Code in Copilot agent mode, Gemini CLI, Cline, opencode and Kimi Code CLI. Anything else takes the same URL in whatever config file it reads.
Why does my assistant say it can't reach my appliance?
Almost always one of two things. Either the client fetches the URL from its vendor's cloud rather than from your machine — that is how ChatGPT connectors and Claude Desktop's remote-connector option work, and a private address is unreachable from there — or, far more commonly, the client is refusing your appliance's self-signed certificate because it validates against the operating system trust store. The first needs a local bridge; the second needs the bridge or your certificate installed in the trust store.
Point a client at it and ask something
Connecting takes about a minute. If you like what it does, the same tools run on your own hardware, against your own network.