CVSS scoring, IOC extraction, email header triage, hash/JWT/timestamp decoding, CISA KEV lookup.
The things a security analyst does by hand a dozen times a shift, as tools your coding agent can call: score a CVE, pull the indicators out of a report and defang them for the ticket, read a phishing email's headers properly, work out what kind of hash that is, decode a JWT, turn a timestamp into something a human can read, peel a base64-of-hex payload, and check whether a CVE is on CISA's exploited-in-the-wild list.
Free, MIT, no account, no telemetry. Everything except the KEV lookup runs entirely on your machine.
Pin the version.
Claude Code
claude mcp add secops-field-notes -- npx -y github:labaccessnow/secops-field-notes-mcp#v0.1.0
Claude Desktop, Cursor, or any client with a JSON config
{
"mcpServers": {
"secops-field-notes": {
"command": "npx",
"args": ["-y", "github:labaccessnow/secops-field-notes-mcp#v0.1.0"]
}
}
}
Docker
{
"mcpServers": {
"secops-field-notes": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/labaccessnow/secops-field-notes-mcp:0.1.0"]
}
}
}
Node 18 or newer for the npx route. Also in the official MCP registry as
io.github.labaccessnow/secops-field-notes-mcp.
| Tool | What it answers | Network |
|---|---|---|
cvss_score | CVSS 3.1 base score from a vector or the eight metrics, exactly as FIRST computes it | none |
extract_iocs | Every IP, domain, URL, email, CVE id and hash in a blob of text — refanged on the way in, defanged on the way out | none |
defang_text | hxxp[://], [.], [at] and back | none |
analyze_email_headers | The Received chain in order with hop delays, the origin IP, SPF/DKIM/DMARC, and the mismatches phishing triage looks for | none |
identify_hash | bcrypt, Argon2, yescrypt, Unix crypt, LM:NT, MD5/NTLM, SHA-1/224/256/384/512 — by shape, with what that implies | none |
decode_jwt | Header, payload, times as dates; flags alg:none, expiry, tokens that never expire | none |
convert_timestamp | Epoch s/ms/µs, Windows FILETIME, ISO 8601, RFC 2822 — into every form | none |
decode_layers | Chain base64 / hex / URL / HTML-entity / ROT13 decoding and see each layer | none |
lookup_kev | Is this CVE exploited in the wild — CISA KEV date added, due date, ransomware use, required action | CISA feed, cached 1h |
latest_field_note | What got exploited this week | RSS |
Paste the raw source. It unfolds the headers, reads the Received lines in chronological order
(they are stored newest-first), computes the delay at each hop, finds the first public IP in the
chain, reads the authentication verdicts, and then says what a triage analyst would say:
From "IT Helpdesk" <helpdesk@corp.example>
Reply-To helpdesk-reset@evil-mail.example
Auth SPF pass · DKIM pass · DMARC fail
Origin IP 192.0.2.44
Received chain (origin first, 3 hops):
1. [10.0.0.5] [192.0.2.44] → relay.example-news.com 2026-09-05 13:59:50Z
2. relay.example-news.com [198.51.100.9] → mx3.corp.example 2026-09-05 14:00:15Z +25s
3. mx3.corp.example [203.0.113.30] → inbox.corp.example 2026-09-05 14:00:20Z +5s
Warnings:
! From domain (corp.example) ≠ Return-Path domain (mailer.example-news.com) …
! Reply-To goes to a different domain (evil-mail.example) than From (corp.example) — classic BEC pattern.
! DMARC verdict: fail.
The arithmetic is the FIRST specification's, including the Roundup function done in integer
arithmetic so floating-point noise never pushes a 4.0 to a 4.1. Log4Shell's vector scores 10.0;
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H scores 9.8. Both are in the test suite.
lookup_kev fetches CISA's public catalog (about 1.7 MB) and keeps
it for an hour. Everything else never opens a socket.MIT. Written by James Son — network, security, and automation engineer. The logic is the same as the free Field Kit desktop app's security tools, so the two stay in step. Corrections welcome.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
docker run -i --rm ghcr.io/labaccessnow/secops-field-notes-mcp:0.1.0Merge 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-labaccessnow-secops-field-notes-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/labaccessnow/secops-field-notes-mcp:0.1.0"
]
}
}
}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 referenceghcr.io/labaccessnow/secops-field-notes-mcp:0.1.0dockerSecOps Field Notes 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.