Skip to content

Add Darkmoon findings triage sample (MCP, read-only agent, 03-integrate/tools) - #321

Open
MBK-fr wants to merge 5 commits into
strands-agents:mainfrom
MBK-fr:darkmoon-contrib
Open

MBK-fr wants to merge 5 commits into
strands-agents:mainfrom
MBK-fr:darkmoon-contrib

Conversation

@MBK-fr

@MBK-fr MBK-fr commented Oct 4, 2026

Copy link
Copy Markdown

Affiliation disclosure: I am part of the team building Darkmoon, the open source project this sample uses. Happy to adjust or drop it if a vendor-authored tool sample is not wanted.

Change

Adds python/03-integrate/tools/darkmoon/, following the use-case README template and the layout of the other tool integrations:

  • findings_triage.py: a Strands agent connected to @darkmoon_ai/mcp-server (stdio, version pinned) that reads a pentest campaign's findings and writes a prioritized triage brief. MCPClient(tool_filters={"allowed": [...]}) exposes only the read-only tools to the model.
  • A separate scan <target> command that launches a run through run_pentest: it is not reachable by the model, requires the target to match DARKMOON_ALLOWED_TARGETS and a typed confirmation.
  • README.md, requirements.txt, .env.example, .gitignore.

Honest scope

Darkmoon's engine and CLI are open source (GPL-3.0). The MCP server talks to the Darkmoon Dashboard API, which is part of Darkmoon Pro and self-hosted, so the sample needs a Pro instance. The README states this first and points to the CLI/GitHub Action for the open source path.

Testing

With strands-agents 1.57.2 and the real published @darkmoon_ai/mcp-server@0.1.0 against a local mock of the Dashboard API: tool listing returns exactly the three read-only tools, list_campaigns returns through call_tool_sync, scan refuses a target outside the allowlist, and an allowed target after confirmation reaches POST /api/v1/run/campaign with the bearer token. The Bedrock invocation was not run here (no AWS access in the test environment).

Link: https://github.com/ASCIT31/Dark-Moon

🤖 Generated with Claude Code

https://claude.ai/code/session_014HBQNzAf5C2E3MiJC48HQw

Proposed in #320.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant