Skip to main content
Glama
psalzman

MCP OpenFEC Server

by psalzman

MCP OpenFEC 服务器

模型上下文协议 (MCP) 服务器,通过 OpenFEC API 提供对联邦选举委员会 (FEC) 竞选财务数据的访问。

特征

  • 按姓名、州或办公室搜索候选人

  • 获取详细的候选人信息和财务数据

  • 访问委员会信息

  • 查看个人贡献

  • 追踪独立支出

  • 访问联邦选举委员会备案文件和审计案件

  • 下载批量数据

Related MCP server: FireHydrant MCP Server

要求

  • Node.js(v16 或更高版本)

  • OpenFEC API 密钥(在此获取)

安装

  1. 克隆存储库:

git clone https://github.com/psalzman/mcp-openfec
cd mcp-openfec
  1. 安装依赖项:

npm install
  1. 在根目录中创建一个.env文件并添加您的 OpenFEC API 密钥:

OPENFEC_API_KEY=your_api_key_here
  1. 构建服务器:

npm run build

配置

要将此 MCP 服务器与 Claude Desktop 一起使用:

  1. 找到您的 Claude Desktop 配置文件:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. 在文件中添加以下配置:

{
  "mcpServers": {
    "openfec": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-openfec/build/server.js"],
      "env": {
        "OPENFEC_API_KEY": "your_api_key_here"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

重要配置说明:

  1. 将/absolute/path/to/mcp-openfec替换为您克隆存储库的实际路径

  2. 使用绝对路径,而不是相对路径

  3. 将disabled设置为false以启用服务器

  4. 为了安全起见,将autoApprove保留为空数组

  5. 在env部分添加您的 OpenFEC API 密钥

可用工具

  1. get_candidate :获取候选人的详细信息

  2. get_candidate_financials :获取候选人的财务数据

  3. search_candidates :按姓名或其他条件搜索候选人

  4. get_committee :获取委员会的详细信息

  5. get_candidate_contributions :获取候选人的个人贡献

  6. get_filings :检索官方 FEC 文件

  7. get_independent_expenditures :获取独立支出

  8. get_electioneering :获取竞选通讯

  9. get_party_coordinated_expenditures :获取派对协调支出

  10. get_communication_costs :获取公司/工会沟通成本

  11. get_audit_cases :获取 FEC 审计案例和结果

  12. get_bulk_downloads :获取批量数据下载的链接

速率限制

服务器实施速率限制以符合 OpenFEC API 指南:

  • 每小时 1000 个请求

  • 超出此限制的请求将收到错误响应

发展

修改服务器:

  1. 更改src目录中的 TypeScript 文件

  2. 重建服务器:

npm run build

执照

本项目遵循 BSD 三条款许可证,这是一个宽松的开源许可证,在确保用户最大自由度的同时,满足署名要求。该许可证允许您:

  • 将代码用于商业用途

  • 修改代码

  • 分发代码

  • 私下使用代码

主要有三个条件:

  1. 您必须包含原始版权声明

  2. 您必须在发行版中包含许可证文本

  3. 未经许可,不得使用贡献者的名字来认可衍生产品

BSD 3 条款许可证广泛应用于学术和商业环境,在许可和保护贡献者之间提供了良好的平衡。

贡献

  1. 分叉存储库

  2. 创建你的功能分支( git checkout -b feature/my-new-feature )

  3. 提交您的更改( git commit -am 'Add some feature' )

  4. 推送到分支( git push origin feature/my-new-feature )

  5. 创建新的 Pull 请求

版权

版权所有 (c) 2025,Phillip Salzman 和 Foundry Peak, LLC。保留所有权利。网址: http://foundrypeak.com/

有关许可的详细信息,请参阅LICENSE文件。

Available Tools

12 tools
get_audit_casesC

Get FEC audit cases and findings

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idNoOptional: FEC committee ID
audit_idNoOptional: Specific audit case ID
audit_yearNoOptional: Year of audit
finding_typesNoOptional: Types of findings to filter by

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states it 'gets' data (implying read-only), but doesn't mention any behavioral traits like pagination, rate limits, authentication requirements, or what happens when multiple optional parameters are combined. For a data retrieval tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

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 at just 6 words ('Get FEC audit cases and findings'). It's front-loaded with the core purpose and contains no unnecessary verbiage. Every word earns its place in communicating the essential function.

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?

Given the tool has 4 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what 'audit cases and findings' actually means in practice, what data format is returned, or how the optional parameters interact. For a data retrieval tool with multiple filtering options, more context would be helpful for effective use.

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 all parameters are documented in the schema itself. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.

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 'Get FEC audit cases and findings' clearly states the verb ('Get') and resource ('FEC audit cases and findings'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'get_filings' or 'search_candidates', but the specificity of 'audit cases and findings' provides inherent domain distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_filings' that might overlap in data retrieval contexts, there's no mention of when this tool is appropriate or when other tools should be preferred. The description is purely functional without contextual usage information.

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

get_bulk_downloadsB

Get links to bulk data downloads

ParametersJSON Schema
NameRequiredDescriptionDefault
data_typeYesType of bulk data to download
election_yearNoOptional: Election year for the data

TDQS

B3.1/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 of behavioral disclosure. It mentions 'Get links' but doesn't specify whether this is a read-only operation, if it requires authentication, what format the links are in (e.g., URLs, file paths), or any rate limits. For a tool with no annotation coverage, this leaves critical behavioral traits unaddressed.

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 a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place, achieving optimal conciseness without sacrificing clarity.

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's moderate complexity (2 parameters, no annotations, no output schema), the description is minimally adequate. It states the purpose but lacks behavioral details, usage context, and output information. With no output schema, the description doesn't explain what 'links' entail (e.g., format, structure), leaving gaps that could hinder effective use.

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 schema description coverage is 100%, with clear descriptions for both parameters, including an enum for 'data_type'. The description adds no additional parameter semantics beyond what the schema provides, such as explaining the relationship between 'data_type' and 'election_year' or usage examples. Baseline 3 is appropriate given the schema does the heavy lifting.

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 action ('Get links') and resource ('bulk data downloads'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'get_filings' or 'get_candidate_contributions' that might also provide data downloads, missing an opportunity for precise distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_filings' or 'search_candidates' that might offer similar or overlapping data, there's no indication of scope, prerequisites, or comparative use cases, leaving the agent to guess based on tool names alone.

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

get_candidateC

Get detailed information about a candidate

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idYesFEC candidate ID
election_yearNoOptional: Filter by election year

TDQS

C2.6/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 of behavioral disclosure. It only states the action ('Get detailed information') without revealing traits like read-only status, potential rate limits, authentication needs, or response format. For a tool with no annotation coverage, this is a significant gap in 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?

The description is a single sentence that is front-loaded and efficient, with no wasted words. It directly states the tool's purpose without unnecessary elaboration. However, it could be more structured by including key details, but it earns high marks for brevity and clarity in its current form.

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?

Given the lack of annotations and output schema, the description is incomplete. It does not explain what 'detailed information' includes, how results are returned, or any behavioral aspects like error handling. For a tool with no structured data to supplement it, the description should provide more context to be fully helpful.

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 schema description coverage is 100%, with both parameters ('candidate_id' and 'election_year') documented in the schema. The description does not add any meaning beyond what the schema provides, such as explaining parameter interactions or usage examples. With high schema coverage, a baseline score of 3 is appropriate as the schema handles the heavy lifting.

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

Purpose3/5

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

The description states the tool's purpose ('Get detailed information about a candidate'), which is clear but vague. It specifies the verb 'Get' and resource 'candidate', but lacks specificity about what 'detailed information' entails. It does not distinguish from sibling tools like 'get_candidate_contributions' or 'search_candidates', which limits its differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention when to use it over sibling tools such as 'get_candidate_contributions' for financial data or 'search_candidates' for finding candidates. There are no explicit instructions on context or exclusions, leaving usage unclear.

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

get_candidate_contributionsC

Get individual contributions for a candidate

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idYesFEC candidate ID
election_yearNoElection year
sortNoOptional: Sort by contribution_receipt_amount (desc for highest first)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action 'Get' but does not describe traits like whether it's read-only, requires authentication, has rate limits, or what the output format looks like. This is a significant gap for a tool with no annotation coverage.

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 a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration, making it highly concise and well-structured.

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?

Given the tool has no annotations, no output schema, and the description lacks behavioral and usage details, it is incomplete. For a tool with 3 parameters and potential complexity in contributions data, the description should provide more context on output format, limitations, or how it fits with siblings, but it does not.

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 has 100% description coverage, so the schema already documents all parameters (candidate_id, election_year, sort). The description adds no additional meaning beyond what the schema provides, such as clarifying the scope of 'individual contributions' or how parameters interact. Baseline 3 is appropriate when schema does the heavy lifting.

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 'Get' and the resource 'individual contributions for a candidate', making the purpose understandable. However, it does not differentiate from siblings like 'get_candidate_financials' or 'search_candidates', which might also involve candidate data, so it lacks specific distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. For example, it does not mention how it differs from 'get_candidate_financials' or when to prefer it over 'search_candidates' for contribution-related queries, leaving usage context implied at best.

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

get_candidate_financialsC

Get financial data for a candidate

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idYesFEC candidate ID
election_yearYesElection year to get data for

TDQS

C2.9/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 of behavioral disclosure. It states the tool 'Get financial data' but does not clarify if this is a read-only operation, requires authentication, has rate limits, or what the output format might be. This leaves significant gaps in understanding the tool's behavior.

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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to understand quickly.

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?

Given the lack of annotations and output schema, the description is incomplete. It does not address behavioral aspects like safety, permissions, or output format, which are crucial for a tool that retrieves data. This leaves the agent with insufficient context for effective use.

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 has 100% description coverage, with clear documentation for 'candidate_id' and 'election_year'. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.

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 action ('Get') and resource ('financial data for a candidate'), making the purpose understandable. However, it does not differentiate this tool from potential siblings like 'get_candidate' or 'get_candidate_contributions', which might also retrieve candidate-related data, so it lacks specificity for sibling distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_candidate' and 'search_candidates' available, there is no indication of scenarios where this tool is preferred or excluded, leaving usage ambiguous.

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

get_committeeC

Get detailed information about a committee

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesFEC committee ID

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify authentication requirements, rate limits, error conditions, or what format the 'detailed information' returns. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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 a single, efficient sentence with no wasted words. It's appropriately sized for a simple lookup tool and gets straight to the point without unnecessary elaboration.

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?

Given the lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what 'detailed information' includes, how results are structured, or any behavioral constraints. For a tool that presumably returns structured data about committees, more context about the response format would be helpful.

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%, with the single parameter 'committee_id' clearly documented as 'FEC committee ID' in the schema. The description adds no additional parameter information beyond what the schema provides, which is acceptable given the high schema coverage but doesn't enhance understanding.

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

Purpose3/5

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

The description 'Get detailed information about a committee' clearly states the action (get) and resource (committee), making the purpose understandable. However, it's somewhat vague about what 'detailed information' entails and doesn't differentiate this tool from siblings like get_candidate or get_filings that also retrieve information about political entities.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or how it differs from sibling tools like get_candidate (which retrieves candidate data) or get_filings (which retrieves filing data). The agent must infer usage from the tool name alone.

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

get_communication_costsC

Get corporate/union communication costs

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idNoOptional: FEC committee ID
candidate_idNoOptional: FEC candidate ID
min_dateNoOptional: Minimum communication date (YYYY-MM-DD)
max_dateNoOptional: Maximum communication date (YYYY-MM-DD)
min_amountNoOptional: Minimum cost amount
max_amountNoOptional: Maximum cost amount
sortNoOptional: Sort by cost amount

TDQS

C2.9/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 of behavioral disclosure. 'Get' implies a read operation, but the description doesn't address important behavioral aspects like authentication requirements, rate limits, pagination behavior, error conditions, or what format the costs are returned in. For a 7-parameter tool with no annotation coverage, this is a significant gap.

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 at just 4 words, with zero wasted language. It's front-loaded with the core purpose and uses efficient phrasing. Every word earns its place in this minimal description.

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?

Given the complexity of a 7-parameter tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'communication costs' encompass, what format results are returned in, or any behavioral characteristics. For a data retrieval tool in what appears to be an FEC API context, more context about the data domain and return format would be helpful.

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 schema description coverage is 100%, with all 7 parameters well-documented in the schema itself. The description adds no parameter-specific information beyond what's already in the schema. According to the scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description.

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 'Get' and resource 'corporate/union communication costs', providing a specific purpose. However, it doesn't distinguish this tool from its siblings like get_audit_cases or get_filings, which likely retrieve different types of FEC data. The description is accurate but lacks sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With 10 sibling tools on the server, there's no indication of what makes this tool unique for retrieving communication costs versus other FEC data types. No context about prerequisites, typical use cases, or exclusions is provided.

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

get_electioneeringC

Get electioneering communications

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idNoOptional: FEC committee ID
candidate_idNoOptional: FEC candidate ID
min_dateNoOptional: Minimum disbursement date (YYYY-MM-DD)
max_dateNoOptional: Maximum disbursement date (YYYY-MM-DD)
min_amountNoOptional: Minimum disbursement amount
max_amountNoOptional: Maximum disbursement amount
sortNoOptional: Sort by disbursement amount

TDQS

C2.9/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 of behavioral disclosure. It only states what the tool does ('Get electioneering communications') without mentioning any behavioral traits such as whether this is a read-only operation, potential rate limits, authentication requirements, pagination behavior, or what the output looks like. This leaves significant gaps for an agent to understand how to interact with it effectively.

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 with just three words, front-loading the core purpose without any wasted text. Every word earns its place, making it easy to parse quickly.

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?

Given the complexity of a tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the return values, behavioral aspects, or usage context, leaving the agent with incomplete information to operate the tool effectively despite the good parameter documentation in the 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?

The input schema has 100% description coverage, with all 7 parameters well-documented (e.g., committee_id, candidate_id, date ranges, amounts, sort). The description adds no additional parameter information beyond what's in the schema, so it meets the baseline score of 3 for high schema coverage without compensating value.

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 ('Get') and resource ('electioneering communications'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings (like get_communication_costs or get_independent_expenditures) which might also retrieve related political communication data, so it doesn't reach the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like get_communication_costs and get_independent_expenditures that might overlap in domain, there's no indication of what makes electioneering communications distinct or when this specific tool is appropriate.

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

get_filingsC

Retrieve official FEC filings with filters

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idNoOptional: FEC committee ID
candidate_idNoOptional: FEC candidate ID
form_typeNoOptional: Form types to filter by (e.g., ["F3", "F3P"])
min_receipt_dateNoOptional: Minimum receipt date (YYYY-MM-DD)
max_receipt_dateNoOptional: Maximum receipt date (YYYY-MM-DD)
stateNoOptional: Two-letter state code
sortNoOptional: Sort by receipt date

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions retrieval with filters but doesn't cover critical aspects like whether this is a read-only operation, potential rate limits, authentication needs, pagination behavior, or error handling. This is inadequate for a tool with 7 parameters and no output schema.

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 a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded and wastes no space, making it easy to parse quickly.

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?

Given the complexity (7 parameters, no annotations, no output schema), the description is insufficient. It doesn't explain what 'official FEC filings' entail, how results are returned, or any behavioral traits, leaving significant gaps for an AI agent to operate effectively.

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 schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value by mentioning 'filters', which aligns with the optional parameters in the schema, but doesn't provide additional context or examples beyond what's in the schema descriptions.

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 action ('Retrieve') and resource ('official FEC filings'), making the purpose understandable. However, it doesn't specifically differentiate this tool from its siblings like 'get_candidate_financials' or 'get_committee', which might also retrieve FEC-related data, so it doesn't reach the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_candidate' or 'search_candidates'. It mentions filters but doesn't specify scenarios or exclusions, leaving the agent to infer usage from the tool name and parameters alone.

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

get_independent_expendituresC

Get independent expenditures supporting or opposing candidates

ParametersJSON Schema
NameRequiredDescriptionDefault
candidate_idNoOptional: FEC candidate ID
committee_idNoOptional: FEC committee ID
support_oppose_indicatorNoOptional: S for supporting or O for opposing
min_dateNoOptional: Minimum expenditure date (YYYY-MM-DD)
max_dateNoOptional: Maximum expenditure date (YYYY-MM-DD)
min_amountNoOptional: Minimum expenditure amount
max_amountNoOptional: Maximum expenditure amount
sortNoOptional: Sort by expenditure amount

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'gets' data, implying a read-only operation, but doesn't specify whether it's a search, list, or filter operation, nor does it describe output format, pagination, rate limits, or authentication requirements. This leaves significant gaps for a tool with 8 parameters.

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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy for an agent to quickly understand the core functionality.

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?

For a tool with 8 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what 'independent expenditures' are in this context, how results are returned, or provide any behavioral context beyond the basic purpose. The agent would need to rely heavily on the schema alone.

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 description mentions 'supporting or opposing candidates,' which aligns with the support_oppose_indicator parameter, but doesn't add meaningful context beyond what the 100% schema coverage already provides. The schema descriptions thoroughly document all 8 optional parameters, so the description adds minimal value here.

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 action ('Get') and resource ('independent expenditures') with the purpose of retrieving data about expenditures supporting or opposing candidates. It distinguishes itself from siblings like get_candidate_contributions or get_communication_costs by focusing specifically on independent expenditures, though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or compare with sibling tools like get_communication_costs or get_party_coordinated_expenditures, leaving the agent to infer usage based on the tool name alone.

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

get_party_coordinated_expendituresD

Get party coordinated expenditures

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idNoOptional: FEC committee ID
candidate_idNoOptional: FEC candidate ID
min_dateNoOptional: Minimum expenditure date (YYYY-MM-DD)
max_dateNoOptional: Maximum expenditure date (YYYY-MM-DD)
min_amountNoOptional: Minimum expenditure amount
max_amountNoOptional: Maximum expenditure amount
sortNoOptional: Sort by expenditure amount

TDQS

D1.8/5.0
Behavior1/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states 'Get' which implies a read operation, but offers no details on permissions, rate limits, pagination, error handling, or what the return data looks like. For a tool with 7 parameters and no output schema, this leaves critical behavioral aspects undocumented.

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

Conciseness2/5

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

While technically concise with just three words, this is under-specification rather than effective brevity. The description fails to provide necessary context and doesn't earn its place as a helpful tool description. It's too minimal to be considered well-structured for agent understanding.

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?

Given 7 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what 'party coordinated expenditures' are, how results are returned, or any behavioral aspects. The agent would struggle to use this tool effectively without significant additional context or trial-and-error.

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 all parameters are documented in the input schema with clear descriptions. The description adds no additional parameter information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.

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

Purpose2/5

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

The description 'Get party coordinated expenditures' is essentially a tautology that restates the tool name. It provides the basic verb ('Get') and resource ('party coordinated expenditures') but lacks specificity about what exactly is being retrieved or any distinguishing features from sibling tools like get_independent_expenditures or get_communication_costs. No additional context about scope or format is provided.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives. There is no mention of context, prerequisites, or comparisons to sibling tools like get_independent_expenditures or get_communication_costs, which appear related to expenditure tracking. The agent receives no help in selecting between these options.

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

search_candidatesC

Search for candidates by name or other criteria

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCandidate name search string
stateNoOptional: Two-letter state code
officeNoOptional: H for House, S for Senate, P for President
election_yearNoOptional: Filter by election year

TDQS

C2.9/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 of behavioral disclosure. It states the action ('search') but doesn't describe key traits like whether results are paginated, sorted, or limited; authentication needs; rate limits; or what the output looks like (e.g., list of candidates). This leaves significant gaps for a search 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?

The description is a single, efficient sentence with zero waste. It front-loads the core purpose ('search for candidates') and adds just enough detail ('by name or other criteria') without redundancy. Every word earns its place, making it highly concise and well-structured.

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?

Given the complexity of a search tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., result format, pagination), usage context, and output expectations, which are critical for effective tool invocation. It relies too heavily on the schema alone.

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 the schema fully documents all parameters (name, state, office, election_year). The description adds minimal value beyond the schema, mentioning 'name or other criteria' which loosely maps to parameters but doesn't provide additional syntax, format, or usage details. Baseline 3 is appropriate as the schema does the heavy lifting.

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') and resource ('candidates'), specifying search criteria ('by name or other criteria'). It distinguishes from siblings like 'get_candidate' (singular retrieval) by indicating a search operation, though it doesn't explicitly contrast with other search-like tools (none listed).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives is provided. It doesn't mention when to prefer this over 'get_candidate' (for specific retrieval) or other sibling tools, nor does it specify prerequisites or exclusions. Usage is implied by the search functionality but not explicitly framed.

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. 12 tool updatesv1.0.0
    • First observedget_audit_cases
    • First observedget_bulk_downloads
    • First observedget_candidate
    • First observedget_candidate_contributions
    • First observedget_candidate_financials
    • First observedget_committee
    • First observedget_communication_costs
    • First observedget_electioneering
    • First observedget_filings
    • First observedget_independent_expenditures
    • First observedget_party_coordinated_expenditures
    • First observedsearch_candidates

TDQS

B3.1/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific FEC data types like candidates, committees, contributions, expenditures, filings, and downloads. There is no overlap in functionality—tools like get_candidate, get_committee, and get_filings serve separate resources, and even related tools like get_candidate_contributions and get_candidate_financials focus on different aspects of candidate data.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, starting with 'get_' or 'search_' followed by a specific noun phrase (e.g., get_candidate, search_candidates, get_audit_cases). This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming style.

Tool Count5/5

With 12 tools, the server is well-scoped for accessing U.S. Federal Election Commission data, covering key areas like candidates, committees, financials, expenditures, and filings. Each tool serves a distinct data retrieval function, avoiding bloat while providing comprehensive coverage for the domain.

Completeness4/5

The tool set offers strong coverage for retrieving FEC data, including candidates, committees, financials, expenditures, filings, and bulk downloads. A minor gap exists in update or management operations (e.g., no create or modify tools), but this is reasonable for a read-only data access server focused on public records, and agents can work effectively with the provided retrieval functions.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with FireHydrant's incident management API through the Model Context Protocol. Provides programmatic access to FireHydrant's features for managing incidents, retrospectives, and operational workflows.
    1,631 npm
    5
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables access to MLB Stats API data including game schedules, results, team information, and player lookups with fuzzy matching support through the Model Context Protocol.
    3
    7
    MIT