pypi itsoc-mcpstdioMITupdated 7d ago
A local, rules-first security operations console. Deterministic rules detect anomalies and own every severity verdict; a local LLM (via Ollama) only explains findings in plain language β it can never set, change, or escalate a verdict. Everything runs on your machine; no logs leave it by default.
What can you do with itsoc mcp?
itsoc β Local AI-Assisted SOC Console
A local, rules-first security operations console. Deterministic rules detect anomalies and own every severity verdict; a local LLM (via Ollama) only explains findings in plain language β it can never set, change, or escalate a verdict. Everything runs on your machine; no logs leave it by default.
Design principle β honesty by construction. Every number shown is derived from real data or reported as
n/a. Severity comes only from the rules. MITRE tags are derived context, not a verdict. Unrecognized log formats are reported as "unparsed", never a false all-clear.
What it does
- Log anomaly detection β deterministic rules (brute-force, failureβsuccess compromise,
error-burst, suspicious-port, disk pressure) over a wide range of formats: canonical
timestamp LEVEL host msg, RFC 3164 syslog, ISO-8601 journald/rsyslog, RFC 5424, JSON-line, auth CSV (timestamp,ip,username,status), ManageEngine Log360 (CSV + forwarded syslog), Android logcat, Windows EVTX, Loghub envelopes, and more via the universal format layer. - Plain-language explanations β the local model narrates each rule-caught finding with its evidence, rule predicate, and timeline. Advisory only.
- SOC subsystems β correlated incidents with a six-state analyst lifecycle, observed
assets/users, a Cases board and case file (activity, observables, real attachments,
eligible runbooks β pending approval only), generated/exported reports, offline STIX plus
optional OEM IP lookup (
ITSOC_OEM=1), and honest metrics. - Live ingestion β a UDP/TCP syslog collector streams real events into a persistent store.
- Enrichment & connectors β offline MITRE ATT&CK mapping; optional threat-intel provider lookups and vendor (OEM) API connectors, all with user-supplied, write-only credentials.
- MCP server β a read-only Model Context Protocol server exposes the analysis to MCP clients (Claude Desktop / Claude Code); it computes no verdicts.
Active-scanning modules (opt-in, use with authorization)
The Discovery and Vulnerabilities modules run real nmap scans (host discovery + NSE vuln scripts) against private/loopback targets you own. These are active network operations, not read-only β every scan is user-initiated, public targets are refused, and results are stored verbatim with source-reported severity.
Quick start
Requirements: Python 3.9+, and Ollama for local explanations.
# 1. (once) pull the local model
ollama pull qwen3:8b
# 2. run the console
python3 console/serve.py
# -> opens the SOC dashboard at http://127.0.0.1:8765/
Upload a log (or pick a bundled sample) and you're analyzing. The rules run in under a second; explanations fill in behind them. The rules engine runs even without a model β you get verdicts and evidence, with explanations honestly skipped and marked as such.
Developing the React frontend (optional):
python3 console/serve.py --no-open # API on :8765
cd web && npm install && npm run dev # dashboard on :5173, proxies /api β :8765
Tests
python3 tests/eval/run_eval.py # labeled detection eval (20/20)
python3 console/test_console.py # backend + subsystems
cd web && npm test # React dashboard (vitest)
Design constraints
Data stays local (Ollama) Β· no model training Β· rules own severity, the LLM only explains Β·
raw is always the real log line, never a rewrite Β· secrets are stored write-only and never
returned to the browser Β· the UI never claims more than it can prove.
License
MIT β see LICENSE.
Install
Add itsoc mcp to your client. Pick the one you use.
claude mcp add itsoc-mcp -- uvx itsoc-mcpcodex mcp add itsoc-mcp -- uvx itsoc-mcpamp mcp add itsoc-mcp -- uvx itsoc-mcp{
"mcpServers": {
"itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"itsoc-mcp","command":"uvx","args":["itsoc-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"itsoc-mcp": {
"type": "local",
"command": "uvx",
"args": [
"itsoc-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"itsoc-mcp": {
"command": {
"path": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
uvx itsoc-mcpRun `goose configure`, choose **Add Extension β Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation22/25
- Maintenance19/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 0 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | Aug 20, 2026 |