cyanheads avatar

Openfec Mcp Server

cyanheads/openfec-mcp-server

Wraps the FEC's OpenFEC API with nine tools covering candidates, committees, contributions, disbursements, independent expenditures, filings, elections, legal documents, and the FEC calendar. You can search itemized Schedule A contributions with filters for employer, occupation, state, and amount range, or pull aggregated breakdowns by size bracket. The disbursements tool works the same way for Schedule B spending. Independent expenditures show support or oppose positions per candidate. Five resources expose candidate profiles, committee details, and election races at the presidential, senate, and house district level. Two prompts frame campaign finance analysis and money trail investigations. Requires an FEC API key. Available via stdio, streamable HTTP, or a hosted instance at openfec.caseyjhand.com/mcp.

GitHub stars
2
tools
12
transport
STDIO, HTTP
env vars
7
last updated
Nov 12, 2026

Install

From registry metadata
$ npx add-mcp https://openfec.caseyjhand.com/mcp --name openfec

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http openfec https://openfec.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 12 tools

Verified live against the running server on Nov 6, 2026.

openfec_search_candidatesFind federal candidates by name, state, office, party, or cycle. Retrieve a specific candidate by FEC ID with financial totals. Candidate IDs start with H (House), S (Senate), or P (President) followed by exactly eight letters or digits.14 params

Find federal candidates by name, state, office, party, or cycle. Retrieve a specific candidate by FEC ID with financial totals. Candidate IDs start with H (House), S (Senate), or P (President) followed by exactly eight letters or digits.

Parameters* required
candidate_idstring
FEC candidate ID: H, S, or P followed by exactly eight letters or digits (e.g., P00003392, H2CO07170). Get IDs from openfec_search_candidates results. When provided, returns a single candidate with...
candidate_statusstring
Candidate status: C=present, F=future, N=not yet, P=prior.one of C · F · N · P
cyclenumber
Two-year election cycle (even year, e.g., 2024).
districtstring
Two-digit district number for House candidates.
election_yearnumber
Specific election year the candidate ran in.
has_raised_fundsboolean
Only candidates whose committee has received receipts.
include_totalsboolean
Include financial totals (receipts, disbursements, cash on hand). Defaults to true when fetching by candidate_id.
incumbent_challengestring
Incumbent status: I=incumbent, C=challenger, O=open seat.one of I · C · O
officestring
Filter by office: H=House, S=Senate, P=President.one of H · S · P
pageinteger
Search-results page number (1-indexed). Defaults to 1 on the search path.
partystring
Three-letter party code (e.g., DEM, REP, LIB).
per_pageinteger
Search results per page. Defaults to 20 on the search path. With include_totals, at most 35 candidates are requested when cycle or election_year scopes the totals and 5 when the totals span every c...
querystring
Full-text candidate name search.
statestring
Two-letter US state code (e.g., AZ, CA).
openfec_search_committeesFind political committees (campaign, PAC, Super PAC, party) by name, type, candidate affiliation, or state. Retrieve a specific committee by FEC ID. Committee IDs start with C followed by exactly eight digits (e.g., C00358796).11 params

Find political committees (campaign, PAC, Super PAC, party) by name, type, candidate affiliation, or state. Retrieve a specific committee by FEC ID. Committee IDs start with C followed by exactly eight digits (e.g., C00358796).

Parameters* required
candidate_idstring
Find committees linked to this candidate (authorized, leadership, joint fundraising). Get IDs from openfec_search_candidates results.
committee_idstring
FEC committee ID: 'C' followed by exactly eight digits (e.g., C00358796). Get IDs from openfec_search_committees results. Returns a single committee with full detail.
committee_typestring
Committee type code. Common: H (House), S (Senate), P (Presidential), O (Super PAC), N (PAC nonqualified), Q (PAC qualified), X (Party nonqualified), Y (Party qualified).
cyclenumber
Two-year election cycle (even year).
designationstring
Committee designation. A (authorized), B (lobbyist PAC), D (leadership PAC), J (joint fundraiser), P (principal campaign), U (unauthorized). Matches each committee's current designation only, even...
pageinteger
Search-results page number (1-indexed). Defaults to 1 on the search path.
partystring
Three-letter party code (e.g., DEM, REP).
per_pageinteger
Search results per page. Defaults to 20 on the search path.
querystring
Full-text committee name search.
statestring
Two-letter state code.
treasurer_namestring
Full-text treasurer name search.
openfec_get_committee_totalsGet pre-aggregated committee financial totals — receipts, disbursements, cash on hand, debts, and the itemized/unitemized breakdown — without paginating Schedule A. Use mode "single" (the default) with a committee_id for one committee's totals, one row per two-year cycle it ha...15 params

