Add IsMalicious threat-intelligence MCP catalogue entry
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 86/100
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
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:integrationssucceeded.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_useover 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.jsonexists and validates againstintegrations/catalog.schema.json, withidmatching the filename. -
npm run build:integrationsregeneratesintegrations/catalog-index.jswith 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.pypasses, includingtest_js_reads_the_same_catalog_as_python. - The entry has exactly one
provider: "mcp"/kind: "stdio"connection option withcommandnpx,args["-y", "@ismalicious/[email protected]"], and a consistentserverName. - The transport declares exactly two required
passwordenvFields,ISMALICIOUS_API_KEYandISMALICIOUS_API_SECRET(exact names), each with non-emptyhelperTextas the schema requires for password fields. -
docsUrlis anhttps://URL to IsMalicious setup documentation that actually documentsISMALICIOUS_API_KEYandISMALICIOUS_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, andbootstrap_key), withscan_before_useinvocable over stdio. -
scan_before_usepreserves both an observed allow and an observed block verdict, and provider failures surface as the documented error body withisError: true; no production credential is committed, logged, or printed. - The change touches only
integrations/catalog/ismalicious.jsonand the generatedintegrations/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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from OpenHands/extensions
-
Update Slack MCP integration to Slack's official hosted MCP server (replace zencoderai/slack-mcp-server)Possibly taken @all-hands-bot claimed this 1 day ago. Opencustomer-support enhancement priority:medium ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
OpenHands/extensions#900 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
-
priority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
OpenHands/extensions#887 ·
Maintainers usually reply within 1 day
-
priority:low
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
OpenHands/extensions#829 · 1 comment ·
Maintainers usually reply within 1 day
-
Add Employed by Guaq AI (hosted job-search MCP) to the integrations catalogPossibly taken @buddywhitman claimed this 25 days ago. Openpriority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
OpenHands/extensions#769 ·
Maintainers usually reply within 1 day
-
Add Spicrawl web-scraping MCP catalogue entryPossibly taken @DibbayajyotiRoy claimed this 24 days ago. Openpriority:low ready-for-dev
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
OpenHands/extensions#738 ·
Maintainers usually reply within 1 day
All issues in OpenHands/extensions
Similar issues
-
kind/bug priority/medium qa_automation
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
yugabyte/yugabyte-db#37324 ·
Maintainers usually reply within 1 day
-
good first issue
Difficulty 1/5 Under an hour Newbie friendliness 87/100
btclib-org/btclib-node#2260 ·
Maintainers usually reply within 1 day
-
ChatBedrockConverse changes the keys of JSON tool results to camelCase (`order_id` becomes `orderId`)Possibly taken @geyazheng claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
langchain-ai/langchain-aws#1469 ·
Maintainers usually reply within 1 day
-
GCToggler leaves collection enabled if the body re-enables itPossibly taken @Gambit-Checkmate claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 7 days
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
Maintainers usually reply within 1 day