Look up IOCs and search threat-intel reports, YARA rules, MITRE ATT&CK ids and CVEs from rosti.dev
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: your own Rösti API key from https://rosti.dev/api for your own quota. Without it, sign in with Rösti or use the shared anonymous quota.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List the values Rösti uses for IOC types, IOC tags (with descriptions), IOC categories and export formats, and explain the false-positive risk scale. Use these values for the filters of the search and list tools.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http rosti https://mcp.rosti.dev/mcp
Headers
X-API-Key (optional, not in the config above): Optional: your own Rösti API key from https://rosti.dev/api for your own quota. Without it, sign in with Rösti or use the shared anonymous quota.List the values Rösti uses for IOC types, IOC tags (with descriptions), IOC categories and export formats, and explain the false-positive risk scale. Use these values for the filters of the search and list tools.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Find other Rösti reports that share IOCs with one report, most shared IOCs first, with the shared values.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of related reports |
| report_id* | string | Rösti report id, e.g. dq13KaQv |
{
"type": "object",
"required": [
"report_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Maximum number of related reports"
},
"report_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Rösti report id, e.g. dq13KaQv"
}
},
"additionalProperties": false
}Get a download link for one report export, e.g. CSV or MISP. The link is signed and expires after 15 minutes; it is meant to be opened by the user, not downloaded here.
| Argument | Type | Description |
|---|---|---|
| format* | string | Export format id, e.g. csv or misp; get_report lists the formats available for a report |
| report_id* | string | Rösti report id, e.g. dq13KaQv |
{
"type": "object",
"required": [
"report_id",
"format"
],
"properties": {
"format": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]{1,40}$",
"description": "Export format id, e.g. csv or misp; get_report lists the formats available for a report"
},
"report_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Rösti report id, e.g. dq13KaQv"
}
},
"additionalProperties": false
}Get one Rösti report: metadata, MITRE ATT&CK ids, CVEs, available export formats, and how many of its IOCs there are per type and per tag. Use list_report_iocs for the IOCs themselves and get_yara_rules for its YARA rules.
| Argument | Type | Description |
|---|---|---|
| report_id* | string | Rösti report id, e.g. dq13KaQv |
{
"type": "object",
"required": [
"report_id"
],
"properties": {
"report_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Rösti report id, e.g. dq13KaQv"
}
},
"additionalProperties": false
}Get the YARA rules published with one Rösti report, with their full source.
| Argument | Type | Description |
|---|---|---|
| report_id* | string | Rösti report id, e.g. dq13KaQv |
{
"type": "object",
"required": [
"report_id"
],
"properties": {
"report_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Rösti report id, e.g. dq13KaQv"
}
},
"additionalProperties": false
}List the IOCs of one Rösti report, optionally filtered by type, tag, category or text. IOCs with the same entity_ref belong together, e.g. the MD5, SHA-1 and SHA-256 of one file. Each IOC carries its IDS flag and false-positive risk.
| Argument | Type | Description |
|---|---|---|
| tags | any | IOC tags, e.g. c2, phishing |
| limit | integer | IOCs per page |
| query | any | Text to find in IOC values or comments |
| types | any | IOC types, e.g. domain, ip-dst, sha256 |
| cursor | any | next_cursor from a previous call, to get the next page |
| report_id* | string | Rösti report id, e.g. dq13KaQv |
| categories | any | IOC categories, e.g. network_activity |
{
"type": "object",
"required": [
"report_id"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC tags, e.g. c2, phishing"
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "IOCs per page"
},
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "Text to find in IOC values or comments"
},
"types": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC types, e.g. domain, ip-dst, sha256"
},
"cursor": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "next_cursor from a previous call, to get the next page"
},
"report_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Rösti report id, e.g. dq13KaQv"
},
"categories": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC categories, e.g. network_activity"
}
},
"additionalProperties": false
}List the publishers whose reports Rösti collects (vendor blogs, CERTs, researchers), with report counts, the newest report date and whether the source is still active. Source ids work as the sources filter of search_reports.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Sources per page |
| query | any | Text to find in source names, e.g. 'crowdstrike' |
| cursor | any | next_cursor from a previous call, to get the next page |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Sources per page"
},
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Text to find in source names, e.g. 'crowdstrike'"
},
"cursor": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "next_cursor from a previous call, to get the next page"
}
},
"additionalProperties": false
}Check whether one IOC (indicator of compromise) appears in Rösti's threat-intelligence reports. A defanged value (hxxps://evil[.]com, 1.2.3[.]4) is refanged before the lookup; `input` then shows the value as given. Matching is exact, with a case-insensitive fallback. Returns every report the value appears in (newest first, up to max_matches) with the IOC's type, category, tags, IDS flag, comment and false-positive risk.
| Argument | Type | Description |
|---|---|---|
| value* | string | One IOC value, e.g. an IP address, domain, URL, file hash or e-mail address, plain or defanged (e.g. hxxps://evil[.]com) |
| max_matches | integer | Maximum number of reports listed |
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "One IOC value, e.g. an IP address, domain, URL, file hash or e-mail address, plain or defanged (e.g. hxxps://evil[.]com)"
},
"max_matches": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of reports listed"
}
},
"additionalProperties": false
}Check many IOCs (indicators of compromise) at once against Rösti's threat-intelligence reports. Defanged values (hxxps://evil[.]com, 1.2.3[.]4, user[at]evil[.]com) are refanged before the lookup; `refanged` shows which. Matching is exact, with a case-insensitive fallback. For each value that is found, returns the reports it appears in (newest first) with the IOC's type, category, tags, IDS flag, comment and false-positive risk. Values that are not found are listed in `not_found`. Use lookup_ioc for all matches of a single value.
| Argument | Type | Description |
|---|---|---|
| values* | array | IOC values such as IP addresses, domains, URLs, file hashes (MD5, SHA-1, SHA-256) or e-mail addresses, plain or defanged (e.g. hxxps://evil[.]com). Surrounding whitespace and duplicates are ignored. At most 1000 values. |
| max_matches_per_value | integer | Maximum number of reports listed per found value |
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
},
"maxItems": 1000,
"minItems": 1,
"description": "IOC values such as IP addresses, domains, URLs, file hashes (MD5, SHA-1, SHA-256) or e-mail addresses, plain or defanged (e.g. hxxps://evil[.]com). Surrounding whitespace and duplicates are ignored. At most 1000 values."
},
"max_matches_per_value": {
"type": "integer",
"default": 3,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of reports listed per found value"
}
},
"additionalProperties": false
}Search IOCs across all Rösti reports by text, type, tag, category and creation time. Without filters, lists IOCs from all reports. Each IOC carries its report id (use get_report for the report), type, category, tags, IDS flag, comment and false-positive risk. Use lookup_ioc or lookup_iocs to check whether specific values are known.
| Argument | Type | Description |
|---|---|---|
| tags | any | IOC tags, e.g. c2, phishing (see describe_taxonomy) |
| exact | boolean | Require the value or comment to equal the query instead of containing it |
| limit | integer | IOCs per page |
| query | any | Text to find in IOC values or comments, e.g. 'mcrosoft' or 'C2 server'. Defanged values are refanged. |
| since | any | Only IOCs created or updated after this date (YYYY-MM-DD) or timestamp (YYYY-MM-DDTHH:MM:SSZ) |
| types | any | IOC types, e.g. domain, ip-dst, sha256 (see describe_taxonomy) |
| cursor | any | next_cursor from a previous call, to get the next page |
| categories | any | IOC categories, e.g. network_activity (see describe_taxonomy) |
Search Rösti's threat-intelligence reports by text, source, CVE, MITRE ATT&CK id and publication date. Returns report summaries: title, date, source, authors, tags, counts of IOCs, YARA rules and MITRE ids, and links to the original report and rosti.dev. Use get_report for the details of one report.
| Argument | Type | Description |
|---|---|---|
| cves | any | Reports referencing any of these CVEs, e.g. CVE-2021-44228 |
| sort | string | Sort order |
| limit | integer | Reports per page |
| query | any | Text to find in report titles or authors, e.g. 'lumma' |
| cursor | any | next_cursor from a previous call, to get the next page |
| sources | any | Source ids, e.g. asec, crowdstrike (see list_sources) |
| mitre_ids | any | Reports referencing any of these MITRE ATT&CK ids, e.g. T1566.001 |
| published_after | any | Reports published on or after this date (YYYY-MM-DD) |
| published_before |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 4, 2026.
{
"type": "object",
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC tags, e.g. c2, phishing (see describe_taxonomy)"
},
"exact": {
"type": "boolean",
"default": false,
"description": "Require the value or comment to equal the query instead of containing it"
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "IOCs per page"
},
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "Text to find in IOC values or comments, e.g. 'mcrosoft' or 'C2 server'. Defanged values are refanged."
},
"since": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2}))?$"
},
{
"type": "null"
}
],
"default": null,
"description": "Only IOCs created or updated after this date (YYYY-MM-DD) or timestamp (YYYY-MM-DDTHH:MM:SSZ)"
},
"types": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC types, e.g. domain, ip-dst, sha256 (see describe_taxonomy)"
},
"cursor": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "next_cursor from a previous call, to get the next page"
},
"categories": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "IOC categories, e.g. network_activity (see describe_taxonomy)"
}
},
"additionalProperties": false
}| any |
| Reports published on or before this date (YYYY-MM-DD) |
{
"type": "object",
"properties": {
"cves": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "Reports referencing any of these CVEs, e.g. CVE-2021-44228"
},
"sort": {
"enum": [
"newest",
"oldest",
"recently_updated",
"most_iocs",
"most_yara_rules",
"most_mitre_ids"
],
"type": "string",
"default": "newest",
"description": "Sort order"
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Reports per page"
},
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"default": null,
"description": "Text to find in report titles or authors, e.g. 'lumma'"
},
"cursor": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"default": null,
"description": "next_cursor from a previous call, to get the next page"
},
"sources": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "Source ids, e.g. asec, crowdstrike (see list_sources)"
},
"mitre_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^[^,]{1,100}$"
},
"maxItems": 50
},
{
"type": "null"
}
],
"default": null,
"description": "Reports referencing any of these MITRE ATT&CK ids, e.g. T1566.001"
},
"published_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"default": null,
"description": "Reports published on or after this date (YYYY-MM-DD)"
},
"published_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"default": null,
"description": "Reports published on or before this date (YYYY-MM-DD)"
}
},
"additionalProperties": false
}