Get pre-aggregated committee financial totals — receipts, disbursements, cash on hand, debts, and the itemized/unitemized breakdown — without paginating Schedule A. Use mode "single" (the default) with a committee_id for one committee's totals, one row per two-year cycle it ha...

Parameters* required
committee_designationstring
Committee designation — A (authorized), B (lobbyist PAC), D (leadership PAC), J (joint fundraiser), P (principal campaign), U (unauthorized). by_entity_type mode only.
committee_idstring
Committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. Required in single mode; in by_entity_type mode it narrows the grouped search to that one committee.
committee_statestring
Two-letter state code of the committee. by_entity_type mode only.
committee_typestring
Committee type code — H (House), S (Senate), P (Presidential), O (Super PAC), N/Q (PAC), X/Y (party). by_entity_type mode only.
cyclenumber
Two-year election cycle (e.g., 2024). Even years only. Omit in single mode to get every cycle the committee has filed.
entity_typestring
Committee entity type for the grouped search. Required in by_entity_type mode. house-senate covers both chambers as one group; ie-only is committees that report only independent expenditures.one of presidential · pac · party · pac-party · house-senate · ie-only
max_disbursementsnumber
Maximum total disbursements in dollars. by_entity_type mode only.
max_receiptsnumber
Maximum total receipts in dollars. by_entity_type mode only.
min_disbursementsnumber
Minimum total disbursements in dollars. by_entity_type mode only.
min_receiptsnumber
Minimum total receipts in dollars. by_entity_type mode only.
modestring
Query mode. "single" returns one committee's totals, one row per cycle. "by_entity_type" returns a page of committees of one entity type, filterable and sortable across committees.one of single · by_entity_typedefault: single
organization_typestring
Sponsoring organization type — C (corporation), L (labor), M (membership), T (trade), V (cooperative), W (corporation without capital stock). by_entity_type mode only.
pageinteger
Page number (1-indexed). Read pagination.pages in the response to see how many pages exist — a long-running committee can have more cycles than one page holds.default: 1
per_pageinteger
Results per page.default: 20
sortstring
Sort field. A "-" prefix sorts descending: "-receipts" ranks the biggest fundraisers first in by_entity_type mode, "-cycle" puts a committee's most recent cycle first in single mode.one of cycle · -cycle · receipts · -receipts · disbursements · -disbursements
openfec_search_contributionsSearch itemized individual contributions (Schedule A) or get aggregate breakdowns by size, state, employer, or occupation. Use to answer "who is funding this committee?" Itemized mode requires a committee_id. Aggregate by_size/by_state can use candidate_id instead.19 params

Search itemized individual contributions (Schedule A) or get aggregate breakdowns by size, state, employer, or occupation. Use to answer "who is funding this committee?" Itemized mode requires a committee_id. Aggregate by_size/by_state can use candidate_id instead.

