Skip to main content
Glama
bsilha

fec-mcp

by bsilha

fec-mcp

An MCP (Model Context Protocol) server for federal (and optionally state) campaign-finance rules, regulations, and data covering PACs, party committees, and candidates.

It provides two complementary tool families:

  1. Rulebook search -- full-text search over official campaign-finance PDF guides. Federal (FEC) guides (campaign guides for candidates, party committees, and PACs, plus the contribution-limits chart) are the built-in baseline; state guides can optionally be added per state (see below). This is the authoritative source for compliance questions and dollar limits: results are quoted directly from the PDFs with source + page citations, not hardcoded or model-recalled figures.

  2. Live OpenFEC data -- real-time lookups against the public OpenFEC API for candidates, committees, filings, disbursements, financial totals, elections, and the reporting calendar. This covers federal elections only -- OpenFEC has no state-level data.

Setup

1. Install

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

2. Add the FEC rulebook PDFs

Place the official FEC PDF guides in data/rulebooks/, for example:

  • The FEC's Campaign Guide for Congressional Candidates and Committees

  • The FEC's Campaign Guide for Political Party Committees

  • The FEC's Campaign Guide for Nonconnected Committees (PACs)

  • The current Contribution Limits chart

These are published on fec.gov under its Campaign Guides / Contribution Limits resources; grab the current versions from there (this repo does not bundle download links since they change over time -- verify you have the current cycle's documents).

Any PDF you drop in data/rulebooks/ is picked up automatically -- the server builds a search index (cached in data/rulebooks/.index/) the first time it starts and rebuilds it whenever files are added, removed, or changed.

Optional: add state-level guides. Drop a state's official campaign-finance PDFs into data/rulebooks/states/{state_code}/ (lowercase two-letter USPS code, e.g. data/rulebooks/states/ca/) and they're indexed the same way, tagged with that state as their jurisdiction. This is entirely incremental -- add one state, several, or none; see data/rulebooks/states/README.md for details. OpenFEC's live data tools remain federal-only regardless.

Live OpenFEC lookups work out of the box with the shared DEMO_KEY, which is heavily rate-limited. For real use, get a free key at https://api.data.gov/signup/ and set it:

export FEC_API_KEY=your_key_here

4. Configure your MCP client

For Claude Code / Claude Desktop, add to your MCP config:

{
  "mcpServers": {
    "fec": {
      "command": "/absolute/path/to/FEC_MCP/.venv/bin/fec-mcp",
      "env": {
        "FEC_API_KEY": "your_key_here"
      }
    }
  }
}

Or run directly for local testing:

fec-mcp

Related MCP server: political-finance-mcp-server

Tools

Rulebook search (grounded in the PDFs you add):

Tool

Purpose

list_rulebook_jurisdictions

List which jurisdictions have PDFs loaded ("federal", state codes)

list_rulebook_sources

List loaded PDFs, page counts, and jurisdiction (optionally filtered)

search_rulebooks

Full-text search across loaded PDFs (optionally filtered by jurisdiction)

get_rulebook_page

Read the full text of one page

Live OpenFEC data (federal only):

Tool

Purpose

search_candidates / get_candidate / get_candidate_totals

Candidate lookup and financials

search_committees / get_committee / get_committee_filings / get_committee_totals

PAC/party/campaign committee lookup, filings, financials

search_disbursements

Itemized Schedule B disbursements (who a committee paid, and how much)

search_filings

Cross-committee filing search

search_elections

Election search by state/office/cycle

get_reporting_calendar

FEC reporting and election deadline dates

Notes on scope

  • No hardcoded contribution limits or rule text. OpenFEC's live API has no endpoint for contribution limits or regulation text, and those figures change (limits are inflation-adjusted every two-year cycle) -- baking them into code risks going stale silently. Instead, this server searches the FEC's own PDFs you provide, so answers are always sourced to a specific document and page.

  • Not legal advice. Tool output should be treated as a research aid and cited back to its source (PDF page or OpenFEC record), not relied on as a substitute for consulting the FEC or legal counsel.

  • State coverage is opt-in and incomplete by default. Out of the box, only federal (FEC) rulebooks are loaded. A question about a specific state's rules will correctly come back empty/unanswerable unless that state's PDFs have been added under data/rulebooks/states/{state_code}/ -- the server won't substitute federal rules for state rules. Live OpenFEC data (candidates, committees, filings, disbursements) is federal only; there is no state-level equivalent here.

Demo

demo/ has a one-page Streamlit chat app over these same tools -- useful for showing the project to someone without walking them through MCP client setup. See demo/README.md.

Development

pip install -e ".[dev]"
pytest

Related MCP Connectors

Related MCP Servers