h1mcp demonstrates solid tool design with 23 well-named, verb-prefixed tools covering HackerOne's API surface. All tools have descriptions (avg 120 chars, within 10-1024 baseline). Input schemas are present and typed for all tools. However, parameter descriptions are sparse, many lack detail on constraints, formats, or valid values. Output schemas are undocumented; the code prunes responses but doesn't specify what fields agents should expect. Error handling is basic (returns error strings, no recovery guidance). Tool composition is strong: search_reports → get_report → get_report_with_conversation chains logically, and draft_report → submit_draft follows the recommended review-before-action pattern. Security is good: credentials injected via environment (H1_USERNAME, H1_API_KEY), no secrets in params. Naming is excellent: verb_noun convention throughout (search_, get_, create_, update_, delete_, list_, draft_, submit_). Main gaps: parameter descriptions lack enum constraints and format specs; no documented output schemas; error messages don't guide recovery.
Add a comment to a HackerOne report. Not supported by the hacker API — returns a helpful error with a link to the report's web interface.
Close/withdraw a HackerOne report with an optional message. Not supported by the hacker API — returns a helpful error with a link to the report's web interface.
Create a report intent: send a free-text vulnerability description to a program and have HackerOne's assistant pre-validate it before filing a full report. The first step of assisted submission.
Delete a local report draft.
Create a local report draft (not submitted to HackerOne). Drafts are stored in ~/.config/h1mcp/drafts and can be reviewed/edited before submission.
Get a single local report draft by UUID.
Parameter descriptions lack enum constraints and format specifications. E.g., 'severity' accepts 'none, low, medium, high, critical' but is documented as free-form string, not enum. LLMs may hallucinate invalid values.
Output schemas are not documented. Code prunes responses but agents cannot see what fields to expect (e.g., does get_report return 'id', 'report_id', 'created_at'?). Agents must infer structure from trial and error.
Error messages are generic strings ('Error: {e:#}') with no recovery guidance. E.g., 'Error: API key invalid' doesn't tell the agent to check H1_API_KEY env var or retry. Agents cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get full details of a HackerOne program including bounty table, policy, and contact info.
Get in-scope assets for a program. Returns asset type, identifier, and bounty eligibility.
Get everything needed to submit to a program in one call: submittable structured_scope_id options and accepted weakness_id options. Use before submit_report or draft_report.
Get accepted weakness types (CWE categories) for a program. Use to pick the correct weakness_id when submitting.
Get full details of a single HackerOne report by numeric ID.
Get the activity timeline (comments, state changes, bounty awards) for a report. Activities are extracted from the nested report data returned by the hacker API.
Get a single report intent by ID, including the assistant_response and job status. Poll this after create_report_intent.
Get a report bundled with its full triage conversation and activity timeline. Activities are returned nested inside the report by the hacker API.
List all local report drafts (stored in ~/.config/h1mcp/drafts).
List all HackerOne programs you have access to (auto-paginated).
List your report intents (assisted-submission drafts) and their assistant status.
Request public disclosure for a resolved report. Kind: 'full' (default) or 'limited'. Requires a program-scoped API token (not part of the hacker API).
Search your submitted HackerOne reports. Filter by keyword, program, severity, or state.
Submit a local report draft to HackerOne. The draft is converted to a full report submission and sent to the API.
Submit a vulnerability report directly to a HackerOne program. Prefer draft_report + submit_draft for review before submission.
Update a local report draft. Only specified fields are updated; others are left unchanged.
Update the severity rating of a report. Rating: none, low, medium, high, critical. Requires a program-scoped API token (not part of the hacker API).
Parameter descriptions for numeric fields lack bounds. E.g., 'page_size' accepts 1-100 but description says 'Number of results (1-100, default 25)', constraint is in description text, not schema. Agents may pass invalid values.
Destructive tools (close_report, delete_draft) lack confirmation or dry-run support. Agents can irreversibly delete drafts or close reports without a safety gate.