openfec-mcp-server
Server Details
Access FEC campaign finance data. Query data about candidates, money trails, and election filings.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/openfec-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/openfec-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.1/5 across 9 of 9 tools scored.
Each tool targets a distinct FEC entity or operation (calendar, elections, candidates, committees, contributions, disbursements, expenditures, filings, legal). No overlap in purpose, clearly distinguishable.
All tools follow the pattern 'openfec_verb_noun' with verbs 'lookup' or 'search' and nouns indicating the data type. Minor verb variation is logical and consistent within subgroups.
With 9 tools covering major FEC data areas, the count is well-scoped. Each tool serves a distinct purpose, neither too few nor too many for the domain.
The set covers core FEC data (candidates, committees, financial transactions, filings, legal documents, elections, calendar). Minor gaps exist (e.g., committee financial summaries not explicitly exposed), but overall surface is comprehensive.
Available Tools
9 toolsopenfec_lookup_calendarOpenfec Lookup CalendarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | events = FEC calendar events. filing_deadlines = report due dates. election_dates = upcoming/past elections. | events |
| page | No | Page number (1-indexed). Default 1. | |
| state | No | Two-letter state code (e.g., AZ, CA). Primarily for election_dates mode. | |
| office | No | Office sought (H=House, S=Senate, P=President). Election dates mode. | |
| category | No | 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=IE Periods, 32=Open Meetings, 33=Conferences, 34=Roundtables, 36=Election Dates, 37=Federal Holidays, 38=FEA Periods, 39=Executive Sessions, 40=Public Hearings. Events mode only. | |
| max_date | No | Latest date (YYYY-MM-DD). | |
| min_date | No | Earliest date (YYYY-MM-DD). | |
| per_page | No | Results per page. Default 20, max 100. | |
| description | No | Full-text event description search. Events mode. | |
| report_type | No | Report type code (e.g. "Q1", "Q2"). Filing deadlines mode only. | |
| report_year | No | Report year. Filing deadlines mode. | |
| election_year | No | Election year. Election dates mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no calendar entries matched — echoes filters and suggests how to broaden. |
| results | Yes | Calendar result set; events, filing deadlines, or election dates depending on mode. |
| pagination | Yes | Page-based pagination metadata. |
| totalCount | Yes | Total matching calendar entries before pagination. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description's lack of additional behavioral disclosure is partially acceptable. However, the description does not mention pagination behavior, result limits, or the fact that the tool returns a list of events (though output schema exists). It adds value by explaining modes but misses other runtime behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no filler. The first sentence defines the purpose, the second provides use cases. Information is front-loaded and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose and common uses, and the output schema exists so return value explanation is not needed. However, it does not explain the 'mode' parameter's central role in filtering, nor mention pagination or sorting. Slight gaps for a complex tool with 12 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% with detailed descriptions for all 12 parameters (including enums and defaults). The description does not add meaning beyond the schema; it only provides high-level usage context. Baseline score of 3 is appropriate for complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'look up' and specific resources: FEC calendar events, filing deadlines, and election dates. It provides concrete use cases like 'find upcoming filing windows' and 'locate when a federal election occurred', distinguishing the tool from siblings like openfec_lookup_elections which likely focuses on election-specific lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage scenarios (e.g., 'find upcoming filing windows', 'scope ... by date range and category') but does not explicitly state when to avoid this tool or suggest alternatives. The sibling tool list exists but is not referenced in the description, so the agent must infer differentiation from names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_lookup_electionsOpenfec Lookup ElectionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ZIP code — finds races covering this ZIP. Search mode only. | |
| mode | No | search = candidates in a race with financial totals. summary = aggregate race financial summary. | search |
| cycle | Yes | Election cycle year (even years only, e.g. 2024). | |
| state | No | Two-letter US state code (e.g., AZ, CA). Required for senate/house unless zip is provided. | |
| office | Yes | Office sought: H=House, S=Senate, P=President. | |
| district | No | Two-digit district number (e.g. "07"). Required for house unless zip is provided. | |
| election_full | No | Expand to full election period (4yr president, 6yr senate, 2yr house). Default true. Ignored for ZIP-based searches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no election results matched — echoes filters and suggests how to broaden. |
| results | Yes | Election race result set; candidate financial rows in search mode, a single aggregate summary row in summary mode. |
| pagination | Yes | Page-based pagination metadata. |
| totalCount | Yes | Total matching candidates or race summaries. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety and idempotency. The description adds value by explaining the two modes (search vs summary), but other behavioral traits like rate limits or pagination are not mentioned. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence states the core purpose, and the second elaborates on the two modes. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, two modes, and an output schema, the description covers the high-level functionality and modes. Some details (e.g., required parameters for non-ZIP searches) are omitted, but the schema covers them. The description is sufficient for an agent to decide if the tool fits the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with comprehensive parameter descriptions. The description adds value by grouping parameters into functional modes (search vs summary) and explaining their purpose in plain language, which goes beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up federal election races and candidate financial summaries, specifying two modes (candidate search with totals or aggregate summary). This verb+resource combination is specific and distinguishes it from sibling tools like openfec_search_candidates which focus on individuals rather than races.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two usage modes (search vs summary) and implies the tool is for election race information, not calendar or individual searches. However, it does not explicitly exclude scenarios or compare with siblings, though the differentiation is clear from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_candidatesOpenfec Search CandidatesARead-onlyIdempotentInspect
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 digits.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| cycle | No | Two-year election cycle (even year, e.g., 2024). | |
| party | No | Three-letter party code (e.g., DEM, REP, LIB). | |
| query | No | Full-text candidate name search. | |
| state | No | Two-letter US state code (e.g., AZ, CA). | |
| office | No | Filter by office: H=House, S=Senate, P=President. | |
| district | No | Two-digit district number for House candidates. | |
| per_page | No | Results per page. | |
| candidate_id | No | FEC candidate ID (e.g., P00003392, H2CO07170). Get IDs from openfec_search_candidates results. When provided, returns a single candidate with full detail. | |
| election_year | No | Specific election year the candidate ran in. | |
| include_totals | No | Include financial totals (receipts, disbursements, cash on hand). Defaults to true when fetching by candidate_id. | |
| candidate_status | No | Candidate status: C=present, F=future, N=not yet, P=prior. | |
| has_raised_funds | No | Only candidates whose committee has received receipts. | |
| incumbent_challenge | No | Incumbent status: I=incumbent, C=challenger, O=open seat. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no candidates matched — echoes filters and suggests how to broaden. |
| totals | No | Financial totals (receipts, disbursements, cash_on_hand) when include_totals is true. |
| candidates | Yes | Candidate result set; one record per match. |
| pagination | Yes | Page-based pagination metadata. |
| totalCount | Yes | Total matching candidates before pagination. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only and idempotent behavior. Description adds that providing 'candidate_id' returns a single candidate with full detail and that 'include_totals' defaults to true in that case. This adds behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded, no unnecessary words. Every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (14 parameters, many optional) and the presence of an output schema, the description covers the main use cases (search and specific fetch) and key conventions (ID format, totals default). It does not explain pagination, but the output schema likely handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 14 parameters have descriptions in the schema (100% coverage). Description adds value by explaining the candidate ID format and clarifying that 'include_totals' defaults to true when fetching by 'candidate_id', which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: 'Find federal candidates by name, state, office, party, or cycle' and 'Retrieve a specific candidate by FEC ID with financial totals.' It also explains the ID format (H, S, P), distinguishing it from sibling tools that search committees, contributions, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use the tool: for searching candidates with various filters or retrieving a specific candidate by ID. It implies when not to use (e.g., for committees) but does not explicitly mention alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_committeesOpenfec Search CommitteesARead-onlyIdempotentInspect
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 digits (e.g., C00358796).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| cycle | No | Two-year election cycle (even year). | |
| party | No | Three-letter party code (e.g., DEM, REP). | |
| query | No | Full-text committee name search. | |
| state | No | Two-letter state code. | |
| per_page | No | Results per page. | |
| designation | No | Committee designation. A (authorized), B (lobbyist PAC), D (leadership PAC), J (joint fundraiser), P (principal campaign), U (unauthorized). | |
| candidate_id | No | Find committees linked to this candidate (authorized, leadership, joint fundraising). Get IDs from openfec_search_candidates results. | |
| committee_id | No | FEC committee ID (e.g., C00358796). Get IDs from openfec_search_committees results. Starts with 'C' followed by digits. Returns a single committee with full detail. | |
| committee_type | No | 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). | |
| treasurer_name | No | Full-text treasurer name search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no committees matched — echoes filters and suggests how to broaden. |
| committees | Yes | Committee result set; one record per match. |
| pagination | Yes | Page-based pagination metadata. |
| totalCount | Yes | Total matching committees before pagination. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description carries a lower burden. It adds context about committee ID format (starts with C followed by digits), but does not disclose additional behavioral traits such as pagination limits or rate limits, which are partially covered by the schema's parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the primary function and then specifying the ID retrieval use case. Every sentence adds value with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 11 parameters, all with schema descriptions, and the existence of an output schema, the description covers the main use cases adequately. It does not discuss pagination behavior explicitly, but the schema parameters for page and per_page are present. The description is complete enough for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 some summarization of search capabilities but does not provide new meaning beyond the already detailed schema property descriptions. It reinforces the ID format, but this adds minimal incremental value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds political committees by various criteria and can retrieve a specific committee by FEC ID. It uses specific verbs like 'Find' and 'Retrieve' and names the resource (political committees), effectively distinguishing it from sibling search tools for candidates, contributions, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear intent on when to use the tool (search by name, type, candidate, state, or retrieve by ID), but does not explicitly state when not to use it or mention alternative tools. However, the context signals show distinct sibling tools, so the purpose is sufficiently differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_contributionsOpenfec Search ContributionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Query mode. "itemized" returns individual contribution records (keyset pagination). "by_size" aggregates by contribution size bucket. "by_state" aggregates by contributor state. "by_employer" aggregates by employer. "by_occupation" aggregates by occupation. | itemized |
| sort | No | Sort field. Itemized only. | |
| cycle | No | Two-year election cycle (e.g., 2024). Even years only. Defaults to current cycle for itemized mode. | |
| cursor | No | Opaque pagination cursor from a previous response. Itemized mode only (keyset pagination). | |
| max_date | No | Latest contribution date (YYYY-MM-DD). Itemized only. | |
| min_date | No | Earliest contribution date (YYYY-MM-DD). Itemized only. | |
| per_page | No | Results per page. | |
| max_amount | No | Maximum contribution amount in dollars. Itemized only. | |
| min_amount | No | Minimum contribution amount in dollars. Itemized only. | |
| candidate_id | No | Candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results. Enables by_size and by_state aggregates without a committee_id. | |
| committee_id | No | Receiving committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. | |
| is_individual | No | Only individual contributions (excludes committee-to-committee transfers). Itemized only. | |
| contributor_zip | No | ZIP code prefix (starts-with match). Itemized only. | |
| contributor_city | No | Contributor city. Itemized only. | |
| contributor_name | No | Full-text donor name search. Itemized only. | |
| contributor_state | No | Two-letter state code (e.g., CA). Itemized only. | |
| contributor_employer | No | Full-text employer search. Itemized only. | |
| contributor_occupation | No | Full-text occupation search. Itemized only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Total result count (may be approximate for itemized). |
| notice | No | Guidance when no contributions matched — echoes filters and suggests how to broaden. |
| results | Yes | Contribution result set; itemized records or aggregate buckets depending on mode. |
| pagination | No | Page-based pagination info (aggregate modes only). |
| totalCount | Yes | Total matching contributions or aggregate rows. |
| next_cursor | No | Pagination cursor for the next page of itemized results. Null when no more pages. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by explaining the keyset pagination in itemized mode, sort options, and the deafult cycle behavior. No contradiction with annotations. It could mention rate limits or other traits but is otherwise solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading purpose and key constraints. Every phrase is necessary, no fluff. It efficiently communicates the core function and mode-specific requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 18 parameters, 100% schema coverage, existing output schema, and annotations, the description sufficiently covers behavioral aspects like pagination, mode differences, and ID dependencies. An AI agent can confidently invoke the tool based on this information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 some value by grouping parameters by mode (e.g., 'Itemized only') and providing cross-reference hints like 'Get IDs from openfec_search_candidates results'. However, it does not add significant syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches itemized individual contributions (Schedule A) or gets aggregate breakdowns by size, state, employer, or occupation. It includes the specific use-case question 'who is funding this committee?' and distinguishes from sibling tools like openfec_search_committees by focusing on contributions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance for different modes: itemized mode requires a committee_id, while by_size/by_state can use candidate_id. It implies alternatives by referencing other tools for candidate/committee IDs. However, it does not explicitly state when not to use this tool or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_disbursementsOpenfec Search DisbursementsARead-onlyIdempotentInspect
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?"
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Query mode. "itemized" returns individual disbursement records (keyset pagination). "by_purpose" aggregates by purpose category. "by_recipient" aggregates by recipient name. "by_recipient_id" aggregates by recipient committee ID (committee-to-committee transfers). | itemized |
| sort | No | Sort field. Itemized only. | |
| cycle | No | Two-year election cycle (e.g., 2024). Even years only. | |
| cursor | No | Opaque pagination cursor from a previous response. Itemized mode only (keyset pagination). | |
| max_date | No | Latest disbursement date (YYYY-MM-DD). Itemized only. | |
| min_date | No | Earliest disbursement date (YYYY-MM-DD). Itemized only. | |
| per_page | No | Results per page. | |
| max_amount | No | Maximum amount in dollars. Itemized only. | |
| min_amount | No | Minimum amount in dollars. Itemized only. | |
| committee_id | Yes | Spending committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. Required for all modes. | |
| recipient_city | No | Recipient city. Itemized only. | |
| recipient_name | No | Full-text payee name search. Itemized only. | |
| recipient_state | No | Recipient state. Itemized only. | |
| recipient_committee_id | No | Recipient committee ID (for committee-to-committee transfers). Itemized only. | |
| disbursement_description | No | Full-text description search (e.g., "media buy", "consulting"). Itemized only. | |
| disbursement_purpose_category | No | Purpose category code. Itemized only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Total result count (may be approximate for itemized). |
| notice | No | Guidance when no disbursements matched — echoes filters and suggests how to broaden. |
| results | Yes | Disbursement result set; itemized records or aggregate buckets depending on mode. |
| pagination | No | Page-based pagination info (aggregate modes only). |
| totalCount | Yes | Total matching disbursements or aggregate rows. |
| next_cursor | No | Pagination cursor for the next page of itemized results. Null when no more pages. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the agent knows the tool is safe and idempotent. The description does not add extra behavioral details such as rate limits, data freshness, or pagination behavior beyond what is in the parameter schema. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states core function and modes, second gives usage guidance. No fluff, well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 modes, 16 params, output schema exists), the description covers core purpose and usage context. It does not explain each mode's output or pagination but relies on schema and output schema; almost complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds high-level context (e.g., 'itemized' vs 'aggregate') but does not explain each parameter beyond what the schema provides. No additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches itemized committee spending (Schedule B) and provides aggregate breakdowns by purpose or recipient. It specifies the required committee_id and gives example queries that differentiate it from sibling tools like search_contributions or search_expenditures, although not explicitly contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions all modes require a committee_id and gives two example use cases. However, it does not explicitly state when not to use this tool (e.g., for contributions) or mention alternatives among sibling tools; the context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_expendituresOpenfec Search ExpendituresARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Query mode. "itemized" returns individual expenditure records (keyset pagination). "by_candidate" returns aggregated totals per candidate by committee (page-based). | itemized |
| sort | No | Sort field. Itemized only. | |
| cycle | No | Two-year election cycle (e.g., 2024). Even years only. | |
| cursor | No | Opaque pagination cursor from a previous response. Itemized mode only (keyset pagination). | |
| max_date | No | Latest expenditure date (YYYY-MM-DD). Itemized only. | |
| min_date | No | Earliest expenditure date (YYYY-MM-DD). Itemized only. | |
| per_page | No | Results per page. | |
| is_notice | No | Only 24/48-hour notice filings (near-election spending). Itemized only. | |
| max_amount | No | Maximum expenditure amount in dollars. Itemized only. | |
| min_amount | No | Minimum expenditure amount in dollars. Itemized only. | |
| payee_name | No | Full-text payee name search. Itemized only. | |
| most_recent | No | Only the most recent version of amended filings. Itemized only. | |
| candidate_id | No | Targeted candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results. | |
| committee_id | No | Spending committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. | |
| support_oppose | No | S = support, O = oppose. Filter by whether the expenditure supports or opposes the candidate. | |
| candidate_party | No | Three-letter party code of the targeted candidate (e.g., DEM, REP). | |
| candidate_office | No | Office of the targeted candidate: H=House, S=Senate, P=President. | |
| candidate_office_state | No | Two-letter state code of the targeted race. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Total result count (may be approximate for itemized). |
| notice | No | Guidance when no expenditures matched — echoes filters and suggests how to broaden. |
| results | Yes | Expenditure result set; itemized records or per-candidate aggregates depending on mode. |
| pagination | No | Page-based pagination info (by_candidate mode only). |
| totalCount | Yes | Total matching expenditures or per-candidate aggregates. |
| next_cursor | No | Pagination cursor for the next page of itemized results. Null when no more pages. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (readOnlyHint, idempotentHint) by stating 'Search'. It adds limited behavioral context beyond annotations, such as covering outside spending. With annotations covering safety, this score reflects adequate but not enhanced transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficiently written sentences. First sentence defines purpose and coverage; second sentence gives usage guidance. No superfluous words. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 18 parameters with excellent schema descriptions, existing output schema, and annotations covering safety, the description provides sufficient high-level context (modes, coverage, entity types). It does not need to explain returns or paging details. Slight gap: no mention of read-only nature, but annotations fill this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add parameter-level details beyond the schema; it only gives high-level purpose. No extra value is provided for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Search independent expenditures' and specifies it covers 'outside spending supporting or opposing federal candidates'. It distinguishes between two modes (itemized, by_candidate) and differentiates from sibling tools like contributions and disbursements by focusing on independent expenditures and Schedule E.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description tells when to use each mode ('Use itemized mode for individual expenditure records, or by_candidate for aggregated totals per candidate') and covers the target entities (Super PACs, party committees). It does not explicitly exclude alternatives or provide when-not-to-use guidance, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_filingsOpenfec Search FilingsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| cycle | No | Two-year election cycle (even year). | |
| per_page | No | Results per page. | |
| form_type | No | 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). | |
| filer_name | No | Full-text filer name search. | |
| is_amended | No | Filter to original or amended filings only. | |
| most_recent | No | Only the most recent version (filters out superseded amendments). | |
| report_type | No | Report type code. Common: Q1/Q2/Q3 (quarterly), YE (year-end), M3-M12 (monthly), 12G/12P/30G (pre/post election). | |
| report_year | No | Filing year. | |
| candidate_id | No | Associated candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results. | |
| committee_id | No | Filing committee ID (e.g., C00358796). Get IDs from openfec_search_committees results. | |
| max_receipt_date | No | Latest FEC receipt date (YYYY-MM-DD). | |
| min_receipt_date | No | Earliest date FEC received the filing (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no filings matched — echoes filters and suggests how to broaden. |
| results | Yes | Filing result set; one record per match. |
| pagination | Yes | Page-based pagination metadata. |
| totalCount | Yes | Total matching filings before pagination. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description does not add additional behavioral context such as pagination limits or data freshness, but does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and resource, and contains no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main search dimensions and lists common form types. An output schema exists, so return values are handled. Minor omission: no mention of sorting or default ordering, but adequate for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters. The description provides general context and examples of form types but does not add meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches FEC filings and reports, and lists specific form types (F3, F3P, etc.), distinguishing it from sibling tools that search other entities like candidates or committees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for filings by committee, candidate, form type, or date range. It does not explicitly exclude other scenarios, but the sibling tool names make the differentiation clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfec_search_legalOpenfec Search LegalARead-onlyIdempotentInspect
Search FEC legal documents: advisory opinions, enforcement cases (MURs), alternative dispute resolutions, and administrative fines.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Document type filter. Omit to search all types. admin_fines is slow without a query or respondent filter. | |
| query | No | Full-text search across legal documents. | |
| from_hit | No | Offset for pagination (0-indexed). Default 0. | |
| max_date | No | Latest document date (YYYY-MM-DD). | |
| min_date | No | Earliest document date (YYYY-MM-DD). | |
| ao_number | No | Specific advisory opinion number (e.g. "2024-01"). | |
| respondent | No | Respondent name (enforcement cases). | |
| case_number | No | Specific MUR or ADR case number. | |
| hits_returned | No | Results per page. Default 20, max 200. | |
| max_penalty_amount | No | Maximum penalty amount. | |
| min_penalty_amount | No | Minimum penalty amount (enforcement cases). | |
| statutory_citation | No | U.S.C. citation (e.g. "52 U.S.C. 30106"). | |
| regulatory_citation | No | CFR citation (e.g. "11 CFR 112.4"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no legal documents matched — echoes filters and suggests how to broaden. |
| results | Yes | Legal document result set spanning advisory opinions, MURs, ADRs, admin fines, and statutes. |
| totalCount | Yes | Total matching legal documents across all types. |
| total_count | Yes | Total matching documents across all types. |
| search_criteria | No | Echo of the search filters that produced this result set. Populated when results are empty to help diagnose why nothing matched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint true, so the description adds no further behavioral info. No mention of rate limits, pagination behavior, or other traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (13 words) with no wasted words, and it front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 13 optional parameters and an output schema, the description does not provide guidance on typical usage patterns (e.g., minimum filters). It is adequate but lacks completeness for a moderately complex search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds minimal value beyond what the schema already provides for parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches FEC legal documents and lists the specific types (advisory opinions, MURs, ADRs, admin fines), distinguishing it from sibling tools that search other entities like candidates or committees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for legal documents but does not explicitly state when to use this tool versus alternatives like openfec_search_candidates. The sibling context makes it clear, but no explicit 'when-to-use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.