Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MISP (Malware Information Sharing Platform) is an open-source threat intelligence platform for gathering, sharing, storing, and correlating Indicators of Compromise (IOCs) of targeted attacks, threat
.claude/skills/collecting-threat-intelligence-with-misp/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✗ | = Same ✗ | — | — |
| case-15 | ✗→✗ | = Same ✗ | — | — |
| case-06 | ✗→✗ | = Same ✗ | — | — |
MISP (Malware Information Sharing Platform) is an open-source threat intelligence platform for gathering, sharing, storing, and correlating Indicators of Compromise (IOCs) of targeted attacks, threat intelligence, financial fraud information, vulnerability information, or counter-terrorism information. This skill covers deploying MISP, configuring threat feeds, using the PyMISP API for programmatic access, and building automated collection pipelines that aggregate IOCs from multiple community and commercial sources.
pymisp library installedMISP operates on an event-based model where threat intelligence is organized into events containing attributes (IOCs), objects (structured groupings of attributes), galaxies (threat actor/malware clusters linked to MITRE ATT&CK), and tags for classification. Synchronization between MISP instances uses a pull/push model over HTTPS with API key authentication.
PyMISP is the official Python library to access MISP platforms via their REST API. It supports fetching events, adding/updating events and attributes, uploading samples, and searching across the entire MISP dataset. Authentication uses an API key passed in the Authorization header.
bashgit clone https://github.com/MISP/misp-docker.git cd misp-docker cp template.env .env # Edit .env to set MISP_BASEURL, MISP_ADMIN_EMAIL, MISP_ADMIN_PASSPHRASE docker compose up -d
Enable built-in MISP feeds via the web UI or API:
pythonfrom pymisp import PyMISP misp = PyMISP('https://misp.local', 'YOUR_API_KEY', ssl=False) # List available feeds feeds = misp.feeds() for feed in feeds: print(f"{feed['Feed']['id']}: {feed['Feed']['name']} - Enabled: {feed['Feed']['enabled']}") # Enable CIRCL OSINT Feed misp.enable_feed(feed_id=1) misp.cache_feed(feed_id=1) misp.fetch_feed(feed_id=1)
python# Add abuse.ch URLhaus feed feed_data = { 'name': 'URLhaus Recent URLs', 'provider': 'abuse.ch', 'url': 'https://urlhaus.abuse.ch/downloads/csv_recent/', 'source_format': 'csv', 'input_source': 'network', 'publish': False, 'enabled': True, 'headers': '', 'distribution': 0, 'sharing_group_id': 0, 'tag_id': 0, 'default': False, 'lookup_visible': True } result = misp.add_feed(feed_data) print(f"Feed added: {result}")
pythonfrom pymisp import PyMISP, MISPEvent from datetime import datetime, timedelta misp = PyMISP('https://misp.local', 'YOUR_API_KEY', ssl=False) # Search for events from the last 7 days result = misp.search( controller='events', date_from=(datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d'), type_attribute='ip-dst', to_ids=True, pythonify=True ) for event in result: print(f"Event {event.id}: {event.info}") for attr in event.attributes: if attr.type == 'ip-dst' and attr.to_ids: print(f" IOC: {attr.value} (category: {attr.category})")
python# Export as STIX 2.1 bundle stix_output = misp.search( controller='events', return_format='stix2', tags=['tlp:white'], published=True ) # Export IDS-flagged attributes as Suricata rules suricata_rules = misp.search( controller='attributes', return_format='suricata', to_ids=True, type_attribute=['ip-dst', 'domain', 'url'] ) # Export as CSV for SIEM ingestion csv_output = misp.search( controller='attributes', return_format='csv', type_attribute='ip-dst', to_ids=True )
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.