Skip to main content
Glama
sh-patterson

fec-mcp-server

by sh-patterson

FEC MCP 서버

연방선거관리위원회(FEC) 선거 자금 조사 및 투명성을 위한 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버는 공식 FEC 데이터를 사용하여 후보자 검색, 재무 보고서 검색, 기부금 및 지출 분석을 위한 도구를 제공합니다.

기능

  • search_candidates: 이름, 선거 연도, 공직, 주 또는 정당별로 연방 후보자 검색

  • get_committee_finances: 수입, 지출, 보유 현금 및 소진율을 포함한 재무 요약 조회

  • get_receipts: 기부자 세부 정보가 포함된 항목별 기부금(Schedule A) 조회

  • get_disbursements: 수령인 및 목적 세부 정보가 포함된 항목별 지출(Schedule B) 조회

  • Flagged-first notable analysis: 참조 목록 및 휴리스틱 플래그 사유가 포함된 기부금/지출에 대한 선택적 주요 블록

  • get_independent_expenditures: 후보자 찬성 또는 반대를 위한 슈퍼 PAC 지출(Schedule E) 추적

  • get_committee_flags: RFAI(추가 정보 요청), 수정안 및 관련 규정 준수 위험 신호 확인

  • search_donors: 모든 위원회에 걸쳐 이름, 고용주 또는 직업별로 개인 기부자 검색

  • search_spending: 모든 위원회에 걸쳐 설명 또는 수령인별로 선거 캠페인 지출 검색

모든 데이터는 공식 OpenFEC API에서 직접 가져옵니다.

Related MCP server: @cyanheads/openfec-mcp-server

설치

사전 요구 사항

npm에서 설치

npm install -g fec-mcp-server

소스에서 설치

git clone <repository-url>
cd fecmcp
npm install
npm run build

구성

FEC API 키를 환경 변수로 설정하세요:

export FEC_API_KEY=your-api-key-here

또는 프로젝트 루트에 .env 파일을 생성하세요:

FEC_API_KEY=your-api-key-here

Claude Desktop과 함께 사용

Claude Desktop 구성 파일에 서버를 추가하세요:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "fec": {
      "command": "npx",
      "args": ["fec-mcp-server"],
      "env": {
        "FEC_API_KEY": "your-api-key-here"
      }
    }
  }
}

또는 전역으로 설치된 경우:

{
  "mcpServers": {
    "fec": {
      "command": "fec-mcp-server",
      "env": {
        "FEC_API_KEY": "your-api-key-here"
      }
    }
  }
}

도구

이름으로 FEC 후보자 기록을 검색합니다.

매개변수:

  • q (필수): 검색할 후보자 이름

  • election_year (선택): 선거 연도별 필터링 (예: 2024)

  • office (선택): 공직별 필터링 - H (하원), S (상원), P (대통령)

  • state (선택): 주별 필터링 (2글자 코드)

  • party (선택): 정당 코드별 필터링 (예: "DEM", "REP")

예시:

Search for candidates named "Smith" running for Senate in 2024

get_committee_finances

캠페인 위원회의 재무 요약을 조회합니다.

매개변수:

  • committee_id (필수): FEC 위원회 ID (예: "C00401224")

  • cycle (선택): 2년 선거 주기 (예: 2024)

반환값:

  • 총 수입 및 지출

  • 보유 현금

  • 부채

  • 소진율 (지출/수입 비율)

  • 기부금 분류 (개인, PAC, 정당)

  • 소액 기부자 비율

예시:

Get the financial summary for committee C00401224

get_receipts

위원회가 받은 항목별 기부금(Schedule A)을 조회합니다.

매개변수:

  • committee_id (필수): FEC 위원회 ID

  • min_amount (선택): 최소 기부 금액 (기본값: $1,000)

  • two_year_transaction_period (선택): 선거 주기 (예: 2024)

  • cycle (선택): two_year_transaction_period의 별칭; 재무 주기 사용과 기부금을 자동으로 정렬

  • contributor_type (선택): "individual" 또는 "committee"

  • include_notable (선택): 플래그 우선 주요 블록 포함 여부 (기본값: true)

  • fuzzy_threshold (선택): 참조 목록 플래그에 대한 퍼지 매칭 임계값 (기본값: 90, 범위: 80-99)

  • limit (선택): 결과 수 (기본값: 20, 최대: 100)

  • sort_by (선택): "amount" 또는 "date" (기본값: "amount")

