CentralOps MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CentralOps MCP Servershow quarantine events for integration 42"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CentralOps MCP Server
Drive the CentralOps security data pipeline from any MCP client — drift triage, mapping edits, routing forensics, backfills and quarantine reprocess without writing raw HTTP calls.
A Model Context Protocol server that exposes a curated subset of the CentralOps HTTP API as 58 typed tools, so an AI agent (Claude Code, or any MCP client) can operate the pipeline like a SOC engineer: inspect what a vendor is actually sending, author and dry-run mapping rules, follow an event's delivery lineage, and reprocess quarantined events — with the destructive operation gated behind an explicit two-step acknowledgement.
The server runs as a stdio transport inside a container: the MCP client spawns
docker run --rm -i ... per session. No extra service in your CentralOps stack, no
port exposed.
Quick start
# 1. Build the image (from the repo root)
docker build -t centralops-mcp:dev .
# 2. Generate a CentralOps API token (PAT) at <your-centralops-host>/settings/tokens
# 3. Register the server in your MCP client — e.g. .mcp.json for Claude Code:{
"mcpServers": {
"centralops": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "CENTRALOPS_BASE_URL",
"-e", "CENTRALOPS_API_TOKEN",
"centralops-mcp:dev"
],
"env": {
"CENTRALOPS_BASE_URL": "https://centralops.example.com/api",
"CENTRALOPS_API_TOKEN": "copsk_..."
}
}
}
}Restart the client and run /mcp (Claude Code) to confirm the tools are listed.
The token is sensitive — do not commit.mcp.json with a real value. Prefer
reading it from your shell (CENTRALOPS_API_TOKEN=$(pbpaste)) or a secret
manager (1Password, macOS Keychain, …).
Related MCP server: chimeralang-mcp
Tools
58 tools, grouped by what they let the agent see or do. Everything is read-only except the five tools listed under Mutating and Destructive.
Vendor-side visibility
How each vendor is connected, healthy and behaving.
Tool | Purpose |
| Vendors connected — status, last_error, capabilities. Filterable ( |
| One integration's configuration. Config fields need |
| Live health check — v2 envelope with data-driven |
| Serialized integration + live health + |
| Platform identifiers from the plugin-driven provider registry. |
| Licensed Sophos products for a child tenant (e.g. explain a 403 on detections). |
Collection pipeline
What is being polled, from where, and at what cost.
Tool | Purpose |
| (platform, stream) pairs the collector registry knows how to poll. |
| Per-stream cursor, last_success_at, last_error, consecutive_failures ( |
| Global counters, failing streams, max staleness — the first read in a triage session. |
| ADR-0011 volume metering: bytes/events in vs out per org, reduction ratio. |
| Bulk pipeline health for all visible integrations (60s cache). |
| One integration: status, lag, |
Raw payloads & drift — "what is the vendor actually sending?"
Tool | Purpose |
| Raw events from the sample reservoir for a (vendor, event_type). Global-scope tokens must pass |
| One quarantined event with its full |
| Quarantined events — filter by vendor, error_kind, lifecycle |
| Unknown raw fields observed by the drift sampler ( |
| Fields already discovered for a mapping — JMESPath autocomplete source. |
| The org's field inventory: which dotted paths it really produces, each tagged |
Mappings catalog & history
Tool | Purpose |
| Catalog of mapping definitions ( |
| Definition + full version history. |
| Structured diff between two versions. |
| Who changed what, when — filterable by action/user/time. |
| Cheap index of one DSL block ( |
| Read a slice of a block by index or target, with the |
Destinations & routing (ADR-0003/0008)
Where events go, and why one didn't. All of these require an admin token.
Tool | Purpose |
| Configured destinations with status. |
| Delivery health, batch or per destination. |
| Dead-letter queue — error kinds like |
| Delivery metrics time series. |
| Audit trail for a destination. |
| "Where did event X actually get delivered?" — per-event delivery lineage. |
| Routing rules (first-match order). |
| Route→destination topology and live flow graph. |
| Per-route matched/routed/dropped counters and series. |
Correlation rules (Enterprise) — "is this rule running, and would it match?"
list_detections shows the alerts a correlation rule produced; these show the rule
itself. Read-only: authoring stays in the console, where the flow graph, the field
inventory and the sample preview sit side by side. On a Community deployment these
routes do not exist and every call is a 404.
Tool | Purpose |
| The rules, with mode ( |
| One rule in full, including each sequence leg's own |
| 24 h counters for one rule: |
| Why an enabled in-flight rule may not run: per-cycle cap, how many rules were truncated, how many do not compile, and whether their detections reach any destination. |
| Evaluate candidate clauses against real samples, persisting nothing. Distinguishes "field not found" from "value did not match". Always pass |
Detections, dashboard & history
Tool | Purpose |
| In-pipeline detections (status: open/ack/closed, OCSF severity). |
| The UI's opening dashboard: KPIs + top-N buckets, org/platform/period filters. |
| Scheduled queries and their run history. |
| Saved search runs and their results. |
| Platform audit log (admin token). |
| Which query dialects/modes each source platform supports. |
Backfill
Tool | Purpose |
| Jobs for an integration, filterable by status. |
| One job: |
| Server-side poll until terminal state — avoids LLM polling loops. |
| "Why does backfill never run?" — workers, queue consumers, backlog (global admin). |
Mutating — safe
Tool | Purpose |
| Validate rules against the sample reservoir; issues the |
| Edit specific items of ONE block ( |
| Enqueue a backfill window (≤ 90 days). |
| Cooperatively cancel a pending/running job. |
| Reprocess up to 50 quarantined events through the destination routing engine. Idempotent (409/410/422 per event). |
Destructive — gated
Tool | Purpose |
| Promote a new mapping version from a FULL DSL. Requires a fresh |
| Promote the merge staged by |
commit_mapping and commit_mapping_patch are the only destructive tools. Prefer
the patch flow: it never rebuilds the DSL dict, which is what once silently deleted
a mapping's raw_reduction in production. The ack_token expires in 5 minutes
and is single-use; the backend re-validates and re-runs the dry-run on commit, so
the token is defense-in-depth, not the security boundary.
Authentication
The server authenticates with a CentralOps Personal Access Token (PAT) or
Service Account token — the same credential model used by external
integrations — and sends Authorization: Bearer <token> on every request.
Log in to CentralOps as the user that should "own" the MCP traffic.
Go to Settings → API Tokens (
/settings/tokenson your CentralOps host — not under/api).Create a token, pick an expiration, and copy the
copsk_…value once — the UI will not show it again.Optional: restrict scopes. Without scopes the token inherits the full permission set of the user. For a read-mostly MCP, e.g.:
mapping.read,quarantine.read,integration.read,audit.read.Export the token in your shell or paste it into the MCP config above.
Tokens are individually revocable from the same page. The client identifies
itself with User-Agent: centralops-mcp/<version> (persisted by the backend
audit log, so MCP traffic is distinguishable from UI traffic) plus an
informational X-Client header.
When a token is rejected you get a 401 with a regeneration hint; a valid token missing a scope gets a 403 with a permission hint. Tools that need an admin token say so in their descriptions.
Configuration
Env var | Default | Required | Notes |
|
| recommended | Trailing |
| — | yes | PAT or Service Account token starting with |
|
| no | Per-request timeout. |
|
| no | Set to |
|
| no |
|
Development
python3.12 -m venv .venv
.venv/bin/pip install -r requirements.txt pytest pytest-asyncio
.venv/bin/pytestThe contract test suite mocks the HTTP transport — no CentralOps instance is needed to develop or test.
Smoke test the image
The MCP handshake is initialize → notifications/initialized → tools/list.
The trailing sleep keeps stdin open long enough for the second response:
{
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}'
printf '%s\n' '{"jsonrpc":"2.0","method":"notifications/initialized"}'
printf '%s\n' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
sleep 2
} | docker run --rm -i \
-e CENTRALOPS_BASE_URL="http://localhost:3000/api" \
-e CENTRALOPS_API_TOKEN="copsk_..." \
centralops-mcp:devYou should see two JSON-RPC responses; the second lists all 58 tools with their schemas.
Contributing
Issues and pull requests are welcome. Before opening a PR:
Keep tool descriptions honest — they must describe the real backend behavior (response fields, permission requirements, org-scoping caveats). Every claim in a description should be verifiable in the CentralOps code.
Add a contract test for every new tool (see
tests/contract/) asserting the exact method, path, forwarded params and droppedNoneparams.Read-only by default. Mutating tools need a clear safety story; destructive tools must be gated like
commit_mapping.Run
.venv/bin/pytest— the suite must be green.
License
Apache-2.0 © SEGARK.
The CentralOps engine itself is a separate project licensed under AGPL-3.0.
This server cannot be deployed
Maintenance
Related MCP Connectors
Anonymous public tools for FlightSweeper. See the published agent boundary before use.
Live SEO workflow tools for Claude Code, Codex, and AI agents.
AI Visibility and Content Intelligence tools for Claude and MCP-compatible agents.
49 free agent tools: WHOIS, PDF to text, email checks, FX rates, X12 EDI, JSON repair. No API key.
Related MCP Servers
- AlicenseBqualityDmaintenanceExposes Cloudflare DNS, security, redirects and zone-settings functionality as structured tools that AI assistants like Claude Desktop can invoke directly.1816 npmMIT
- AlicenseBqualityDmaintenanceProvides Claude with 44 tools for confidence gating, typed outputs, hallucination detection, and constraint enforcement during conversations.511MIT
- AlicenseAqualityDmaintenanceWraps Claude Code as tools for MCP clients, enabling autonomous coding tasks via a 4-tool lifecycle with session management, async polling, and permission controls.434 npm20MIT
- AlicenseBqualityAmaintenanceExposes the Firewalla MSP API as tools for Claude Code and other MCP clients, enabling natural-language management of Firewalla boxes, alarms, rules, devices, flows, target lists, and trends with full read/write capabilities.19MIT