Skip to main content
Glama

Race Matchup

race_matchup
Read-onlyIdempotent

One US House district or Senate seat: who the sitting officeholder is (incumbent, with seeking_reelection and incumbent_note saying whether they are actually on the ballot or the seat is open), every FEC-registered candidate by party with money raised/spent/cash on hand, which candidates won their primary, primary and general election dates. Primary vote counts come from Wikipedia (non-official, labelled as such, cites the state election authority); money and incumbency are FEC. A district that does not exist returns an error naming the districts that do.

Input Schema

NameRequiredDescriptionDefault
cycleNoElection year, even. Default 2026.
stateYesUS state: postal code ("IA") or full name ("Iowa").
officeYes"house" or "senate".
specialNoSenate only: read the special-election primary page (Ohio and Florida in 2026).
districtNoHouse district number (1, "01") or "at-large". Required for house, ignored for senate.

Output Schema

NameRequiredDescriptionDefault
raceNo
cycleNo
sourceNo
incumbentNo
candidatesNo
data_as_ofNo
election_datesNo
incumbent_noteNo
candidates_noteNo
data_as_of_noteNo
primary_resultsNo
candidates_totalNo
won_primary_noteNo
primary_results_noteNo
candidates_money_noteNo
primary_results_sourceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description focuses on data provenance instead. It discloses that primary vote counts come from Wikipedia, are non-official, are labelled as such, and cite state election authorities, while money and incumbency data come from the FEC. It also states the error behavior for nonexistent districts. This is useful context beyond the annotations, though it does not discuss freshness or rate limits.

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 dense sentence that front-loads the resource scope ('One US House district or Senate seat') before listing what is included. Every clause carries information, though the sentence is long and could be broken into shorter statements for readability. There is no filler.

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

Completeness5/5

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

With an output schema present, the description need not explain return values, and with annotations covering safety, it does not need to repeat that. What it must convey—the data sources, the unofficial status of primary vote counts, the FEC provenance of money and incumbency data, and the error behavior for invalid districts—is all present. An agent has enough to call the tool correctly and interpret the results with appropriate caveats.

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 five parameters are already documented in the schema, and the description adds little parameter-level detail. It clarifies that the tool operates on one district or seat and that a nonexistent district produces an error naming valid districts, which slightly enhances the district parameter's semantics. But it does not explain the special or cycle parameters, so baseline 3 applies.

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 names a specific resource (one US House district or Senate seat) and enumerates what it returns: incumbent status, FEC-registered candidates by party, fundraising totals, primary winners, and election dates. An agent knows exactly what data this tool produces. However, it never mentions the sibling list_races, so the boundary between listing races and fetching a single matchup is left implicit.

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

Usage Guidelines3/5

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

Usage is only implied: the description says it returns data for one district or seat, which suggests it is the drill-down tool for a single race. There is no explicit when-to-use guidance, no mention of list_races as the alternative for listing multiple races, and no statement about prerequisites or the relationship between the two tools.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.