예시:

Show the top 10 contributions over $5,000 to committee C00401224

get_disbursements

위원회가 지출한 항목별 지출(Schedule B)을 조회합니다.

매개변수:

  • committee_id (필수): FEC 위원회 ID

  • min_amount (선택): 최소 지출 금액 (기본값: $1,000)

  • two_year_transaction_period (선택): 선거 주기

  • cycle (선택): two_year_transaction_period의 별칭; 재무 주기 사용과 지출을 자동으로 정렬

  • purpose (선택): 목적 키워드별 필터링 (예: "MEDIA", "CONSULTING")

  • include_notable (선택): 플래그 우선 주요 블록 포함 여부 (기본값: true)

  • fuzzy_threshold (선택): 참조 목록 플래그에 대한 퍼지 매칭 임계값 (기본값: 90, 범위: 80-99)

  • limit (선택): 결과 수 (기본값: 20, 최대: 100)

  • sort_by (선택): "amount" 또는 "date" (기본값: "amount")

예시:

Show media-related spending over $10,000 by committee C00401224

get_independent_expenditures

독립적 지출(Schedule E)을 조회합니다 - PAC 및 슈퍼 PAC이 후보자를 지원하거나 반대하기 위해 지출한 금액.

매개변수:

  • candidate_id (선택): 후보자를 대상으로 한 지출을 확인하기 위한 FEC 후보자 ID

  • committee_id (선택): 위원회의 독립적 지출을 확인하기 위한 FEC 위원회 ID

  • support_oppose (선택): "support" 또는 "oppose"별 필터링

  • min_amount (선택): 최소 지출 금액

  • cycle (선택): 2년 선거 주기

  • limit (선택): 결과 수 (기본값: 20)

참고: candidate_id 또는 committee_id 중 하나는 필수입니다.

예시:

Show independent expenditures opposing candidate P00009423

get_committee_flags

RFAI 및 수정안을 포함하여 캠페인 위원회의 규정 준수 위험 신호를 확인합니다.

매개변수:

  • committee_id (필수): FEC 위원회 ID

  • cycle (선택): 2년 선거 주기

반환값:

  • RFAI(추가 정보 요청) 수 및 세부 정보

  • 수정안 수 및 세부 정보

  • 최근 규정 준수 문제

예시:

Check committee C00401224 for any compliance flags

이름, 고용주 또는 직업별로 모든 FEC 신고서에 걸쳐 개인 기부자를 검색합니다.

매개변수:

  • contributor_name (선택): 검색할 기부자 이름

  • contributor_employer (선택): 고용주 이름 (예: "Goldman Sachs")

  • contributor_occupation (선택): 직업 (예: "Lobbyist")

  • contributor_state (선택): 2글자 주 코드

  • min_amount (선택): 최소 기부 금액 (기본값: $200)

  • cycle (선택): 2년 선거 주기

  • limit (선택): 결과 수 (기본값: 20)

참고: contributor_name, contributor_employer 또는 contributor_occupation 중 하나 이상이 필수입니다.

예시:

Find contributions from employees of "Meta" in California

설명 또는 수령인별로 모든 위원회에 걸쳐 캠페인 지출(Schedule B)을 검색합니다.

매개변수:

  • description (선택): 지출 설명의 키워드 (예: "travel", "consulting")

  • recipient_name (선택): 수령인/업체 이름

  • recipient_state (선택): 2글자 주 코드

  • min_amount (선택): 최소 금액 (기본값: $500)

  • cycle (선택): 2년 선거 주기

  • limit (선택): 결과 수 (기본값: 20)

참고: description 또는 recipient_name 중 하나 이상이 필수입니다.