Parameters* required
candidate_idstring
Candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results. Enables by_size and by_state aggregates without a committee_id.
committee_idstring
Receiving committee ID (e.g., C00703975). Get IDs from openfec_search_committees results.
contributor_citystring
Contributor city. Itemized only.
contributor_employerstring
Full-text employer search. Itemized only.
contributor_namestring
Full-text donor name search. Itemized only.
contributor_occupationstring
Full-text occupation search. Itemized only.
contributor_statestring
Two-letter state code (e.g., CA). Itemized only.
contributor_zipstring
ZIP code prefix (starts-with match). Itemized only.
cursorstring
Opaque pagination cursor from a previous response of this tool. Itemized mode only (keyset pagination). Valid only for an otherwise-identical call — changing any other argument, including sort, rej...
cyclenumber
Two-year election cycle (e.g., 2024). Even years only. Defaults to current cycle for itemized mode.
is_individualboolean
Only individual contributions (excludes committee-to-committee transfers). Itemized only.
max_amountnumber
Maximum contribution amount in dollars. Itemized only.
max_datestring
Latest contribution date (YYYY-MM-DD). Itemized only.
min_amountnumber
Minimum contribution amount in dollars. Itemized only.
min_datestring
Earliest contribution date (YYYY-MM-DD). Itemized only.
modestring
Query mode. "itemized" returns individual contribution records (keyset pagination). "by_size" aggregates by contribution size bucket. "by_state" aggregates by contributor state. "by_employer" aggre...one of itemized · by_size · by_state · by_employer · by_occupationdefault: itemized
pageinteger
Page number (1-indexed) for aggregate modes. Explicit page is rejected in itemized mode, which paginates with cursor. Defaults to 1 for aggregates.
per_pageinteger
Results per page. Itemized mode sends at most 30 upstream, keeping the response under a 100,000-byte budget; a page bounded below your request reports truncated and cap, and next_cursor continues it.default: 20
sortstring
Sort field. A "-" prefix sorts descending: use "-contribution_receipt_amount" for the largest receipts first, since the ascending form leads with the most negative rows (refunds, reattributions, re...one of contribution_receipt_date · -contribution_receipt_date · contribution_receipt_amount · -contribution_receipt_amount
openfec_search_disbursementsSearch itemized committee spending (Schedule B) or get aggregate breakdowns by purpose or recipient. All modes require a committee_id. Use to answer "what is this committee spending money on?" or "who is receiving payments from this committee?"17 params

Search itemized committee spending (Schedule B) or get aggregate breakdowns by purpose or recipient. All modes require a committee_id. Use to answer "what is this committee spending money on?" or "who is receiving payments from this committee?"

Parameters* required
committee_id*string
Spending committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. Required for all modes.
cursorstring
Opaque pagination cursor from a previous response of this tool. Itemized mode only (keyset pagination). Valid only for an otherwise-identical call — changing any other argument, including sort, rej...
cyclenumber
Two-year election cycle (e.g., 2024). Even years only. Itemized mode defaults to the current cycle when omitted — Schedule B spans all history, and an all-history scan of an active committee times...
disbursement_descriptionstring
Full-text description search (e.g., "media buy", "consulting"). Itemized only.
disbursement_purpose_categorystring
Purpose category code. Itemized only.
max_amountnumber
Maximum amount in dollars. Itemized only.
max_datestring
Latest disbursement date (YYYY-MM-DD). Itemized only.
min_amountnumber
Minimum amount in dollars. Itemized only.
min_datestring
Earliest disbursement date (YYYY-MM-DD). Itemized only.
modestring
Query mode. "itemized" returns individual disbursement records (keyset pagination). "by_purpose" aggregates by purpose category. "by_recipient" aggregates by recipient name. "by_recipient_id" aggre...one of itemized · by_purpose · by_recipient · by_recipient_iddefault: itemized
pageinteger
Page number (1-indexed) for aggregate modes. Explicit page is rejected in itemized mode, which paginates with cursor. Defaults to 1 for aggregates.
per_pageinteger
Results per page. Itemized mode sends at most 30 upstream, keeping the response under a 100,000-byte budget; a page bounded below your request reports truncated and cap, and next_cursor continues it.default: 20
recipient_citystring
Recipient city. Itemized only.
recipient_committee_idstring
Recipient committee ID (for committee-to-committee transfers). Itemized only.
recipient_namestring
Full-text payee name search. Itemized only.
recipient_statestring
Recipient state. Itemized only.
sortstring
Sort field. A "-" prefix sorts descending: use "-disbursement_amount" for the biggest payments first, since the ascending form leads with the most negative rows (refunds and voided payments). Itemi...one of disbursement_date · -disbursement_date · disbursement_amount · -disbursement_amount
openfec_search_expendituresSearch independent expenditures (Schedule E) — outside spending supporting or opposing federal candidates. Covers Super PACs, party committees, and other groups. Use itemized mode for individual expenditure records, or by_candidate for aggregated totals per candidate; by_candi...21 params

Search independent expenditures (Schedule E) — outside spending supporting or opposing federal candidates. Covers Super PACs, party committees, and other groups. Use itemized mode for individual expenditure records, or by_candidate for aggregated totals per candidate; by_candi...

Parameters* required
candidate_idstring
Targeted candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results.
candidate_officestring
Office of the targeted candidate: H=House, S=Senate, P=President. In by_candidate mode this scopes a whole race: P stands alone, S also needs candidate_office_state, H also needs candidate_office_s...one of H · S · P
candidate_office_districtstring
Two-digit House district of the targeted race (e.g., "09"). Required alongside candidate_office=H and candidate_office_state in by_candidate mode; Senate and presidential rows carry no district and...
candidate_office_statestring
Two-letter state code of the targeted race. Required alongside candidate_office=H or candidate_office=S in by_candidate mode; leave it off for candidate_office=P, whose aggregate rows carry no stat...
candidate_partystring
Three-letter party code of the targeted candidate (e.g., DEM, REP). Itemized only — by_candidate rejects it, since the aggregate endpoint has no party filter.
committee_idstring
Spending committee ID (e.g., C00703975). Get IDs from openfec_search_committees results.
cursorstring
Opaque pagination cursor from a previous response of this tool. Itemized mode only (keyset pagination). Valid only for an otherwise-identical call — changing any other argument, including sort, rej...
cyclenumber
Two-year election cycle (e.g., 2024). Even years only. Itemized mode defaults to the current cycle when omitted — Schedule E spans all history and an unscoped scan times out upstream. Pass an expli...
election_fullboolean
by_candidate only: expand cycle to the full election period (4yr president, 6yr senate, 2yr house) instead of the two-year cycle alone. Defaults to true when omitted; itemized mode rejects it, sinc...
is_noticeboolean
Only 24/48-hour notice filings (near-election spending). Itemized only.
max_amountnumber
Maximum expenditure amount in dollars. Itemized only.
max_datestring
Latest expenditure date (YYYY-MM-DD). Itemized only.
min_amountnumber
Minimum expenditure amount in dollars. Itemized only.
min_datestring
Earliest expenditure date (YYYY-MM-DD). Itemized only.
modestring
Query mode. "itemized" returns individual expenditure records (keyset pagination). "by_candidate" returns aggregated totals per candidate by committee (page-based).one of itemized · by_candidatedefault: itemized
most_recentboolean
Only the most recent version of amended filings. Itemized only — by_candidate rejects it. Defaults to true in itemized mode when omitted; pass false to see superseded versions of amended filings.
pageinteger
Page number (1-indexed) for by_candidate mode. Explicit page is rejected in itemized mode, which paginates with cursor. Defaults to 1 for by_candidate.
payee_namestring
Full-text payee name search. Itemized only.
per_pageinteger
Results per page. Itemized mode sends at most 60 upstream when scoped by committee_id and 30 otherwise, keeping the response under a 100,000-byte budget; a page bounded below your request reports t...default: 20
sortstring
Sort field. A "-" prefix sorts descending: use "-expenditure_amount" for the largest outside spending first, since the ascending form leads with the most negative rows (corrections and voided entri...one of expenditure_date · -expenditure_date · expenditure_amount · -expenditure_amount · office_total_ytd · -office_total_ytd

+1 more parameters. See the server's own documentation for the full schema.

openfec_search_coordinated_expendituresSearch coordinated party expenditures (Schedule F) — spending a party committee makes on behalf of a candidate it supports, in coordination with that campaign. Distinct from independent expenditures (openfec_search_expenditures), which cannot be coordinated with the candidate,...11 params

Search coordinated party expenditures (Schedule F) — spending a party committee makes on behalf of a candidate it supports, in coordination with that campaign. Distinct from independent expenditures (openfec_search_expenditures), which cannot be coordinated with the candidate,...

Parameters* required
candidate_idstring
Benefiting candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results.
committee_idstring
Spending party committee ID (e.g., C00003418). Get IDs from openfec_search_committees results — party committees carry committee_type X or Y.
cyclenumber
Two-year election cycle (e.g., 2024). Even years only. Omitting it searches every cycle on record.
max_amountnumber
Maximum expenditure amount in dollars.
max_datestring
Latest expenditure date (YYYY-MM-DD).
min_amountnumber
Minimum expenditure amount in dollars.
min_datestring
Earliest expenditure date (YYYY-MM-DD).
pageinteger
Page number (1-indexed). Read pagination.pages in the response to see how many pages exist.default: 1
payee_namestring
Full-text payee name search (the vendor the party paid).
per_pageinteger
Results per page. At most 80 are requested upstream when scoped by committee_id and 25 otherwise, keeping the response under a 100,000-byte budget. A page bounded below your request reports truncat...default: 20
sortstring
Sort field. A "-" prefix sorts descending: use "-expenditure_amount" for the largest coordinated spending first, since the ascending form leads with the most negative rows (corrections and voided e...one of expenditure_date · -expenditure_date · expenditure_amount · -expenditure_amount
openfec_search_filingsSearch FEC filings and reports by committee, candidate, form type, or date range. Covers financial reports (F3/F3P/F3X), statements of candidacy (F2), organizational filings (F1), 24-hour IE notices (F24), and amendments.13 params

Search FEC filings and reports by committee, candidate, form type, or date range. Covers financial reports (F3/F3P/F3X), statements of candidacy (F2), organizational filings (F1), 24-hour IE notices (F24), and amendments.

Parameters* required
candidate_idstring
Associated candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results.
committee_idstring
Filing committee ID (e.g., C00358796). Get IDs from openfec_search_committees results.
cyclenumber
Two-year election cycle (even year).
filer_namestring
Full-text filer name search.
form_typestring
FEC form type. Common: F3 (House/Senate quarterly), F3P (Presidential), F3X (PAC/party), F24 (24-hour IE notice), F1 (statement of organization), F2 (statement of candidacy), F5 (IE by persons).
is_amendedboolean
Filter to original or amended filings only.
max_receipt_datestring
Latest FEC receipt date (YYYY-MM-DD).
min_receipt_datestring
Earliest date FEC received the filing (YYYY-MM-DD).
most_recentboolean
Only the most recent version (filters out superseded amendments).default: true
pageinteger
Page number (1-indexed).default: 1
per_pageinteger
Results per page. At most 65 are requested upstream, keeping the response under a 100,000-byte budget. A page bounded below your request reports truncated and cap, and pagination.per_page echoes th...default: 20
report_typestring
Report type code. Common: Q1/Q2/Q3 (quarterly), YE (year-end), M3-M12 (monthly), 12G/12P/30G (pre/post election).
report_yearnumber
Filing year.
openfec_lookup_electionsLook up federal election races and candidate financial summaries. Find who's running in a race with fundraising totals, or get an aggregate race summary.9 params

Look up federal election races and candidate financial summaries. Find who's running in a race with fundraising totals, or get an aggregate race summary.

Parameters* required
cycle*integer
Election cycle year (even years only, e.g. 2024).
districtstring
Two-digit district number (e.g. "07"). Required for house unless zip is provided.
election_fullboolean
Expand to full election period (4yr president, 6yr senate, 2yr house). Defaults to true when omitted; a ZIP-scoped search rejects it, since that endpoint has no such parameter. Carries no schema de...
modestring
search = candidates in a race with financial totals. summary = aggregate race financial summary.one of search · summarydefault: search
office*string
Office sought: H=House, S=Senate, P=President.one of H · S · P
pageinteger
Page number (1-indexed). Search mode only; explicit page is rejected in summary mode. Defaults to 1 for search.
per_pageinteger
Results per page. Search mode only; defaults to 20.
statestring
Two-letter US state code (e.g., AZ, CA). Required for senate/house unless zip is provided.
zipstring
ZIP code — finds races covering this ZIP. Search mode only.
openfec_search_legalSearch FEC legal documents: advisory opinions, enforcement cases (MURs), alternative dispute resolutions, administrative fines, and statutes. The citation, penalty, respondent, ao_number, and case_number filters each apply to only some document types; with type omitted, the se...14 params

Search FEC legal documents: advisory opinions, enforcement cases (MURs), alternative dispute resolutions, administrative fines, and statutes. The citation, penalty, respondent, ao_number, and case_number filters each apply to only some document types; with type omitted, the se...

Parameters* required
ao_numberstring
Specific advisory opinion number (e.g. "2024-01"). Applies to advisory_opinions only: rejected with any other type, and with type omitted only advisory opinions are returned.
case_numberstring
Specific MUR, ADR, or administrative fine case number (e.g. "8343"). Applies to murs, adrs, and admin_fines: rejected with advisory_opinions or statutes, and with type omitted only those three type...
date_kindstring
Which date min_date/max_date bound. Each document type records its own dates, so this must be one the chosen type has: type=advisory_opinions → issue_date (opinion issued), request_date (request re...one of issue_date · request_date · open_date · close_date · document_date · rtb_date
from_hitinteger
Offset for pagination (0-indexed), counted within each document type rather than across them. Default 0. When a response is bounded, nextFromHit gives the value that continues each type. The search...default: 0
hits_returnedinteger
Results per page, applied per document type. Default 20, max 200. A response is held to 100,000 bytes, so a page of large records can carry fewer, with nextFromHit naming where each type continues....default: 20
max_datestring
Latest date (YYYY-MM-DD) for the date_kind selected. Requires type and date_kind.
max_penalty_amountnumber
Maximum penalty amount in dollars. Applies to murs, adrs, and admin_fines (an administrative fine matches on its reason-to-believe or final-determination amount): rejected with advisory_opinions or...
min_datestring
Earliest date (YYYY-MM-DD) for the date_kind selected. Requires type and date_kind.
min_penalty_amountnumber
Minimum penalty amount in dollars. Applies to murs, adrs, and admin_fines (an administrative fine matches on its reason-to-believe or final-determination amount): rejected with advisory_opinions or...
querystring
Full-text search across legal documents.
regulatory_citationstring
CFR citation in the form "<title> CFR <part>.<section>" (e.g. "11 CFR 110.1"; "C.F.R.", "§", and a suffix such as "110.1(b)" are accepted — a bare "110.1" is rejected as invalid_citation). One cita...
respondentstring
Respondent name. Applies to enforcement cases (murs, adrs) only: rejected with any other type, and with type omitted only MURs and ADRs are returned.
statutory_citationstring
U.S.C. citation in the form "<title> U.S.C. <section>" (e.g. "52 U.S.C. 30104"; "USC", "§", and a suffix such as "30104(g)" are accepted — a bare "30104" is rejected as invalid_citation). One citat...
typestring
Document type filter. Omit to search every type the other filters apply to — all five when only query is given. admin_fines can be slow without a query.one of advisory_opinions · murs · adrs · admin_fines · statutes
openfec_get_legal_documentFetch one FEC legal document — advisory opinion, MUR, ADR, administrative fine, or statute — by its type and number. openfec_search_legal replaces each result's documents and dispositions arrays with a count and category summary and cuts every commission vote down to a date an...4 params

Fetch one FEC legal document — advisory opinion, MUR, ADR, administrative fine, or statute — by its type and number. openfec_search_legal replaces each result's documents and dispositions arrays with a count and category summary and cuts every commission vote down to a date an...

Parameters* required
arraystring
Name of one top-level array field of the record to page through by entry — usually one listed in withheld when the record was too large to return whole (e.g. "dispositions", "documents"). Returns t...
doc_type*string
Legal document type, always plural. openfec_search_legal reports the singular form in each result document_type — advisory_opinion, mur, adr, admin_fine, statute — so add an "s" to get the value th...one of advisory_opinions · murs · adrs · admin_fines · statutes
no*string
Document number, copied from the no field of the matching openfec_search_legal result. Advisory opinions are year-serial (e.g. "2024-01", also repeated as ao_no); murs, adrs, and admin_fines are di...
offsetinteger
Entry offset (0-indexed) into array. Requires array; defaults to 0 when array is given. Pass the next_offset a previous slice returned to continue.
openfec_lookup_calendarLook up FEC calendar events, filing deadlines, and election dates. Use to find upcoming filing windows for a committee, locate when a federal election occurred, or scope FEC events by date range and category.13 params

Look up FEC calendar events, filing deadlines, and election dates. Use to find upcoming filing windows for a committee, locate when a federal election occurred, or scope FEC events by date range and category.

Parameters* required
categorystring
Calendar category ID. 20=Commission Meetings, 21=Reporting Deadlines, 22=Conferences and Outreach, 23=AOs and Rules, 24=Other, 25=Quarterly, 26=Monthly, 27=Pre and Post-Elections, 28=EC Periods, 29...one of 20 · 21 · 22 · 23 · 24 · 25
descriptionstring
Full-text event description search. Events mode.
districtstring
Two-digit House district (e.g., "14", "07"); a single digit is zero-padded. Pair it with state — alone it matches that district number in every state. At-large races carry no district upstream, so...
election_yearinteger
Election year. Election dates mode.
max_datestring
Latest date (YYYY-MM-DD).
min_datestring
Earliest date (YYYY-MM-DD).
modestring
events = FEC calendar events. filing_deadlines = report due dates. election_dates = upcoming/past elections.one of events · filing_deadlines · election_datesdefault: events
officestring
Office sought (H=House, S=Senate, P=President). Election dates mode.one of H · S · P
pageinteger
Page number (1-indexed). Default 1.default: 1
per_pageinteger
Results per page. Default 20, max 100.default: 20
report_typestring
Report type code (e.g. "Q1", "Q2"). Filing deadlines mode only.
report_yearinteger
Report year. Filing deadlines mode.
statestring
Two-letter state code (e.g., AZ, CA). Primarily for election_dates mode.

Sponsors

Configuration

FEC_API_KEY

OpenFEC API key — optional (DEMO_KEY: a small daily allowance shared per IP). Own key: OpenFEC publishes 1,000 req/hr. Free at api.data.gov.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/openfec-mcp-server

Access FEC campaign finance data on candidates, money trails, and election filings via MCP. STDIO or Streamable HTTP.

12 Tools • 5 FEC Resource Templates • 2 Prompts • 1 Skill

Details

Repository
github.com/cyanheads/openfec-mcp-server
Categories
Sales & Marketing, Data & Analytics
Package
@cyanheads/openfec-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Prompts
2
Tools verified
Nov 6, 2026

More from cyanheads

Related Sales & Marketing MCP servers

View all
1damien829 avatarAIPayGen Site Inteldamien829/aipaygenWebsite and company intel for agents: DNS, WHOIS, SSL, tech stack, email security, profiles2stars
2dancumberland avatarKit.com MCP Serverdancumberland/kit-mcpAgent-optimized MCP server for Kit.com email marketing. 13 composite tools, 100% V4 API.2stars
3martinhavel avatarAresmartinhavel/cz-agents-mcpCzech & Slovak business registry — company lookup by IČO, name, legal form, VAT. Official ARES.2stars
4sultanlive avatarVibeSEOsultanlive/vibeseo-mcpSEO research, keyword discovery, site audits, Search Console, backlinks and content workflow.2stars
5byteoverdev avatarDiagrams MCPbyteoverdev/diagrams-mcpGenerate cloud architecture diagrams, flowcharts, and sequence diagrams.2stars
6yifanyifan897645 avatarWebcheckyifanyifan897645/webcheck-mcpWebsite health analysis: SEO, accessibility, performance, security, and broken links2stars