MCP server#
The Plixer One/Scrutinizer platform ships with a Model Context Protocol (MCP) server that allows the Plixer AI Assistant and external AI agents (e.g., Claude Code, Cline, etc.) to query network data, investigate alarms, work with Flow Analytics, and access documentation directly from a development environment.
Enabling remote access#
The MCP server is automatically started alongside the Scrutinizer service. To allow remote MCP clients to connect, do the following:
Note
If the remote AI assistant does not require SSL to connect to an MCP server, step 4 below can be skipped.
Create a new authentication token for the Admin web interface user (a longer expiration is recommended for persistent setups).
SSH to the Scrutinizer server (or the primary reporter in a distributed cluster) as the
plixeruser:ssh plixer@<SCRUTINIZER_IP>With elevated permissions, edit
/usr/lib/systemd/system/plixer_mcp.serviceto add the authentication token created in step 1 (MCP_AUTH_TOKEN):Environment=MCP_ACCESS_TOKEN=MCP_AUTH_TOKEN
Reload the systemd manager and restart the MCP service to apply the updated configuration:
sudo systemctl daemon-reload sudo systemctl restart plixer_mcp
If the Scrutinizer server is not yet using a CA-signed SSL certificate, follow these instructions to replace the default self-signed certificate.
After the above steps have been completed, use the URL https://SCRUTINIZER_IP/mcp and the following authentication header to connect to the MCP server:
Authorization: Bearer MCP_AUTH_TOKEN
Note
Token validation uses constant-time comparison to reduce susceptibility to timing-based attacks.
Client configuration examples#
After remote access to the MCP server has been enabled, refer to the below examples to configure the authentication token (MCP_AUTH_TOKEN above) and transport settings for an external MCP client.
Claude Code#
Add the Scrutinizer MCP server to Claude Code using one of the following methods:
Command line
Run the following command from the terminal, replacing
SCRUTINIZER_IPandMCP_AUTH_TOKENwith the actual values:claude mcp add scrutinizer \ https://SCRUTINIZER_IP/mcp \ --transport http \ --header "Authorization: Bearer MCP_AUTH_TOKEN"
Note
Append
-s userto the first line to make the server available to all projects.settings.json
Alternatively, you can manually add the server by editing either
.claude/settings.jsonor~/.claude/settings.json. ReplaceSCRUTINIZER_IPandYOUR_AUTH_TOKENwith the actual values:{ "mcpServers": { "scrutinizer": { "type": "streamableHttp", "url": "https://SCRUTINIZER_IP/mcp", "headers": { "Authorization": "Bearer MCP_AUTH_TOKEN" } } } }
Verify that the server has been successfully added by running:
claude mcp listThe output should include
scrutinizerwith the streamable HTTP transport.
Claude Desktop#
To enable Scrutinizer’s MCP tools in Claude Desktop, add the MCP server to the Claude Desktop configuration file. Follow the steps below for your operating system.
Windows OS#
Edit
claude_desktop_config.json(Claude Desktop > Developer > Edit Config), and then add:Note
Node.js must be installed on the Claude Desktop host.
Use
C:\\PROGRA~1\\nodejs\\if Node.js is inC:\Program Files\nodejs. If it was installed to a different folder/directory, use the equivalent 8.3 short path to avoid issues with spaces.NODE_TLS_REJECT_UNAUTHORIZED: "0"is only required if the Scrutinizer server is using a self-signed certificate.
{ "mcpServers": { "scrutinizer": { "command": "C:\\Windows\\System32\\cmd.exe", "args": [ "/c", "C:\\PROGRA~1\\nodejs\\npx.cmd", "-y", "mcp-remote", "https://<scrutinizer-host>/mcp", "--transport", "http-only", "--header", "Authorization: Bearer MCP_ACCESS_TOKEN" ], "env": { "NODE_TLS_REJECT_UNAUTHORIZED": "0" } } } }
After saving the changes, completely close/exit Claude Desktop via the task manager. Scrutinizer tools should be available after the application is relaunched.
macOS#
Install Node.js on the Claude Desktop host.
Run the following in the terminal to determine the
npxpath:which npxEdit
/Users/<your-username>/Library/Application Support/Claude/claude_desktop_config.json(Claude Desktop > Developer > Edit Config), and then add:Note
Replace
<NPX-PATH>with the output from step 2,<SCRUTINIZER-IP>with the Scrutinizer server IP address, and<MCP-AUTH-TOKEN>with the authentication token configured in/usr/lib/systemd/system/plixer_mcp.serviceon the Scrutinizer server.NODE_TLS_REJECT_UNAUTHORIZED: "0"is only required if the Scrutinizer server is using a self-signed certificate.
"mcpServers": { "scrutinizer": { "command": "<NPX-PATH>", "args": [ "-y", "mcp-remote", "https://<SCRUTINIZER-IP>/mcp", "--transport", "http-only", "--header", "Authorization: Bearer <MCP-AUTH-TOKEN>" ], "env": { "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin", "NODE_TLS_REJECT_UNAUTHORIZED": "0" } } },
After saving the changes, completely quit Claude Desktop (right-click the Dock icon and select Quit). Scrutinizer tools should be available after the application is relaunched.
Cline#
Add the following to cline_mcp_settings.json (replace SCRUTINIZER_IP and YOUR_AUTH_TOKEN with the correct values):
{
"mcpServers": {
"scrutinizer": {
"type": "streamableHttp",
"url": "https://SCRUTINIZER_IP/mcp",
"headers": {
"Authorization": "Bearer YOUR_AUTH_TOKEN"
},
"disabled": false,
"autoApprove": []
}
}
}
MS Copilot#
The following steps describe how to connect Scrutinizer’s MCP server to a Microsoft Copilot Studio agent via a Power Platform custom connector.
Important
An MS Copilot Studio license is required.
Remote access must be enabled for the Scrutinizer MCP service. See the Enabling remote access section for more information.
Microsoft Power Apps must be able to reach
https://<SCRUTINIZER_IP>/mcp. This can be done via either of the following:An on-premises data gateway installed, configured, and connected to your Power Apps tenant, or
The Scrutinizer /mcp endpoint accessible directly from the internet.
If using an on-premises data gateway, the Scrutinizer server must be serving a valid SSL certificate that is trusted by the machine hosting the data gateway.
Updating the nginx configuration#
Before configuring MS Copilot, apply the following changes to the Scrutinizer nginx configuration to resolve CORS issues and enable token-based authentication for the Power Platform connector.
View instructions
Replace the contents of
/etc/nginx/webapp.d/inc/mcp-api.confwith the following:
# HTTP proxy for local /mcp (without trailing slash)
location /mcp {
proxy_pass http://127.0.0.1:8083/mcp;
# Strip the client Origin header. External MCP clients (e.g. Copilot
# Studio) send a non-localhost Origin, which the MCP server's DNS
# rebinding check rejects. Requests on this path are authenticated by
# the MCP server's AuthMiddleware, so origin enforcement is not needed.
proxy_set_header Origin "";
# Translate X-MCP-Token into the Authorization bearer header for clients
# that cannot send Authorization directly (e.g. Power Platform custom
# connectors via an on-prem data gateway, which strip it as a reserved
# header). Only the caller's own token value is forwarded, so a wrong or
# missing token is still rejected by the MCP server.
set $mcp_authorization $http_authorization;
if ($http_x_mcp_token != "") {
set $mcp_authorization "Bearer $http_x_mcp_token";
}
proxy_set_header Authorization $mcp_authorization;
include /etc/nginx/webapp.d/inc/stdproxy.conf;
}
Restart nginx to apply the updated configuration:
sudo systemctl restart nginx
Configuring the MS Copilot Studio agent#
Navigate to https://copilotstudio.microsoft.com/, and then click Agents > New Agent. Name the agent as desired (e.g., NOC Agent), and then click the new agent name to open it.
In the left toolbar, navigate to Tools > New tool, and then select Model Context Protocol (MCP). Then enter the following:
Name: Scrutinizer
Server description: Scrutinizer network flow collector
Server URL:
https://<SCRUTINIZER_IP>/mcpAuthentication: None
Note
Authentication is configured in a later step via a custom connector policy.
Click the new tool entry to navigate to the Power Automate platform.
If using an on-premises data gateway, tick the Connect via on-premises data gateway checkbox.
Select Definition in the top navigation bar, and then add a policy with the following settings:
Name: MCP Token Header
Template: Set HTTP header
Header name: X-MCP-Token
Header value: The MCP_AUTH_TOKEN value configured in Enabling remote access
Run policy on: Request
Click Update connector to save the changes.
In the left navigation, go to Custom Connectors (or More > Custom Connectors if it is not visible), and then click the + icon next to the Scrutinizer connector.
If using an on-premises data gateway, select it from the dropdown. If the gateway does not appear in the dropdown, confirm that the account has admin rights in Power Automate to edit and use the gateway.
Navigate back to https://copilotstudio.microsoft.com/ and open the agent created in step 1.
Click Edit, navigate to the Tools tab, and then click Add a tool.
Search for Scrutinizer, select the new connection, and then click Add.
To verify the connection, enter a query in the test panel on the right (e.g., What are my network’s top talkers today?).
Under Channels, select the platforms through which the agent should be accessible (e.g., Copilot, Microsoft Teams).
Click Publish to make the agent available to others in the organization.
Tooling#
AI assistants can access the below tools through the MCP server.
Write actions/tools require the AI Write Tools setting to be enabled (under Admin > Settings > AI Settings). Read-only tools are always available.
Network reporting and analysis
Tool |
Description |
Access |
|---|---|---|
|
Execute Scrutinizer reporting queries using sdf* filters. Supports report types like |
Read-only |
|
Look up IP groups, applications, exporters, protocols, countries, device groups, and interfaces using natural language embedding search. |
Read-only |
|
Get available report types for specific exporters by their hex IP addresses. |
Read-only |
|
Look up IP addresses associated with a username from Active Directory, RADIUS, and Cisco ISE authentication data. Supports fuzzy matching. |
Read-only |
|
Retrieve detailed IP information including geolocation, ASN, and hostname. |
Read-only |
|
Perform Host Index lookup for comprehensive traffic information about an IP address (DNS, first/last seen, traffic stats, peers). |
Read-only |
Parameters used by the scrutinizer_report tool
Parameter |
Required |
Description |
|---|---|---|
|
Yes |
Report type: |
|
Yes |
Time range: |
|
If CUSTOM |
Unix epoch start time |
|
If CUSTOM |
Unix epoch end time |
|
No |
|
|
No |
|
|
No |
|
|
No |
|
|
No |
Maximum rows to return (default: 10) |
|
No |
Client timezone (default: |
|
No |
Graph type: |
|
No |
Object of sdf* filters (see filter reference below) |
|
No |
Human-readable description of the request |
|
No |
Resolved network context from |
Supported sdf* filters
Filters are passed as an object with keys like sdfDips_0, sdfIps_0, etc. Use in_ for include and ex_ for exclude prefixes. resolve_network_context should be used to look up valid object IDs before constructing filters.
Filter Type |
Key Pattern |
Value Format |
Example |
|---|---|---|---|
Device/Exporter |
|
|
|
IP Address |
|
|
|
Port |
|
|
|
Country |
|
|
|
Subnet |
|
|
|
IP Group |
|
|
|
Protocol |
|
|
|
Application |
|
|
|
NBAR |
|
|
|
Domain |
|
|
|
Search and documentation
These tools perform embedding-based searches.
Tool |
Description |
Access |
|---|---|---|
|
Search Scrutinizer documentation for help content, configuration guides, and troubleshooting. |
Read-only |
|
Search organizational policy documents for security policies, compliance rules, and access control. |
Read-only |
|
Search playbooks and runbooks for operational procedures and incident response steps. |
Read-only |
|
Search documentation embeddings to find the UI page that best matches the user’s request. |
Read-only |
Collection management
Tool |
Description |
Access |
|---|---|---|
|
Create a new collection with notes describing related events. |
Write |
|
Add a single detail entry (alarm, report, event, device, user, etc.) to a collection. |
Write |
|
Add multiple detail entries to a collection in bulk. |
Write |
|
Save a report configuration so it can be referenced in a collection detail. |
Write |
|
Create or update a daily executive summary for NetOps or SecOps agents with risk scoring. |
Write |
Collection detail types
When adding details to a collection, the detail_type field determines the structure of detail_json:
Detail Type |
ID |
|
|---|---|---|
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
Alarm and policy management
Tool |
Description |
Access |
|---|---|---|
|
Retrieve all alarm policies with descriptions. |
Read-only |
|
Retrieve policies by category ID or name. |
Read-only |
|
Retrieve alarms for a time range, optionally filtered by severity ( |
Read-only |
|
Get entity information (violators, hosts, targets) for a specific policy. |
Read-only |
Flow Analytics Security Groups
Tool |
Description |
Access |
|---|---|---|
|
List all Security Groups with exporter and algorithm counts. |
Read-only |
|
Get detailed group info including assigned exporters and algorithms. |
Read-only |
|
Create a new security group (e.g., “Edge Routers”, “Branch Offices”). |
Write |
|
Update a security group’s name. |
Write |
|
Add exporters to a group by IP address. |
Write |
|
Remove exporters from a group by IP address. |
Write |
|
Delete a security group (must not be assigned to any algorithms). |
Write |
Flow Analytics Algorithms
Tool |
Description |
Access |
|---|---|---|
|
List all threat detection algorithms with names, tabs, and policy associations. |
Read-only |
|
Get full algorithm configuration, enabled state, and execution stats. |
Read-only |
|
Update algorithm settings: enable/disable, syslog, alert, and custom parameters. |
Write |
|
Get exporters assigned to an algorithm (included and excluded). |
Read-only |
|
Update exporter assignments for an algorithm. |
Write |
|
Get exclusion configuration (returns |
Read-only |
|
List current IP/IP group exclusions for an algorithm. |
Read-only |
|
Add IP addresses or IP groups as exclusions. Auto-acknowledges existing alarms. |
Write |
|
Remove exclusion rules by rule ID. |
Write |
ML detection exclusions
Tool |
Description |
Access |
|---|---|---|
|
Add a single ML detection exclusion for an IP address. |
Write |
|
Add multiple ML detection exclusions in bulk. |
Write |
Supported ML detections:
bruteforce_serversshbruteforce_serverrdp-tcpbruteforce_serverrdp-udpbruteforce_clientsshbruteforce_clientrdpdata_accumdata_exfildgllateral_movementml_malware_detectionml_malware_detection_c&cml_malware_detection_ekml_malware_detection_minerml_malware_detection_ratrogue_dhcprogue_dnsrogue_ldapsigredtunneling_int_clienticmptunneling_int_clientdnstunneling_int_clientsshtunneling_ext_clienticmptunneling_ext_clientdnstunneling_ext_clientsshwormzerologonall
Utilities
Tool |
Description |
Access |
|---|---|---|
|
Convert datetime formats (ISO 8601, |
Read-only |
|
Get system time in Unix timestamp, ISO 8601, and human-readable formats. |
Read-only |
|
Create a packet capture rule for specific traffic (server IP, client IP, port). |
Write |
Content embeddings#
External AI assistants are also able to access all default and custom embeddings through the MCP server’s search and documentation tools.
See this section to learn more about AI embeddings.