예시:

Find spending on "golf" or "resort" across all committees

개발

설정

npm install

테스트 실행

npm test          # Watch mode
npm run test:run  # Single run
npm run test:coverage  # With coverage

빌드

npm run build

타입 검사

npm run typecheck

실시간 수락 검사

npm run acceptance:fec-day
npm run acceptance:notable

API 속도 제한

FEC API는 API 키를 사용하여 시간당 1,000건의 요청을 허용합니다. 더 높은 제한(시간당 최대 7,200건)이 필요한 경우 FEC에 문의하십시오.

타임아웃 및 API 지연 시간

기본 요청 타임아웃은 30초입니다. 검색 도구(search_candidates, search_donors, search_spending)는 FEC API 엔드포인트가 광범위한 데이터베이스 스캔을 수행하여 본질적으로 느리기 때문에 60초 타임아웃을 사용합니다.

기본 타임아웃을 전역적으로 재정의하려면 FEC_API_TIMEOUT_MS 환경 변수를 설정하세요:

export FEC_API_TIMEOUT_MS=45000  # 45 seconds

Docker

컨테이너 이미지를 로컬에서 빌드하세요:

docker build -t fec-mcp-server .

런타임에 제공된 API 키로 실행하세요:

docker run --rm -i \
  -e FEC_API_KEY=your-api-key-here \
  fec-mcp-server

릴리스

Glama 검사는 GitHub 릴리스를 확인합니다. 다음 저장소 변경 사항을 병합한 후 GitHub에서 또는 다음 명령어로 v1.0.0과 같은 태그를 생성하고 게시하세요:

git tag v1.0.0
git push origin v1.0.0

라이선스

MIT

면책 조항

이 도구는 선거 자금 투명성 연구를 위해 설계되었습니다. 중립적이고 당파적이지 않은 방식으로 공개 FEC 데이터에 대한 액세스를 제공합니다. 이 도구와 그 결과물은 후보자나 정당을 홍보하거나 반대하는 데 사용되어서는 안 됩니다.

리소스

Available Tools

8 tools
get_committee_financesA

Retrieve comprehensive financial summary for a campaign committee from official FEC filings. Returns total receipts, disbursements, cash on hand, debts, loans (including candidate loans), and calculates burn rate (spending/income ratio). Includes Schedule C loans and Schedule D debts for complete financial picture. Essential for understanding campaign financial health and transparency research.

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesFEC committee ID (e.g., "C00401224")
cycleNoTwo-year election cycle (e.g., 2024). Defaults to most recent.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It details the returned metrics (receipts, disbursements, cash, debts, loans, burn rate) and mentions Schedule C/D inclusion. Does not disclose potential limitations like data freshness or rate limits, but is thorough for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no waste. The main action is first, followed by contents, then use case. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description explains return values clearly. Covers the main aspects of the financial summary, but missing details on error handling or pagination, which may be acceptable for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. The description adds no extra meaning beyond the schema; it restates the default for cycle which is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves a comprehensive financial summary for a campaign committee from official FEC filings. Specific verb, resource, and scope distinguish it from more specific sibling tools like get_disbursements and get_receipts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States it is essential for understanding campaign financial health and transparency research, implying the appropriate use case. However, it does not explicitly exclude when to use sibling tools for detailed breakdowns.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_committee_flagsA

Check a campaign committee for compliance red flags including RFAIs (Requests for Additional Information from the FEC) and amended filings. Essential for identifying campaign finance compliance issues that merit closer research review.

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesFEC committee ID to check for compliance flags
cycleNoTwo-year election cycle to check (e.g., 2024)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description indicates a read-only check for specific flag types, but does not detail side effects, auth requirements, or rate limits. Adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with action and purpose, no superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with two parameters and no output schema; description covers purpose, output type, and rationale. Lacks mention of return format or pagination, but sufficient for a straightforward check.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with clear descriptions for both parameters. Description adds no semantic value beyond what schema provides, meeting baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states it checks a campaign committee for compliance red flags (RFAIs, amended filings). Clearly distinguishes from sibling tools that focus on financial data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States it is essential for identifying compliance issues meriting closer review, implying use when investigating compliance. While it doesn't explicitly exclude scenarios, the context is clear given sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_disbursementsA

