Opencti MCP Server

A Model Context Protocol server

Local serverstdioTypeScript

What is the Opencti MCP MCP server?

Most database access work still happens through a UI a human drives. Opencti MCP MCP server moves it into the conversation instead. A Model Context Protocol server.

The short version

To install OpenCTI Server for Claude Desktop automatically via Smithery:

OpenCTI MCP Server is a Model Context Protocol (MCP) server that provides seamless integration with OpenCTI (Open Cyber Threat Intelligence) platform. It enables querying and retrieving threat intelligence data through a standardized interface.

  • Fetch and search threat intelligence data
  • Get latest reports and search by ID
  • Search for malware information
  • Query indicators of compromise
  • Search for threat actors
  • User and group management

The tools it exposes

The server publishes 14 tools. What each one is for:

  • Reports — The Reports tool exposed by this server
  • get_latest_reports — Retrieves the most recent threat intelligence reports. typescript { "name": "get_latest_reports", "arguments": { "first": 10 // Optional, defaults to
  • get_report_by_id — Retrieves a specific report by its ID. typescript { "name": "get_report_by_id", "arguments": { "id": "report-uuid" // Required } }
  • search_malware — Searches for malware information in the OpenCTI database. typescript { "name": "search_malware", "arguments": { "query": "ransomware", "first": 10 //
  • search_indicators — Searches for indicators of compromise. typescript { "name": "search_indicators", "arguments": { "query": "domain", "first": 10 // Optional, defaults
  • search_threat_actors — Searches for threat actor information. typescript { "name": "search_threat_actors", "arguments": { "query": "APT", "first": 10 // Optional, defaults
  • get_user_by_id — Retrieves user information by ID. typescript { "name": "get_user_by_id", "arguments": { "id": "user-uuid" // Required } }
  • list_users — Lists all users in the system. typescript { "name": "list_users", "arguments": {} }
  • list_groups — Lists all groups with their members. typescript { "name": "list_groups", "arguments": { "first": 10 // Optional, defaults to 10 } }
  • list_attack_patterns — Lists all attack patterns in the system. typescript { "name": "list_attack_patterns", "arguments": { "first": 10 // Optional, defaults to 10 } }
  • get_campaign_by_name — Retrieves campaign information by name. typescript { "name": "get_campaign_by_name", "arguments": { "name": "campaign-name" // Required } }
  • list_connectors — Lists all system connectors. typescript { "name": "list_connectors", "arguments": {} }

What it needs from you

Configuration is passed through the environment: OPENCTI_URL, OPENCTI_TOKEN. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.

  • Node.js 16 or higher - Access to an OpenCTI instance - OpenCTI API token

Getting it running

@smithery/cli on npm is all you need. Most clients run it directly, so configuration is a few lines and a restart.

How it compares

Plenty of database access servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. Opencti MCP's toolset — Reports, get_latest_reports, get_report_by_id and 11 more — is a fair guide to whether it matches your workflow. It is maintained by Spathodea-Network; worth a glance at recent repository activity before you build anything load-bearing on it.

SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.

Things to watch

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 14 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Opencti MCP.
  • Missing credentials fail quietly in some clients — if no tools show up, check the environment block first.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

Available tools

ToolWhat it does
ReportsThe Reports tool exposed by this server.
get_latest_reportsRetrieves the most recent threat intelligence reports. typescript { "name": "get_latest_reports", "arguments": { "first": 10 // Optional, defaults to 10 } }
get_report_by_idRetrieves a specific report by its ID. typescript { "name": "get_report_by_id", "arguments": { "id": "report-uuid" // Required } }
search_malwareSearches for malware information in the OpenCTI database. typescript { "name": "search_malware", "arguments": { "query": "ransomware", "first": 10 // Optional, defaults to 10 } }
search_indicatorsSearches for indicators of compromise. typescript { "name": "search_indicators", "arguments": { "query": "domain", "first": 10 // Optional, defaults to 10 } }
search_threat_actorsSearches for threat actor information. typescript { "name": "search_threat_actors", "arguments": { "query": "APT", "first": 10 // Optional, defaults to 10 } }
get_user_by_idRetrieves user information by ID. typescript { "name": "get_user_by_id", "arguments": { "id": "user-uuid" // Required } }
list_usersLists all users in the system. typescript { "name": "list_users", "arguments": {} }
list_groupsLists all groups with their members. typescript { "name": "list_groups", "arguments": { "first": 10 // Optional, defaults to 10 } }
list_attack_patternsLists all attack patterns in the system. typescript { "name": "list_attack_patterns", "arguments": { "first": 10 // Optional, defaults to 10 } }
get_campaign_by_nameRetrieves campaign information by name. typescript { "name": "get_campaign_by_name", "arguments": { "name": "campaign-name" // Required } }
list_connectorsLists all system connectors. typescript { "name": "list_connectors", "arguments": {} }
list_status_templatesLists all status templates. typescript { "name": "list_status_templates", "arguments": {} }
get_file_by_idRetrieves file information by ID. typescript { "name": "get_file_by_id", "arguments": { "id": "file-uuid" // Required } }

How to install the Opencti MCP MCP server

{
  "mcpServers": {
    "opencti": {
      "command": "npx",
      "args": ["-y", "@smithery/cli"],
      "env": {
        "OPENCTI_URL": "your-value",
        "OPENCTI_TOKEN": "your-value"
      }
    }
  }
}

Add to claude_desktop_config.json, then restart Claude Desktop.

Configuration

  • Node.js 16 or higher - Access to an OpenCTI instance - OpenCTI API token
VariableDescriptionRequired
OPENCTI_URLEndpoint or connection string the server talks to.Yes
OPENCTI_TOKENCredential the server authenticates with.Yes

Example prompts to try

  • Use Opencti MCP to Reports.
  • Use Opencti MCP to get latest reports.
  • Use Opencti MCP to get report by id.

Frequently asked questions

It connects Opencti MCP to MCP-compatible AI assistants such as Claude and Cursor, exposing 14 tools (Reports, get_latest_reports, get_report_by_id, and more) that the assistant can call on your behalf. Instead of copying data back and forth by hand, the assistant works with Opencti MCP directly.