truss-agent-mcp
Truss threat intelligence via Model Context Protocol and a terminal assistant โ one binary: truss-mcp.
Two surfaces
| Surface | Use for | Auth |
|---|
| Remote (recommended) | Cursor, Claude Desktop, MCP registries | OAuth โ https://api.truss-security.com/mcp |
| Local stdio (legacy) | Air-gap / BYO-key / FilterQL REPL tools | TRUSS_API_KEY โ REST |
Hosted MCP (OAuth, Growth+ gate, five tools) is served by the Truss API. This package ships configs, validate-remote / doctor --remote, CLI search, and optional local stdio. Community accounts cannot consent to hosted MCP.
Not on npm yet. Install from this repo (npm install -g .). After publish: npm install -g @truss-security/truss-agent-mcp.
Quick start
cd truss-agent-mcp
npm install && npm run build
npm install -g .
truss-mcp doctor --remote --strict-oauth
truss-mcp init
truss-mcp search
Node.js 18+. Binary name truss-mcp avoids conflict with @truss-security/truss-sdk's truss command.
What you can run
| Command | What it does |
|---|
truss-mcp search | Guided REPL with live MCP tools (local stdio or remote OAuth token) |
truss-mcp mcp | Local stdio MCP server (legacy / air-gap) |
truss-mcp init | Interactive .env setup |
truss-mcp doctor | Validate keys and API access; --remote runs hosted OAuth doctor |
truss-mcp validate-remote <url> | OAuth + MCP doctor (discovery, DCR, PKCE, tools) |
truss-mcp help | Usage summary |
Guided search workflow
One REPL with MCP tools always connected. The assistant classifies your intent and asks before querying Truss API:
- Knowledge โ Truss platform, cyber security context, threat background
- Build filter โ draft FilterQL, validate, confirm
- Query โ
run executes confirmed filter (default 7 days)
- Format โ
stix for STIX export; JSON summaries in-thread
- Detection rules โ
detect splunk, detect falcon, detect cortex from search results
The assistant offers next steps explicitly: build a filter, refine it, query Truss API, export JSON/STIX, or generate SIEM/EDR hunting queries.
- Wider windows (
run 30, days 30) may use more API quota
- Context-only follow-ups (IOC dedupe, reformat) use thread history without re-querying
Full REPL reference: guides/truss-cli.md
Terminal display (REPL)
truss-mcp search uses color-coded, ASCII-bordered output:
- You โ your message
- MCP โ live tool trace (
โ search_threats on remote, or โ search_products on stdio)
- Results โ structured product table before the assistant summary
- Truss โ assistant reply (cyan), guided offers (yellow), FilterQL blocks (magenta)
Controls: color / color on / color off / color auto ยท env TRUSS_MCP_COLOR ยท standard NO_COLOR=1
MCP host (Cursor / Claude) โ remote OAuth (recommended)
No API key in host config. Growth+ Truss account; browser OAuth consent.
{
"mcpServers": {
"truss-mcp": {
"url": "https://api.truss-security.com/mcp"
}
}
}
Samples: config/cursor.mcp.json ยท config/claude_desktop_config.json ยท guides/client-setup-cursor.md.
Legacy stdio (air-gap)
{
"mcpServers": {
"truss-mcp": {
"command": "truss-mcp",
"args": ["mcp"],
"env": { "TRUSS_API_KEY": "YOUR_KEY" }
}
}
}
See config/cursor.mcp.stdio.json and guides/getting-started.md.
Remote MCP OAuth validation (registry gate)
Use as the OAuth + MCP doctor before registry publish or release. After OAuth it requires search_threats to return at least one Truss product (id + title). The access token stays in memory for that process only unless you pass --save-token.
truss-mcp doctor --remote --strict-oauth
truss-mcp validate-remote https://api.truss-security.com/mcp --strict-oauth
After token exchange it prints an OAuth compatibility checklist (resource URI, redirects, PKCE S256, issuer match, audience vs MCP resource, truss_role), then proves MCP access with real Truss data.
Options:
truss-mcp validate-remote https://api.truss-security.com/mcp --verbose
truss-mcp validate-remote https://api.truss-security.com/mcp --strict-oauth
truss-mcp validate-remote https://api.truss-security.com/mcp --save-token /tmp/truss-mcp-token
truss-mcp validate-remote https://api.truss-security.com/mcp --token-file /tmp/truss-mcp-token
truss-mcp validate-remote https://api.truss-security.com/mcp --port 9877
truss-mcp validate-remote https://api.truss-security.com/mcp --no-open
--verbose โ HTTP statuses, key headers, truncated bodies (tokens redacted)
--strict-oauth โ exit 2 if the OAuth checklist has WARN/FAIL (even when Truss MCP calls succeed)
--save-token PATH โ write the access token for local replay (mode 0600; delete after debugging)
--token-file PATH โ skip browser OAuth; reuse a saved token to re-check MCP access + Truss data
Optional automated OAuth data tests (saved token + TRUSS_RUN_MCP_OAUTH=1) are documented in guides/publishing.md.
Official listing: server.json (com.truss-security/truss-mcp) ยท Tracker: guides/registry-submission.md ยท Internal metadata: config/mcp-registry.json ยท Architecture: docs/05-hosted-mcp-oauth-architecture.md
Configuration
Env load order (shell vars win): ~/.config/truss/env โ ~/.truss/.env โ ./.env
| Variable | Required for | Notes |
|---|
TRUSS_API_KEY | local mcp / stdio search | From Truss dashboard (legacy air-gap only) |
TRUSS_MCP_URL | remote search / doctor | Default https://api.truss-security.com/mcp |
TRUSS_MCP_OAUTH_TOKEN_FILE | remote search | Bearer token from validate-remote --save-token |
LLM_PROVIDER | search | anthropic or openai โ set via init |
LLM_MODEL | search | Set via init |
ANTHROPIC_API_KEY / OPENAI_API_KEY | search | Per provider |
Full list: env.example
Documentation
Guides โ install, REPL, MCP clients, FilterQL examples
Reference โ API contract, tools, architecture (docs/README.md โ docs 01โ06)
Development
npm install && npm run build
npm test
npm run truss:search
Contributors / AI agents: see AGENTS.md for repo operations and conventions.
Publish: guides/publishing.md ยท Changes: CHANGELOG.md
MIT