Retrieve itemized expenditures (Schedule B) made by a campaign committee. Shows payment recipients, amounts, and stated purposes. Supports filtering by amount for researching significant spending patterns and campaign finance transparency.

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesFEC committee ID (e.g., "C00401224")
min_amountNoMinimum disbursement amount to filter (default: $1,000)
two_year_transaction_periodNoTwo-year period (e.g., 2024 covers 2023-2024).
cycleNoAlias for two_year_transaction_period to align with finance cycle filters.
purposeNoFilter by disbursement purpose keyword (e.g., "CONSULTING", "MEDIA")
include_notableNoInclude flagged-first notable analysis block in output (default: true)
fuzzy_thresholdNoFuzzy match confidence threshold for reference list matching (default: 90)
limitNoNumber of results to return (default: 20, max: 100)
sort_byNoSort results by "amount" (descending) or "date" (most recent first)amount

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It correctly portrays the tool as read-only ('Retrieve'), but omits any mention of authentication, rate limits, or whether any state changes occur. While 'Retrieve' is suggestive, an explicit safety statement would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two short sentences, each serving a clear purpose: first to state the action and resource, second to explain utility. It is front-loaded and free of unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters and no output schema, the description provides a high-level overview but does not detail the response structure or pagination. An agent might need to infer the output format. The description is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, fulfilling the baseline. The description adds only generic value ('filtering by amount') beyond what the schema's parameter descriptions already convey. No additional parameter-specific context is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Retrieve') and resource ('itemized expenditures (Schedule B)'), clearly distinguishing from sibling tools like get_receipts or get_independent_expenditures. It also lists the key data fields (recipients, amounts, purposes), leaving no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'researching significant spending patterns and campaign finance transparency' as a use case, but does not provide explicit guidance on when to avoid this tool or compare it with alternatives like get_committee_finances or get_independent_expenditures. The usage context is implied, not articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_independent_expendituresA

Retrieve independent expenditures (Schedule E) - money spent by PACs and Super PACs to support or oppose candidates without coordinating with campaigns. Critical for understanding outside money influence in elections. Can filter by candidate targeted, committee spending, or support/oppose indicator.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idNoFEC candidate ID to find expenditures targeting this candidate
committee_idNoFEC committee ID to find expenditures made by this committee
support_opposeNoFilter by support or oppose indicator
min_amountNoMinimum expenditure amount to include
cycleNoTwo-year election cycle (e.g., 2024)
limitNoMaximum number of results to return (default: 20)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It explains the nature of the data (outside money, no coordination) but does not disclose behavioral traits like read-only nature, rate limits, pagination, or response format. Some transparency is gained through the context, but it is incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: first defines purpose, second adds importance, third lists key filters. No wasted words, front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters (all documented), no output schema, and no annotations, the description adequately explains the use case and filters. However, it omits any description of the output format (e.g., what fields are returned), which is a gap given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description mentions 'candidate targeted' (candidate_id), 'committee spending' (committee_id), and 'support/oppose indicator' (support_oppose), adding minimal context beyond the schema. It does not cover min_amount or cycle, but these are well-documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'retrieve' and the resource 'independent expenditures (Schedule E)', explaining that they are money spent by PACs and Super PACs to support or oppose candidates. This distinguishes it from sibling tools like 'get_committee_finances' or 'get_receipts'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Critical for understanding outside money influence in elections' and lists filters like candidate targeted and support/oppose indicator, implying when to use the tool. However, it does not explicitly state when not to use it or compare it to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_receiptsA

