Add IsMalicious threat-intelligence MCP catalogue entry

Open Beginner friendly
#721 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@hexablob is already working on this.

Since Oct 3, 2026.

  • #722 by @hexablob — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
86/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
node.js, python
Domain
tooling

Research direction

Start with AGENTS.md, integrations/README.md, integrations/catalog.schema.json, and sibling entries such as brave-search or firecrawl. Add integrations/catalog/ismalicious.json with the specified stdio command, required environment fields, setup URL, metadata, and user-facing caveats; run npm run build:integrations and the two listed pytest targets. Done means the generated index is synchronized and all checks pass without changing other files.

Written by the indexing model from the issue text.

Description

priority:low ready-for-dev

Problem

OpenHands has no IsMalicious integration configuration in its current curated catalogue. Users manually configure the stdio command and matching API key/secret, and the catalogue cannot present those required secret fields.

Proposed change

Add integrations/catalog/ismalicious.json with npx -y @ismalicious/[email protected], two required password fields, and the public setup documentation. Regenerate integrations/catalog-index.js using the existing build command. Version 0.3.0 was published on September 25 and clears the seven-day dependency rule; newer versions are deliberately not required.

This exposes optional IOC reputation, CVE and Gate tools. It does not install mandatory middleware or guarantee inspection of every agent input/result. An IsMalicious account and plan quotas apply.

Verified implementation

  • npm run build:integrations succeeded.
  • uv run pytest -q tests/test_catalog_schema.py tests/test_integration_catalog_in_sync.py: 106 passed.
  • Released OpenHands SDK 1.51.0 loaded the entry, launched the published npm 0.3.0 package through the catalogue's exact npx command, discovered seven tools, and invoked scan_before_use over stdio.
  • A loopback HTTP fixture verified the exact request content and both allow/block output preservation. No production credentials, LLM call or Cloud claim is involved.

The focused implementation and reproduction script are ready. Please triage the catalogue addition for ready-for-dev. A draft PR can then follow the repository template; its HUMAN section must be completed by the human author before review.

AI assistance was used for preparation and testing.


OpenHands AI triage

The following comments and acceptance criteria were added by the OpenHands AI agent.

Triage

This is a single-file curated-catalogue addition under integrations/catalog/, which AGENTS.md and integrations/README.md designate as the hand-authored source of truth; integrations/catalog-index.js is generated by npm run build:integrations. It matches the repository's established pattern for API-key stdio MCP servers (for example brave-search, firecrawl, kagi, mongodb): one catalog JSON with a kind: "stdio" connection option and required password envFields.

Verified against upstream: @ismalicious/[email protected] exists on npm (published 2026-09-25, which is more than seven days before 2026-10-03 and therefore clears the recency guard in skills/code-review/references/supply-chain-security.md). Its bin is ismalicious-mcp, it launches via npx -y @ismalicious/[email protected], it reads exactly ISMALICIOUS_API_KEY and ISMALICIOUS_API_SECRET (plus optional ISMALICIOUS_API_BASE / ISMALICIOUS_TIMEOUT_MS), and it advertises the package's eight tools, including the seven named in the request. Because 0.3.0 differs from npm latest (0.6.0), pinning the exact version is what keeps the catalogue entry reproducible; pinning is uncommon in sibling entries and should be stated explicitly.

Non-goals: no SDK, agent-server, or Agent Canvas changes; no mandatory middleware or interception of every agent input/result; no production credentials, LLM calls, or Cloud claims; no upstream package changes.

Acceptance Criteria
  • integrations/catalog/ismalicious.json exists and validates against integrations/catalog.schema.json, with id matching the filename.
  • npm run build:integrations regenerates integrations/catalog-index.js with a static import of ./catalog/ismalicious.json, and re-running it on an unchanged tree produces no diff.
  • uv run pytest -q tests/test_catalog_schema.py tests/test_integration_catalog_in_sync.py passes, including test_js_reads_the_same_catalog_as_python.
  • The entry has exactly one provider: "mcp" / kind: "stdio" connection option with command npx, args ["-y", "@ismalicious/[email protected]"], and a consistent serverName.
  • The transport declares exactly two required password envFields, ISMALICIOUS_API_KEY and ISMALICIOUS_API_SECRET (exact names), each with non-empty helperText as the schema requires for password fields.
  • docsUrl is an https:// URL to IsMalicious setup documentation that actually documents ISMALICIOUS_API_KEY and ISMALICIOUS_API_SECRET, and the URL resolves.
  • name, description, categories (using a category value already present in the taxonomy), keywords, and serializable logo metadata (logoUrl / iconBg / iconColor) are present and accurate.
  • Connecting through the catalogue's exact command and env keys launches the published npm package and discovers its advertised tools (including scan_before_use, check_indicator, get_cve, recent_cves, check_indicators, and bootstrap_key), with scan_before_use invocable over stdio.
  • scan_before_use preserves both an observed allow and an observed block verdict, and provider failures surface as the documented error body with isError: true; no production credential is committed, logged, or printed.
  • The change touches only integrations/catalog/ismalicious.json and the generated integrations/catalog-index.js.
  • User-facing copy states that an IsMalicious account and plan quotas apply, and that the entry exposes optional IOC/CVE/Gate tools rather than guaranteeing inspection of every agent input/result.
Dominant language
Python
Stars
176
Forks
124
Avg merge
1d 15h
Merged PRs (30d)
60

Getting set up

  • No Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from OpenHands/extensions

All issues in OpenHands/extensions

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.