CongressMCP · Docs

CongressMCP

A government-affairs platform combining a legislative MCP substrate (bills, members, votes for the 119th Congress) with a workspace-scoped CRM, whip-count boards, member relationship scoring, and per-issue alignment math.

What is CongressMCP?

CongressMCP gives a government-affairs firm — Hill office, advocacy group, lobby shop, coalition — a single working surface for tracking bills, members, organizations, and the firm's relationships with each.

It runs as both:

The two share the same Postgres + RLS backend; whatever the AI writes, the web app reflects, and vice versa.

📜 Whip count boards
Kanban + Not-Tallied tray for every tracked bill and every issue. Drag members between columns to set stance.
👥 Member portals
Per-member view: relationship score, per-issue alignment, sponsored/cosponsored bills, signals.
🏢 Organization portals
Bill positions, resources sourced from the org, affiliated contacts, recent touchpoints.
🗳️ Caucuses
Custom member groups (caucuses, coalitions, whip targets) used as filters on every board.
🗺️ Map dashboard
State-tile heat map of stance across all tracked bills, filterable by group.
🎯 Issue boards
Aggregated stance across an issue's portfolio of bills — with manual overrides that win.

Sign up

  1. Go to /register, enter your name and email. Click the magic link in your inbox to activate.
  2. You'll get a personal API key (shown once after the magic-link click) and a default personal workspace.
  3. For team use, create an organization workspace via the MCP tool create_workspace(name="Acme Government Affairs", owner_type="organization") after creating an organization with create_organization.
  4. The web app's left sidebar has a workspace switcher pinned at the top — click to switch between workspaces.
Tip: Workspaces are the unit of isolation. Tracked bills, signals, member stances, and CRM data are scoped to a workspace. Organizations can have multiple workspaces (e.g. official office + campaign) with controlled cross-workspace shares.

Install the MCP server

Claude Code (CLI)

