@policyrisk/mcp-server
v0.4.4
Published
PRIA MCP server — policy risk and assessment engine for AI agents (USC, CFR, federal bills, federal register, knowledge graph, Polipedia)
Readme
@policyrisk/mcp-server
PRIA MCP server — the policy risk and assessment engine for AI agents. Gives Claude, Gemini, and other MCP-aware models direct access to U.S. statutes (USC), federal regulations (CFR), pending bills, the Federal Register, the Polipedia knowledge wiki, and a policy knowledge graph — plus a personalized risk score for the calling user.
A policy-risk engine for AI agents. One MCP server, the entire U.S. policy stack.
Drop this into Claude, Cursor, Gemini, or any MCP-aware client and your model gets first-class access to:
- U.S. Code and Code of Federal Regulations — full text, search, citations
- Federal bills and the Federal Register — pending legislation, final rules
- Polipedia — a search-first wiki covering every U.S. policy topic
- Policy knowledge graph — traverse statutes ↔ bills ↔ rules ↔ executive orders
- PRIA Score — a personalized policy-risk score for the calling user
- Multi-agent research and deliberation — synthesized answers with permalinks
- 11 deterministic tax calculators — SALT, IRMAA, Roth conversion, QBI, …
Every response includes a permalink so the model can cite a page the user
can actually open.
Install
Pick your client. Each one points at npx @policyrisk/mcp-server, which
fetches the latest release on first run.
Claude Code
claude mcp add pria -- npx @policyrisk/mcp-serverThen export PRIA_API_KEY=pria_… (or paste it into the entry Claude Code
wrote to ~/.claude.json).
Claude Desktop · Cursor · VS Code · Gemini CLI
Add this block to your client's MCP config
(claude_desktop_config.json, .cursor/mcp.json,
.vscode/mcp.json, ~/.gemini/settings.json, …):
{
"mcpServers": {
"pria": {
"command": "npx",
"args": ["@policyrisk/mcp-server"],
"env": { "PRIA_API_KEY": "pria_…" }
}
}
}Restart the client. The Polipedia wiki tools work without a key; everything
else needs PRIA_API_KEY.
Get an API key
Two paths — pick whichever fits the agent's flow.
Web — log in at policyrisk.com, open Settings → API Keys, generate a key. Best when a human is in the loop.
Agent signup — no web account needed:
curl -X POST https://api.policyrisk.com/api/v1/signup \
-H 'content-type: application/json' \
-d '{"email":"[email protected]","firstName":"Ada","lastName":"Lovelace","dob":"1990-01-01"}'Returns { apiKey: "pria_…" } exactly once. Store it; it isn't shown again.
Tools
A consolidated surface (snake_case for Gemini compatibility) plus the
legacy hyphenated tool names for clients pinned to earlier versions. Each
consolidated tool has a discriminator (mode, view, action,
source, kind, or calculator) that selects the specific capability.
Personalized + policy data — requires PRIA_API_KEY
| Tool | What it does |
|---|---|
| pria_score | The user's PRIA Score. mode: 'summary' \| 'detailed' \| 'stress-test' \| 'export-pdf'. |
| policy_exposures | Risks hitting the household. view: 'list' \| 'dollars' \| 'actions' \| 'budget-drilldown'. |
| alerts | Custom watch rules + their firings. action: 'list-fired' \| 'list-rules' \| 'create' \| 'update' \| 'delete'. |
| pins | Dashboard pin management. action: 'list' \| 'propose' \| 'remove'. |
| api_keys | Self-service key management. action: 'list' \| 'create' \| 'revoke'. |
| research | Multi-agent synthesized research with citations + permalinks. Fans out to bills, FR, policy intel, tariffs, and Polipedia. mode: 'sync' \| 'async-start' \| 'async-result', kind: 'question' \| 'fact-check-headline'. |
| deliberation | Multi-LLM deliberation (panel + debate + scoring + judge) for high-stakes questions. mode: 'start' \| 'result'. |
| briefing | Curated feeds. kind: 'daily' \| 'risk-events'. |
| assess_policy | Submit arbitrary policy text → similar enacted statutes, pending bills, FR rules, risk signals. |
| tax_calc | 11 profile-aware deterministic tax calculators. calculator: 'salt' \| 'section-179' \| 'irmaa' \| 'roth-conv' \| 'backdoor-roth' \| 'marriage-penalty' \| 'aca-subsidy' \| 'qbi' \| 'ss-breakeven' \| 'hsa' \| 'estate-stepup'. |
Source-spanning — wiki source needs no key
| Tool | What it does |
|---|---|
| lookup | Fetch one document by id. source: 'usc' \| 'cfr' \| 'federal-register' \| 'bill' \| 'wiki' \| 'fred-series' \| 'hts-tariff'. |
| search | Search the policy corpus or traverse the knowledge graph. source: 'usc' \| 'cfr' \| 'federal-register' \| 'bills' \| 'policy-intel' \| 'wiki' \| 'related-graph'. |
Try it
Once the server is wired up, ask the model things like:
| Prompt | Tool call |
|---|---|
| "What's my PRIA Score?" | pria_score(mode: 'summary') |
| "How does the new tax bill affect me?" | research(mode: 'sync', query: '…') |
| "Pull 26 USC § 32 and explain the EITC phase-out." | lookup(source: 'usc', title: 26, section: '32') |
| "Find every CFR rule citing 42 USC 1396a." | search(source: 'related-graph', nodeType: 'USC_SECTION', sourceId: '…') |
| "Here's a draft executive order — what existing policies overlap?" | assess_policy(policyText: '…') |
| "What's happened in policy today?" | briefing(kind: 'daily') |
| "Search Polipedia for SALT cap changes." | search(source: 'wiki', query: 'SALT cap') |
Behind the scenes the model picks tools, chains calls, and cites permalinks back to policyrisk.com so the user can audit the answer.
Migration: 0.3.x → 0.4.x
The 0.3.x surface had 60 separately-named hyphenated tools. 0.4.x adds a consolidated 12-tool surface with discriminator parameters; the legacy hyphenated names remain available for clients pinned to earlier versions.
| 0.3.x tool | 0.4.x call |
|---|---|
| get-pria-score | pria_score(mode: 'summary') |
| get-pria-score-detailed | pria_score(mode: 'detailed') |
| run-monte-carlo-stress-test | pria_score(mode: 'stress-test') |
| export-pria-scan-pdf | pria_score(mode: 'export-pdf') |
| get-policy-exposures | policy_exposures(view: 'list') |
| get-policy-exposure-dollars | policy_exposures(view: 'dollars') |
| get-action-items / get-recommended-actions-detailed | policy_exposures(view: 'actions') |
| get-budget-impact / get-budget-impact-detailed | policy_exposures(view: 'budget-drilldown') |
| get-alerts | alerts(action: 'list-fired') |
| list-alert-rules / create-alert-rule / update-alert-rule / delete-alert-rule | alerts(action: 'list-rules' \| 'create' \| 'update' \| 'delete') |
| propose-alert-from-conversation | removed — fill the structured draft yourself, call alerts(action: 'create') |
| list-pins / propose-pin / unpin | pins(action: 'list' \| 'propose' \| 'remove') |
| list-my-keys / create-key / revoke-key | api_keys(action: 'list' \| 'create' \| 'revoke') |
| lookup-usc-section / lookup-cfr-section / lookup-federal-register-rule / get-bill / get-polipedia-page / get-economic-indicator / get-tariff-impact | lookup(source: …) |
| search-usc / search-cfr / search-federal-register / search-legislation / search-policy-intel / search-polipedia / get-related-policies | search(source: …) |
| research-policy / start-research-async / get-research-status / get-research-result | research(mode: 'sync' \| 'async-start' \| 'async-result') (async-result returns 202 if pending — no separate status poll) |
| fact-check-headline | research(mode: 'sync', kind: 'fact-check-headline') |
| ask-polipedia | Still available as a legacy tool, or call research(mode: 'sync') for fanout. |
| start-deliberation / get-deliberation-status / get-deliberation-result | deliberation(mode: 'start' \| 'result') |
| get-daily-briefing / get-risk-events | briefing(kind: 'daily' \| 'risk-events') |
| assess-policy-risk | assess_policy |
| calc-* (11 calculators) | tax_calc(calculator: …) |
Requirements
- Node.js 18+
PRIA_API_KEY(free — email + name + DOB)- An MCP-aware client (Claude Desktop, Claude Code, Cursor, VS Code, Gemini CLI, …) with its own model API key
Links
- npm — https://www.npmjs.com/package/@policyrisk/mcp-server
- Source — https://github.com/PRIA-Technologies/skunkworks/tree/main/packages/mcp-server
- Web app — https://policyrisk.com
- Client compatibility notes —
COMPAT.md
License
MIT