Retrieve itemized contributions (Schedule A) received by a campaign committee. Shows individual and organizational donors, amounts, and contributor details. Automatically classifies PAC contributions by type (Corporate, Labor, Trade, Leadership PAC) for deeper analysis. Supports filtering by amount threshold for researching significant contributions and campaign finance patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesFEC committee ID (e.g., "C00401224")
min_amountNoMinimum contribution amount to filter (default: $1,000)
two_year_transaction_periodNoTwo-year period (e.g., 2024 covers 2023-2024).
cycleNoAlias for two_year_transaction_period to align with finance cycle filters.
contributor_typeNoFilter by contributor type: "individual" or "committee" (PAC)
include_notableNoInclude flagged-first notable analysis block in output (default: true)
fuzzy_thresholdNoFuzzy match confidence threshold for reference list matching (default: 90)
limitNoNumber of results to return (default: 20, max: 100)
sort_byNoSort results by "amount" (descending) or "date" (most recent first)amount

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It notes the auto-classification of PAC contributions and filtering, but does not state that it is read-only, describe pagination, or mention any rate limits. Adequate but lacks full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding value. The most important information (action and resource) comes first. No extraneous content, though structure could be slightly improved with bullet points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description mentions output includes donors, amounts, and details, but lacks specifics on return structure or pagination. Given 9 parameters and no output schema, more detail on the response format would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining auto-classification of PAC types (related to contributor_type) and the 'notable analysis block' (include_notable), providing context beyond parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves itemized contributions (Schedule A) for a campaign committee, distinguishing it from sibling tools like get_disbursements or get_independent_expenditures. The verb 'Retrieve' and the specific reference to contributions make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for contributions received, but does not explicitly state when to use it versus alternatives. Given sibling tools exist, explicit guidance on when to use this tool (e.g., for receipts, not disbursements) would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_candidatesA

Search FEC records for candidates by name. Returns candidate identifiers and their principal campaign committee IDs, which are required for retrieving detailed financial information. Useful for campaign finance research and transparency investigations.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesCandidate name to search for (e.g., "John Smith" or "Smith")
election_yearNoFilter by election year (e.g., 2024)
officeNoFilter by office: H=House, S=Senate, P=President
stateNoFilter by state (2-letter code, e.g., "CA")
partyNoFilter by party code (e.g., "DEM", "REP", "LIB")

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It correctly implies a read-only operation via 'search' and 'returns,' but does not explicitly state that no data is modified or mention rate limits, authentication needs, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences convey the purpose, output, and use case with no redundancy or unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's actions and output (identifiers and committee IDs) and provides a use case. It lacks information about pagination, result limits, or error handling, but the schema and multiple parameters make it fairly complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, each parameter already has a clear description (e.g., q as candidate name, election_year with range). The tool description adds no additional parameter-level detail beyond the schema, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Search FEC records for candidates by name' and explains what it returns (candidate identifiers and committee IDs). It distinguishes from sibling tools like get_committee_finances or search_donors by focusing on candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that the returned IDs are 'required for retrieving detailed financial information,' implying this tool should be used before committee finance lookups. However, it does not explicitly state when to avoid using it or provide direct comparisons to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_donorsB

Search for individual donors across all FEC filings by name, employer, or occupation. Essential for tracking donor patterns, identifying industry contributions, or researching specific individuals' political giving. Supports searching by employer (e.g., "Goldman Sachs") or occupation (e.g., "Lobbyist", "Government Affairs").

ParametersJSON Schema
NameRequiredDescriptionDefault
contributor_nameNoDonor name to search for (partial match supported)
contributor_employerNoEmployer name to search for (e.g., "Google", "Goldman Sachs")
contributor_occupationNoOccupation to search for (e.g., "Attorney", "Government Affairs", "Lobbyist")
contributor_stateNoTwo-letter state code to filter by (e.g., "CA", "NY")
min_amountNoMinimum contribution amount to include
cycleNoTwo-year election cycle (e.g., 2024)
limitNoMaximum number of results to return (default: 20)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only describes the search scope ('across all FEC filings') but does not disclose behavioral traits such as pagination, rate limits, authentication needs, or what happens with no results. The behavioral context is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: first states the action, second lists use cases, third provides examples. It is front-loaded and concise, with no superfluous information. Every sentence contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 optional parameters and no output schema or annotations, the description adequately explains what the tool does and gives examples. However, it lacks discussion of result format, error handling, or how parameters combine, leaving some gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description adds marginal value with examples (employer: 'Goldman Sachs', occupation: 'Lobbyist'), which clarifies usage but does not significantly deepen understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search for individual donors' and specifies the resource as 'all FEC filings' with search dimensions name, employer, or occupation. It distinguishes from sibling tools by focusing on donors, but does not explicitly differentiate from other search tools like search_candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides use cases like 'tracking donor patterns' and examples of searching by employer or occupation, implying when to use. However, it lacks explicit when-not-to-use guidance or references to alternative tools for other purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_spendingB

