ThreatConnect v3 MCP Server
ThreatConnect v3 MCP Server
A Model Context Protocol server that gives an MCP-capable LLM client a small set of reliable, validated tools to drive ThreatConnect Case Management and Threat Intelligence through the v3 REST API.
It hides v3's HMAC authentication, retries, pagination, and error quirks behind typed tools so the model never hand-rolls HTTP or signing.
Tools
Tool | v3 call | What it does |
|
| Create a case (name/status/severity + optional nested artifacts, tags, attributes). |
|
| Partial update; nested associations honor |
|
| Create any indicator type; type→summary-field resolved automatically. |
|
| Attach one artifact to an existing case by |
|
| Attach many artifacts: one nested-append request, or concurrent POSTs with a per-item ledger. |
|
| Return TC's context: rating/confidence, tags, attributes, associations, observations, web link. |
|
| Escape hatch for arbitrary reads with TQL/fields — never writes. |
There is deliberately no generic write tool: unconstrained PUT/DELETE
against shared threat intel is too dangerous to hand an LLM.
Install
Requires Python 3.12+ and uv.
uv sync
cp .env.example .env # then fill in your credentialsConfiguration
Set these in .env (or the environment). HMAC is the primary auth path.
Variable | Required | Default | Notes |
| yes | — | e.g. |
| HMAC | — | API user access id. |
| HMAC | — | API user secret key (never logged). |
| token | — | Alternative to HMAC; used only if the HMAC pair is absent. |
| no | — | Default owner for owner-relative reads/writes. |
| no |
| Per-request timeout (seconds). |
| no |
| Retries on 429/5xx with backoff + jitter. |
| no |
| TLS verification. |
| no |
| Logs go to stderr, secret-redacted. |
Clock skew: the HMAC
Timestampmust be within five minutes of server time. Keep the host on NTP.
Run
uv run tc-mcp # stdio transportClaude Desktop / mcp.json
{
"mcpServers": {
"threatconnect": {
"command": "uv",
"args": ["--directory", "/abs/path/to/threat_connect_mcp", "run", "tc-mcp"]
}
}
}Inspect the tool surface
npx @modelcontextprotocol/inspector uv run tc-mcpDevelopment
uv run ruff check . # lint
uv run mypy src # types
uv run pytest -q # mocked unit/integration testsLive smoke test (gated)
The live tests are skipped unless credentials are present and -m live is
passed. A green test_signature proves the HMAC string-to-sign is correct
against your instance:
TC_BASE_URL=... TC_API_ACCESS_ID=... TC_API_SECRET_KEY=... \
uv run pytest -m live tests/test_live.pyDesign notes
Thin httpx client, not TcEx. TcEx assumes it runs inside the TC platform; a small signed
httpxclient is easier to test (golden HMAC vector) and has no hidden runtime assumptions."Dynamic" via schema introspection. Tools validate caller fields/types against the live
OPTIONS /v3/<endpoint>and/v3/artifactTypesdescriptors, so they track the API instead of a frozen copy. Validation degrades gracefully if a descriptor is unavailable — the API stays the final authority.TQL injection defense. Any caller value interpolated into a TQL clause (enrich-by-summary) is escaped and control characters are rejected.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/delonius22/threat_connect_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server