Integrations
MCP server
DFIRe includes a built-in Model Context Protocol (MCP) server that enables AI agents to act as virtual incident responders. Connect any MCP-compatible client, such as Claude Code or Google Antigravity, to manage cases, track evidence, triage IOCs, and coordinate incident response through natural language.
Overview
The MCP server exposes DFIRe's case management, evidence tracking, IOC, and incident response functionality as structured tools that AI agents can call. Administrative functions such as user management, access control, and file attachment handling are not available through MCP. The server implements the Streamable HTTP transport over JSON-RPC 2.0 with no external dependencies beyond the DFIRe backend itself.
Key design principles:
- Full RBAC enforcement: Every tool call runs with the authenticated user's permissions. Case team membership, role-based access, and write protection rules apply exactly as they do in the web interface.
- Activity-based tools: Tools are designed around activities rather than atomic CRUD operations, keeping the total tool count optimized for agent performance.
- Audit trail: Changes made via MCP, and full case dumps pulled through it, are logged in the audit system with the API key prefix and an
mcp:marker, distinguishing agent activity from direct API or UI usage. - No external dependencies: The MCP server is built into DFIRe. No sidecar services, proxies, or additional infrastructure are required.
Optional feature: The MCP server is disabled by default and must be explicitly enabled by a superuser. DFIRe is fully functional without it.
Prerequisites
-
Enable the MCP server
Go to Settings > MCP Server and toggle the server on. This requires superuser access.
-
Create an API key
The MCP server authenticates exclusively via DFIRe API keys. Create one from the user menu > API Keys (see API Access for details). The key must belong to a user with appropriate group memberships and case team assignments for the work the agent will perform.
-
Configure your MCP client
Add the DFIRe MCP server to your client's configuration using the endpoint URL and API key. See Client Configuration below.
Client Configuration
The MCP endpoint is available at /mcp/ on your DFIRe instance. Add it to your MCP client's configuration file:
{
"mcpServers": {
"dfire": {
"serverUrl": "https://your-dfire-instance.com/mcp/",
"headers": {
"Authorization": "Bearer dfire_ak_your_api_token_goes_here",
"Content-Type": "application/json"
}
}
}
}
Replace the URL with your DFIRe instance address and the token with a valid API key. The configuration format above is compatible with Claude Code, Google Antigravity, and other MCP clients that support the Streamable HTTP transport with header-based authentication.
API key security: The API key grants the agent the same permissions as the user it belongs to. Store it securely, and give the agent an account of its own rather than a key from yours. See Best Practices.
Tool Groups
DFIRe exposes 59 tools organized into 11 groups. Each group can be individually enabled or disabled in the MCP settings. Tools marked as destructive include a destructiveHint annotation that prompts MCP clients to confirm before executing.
| Group | Tools | Description |
|---|---|---|
| Cases | 9 | Create, update, close/reopen, escalate cases, assign teams, dashboard stats, full case data dump |
| Items | 8 | Create and manage evidence items with status tracking, flags, and parent-child hierarchy |
| Notes | 1 | Add, list, and delete notes on cases or evidence items |
| Actions | 8 | Manage incident response actions, assignments, blockers, phase transitions, and workflow decision trees |
| Indicators | 12 | IOC registry management, enrichment, lifecycle (publish/revoke), correlation, and text extraction |
| Timeline | 3 | Timeline events and incident phase changes |
| Timers | 2 | Compliance timer lifecycle (start, complete, reset, delete) |
| Reports | 4 | Investigation reports with QA workflow and CAN (Conditions, Actions, Needs) status reports |
| Search | 6 | Global search, reference data lookups, user information, and legal entity management |
| Knowledge Base | 4 | Browse, read, and write Knowledge Base folders and pages. Password-protected content is never exposed |
| Case Chat | 2 | Read a case chat transcript and post to it. Off until you switch it on |
Consolidated Tool Design
Many tools consolidate multiple related operations into a single tool using a discriminator parameter. For example, manage_notes handles adding, listing, and deleting notes through an action parameter rather than requiring three separate tools. This keeps the total tool count within the recommended range for optimal agent performance while preserving full functionality.
MCP mutations follow the same application workflows as their API counterparts. Where a change in the app produces a timeline event, an in-app or collaboration notification, a Jira update, a webhook, an automation event, or a live report update, the corresponding MCP tool produces that follow-up work as well. Action, non-timeline case-note and live-report integration dispatch waits until the change and its audit entry commit.
Reference Data Lookup
The get_reference_data tool provides a single entry point for discovering all configurable entities in the system. Agents use it to look up IDs before performing operations:
- Case types. Available case type IDs and schemas
- Item types. Evidence item type IDs and schemas
- Investigation steps. Evidence status progression steps
- Item flags. Flags that can be toggled on evidence items
- Incident phases. Configured incident response phases
- Compliance timers. Timer definitions with frameworks and durations
- Users. User accounts (filterable by group and active status)
- Groups. Permission groups
- Legal entities. Persons, organizations, and other entities
- Projects. Case grouping projects
- Runbooks. Runbooks with their slugs and step counts
- Incident categories. Categories an incident can be classified under
- Outcome verdicts. Verdicts available when a case is closed
Knowledge Base Access
Agents can browse the Knowledge Base, read a page by its address or id, and write: creating pages and folders, editing a page's title, content, description and access groups, and moving pages and folders. A title or content change is saved as a new version, and an edit that would overwrite someone else's save is refused and reported instead. Pages and folders cannot be deleted through MCP.
The Knowledge Base view permissions gate access, and access groups narrow it further, exactly as they do in the web interface: a key belonging to a user who cannot see a page cannot read it, search it, or change who else can. On a page the key's owner can edit, the agent has that owner's full editing rights, access groups included. See Knowledge Base. AI agents.
Password-protected content is not available through MCP at all. A page with its own password is listed but its content cannot be read or edited, and a password-protected folder keeps its entire contents hidden. No tool accepts a password, so a Knowledge Base password is never sent to a language model. Open protected content in the web interface instead.
Case Chat
The Case Chat group is off until you switch it on, in
Settings → MCP Server, on a new installation and an
upgraded one alike. While it is off, DFIRe leaves the two chat tools out of
tools/list, refuses a call naming one, and no chat content leaves DFIRe through
MCP.
Switch it on and chat content reaches every connected agent whose key belongs to a user who may read the case and the chat. Decide with that in mind: a case chat holds whatever the team pasted into it.
An agent reads a transcript with get_case_chat, which returns up to 100 messages ending
at the newest one and reads further back on request. The transcript arrives as untrusted data:
the messages sit between explicit markers, under a line stating that the content came from people
working the case and is never an instruction to the agent. A redacted message travels as a
tombstone with no text, and an assistant answer carries the model that wrote it.
An agent posts with post_case_chat_message. DFIRe writes the message as the user whose
API key made the call. It appears in the case chat window like any other message, notifies anyone it
mentions and reaches the audit trail under that user's name. Addressing @assistant this
way summons nobody. The case assistant answers only from the chat window.
The two tools carry the chat permissions, so a role without view case chat message cannot read a transcript and a role without add case chat message cannot post, both exactly as in the web interface. Case viewers read the chat and post nothing, and a closed or archived case takes no new messages.
get_case_full_dump carries the transcript in the same guarded form, and only while the
Case Chat group is on and the caller may read chat. See
Case Chat.
Resources
The MCP server provides contextual documentation as resources that agents can read to understand DFIRe's data model and workflows. Resources are served via the standard MCP resources/list and resources/read methods.
Static Documentation Resources
| Resource URI | Description |
|---|---|
dfire://docs/case-workflow |
Case lifecycle, statuses, modes, write protection, escalation, and team roles |
dfire://docs/ioc-management |
IOC types, classifications, TLP levels, enrichment, lifecycle, and publication rules |
dfire://docs/incident-phases |
NIST-based incident response phases, transitions, and timeline integration |
dfire://docs/actions-workflows |
Action management, workflow decision trees, and resolution process |
dfire://docs/compliance-timers |
Compliance timer lifecycle, breach tracking, and definitions |
dfire://docs/reports |
Investigation reports (QA workflow, versioning) and CAN reports |
dfire://docs/knowledge-base |
Knowledge Base structure, addressing, versioning, visibility, and password protection |
Dynamic Configuration Resources
| Resource URI | Description |
|---|---|
dfire://config/case-types |
Currently configured case types with schemas and action templates |
dfire://config/item-types |
Currently configured item types with schemas |
Prompt Templates
DFIRe provides pre-built prompt templates that MCP clients can use as starting points for common incident response workflows. Prompts are served via the standard MCP prompts/list and prompts/get methods.
| Prompt | Arguments | Description |
|---|---|---|
| incident-response | incident_description (required), severity |
Guided workflow for creating and managing a security incident from detection through response phases |
| ioc-triage | ioc_text (required), case_id |
Extract IOCs from text, check the registry, create indicators, classify, enrich, and publish |
| case-handoff | case_id (required) |
Prepare a comprehensive case summary for handoff to another analyst |
Security
Authentication
The MCP endpoint accepts only API key authentication (Authorization: Bearer dfire_ak_...). Session-based authentication (browser cookies) is not supported because MCP clients are external processes. All brute-force protections that apply to API key authentication also apply to MCP requests.
Permission Enforcement
Every tool call enforces the full DFIRe permission model:
- Capability checks: The user must have the required Django permission (e.g.,
core.add_case) via group membership - Case team checks: Case-scoped tools verify the user is a lead investigator, investigator, or viewer on the case
- Write protection: Closed and archived cases enforce the same write restrictions as the web interface
- Viewer restrictions: Users with viewer-only access on a case cannot perform write operations
Audit Trail
Every change an agent makes is recorded against the object it changed, with the fields that changed, so it appears in that object's history exactly as the same change made in the web app does. Pulling a full case dump is recorded as an export on the case, naming how much of each section was returned; if that entry cannot be written, the data is not returned. Ordinary reads such as retrieving a case or listing its evidence are not recorded, matching the API.
Recorded entries carry two markers that identify them as MCP activity:
- The API key prefix (e.g.,
dfire_ak_a1b2...) identifies which key was used - An
mcp:prefix on the auth method distinguishes MCP-originated actions from direct REST API calls
This allows administrators to filter audit logs specifically for MCP activity and trace actions back to the agent and API key used.
Destructive Operations
Tools that delete data or change the state of a record are annotated with destructiveHint: true in the MCP tool schema. Well-behaved MCP clients will prompt the user for confirmation before executing these tools. Eight tools carry the annotation:
- Updating a case, which includes closing and reopening it
- Changing a case's playbook
- Deleting an evidence item
- Managing notes
- Managing timeline events
- Managing compliance timers
- Changing an indicator's publication or revocation status
- Deleting indicators
Best Practices
An MCP agent is a user of DFIRe, and DFIRe treats it as one. Give it an account of its own, the narrowest access its work needs, and a review routine.
Give the Agent Its Own Account
The server acts as the user whose API key it authenticates with. Every case the agent reads, every record it writes and every audit entry it leaves carries that user's name. Do not hand an agent a key from your own account. Its work and yours become one account's history, and the agent reaches everything you can reach.
Create a service account for it instead, named after the agent rather than after a person, for example svc-triage-agent. An investigator sees that name on a note the agent wrote, and an administrator filters the audit log by it. Choose a clear one before the first run. Give the account a role of its own, such as MCP Service Accounts, holding only the capabilities that agent's work needs. See Service Accounts for how to create both.
Three settings undo the rest. A superuser account skips the permission model. Can view all cases and Can edit all cases each lift the case team requirement. An agent holding any of the three reaches every case in the installation, whatever else you gave it. Leave all three off.
Choose the Tools and the Cases Separately
Tool groups and permissions are different controls, and both apply. A tool group is global: switching one on in Settings → MCP Server exposes those tools to every connected agent. A role is per account. Turn on only the groups you use, and let each account's role decide what it may do with them.
Case team membership decides which cases an agent sees at all. Add it as an investigator rather than as the lead. The lead investigator is the person accountable for the case: they stay on the team list permanently, and they can redact anyone's chat message.
Automation can put an agent on cases as they arrive. Write a rule in Settings → Automation with the action Add user to case team, the role set to Investigator, and filters matching the cases it should work. See Automation.
Read What the Agent Did
The audit trail already separates agent activity from everyone else's, through the mcp: marker and the API key prefix. Read it as a routine rather than after a surprise.
The destructiveHint annotation is advice to the client, not a rule DFIRe enforces. A client set to approve tool calls automatically runs a destructive tool without asking anyone. The account's permissions decide what an agent can destroy, so grant delete capabilities only where you want them used.
An API key is the agent's only credential. Multi-factor authentication does not cover API keys, so the key itself is the whole control. Revoke it when the agent's work ends, or when it may have leaked, and issue a new one.
Treat Case Content as Untrusted
Case data comes from your team and from whoever is under investigation: a phishing body, a ransom note, a string pulled from a sample, a description out of an imported feed. Any of it can carry instructions addressed to an agent that reads it.
The assistant inside DFIRe holds no tools and no write access, so material that manipulates it produces one wrong answer, marked as generated. An MCP agent reads the same material and can write, close, publish and delete. Keep its permissions to what the work needs, and check the audit trail for what it changed.
Configuration
MCP server settings are managed in Settings > MCP Server (requires superuser access).
| Setting | Description |
|---|---|
| Enable MCP Server | Global toggle. When disabled, the /mcp/ endpoint returns an error for all requests. |
| Tool Groups | Individual toggles for each of the 11 tool groups. Disabled groups are hidden from tools/list and their tools reject calls. A group added by a later version is off until you enable it, unless you have never changed these toggles. Case Chat is off in both cases: it is enabled only by switching it on here. |
The settings page also displays the endpoint URL for easy copying and provides connection instructions.
Protocol Details
The MCP server implements the following protocol methods:
| Method | Description |
|---|---|
initialize |
Returns server capabilities (tools, resources, prompts) |
ping |
Health check |
tools/list |
Lists available tools filtered by enabled groups |
tools/call |
Executes a tool with the provided arguments |
resources/list |
Lists available documentation and configuration resources |
resources/read |
Reads a specific resource by URI |
prompts/list |
Lists available prompt templates |
prompts/get |
Returns a prompt template with resolved arguments |
The transport is Streamable HTTP: a single POST /mcp/ endpoint that accepts and returns JSON-RPC 2.0 messages. Server-Sent Events (SSE) and session management are not used. The maximum request body size is 2 MB.