@didwork/mcp
v0.0.8
Published
DidWork MCP server — let agents verify outcomes instead of grading their own work. Your agent said it's done. Did it work?
Maintainers
Readme
@didwork/mcp
Your agent said it's done. Did it work?
DidWork as an MCP server: gives any MCP-capable agent — Claude Code, Claude Desktop, Cursor, or your own — a did_verify tool, so the agent gates its next action on independently gathered evidence instead of grading its own work.
Agent acts → did_verify(claim) → VERIFIED / FAILED / UNKNOWN → agent proceeds or escalatesSetup
No key is required to try it: keyless, http.ok claims verify against any public URL (rate limited, not stored), so the server delivers a first verdict straight from /plugin install. A free API key from didwork.sh/console unlocks every claim type, the verification log, and watches.
Claude Code — install the plugin (this server plus a session rule, skill, /didwork:verify command, and verifier subagent):
/plugin marketplace add didworksh/claude-plugin
/plugin install didwork@didworkOr wire up just the MCP server:
claude mcp add didwork -e DIDWORK_API_KEY=dk_your_key -- npx -y @didwork/mcpCursor — install the plugin, or add the server to ~/.cursor/mcp.json. Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"didwork": {
"command": "npx",
"args": ["-y", "@didwork/mcp"],
"env": { "DIDWORK_API_KEY": "dk_your_key" }
}
}
}Tools
| Tool | Does |
| --- | --- |
| did_verify | Verify a claim now — returns the verdict with evidence attached |
| did_get | Fetch a verification by id (poll async verifications) |
| did_list | Recent verifications for this key, evidence included |
| did_watch | Re-verify a claim on an interval; webhook on verdict transitions |
| did_watches | List active watches and their last verdicts |
| did_unwatch | Stop a watch |
| did_usage | Verifications performed, by month |
Claim types
- stripe —
refund,payment_succeeded,subscription_active,subscription_cancelled,invoice_paid,checkout_completed,payout_paid,payment_method_attached - github —
pr_merged,workflow_passed,issue_closed,release_published,commit_in_branch,file_exists,deployment_succeeded,pr_review_approved,branch_exists - gitlab —
mr_merged,pipeline_passed,issue_closed,commit_in_branch,file_exists,release_published - linear —
issue_completed,issue_in_state,issue_assigned - jira —
issue_done,issue_in_status,issue_assigned - sentry —
issue_resolved,no_new_events_since,issue_ignored - slack —
message_posted,reaction_added,channel_exists - email (Resend) —
delivered,bounced - http —
ok(any public URL, no provider connection needed)
Reach for the most specific type the outcome has. http.ok is unauthenticated: against a private repo, dashboard, or anything behind a login it sees a 404 and reports failed, which tells you about visibility, not about the work.
Field reference: didwork.sh/docs#claims. Providers connect once, read-only, at didwork.sh/console.
Prompting the agent
A line like this in your agent's instructions makes the tool bite:
After any consequential action (refund, deploy, ticket close, message send), call
did_verifywith the matching claim before reporting success. Proceed only onverified. Treatfailedandunknownas stop-and-escalate.
Environment
| Variable | Meaning |
| --- | --- |
| DIDWORK_API_KEY | From the console. Unset = keyless mode: http.ok only, other tools answer with how to unlock |
| DIDWORK_BASE_URL | Optional — defaults to https://api.didwork.sh |
