Read-only MCP server over a local log-analysis backend; a client that computes no verdicts.
A local-first SOC workspace for turning raw logs into explainable, assignable work. The deterministic detector owns every severity verdict; the AI copilot reasons over the evidence, explains the dashboard, recommends next steps, and drafts work without changing a verdict or executing an action. The default deployment keeps logs on your machine.
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.
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.ITSOC_OEM=1), and honest metrics.itsoc-icp) — a Model Context Protocol server exposes the analysis to MCP
clients (Claude Desktop / Claude Code); it computes no verdicts. Tools that only read
(list_runs, get_findings, get_evidence, export_run, threat_intel_lookup) are
annotated readOnlyHint: true. analyze_log, explain_finding, and propose_block_ip
are additive writes (not destructive) and never approve or execute a response action.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.
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
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)
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.
MIT — see LICENSE.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx itsoc-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-ankit512-itsoc-mcp": {
"command": "uvx",
"args": [
"itsoc-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceio.github.Ankit512/itsoc-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.