Search campaign spending (Schedule B) across all committees by description or recipient. Use to find questionable expenditures like "steak dinner", "event tickets", "travel", "Disney", "golf", or payments to specific vendors. Essential for identifying spending patterns and potential misuse of campaign funds.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoSearch disbursement descriptions for keywords (e.g., "dinner", "travel", "event tickets", "Disney")
recipient_nameNoSearch for payments to a specific recipient/vendor
recipient_stateNoTwo-letter state code to filter by (e.g., "FL", "NV")
min_amountNoMinimum disbursement amount to include
cycleNoTwo-year election cycle (e.g., 2024)
limitNoMaximum number of results to return (default: 20)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only implies a read operation via the word 'search' and notes that it operates 'across all committees'. It does not disclose potential rate limits, pagination, data freshness, or whether it requires authentication. This is minimal for a tool with no other behavioral hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences and a line, front-loading the core purpose and specific search examples. Every sentence adds value, and there is no redundant or vague language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 6 parameters and no output schema, the description does not mention the return format or structure (e.g., list of disbursements). It also lacks information on default behavior, such as ordering or result limit details beyond what the 'limit' parameter specifies. This leaves the agent uncertain about what to expect from the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 6 parameters with descriptions (100% coverage). The description adds value by providing concrete examples for the 'description' parameter (e.g., 'dinner', 'travel', 'Disney') but does not add meaning beyond the schema for other parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches campaign spending by description or recipient across all committees, with specific examples like 'steak dinner' and 'Disney'. However, it does not explicitly differentiate from the sibling tool 'get_disbursements', which also searches disbursements, missing an opportunity to clarify distinct use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by listing example searches (e.g., 'event tickets', 'golf') and states its purpose for identifying spending patterns. However, it does not mention when to use this tool versus alternatives like 'get_disbursements' or 'get_committee_finances', nor does it specify when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedget_independent_expenditures1 field changed
      • changedInput schema / properties / candidate_id / pattern
        Previous value: -"^[A-Z]\\d{8}$"New value: +"^(?:[HS]\\d[A-Z]{2}\\d{5}|P\\d{8})$"
  2. 8 tool updatesv1.0.0
    • First observedget_committee_finances
    • First observedget_committee_flags
    • First observedget_disbursements
    • First observedget_independent_expenditures
    • First observedget_receipts
    • First observedsearch_candidates
    • First observedsearch_donors
    • First observedsearch_spending

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct FEC data type or search entity: committee finances vs. compliance flags vs. specific schedules (disbursements, receipts, independent expenditures) vs. searches (candidates, donors, spending). No ambiguity.

Naming Consistency5/5

All tools follow a consistent 'verb_noun' pattern with lowercase underscore separation: get_*, search_*. No mixing of conventions.

Tool Count5/5

8 tools is a well-scoped count for campaign finance research. Covers committee summary, key schedules, and targeted searches without being overwhelming or too thin.

Completeness4/5

Covers core CRUD-like operations (retrieve summaries, itemized receipts/disbursements, independent expenditures, compliance flags) and search. Minor gap: no dedicated tool for committee details beyond finances, but searches provide identifiers. Solid for the domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables querying state-level campaign finance data, including donors, expenditures, committees, and candidates, from multiple state disclosure systems via a unified MCP interface.
    9
    MIT