claude mcp add congressmcp \
  --transport http \
  https://www.congressmcp.com/mcp \
  --header "Authorization=Bearer YOUR_API_KEY"

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "congressmcp": {
      "transport": "http",
      "url": "https://www.congressmcp.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Cursor

Settings → MCP Servers → Add server with the same HTTP URL and Authorization header.

Once connected, ask Claude "call get_orientation" for the topic map, then "call get_orientation('whip_count')" (or any topic) for a focused playbook.

The web app shell

Every authenticated page has the same chrome:

Bills

Track a bill via MCP: track_bill(workspace_id, bill_ref="119-s-3062"). Or via the canonical paste-a-URL workflow (see below).

Whip Count Boards

The working surface for a bill or issue. Modeled on the 6-stance vocabulary from whip-code-hub:

strongly-support support undecided against strongly-against not-tallied

Layout

  1. Bill/issue header — title, sponsor, companion bill (auto-detected from related-bills metadata).
  2. Master Tally Counter — combined House+Senate or single-chamber breakdown.
  3. Hero charts — donut chart of stance breakdown + progress bar to the majority threshold (218 House, 51 Senate).
  4. Chamber cards — click to filter to one chamber.
  5. Filter bar — search by name, filter state/party/chamber, plus pinned caucus quick-toggles.
  6. Not-Tallied tray — horizontal row of members with no data yet (or low-confidence "unknown").
  7. 5-column Kanban — strongly-support → strongly-against, sorted within each column by relationship tier (hot members at top of each column = your call list).

Drag & lean

Drag any member tile between columns to set their stance. The board updates optimistically; the change is persisted to whip_member_stance (for bill boards) or whip_issue_member_stance (for issue boards). Manual overrides always win over computed stance.

Each tile shows a small orange dot if the stance is a manual override. The lean indicator (→ S-Support) appears next to the name when a member is leaning toward an adjacent stance.

Member modal

Click any tile to open the detail modal:

Whip Math

For every bill, the Whip Math panel surfaces three categories of projected peers based on cosponsors' voting alignment:

Each row shows the per-supporter alignment breakdown. MCP tool: get_bill_whip_math(bill_ref).

Members

Issues

Organizations

Contacts

Caucuses

/caucuses shows workspace-scoped member groups — caucuses (Freedom Caucus, Problem Solvers, CBC), coalitions ("our champions on AHI"), whip targets ("call list for HR-1"), or geographic blocs.

Pinned groups appear as quick-filter chips on every whip count board. Members can belong to multiple groups; groups can mix House + Senate.

Map

/map is a state-tile heat map of stance aggregation across your tracked bills. Each state tile is colored by dominant stance (intensity from a weighted score). Bill scope selector + group filter — switch to see how a specific caucus is distributed, or focus on a single bill.


Workspaces

A workspace is the isolation boundary. Bills, signals, organizations, contacts, notes, member stances all live inside one workspace. Two ownership modes:

Cross-workspace shares (controlled via create_cross_workspace_share) let one workspace's data be readable by another — typical use: a campaign workspace consuming an official-office workspace's bill intelligence under a defined legal-purpose tag.

Stance vocabulary

Six stances form the Kanban + Not-Tallied tray:

Each member can also have a lean — an adjacent stance they're trending toward (e.g. "support, leaning strongly-support" or "undecided, leaning against").

Member scores

Two independent scores per elected official:

MCP tool: get_member_scores(workspace_id, bioguide_id). Surfaced on the member portal scorecard panel.

Tracking a bill

track_bill(workspace_id, bill_ref="119-s-3062") creates a project that anchors all per-bill workspace data: signals, engagements, notes, organization positions, resources, manual stances, etc.


MCP tools — overview

80+ tools across these topic areas. Always start a non-trivial session with get_orientation for the topic map.

Bills
search_bills, get_bill, get_bill_actions, get_bill_cosponsors, get_bill_text, get_bill_summary, get_bill_subjects, get_bill_brief, get_bill_intelligence, get_bill_whip_math
Members
search_members, get_member, get_member_legislation, get_member_votes, get_member_dossier, get_member_scores, find_aligned_members, compare_members
Workspaces
create_workspace, list_workspaces, update_workspace, archive_workspace, create_organization, invite_organization_member, create_cross_workspace_share
Bill intelligence
add_bill_note, set_organization_position, link_resource_to_bill, ingest_social_post, analyze_organization_alignment, get_bill_intelligence
CRM
add_contact, add_account, add_engagement, log_activity, log_touch_event, search_contacts, list_engagements_for_bill
Caucuses
create_member_group, list_member_groups, add_member_to_group, bulk_add_members_to_group, get_member_group
Issues
create_issue, rate_bill_for_issue, analyze_issue, discover_bills_for_issue, get_issue_full
Whip / scoring
get_whip_count, recompute_whip_count, build_scorecard, score_member, run_scorecard, get_member_scorecard

get_orientation — start here

Returns the topic map. Then get_orientation(topic="whip_count") for a focused playbook with primary tools, typical workflows, implicit contracts, and pitfalls.

Topics: workspace, bills, members, activities, contacts, engagements, signals, opportunities, pipelines, fundraising, treasury, compliance, whip_count, reports, events, issues, scorecards.

The canonical "paste a URL" workflow

The fastest way to ingest org positions, news, and tweets:

  1. Paste a press release / tweet / news article URL into your AI client.
  2. Ask: "Record this in CongressMCP."
  3. The AI:
    1. WebFetches the URL and parses org name, bill, position, declared date.
    2. Calls search_accounts to resolve the org → account_id (or creates one).
    3. Calls search_bills + verifies bill identity by reading the bill text (load-bearing — short titles collide; e.g., 9 different "GUARD Act" bills exist).
    4. Calls set_organization_position(workspace_id, account_id, bill_ref, position, evidence_url, declared_date, position_strength).
    5. Calls link_resource_to_bill to anchor the URL.
    6. Optionally analyze_organization_alignment to surface aligned members.

For tweets specifically: ingest_social_post(workspace_id, bill_ref, url) auto-fetches via Twitter's oEmbed API, extracts the body, auto-resolves the source org by Twitter handle, and creates the resource. Renders as a HUGE pullquote on the bill detail page.

Built on the 119th Congress mirror. Issues, bug reports, feature requests: open a GitHub issue or DM the maintainer.