agentleFS
Liberty91LTDLiberty91LTD/cti-skills/skills/lookup-misp/SKILL.md

lookup-misp

Skill35 starsChanged 46 days agoMITView on GitHub

Use when you need to query a MISP instance for existing events/attributes/objects, or push new intel into MISP — adding attributes to an event, creating an event, or uploading a STIX 2 bundle as one or more events. Two-way integration. Commonly invoked by /ip-investigation and friends to check whether an indicator is already known to your CTI sharing community, and by analytical skills that want to publish their findings back to MISP. Reads $MISP_URL and $MISP_API_KEY.

  • Reads credentials

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All commands accept --dry-run (preview the HTTP call without sending) and --insecure (skip TLS verification, common on internal MISP …

    line 90
  2. Distinctive:

    Default to 0 while drafting.

    line 107
  3. Very specific:

    Run an investigation (e.g.

    line 113
  4. Very specific:

    Default rating for downstream /score-source: B2 (usually reliable, probably true).

    line 149
  5. Very specific:

    Read the event tags too: admiralty-scale:source-reliability="b" and admiralty-scale:information-credibility="2" are common.

    line 156

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

lookup-misp

Two-way bridge to a MISP threat-intelligence platform. Unlike the other lookup-* skills, this one also writes — it can create events, add attributes, tag events, and import STIX 2 bundles. Treat write commands as deliberate actions; don't use them in autonomous enrichment loops.

When to invoke

Read:

  • An indicator was found by another lookup (VT, OTX, …) — check whether MISP already has it
  • An analyst wants the most recent published events for a threat actor or campaign
  • You need to export a slice of MISP as a STIX 2 bundle for sharing

Write:

  • A finished investigation produced indicators that should be shared with the community
  • An existing event needs to be enriched with newly observed attributes
  • A STIX 2 bundle written via /stix-bundle should be pushed into MISP as event(s)

Do NOT invoke for:

  • Bulk enrichment (use VT/OTX first; only push the high-confidence subset to MISP)
  • Pivoting on raw indicators — MISP is a curated dataset, not a scanning service. Use Shodan/Censys for that.

How to invoke

Single Python CLI (stdlib only — no install).

Read operations

# Search published events containing a value, optionally filtered by tag/date/published
python3 tools/clis/misp.py search-events --value 1.2.3.4 --tag tlp:white --limit 20
python3 tools/clis/misp.py search-events --tag misp-galaxy:threat-actor=\"APT28\" --from 2026-01-01

# Search attributes (the most common indicator lookup)
python3 tools/clis/misp.py search-attributes --type ip-dst --value 1.2.3.4
python3 tools/clis/misp.py search-attributes --type sha256 --value <hash> --limit 5

# Inspect a single event (full attribute + object detail)
python3 tools/clis/misp.py get-event 12345

# Search objects within an event
python3 tools/clis/misp.py search-objects --event-id 12345 --name file

# Resolve tag names → ids (needed before applying tags)
python3 tools/clis/misp.py list-tags --search tlp

# Export a search result as a STIX 2 bundle (cross-platform sharing)
python3 tools/clis/misp.py search-events --tag malware-family:lockbit --returnFormat stix2 > out.json

Write operations

# Add one attribute to an existing event
python3 tools/clis/misp.py add-attribute 12345 \
  --type ip-dst --value 185.220.101.45 \
  --category 'Network activity' \
  --comment 'C2 observed 2026-04-25' \
  --to-ids true \
  --distribution 1 \
  --tags 'tlp:amber,kill-chain:command-and-control'

# Create a new event (skeleton — add attributes/objects after)
python3 tools/clis/misp.py create-event \
  --info 'APT28 C2 cluster — April 2026' \
  --threat-level 2 --analysis 1 \
  --distribution 1 \
  --tags 'tlp:amber,misp-galaxy:threat-actor="APT28"'

# Upload a STIX 2 bundle as one or more events (the canonical bulk-import path)
python3 tools/clis/misp.py upload-stix data/stix-bundles/2026-04-26-apt28-c2.json \
  --publish --galaxies-as-tags --force-contextual-data

# Tag an existing event (resolves tag name → id automatically)
python3 tools/clis/misp.py tag-event 12345 'tlp:amber'

# Publish an event (makes it visible to other orgs at the chosen distribution)
python3 tools/clis/misp.py publish-event 12345

All commands accept --dry-run (preview the HTTP call without sending) and --insecure (skip TLS verification, common on internal MISP deployments).

The CLI exits 2 if MISP_URL or MISP_API_KEY is unset (when not in dry-run). Report missing credentials; do not fabricate.

Distribution levels

--distribution N on add-attribute and create-event:

NMeaningUse when
0Your org onlyDrafting, unverified, sensitive sources
1This communityPublished intel for your MISP server's users
2Connected communitiesTrusted federated sharing
3All communitiesOpen community sharing
4Sharing groupNamed-partner sharing (needs sharing-group id)
5Inherit eventAttributes that should track their parent event

Default to 0 while drafting. Bump to 1+ only after review and TLP alignment.

STIX 2 round-tripping

This is the killer feature. The pack already writes STIX 2.1 bundles via /stix-bundle; upload-stix pushes them into MISP intact:

  1. Run an investigation (e.g. /ip-investigation)
  2. Build a STIX bundle from the findings (/stix-bundle)
  3. Apply TLP + Admiralty (/apply-tlp, /score-source)
  4. python3 tools/clis/misp.py upload-stix <bundle.json> --galaxies-as-tags
  5. Review in MISP → add context → publish

For exporting MISP → STIX, set --returnFormat stix2 on search-events.

Gotcha: MISP's STIX 2 importer rejects inline TLP marking-definition objects (the STIX 2.0 definition_type: "tlp" shape that /stix-bundle produces). Either drop the marking-definition from the bundle and apply TLP via tag-event after import, or trim the bundle to references only. See tools/integrations/misp.md for details.

Response format

Read commands return:

source: misp
operation: search-events | search-attributes | get-event | ...
query_time: <ISO8601>
filters: <echoed filters>
count: <n>
events|attributes|objects: [<distilled summaries>]
raw: <full response on get-event for completeness>

Write commands return:

source: misp
operation: add-attribute | create-event | upload-stix | ...
query_time: <ISO8601>
event_id|event|attribute: <created/updated object summary>
result|raw: <MISP response envelope>

Source reliability (Admiralty default)

Default rating for downstream /score-source: B2 (usually reliable, probably true). MISP is a sharing platform — the underlying org's reliability matters more than MISP itself. Adjust based on the event's Org/Orgc:

  • Sector CSIRT or national CERT (CIRCL, FIRST, ISAC) → A1
  • Reputable vendor (Mandiant, CrowdStrike, ESET) → A2 / B2
  • Anonymous community contributor → C3
  • Your own org (self-hosted) → A1 — primary source

Read the event tags too: admiralty-scale:source-reliability="b" and admiralty-scale:information-credibility="2" are common. They are the Admiralty rating of the party that set them. Show them as such.

Evidence grades are a different instrument. Admiralty ratings apply to lookup results and single items; the evidence grade from /quality-of-information-check applies to claims from documents; neither is converted into the other. When pushing graded claims, do not tag them with the admiralty-scale taxonomy. Use the plain tags cti-skills:access-level="direct" and cti-skills:claim-support="firm" per attribute, as set out in /ioc-export. When reading, a MISP confidence value becomes claim support by the import table in /ioc-export, with access level indirect and the flag derived_from_confidence.

Operational notes

  • Distribution is sticky. Once a published event syncs to other servers, it can't be recalled. Default to draft (0) and review before publishing.
  • Tagging matters. TLP, kill-chain, and galaxy tags drive how MISP routes events to subscribers. Don't skip them.
  • PyMISP exists — for complex workflows (sightings, warninglists, feed management) the PyMISP library is the right tool. This CLI covers the 80% case for query + write, stdlib-only.
  • Don't autopublish. --publish on upload-stix is convenient but bypasses the human review step. Skip it for intel you haven't manually validated.

Related skills

  • /stix-bundle — write STIX 2.1 bundles that this CLI's upload-stix consumes
  • /lookup-virustotal, /lookup-otx — community reputation lookups; chain before pushing to MISP
  • /score-source — apply Admiralty rating before publishing
  • /apply-tlp — set TLP markings before publishing
  • /intelligence-sharing — broader sharing-model context (TAXII, ISACs, MISP communities)
  • /lookup-opencti — the knowledge-base sibling; MISP = community exchange, OpenCTI = internal knowledge graph
  • /ip-investigation, /domain-investigation, /hash-investigation, /url-investigation — produce findings that MISP write commands consume

See also

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.