Skip to content

ElectionsMCP

by electionsmcp.com · remote · no sign-in to list tools · v0.2.0 · published by com.electionsmcp

Model and map any 2028 U.S. race down to the precinct: scenarios, swing, turnout, and roll-ups.

Deletes · 13Changes · 6

48 tools: 13 can delete or cancel things, 6 change things and 29 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http electionsmcp https://www.electionsmcp.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The description contains "any other tool", wording about other tools or servers.

    Matched text

    description: "Run any other tool you are authorized for that is not in t..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

48 tools

Deletes or cancels 13Claude Code: deny
  • add_map_commentLeave a Google-Docs-style COMMENT on the scenario map — a threaded, resolvable discussion anchored to a place.No findings

    Why it is in this group

    • The name "add_map_comment" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Leave a Google-Docs-style COMMENT on the scenario map — a threaded, resolvable discussion anchored to a place. CAMPAIGN ISOLATION: when working inside a campaign, pass campaign_id; the scenario must be filed under it…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • apply_swing_to_queryApply a uniform swing or an explicit per-precinct weights vector to a filtered cohort in one atomic call.No findings

    Why it is in this group

    • The name "apply_swing_to_query" says "apply": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Apply a uniform swing or an explicit per-precinct weights vector to a filtered cohort in one atomic call. Weights select only their named IDs, support canonical statewide mechanisms, and optionally rescale a persuasion…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • apply_uniform_swingApply an incremental swing in points toward one candidate at the requested office.No findings

    Why it is in this group

    • The name "apply_uniform_swing" says "apply": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Apply an incremental swing in points toward one candidate at the requested office. A saved race_scope restricts writes to that state or district and refuses a different office or unresolved geography. Unscoped and…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • call_toolRun any other tool you are authorized for that is not in this list.1 finding

    Why it is in this group

    • The name "call_tool" says "call": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    Findings

    • Warn

      The description contains "any other tool", wording about other tools or servers.

      Matched text

      description: "Run any other tool you are authorized for that is not in t..."

      What this check looks for
    Description, as the server wrote it
    Run any other tool you are authorized for that is not in this list. Find it and its exact input schema with get_catalog (search, a workflow, or {tool: name}), then call call_tool({ name, arguments }). The named tool…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • commit_versionSave the scenario's current state as a new immutable, hash-stamped version in the append-only chain.No findings

    Why it is in this group

    • The name "commit_version" says "commit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Save the scenario's current state as a new immutable, hash-stamped version in the append-only chain. Records a diff vs the parent version and the recomputed top_line, and returns a content `hash` (+ `prev_hash`…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • primary_batch_editATOMIC batch-edit transaction for a PRIMARY scenario — validate, preview, apply, and roll back a whole SET of candidate / share / calendar edits as ONE transaction.No findings

    Why it is in this group

    • The name "primary_batch_edit" says "edit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    ATOMIC batch-edit transaction for a PRIMARY scenario — validate, preview, apply, and roll back a whole SET of candidate / share / calendar edits as ONE transaction. Pass edits:[{op, ...}, …] where each entry carries…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_candidatesReplace the entire candidate roster for a simulation+level in one call (add / edit / remove / reorder).No findings

    Why it is in this group

    • The name "set_candidates" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Replace the entire candidate roster for a simulation+level in one call (add / edit / remove / reorder). Each candidate: {id?, name, party, color?, incumbent?}; ids auto-assigned if omitted. Use this to set the real…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_performanceSet a candidate's vote share, such as the Democratic candidate to 54%, in one specific county, district, state, or precinct (the general-election override).No findings

    Why it is in this group

    • The name "set_performance" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set a candidate's vote share, such as the Democratic candidate to 54%, in one specific county, district, state, or precinct (the general-election override). Routes a county/state/district geo_id to a feature override…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_primary_sharesSet a party's presidential-primary vote shares — one state, or MANY states in a single call.No findings

    Why it is in this group

    • The name "set_primary_shares" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set a party's presidential-primary vote shares — one state, or MANY states in a single call. SINGLE STATE: pass `state` + `shares` (unchanged behavior; echoes the full running roll_up). BATCH: pass `states` = { "SC":…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_race_scopeBind the canonical scenario to one race/campaign so its map, tally, candidates, War Room context, operations, outputs, and MCP actions share the same race identity.No findings

    Why it is in this group

    • The name "set_race_scope" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Bind the canonical scenario to one race/campaign so its map, tally, candidates, War Room context, operations, outputs, and MCP actions share the same race identity.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_turnoutSet the turnout (mobilization) model.No findings

    Why it is in this group

    • The name "set_turnout" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set the turnout (mobilization) model. PRESIDENT (default, unchanged): each dial is a percentage-point boost toward toward_candidate_id in counties over an ACS threshold (college = >20% BA share, immig = >15%…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • set_viewSet the active scenario view and selected map context: race stage, calendar playhead, geography grain, result source, selected feature, camera, map theme, and rail.No findings

    Why it is in this group

    • The name "set_view" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set the active scenario view and selected map context: race stage, calendar playhead, geography grain, result source, selected feature, camera, map theme, and rail. The same persisted view state and deep link are used…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • share_simulationMint a public, read-only link to the exact canonical scenario/version.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Mint a public, read-only link to the exact canonical scenario/version. Authenticate for durable workspace ownership; revoke_share disables the link.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Changes things 6Claude Code: ask
  • create_scenarioCreate a new Scenario (a modeled path) — optionally inside a Race and seeded from a contest_id or an existing scenario (import_from).No findings

    Why it is in this group

    • The name "create_scenario" says "create": a word for a change.
    Description, as the server wrote it
    Create a new Scenario (a modeled path) — optionally inside a Race and seeded from a contest_id or an existing scenario (import_from). Seeds an immutable baseline version (v1). Returns scenario_id + version_id. (A…

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • election_calendarThe election planning calendar.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The election planning calendar. National form ({cycle}) returns federal contests, governors and by_state office lists; state form ({state,cycle}) returns a four-year horizon. Other statewide executive offices use the…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • helpOrient an AI client to campaign onboarding through get_campaign_onboarding, user-controlled election modeling, candidate and presidential-primary workflows, supported geography, sc…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Orient an AI client to campaign onboarding through get_campaign_onboarding, user-controlled election modeling, candidate and presidential-primary workflows, supported geography, scenario versions, contextual War Room…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • render_chartshare_comparison compares candidate shares for two saved versions of one model or two same-contest statewide general-election models.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    share_comparison compares candidate shares for two saved versions of one model or two same-contest statewide general-election models. Returns canonical integer candidate votes, all-ballot shares, D-minus-R margins,…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • roll_up_primaryThe running delegate count — OR, for a race-scoped downballot sim, that race's own share rollup.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The running delegate count — OR, for a race-scoped downballot sim, that race's own share rollup. DOWNBALLOT (tk_2110d54c1d0871): when the scenario is race-scoped to a non-presidential office (set_race_scope…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • roll_up_raceRoll up precincts to a race outcome under the current simulation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Roll up precincts to a race outcome under the current simulation. Sums baseline votes for all precincts inside the district boundary, applying overrides in precedence order: a per-precinct override wins, else…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 29Claude Code: allow
  • billing_statusBILLING — your subscription state: {billing_enabled, logged_in, plan (personal|team|null), status, active, renews, can_save}.No findings

    Why it is in this group

    • The name "billing_status" says "status": a word for reading.
    Description, as the server wrote it
    BILLING — your subscription state: {billing_enabled, logged_in, plan (personal|team|null), status, active, renews, can_save}. billing_enabled is false until the server is configured with Stripe; while it is false,…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_simulationsCompare two simulations.No findings

    Why it is in this group

    • The name "compare_simulations" says "compare": a word for reading.
    Description, as the server wrote it
    Compare two simulations. Without grain, returns the existing chamber/feature comparison. With grain:county|precinct and one state, compares exact saved canonical vote rows: margin(B)-margin(A), winners, flips, ballots…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • connection_statusWHO AM I — how THIS session is authenticated and which workspace this request resolved to.No findings

    Why it is in this group

    • The name "connection_status" says "status": a word for reading.
    Description, as the server wrote it
    WHO AM I — how THIS session is authenticated and which workspace this request resolved to. Returns authentication fields plus workspace {workspace_id, role, selection_source}. Modern MCP clients select a workspace with…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • diff_versionsStructured diff between two immutable versions.No findings

    Why it is in this group

    • The name "diff_versions" says "diff": a word for reading.
    Description, as the server wrote it
    Structured diff between two immutable versions. Raw before/after remain stored override patches (null means no saved override). Precinct cells also include effective_before/effective_after shares with their…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_campaign_onboardingCAMPAIGN ONBOARDING — guide a campaign manager or joining staff member through setup in their connected AI.No findings

    Why it is in this group

    • The name "get_campaign_onboarding" says "get": a word for reading.
    Description, as the server wrote it
    CAMPAIGN ONBOARDING — guide a campaign manager or joining staff member through setup in their connected AI. Read one step or the complete guide: connection, campaign identity, team access, optional data imports, first…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_catalogDISCOVERY — browse workflow/category groups, search tool names and descriptions, or fetch one complete schema and AI guide with tool.No findings

    Why it is in this group

    • The name "get_catalog" says "get": a word for reading.
    Description, as the server wrote it
    DISCOVERY — browse workflow/category groups, search tool names and descriptions, or fetch one complete schema and AI guide with tool. No arguments returns a compact counted index of the authorized inventory. Core…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_county_economic_and_wealth_profileRead a county’s economic vitality dossier (Census 15-sector business patterns, establishments, employees, payroll, average annual wage, new SOS LLC/Corp formations, SEC Form D capi…No findings

    Why it is in this group

    • The name "get_county_economic_and_wealth_profile" says "get": a word for reading.
    Description, as the server wrote it
    Read a county’s economic vitality dossier (Census 15-sector business patterns, establishments, employees, payroll, average annual wage, new SOS LLC/Corp formations, SEC Form D capital raises, Form 4/FEC major donors,…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_county_officialsRead current local, county, municipal, judicial, and school-board officials (40,431 local officials; 97,231 total officials) by 5-digit county FIPS or state from RoutPoint v2.No findings

    Why it is in this group

    • The name "get_county_officials" says "get": a word for reading.
    Description, as the server wrote it
    Read current local, county, municipal, judicial, and school-board officials (40,431 local officials; 97,231 total officials) by 5-digit county FIPS or state from RoutPoint v2.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_county_voter_turnout_and_registrationRead county voter registration, party registration (DEM/REP/UNA/Other), voting-age population, 2024/2022/2020/2026 ballots cast and turnout percentages, 2020-to-2024 partisan swing…No findings

    Why it is in this group

    • The name "get_county_voter_turnout_and_registration" says "get": a word for reading.
    Description, as the server wrote it
    Read county voter registration, party registration (DEM/REP/UNA/Other), voting-age population, 2024/2022/2020/2026 ballots cast and turnout percentages, 2020-to-2024 partisan swing, and competitiveness tiers across all…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_early_voting_turnoutRead early voting, absentee/mail, election-day, and provisional vote-method breakdowns alongside registered-voter, ballots-cast, and undervote/overvote turnout statistics by race a…No findings

    Why it is in this group

    • The name "get_early_voting_turnout" says "get": a word for reading.
    Description, as the server wrote it
    Read early voting, absentee/mail, election-day, and provisional vote-method breakdowns alongside registered-voter, ballots-cast, and undervote/overvote turnout statistics by race and candidate from RoutPoint v2…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_live_early_vote_returnsRead live 2026-11-03 General Election pre-election mail ballot requests, mail ballots returned, early in-person ballots, and partisan ballot composition (DEM vs.No findings

    Why it is in this group

    • The name "get_live_early_vote_returns" says "get": a word for reading.
    Description, as the server wrote it
    Read live 2026-11-03 General Election pre-election mail ballot requests, mail ballots returned, early in-person ballots, and partisan ballot composition (DEM vs. REP vs. UNA/Other) compared against each county’s 2024…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_precinct_election_returnsRead precinct-level election returns and normalized early-voting, absentee/mail, election-day, and provisional breakdowns across 87.7M precinct rows (linked to mapsmcp_precinct_id)…No findings

    Why it is in this group

    • The name "get_precinct_election_returns" says "get": a word for reading.
    Description, as the server wrote it
    Read precinct-level election returns and normalized early-voting, absentee/mail, election-day, and provisional breakdowns across 87.7M precinct rows (linked to mapsmcp_precinct_id) from RoutPoint v2.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_scenarioA Scenario at its latest version (or a specified version_id): metadata (incl.No findings

    Why it is in this group

    • The name "get_scenario" says "get": a word for reading.
    Description, as the server wrote it
    A Scenario at its latest version (or a specified version_id): metadata (incl. latest_hash) + the version's top_line (margin / EC / viability) + its content hash/prev_hash. EM-119: pass a version_id (or…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_simulationRead the canonical simulation/scenario state, including candidates, race scope, geography overrides, active version identity, provenance, and optional summary or selected dot-path …No findings

    Why it is in this group

    • The name "get_simulation" says "get": a word for reading.
    Description, as the server wrote it
    Read the canonical simulation/scenario state, including candidates, race scope, geography overrides, active version identity, provenance, and optional summary or selected dot-path fields.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_state_historical_turnoutRead 50-year statewide prior-cycle turnout and vote totals (1976 through 2026 across all 50 states and DC): ballots cast, registered voters, voting-age population, turnout percenta…No findings

    Why it is in this group

    • The name "get_state_historical_turnout" says "get": a word for reading.
    Description, as the server wrote it
    Read 50-year statewide prior-cycle turnout and vote totals (1976 through 2026 across all 50 states and DC): ballots cast, registered voters, voting-age population, turnout percentage, DEM/REP vote shares, margin, and…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_tallyCompute the current per-candidate tally for a simulation+level.No findings

    Why it is in this group

    • The name "get_tally" says "get": a word for reading.
    Description, as the server wrote it
    Compute the current per-candidate tally for a simulation+level. For President: state-aggregated EVs. For others: feature counts. For level:"senate" the default is the 50-state per-candidate race scoreboard; pass…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_viewRead the exact map/view state the application renders for a canonical scenario: headline totals, selected geography, modeled feature colors, annotations, primary-calendar playhead,…No findings

    Why it is in this group

    • The name "get_view" says "get": a word for reading.
    Description, as the server wrote it
    Read the exact map/view state the application renders for a canonical scenario: headline totals, selected geography, modeled feature colors, annotations, primary-calendar playhead, candidate roster, presence, and a…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_contestsDiscover contests for a geography and election cycle.No findings

    Why it is in this group

    • The name "list_contests" says "list": a word for reading.
    Description, as the server wrote it
    Discover contests for a geography and election cycle. Filter general, primary (dem_primary/rep_primary), or all stages; count describes the returned top-level rows. National presidential primaries are discoverable in…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_flippedList baseline-to-model winner changes.No findings

    Why it is in this group

    • The name "list_flipped" says "list": a word for reading.
    Description, as the server wrote it
    List baseline-to-model winner changes. Defaults to state for statewide offices, county for president, and district for house/state legislature. Explicit grain:county|precinct uses canonical integer local votes for a…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_map_commentsList one campaign's map comments on a scenario (oldest-first), each with its campaign_id, anchor, author, body, @mentions, parent_id, and resolved state.No findings

    Why it is in this group

    • The name "list_map_comments" says "list": a word for reading.
    Description, as the server wrote it
    List one campaign's map comments on a scenario (oldest-first), each with its campaign_id, anchor, author, body, @mentions, parent_id, and resolved state. Pass campaign_id inside a campaign; only that exact campaign is…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_primary_calendarRead the 2028 primary calendar with source dates, schedule certainty, modeled delegate coverage, missing jurisdictions, and threshold basis.No findings

    Why it is in this group

    • The name "list_primary_calendar" says "list": a word for reading.
    Description, as the server wrote it
    Read the 2028 primary calendar with source dates, schedule certainty, modeled delegate coverage, missing jurisdictions, and threshold basis. New calendars include the six DNC-approved early dates; other unverified…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_scenariosPage saved scenarios/simulations in this workspace by updated_at descending and scenario_id ascending, without version blobs.No findings

    Why it is in this group

    • The name "list_scenarios" says "list": a word for reading.
    Description, as the server wrote it
    Page saved scenarios/simulations in this workspace by updated_at descending and scenario_id ascending, without version blobs. Returns scenario_id, name, level, cycle, contest_id, race_id, tags, durable_id, published…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_simulationsList saved simulations in this workspace (id, name, level, cycle, mode, contest_id, last-modified; rows stamped with an identity also carry created_by/updated_by member user_ids).No findings

    Why it is in this group

    • The name "list_simulations" says "list": a word for reading.
    Description, as the server wrote it
    List saved simulations in this workspace (id, name, level, cycle, mode, contest_id, last-modified; rows stamped with an identity also carry created_by/updated_by member user_ids). Optional filters narrow a large…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lookup_addressResolve a US street address, ZIP, state, or U.S.No findings

    Why it is in this group

    • The name "lookup_address" says "lookup": a word for reading.
    Description, as the server wrote it
    Resolve a US street address, ZIP, state, or U.S. House district and show workspace campaigns covering the result. Street addresses return a geocoded point and containing districts, with a precinct when coverage exists.…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • render_viewA headless server-rendered IMAGE of the map — the rendered view a viewer sees, as SVG or PNG, WITHOUT a browser (tk_0b6d3501 P2).No findings

    Why it is in this group

    • The name "render_view" says "view": a word for reading.
    Description, as the server wrote it
    A headless server-rendered IMAGE of the map — the rendered view a viewer sees, as SVG or PNG, WITHOUT a browser (tk_0b6d3501 P2). For a scenario + level (president | senate | house | governor | the execs) it draws the…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • resolve_candidateWHO holds or runs for WHAT — turn a candidate/officeholder name into their seat + next race.No findings

    Why it is in this group

    • The name "resolve_candidate" says "resolve": a word for reading.
    Description, as the server wrote it
    WHO holds or runs for WHAT — turn a candidate/officeholder name into their seat + next race. Given a name (full, last-name, or a registry alias — "Lauren Boebert", "Boebert"), returns the person(s) who match with their…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • resolve_geographyTurn a place name or shorthand into its canonical geo_id — resolve natural-language or structured location input.No findings

    Why it is in this group

    • The name "resolve_geography" says "resolve": a word for reading.
    Description, as the server wrote it
    Turn a place name or shorthand into its canonical geo_id — resolve natural-language or structured location input. Handles "CA-03"/"NC-4" (congressional districts), bare state names/abbreviations, "<County> County…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_candidatesBROWSE the canonical candidate registry WITHOUT a name — the nameless companion to resolve_candidate (which requires a name).No findings

    Why it is in this group

    • The name "search_candidates" says "search": a word for reading.
    Description, as the server wrote it
    BROWSE the canonical candidate registry WITHOUT a name — the nameless companion to resolve_candidate (which requires a name). Filter the registry of canonical people by party, office, and/or a name substring:…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • target_precinctsReturn structured precinct model rows: precinct_id, name, county, county_fips, baseline_share, modeled_share, ballots_est, overridden, and gap_to_goal.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Return structured precinct model rows: precinct_id, name, county, county_fips, baseline_share, modeled_share, ballots_est, overridden, and gap_to_goal. The response does not include demographic columns or demographic…

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http electionsmcp https://www.electionsmcp.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__electionsmcp__resolve_geography",
      "mcp__electionsmcp__resolve_candidate",
      "mcp__electionsmcp__search_candidates",
      "mcp__electionsmcp__lookup_address",
      "mcp__electionsmcp__list_contests",
      "mcp__electionsmcp__target_precincts",
      "mcp__electionsmcp__get_view",
      "mcp__electionsmcp__render_view",
      "mcp__electionsmcp__get_scenario",
      "mcp__electionsmcp__list_scenarios",
      "mcp__electionsmcp__diff_versions",
      "mcp__electionsmcp__get_early_voting_turnout",
      "mcp__electionsmcp__get_county_voter_turnout_and_registration",
      "mcp__electionsmcp__get_state_historical_turnout",
      "mcp__electionsmcp__get_live_early_vote_returns",
      "mcp__electionsmcp__get_precinct_election_returns",
      "mcp__electionsmcp__get_county_officials",
      "mcp__electionsmcp__get_county_economic_and_wealth_profile",
      "mcp__electionsmcp__billing_status",
      "mcp__electionsmcp__connection_status",
      "mcp__electionsmcp__list_map_comments",
      "mcp__electionsmcp__get_tally",
      "mcp__electionsmcp__list_simulations",
      "mcp__electionsmcp__get_simulation",
      "mcp__electionsmcp__list_flipped",
      "mcp__electionsmcp__compare_simulations",
      "mcp__electionsmcp__get_campaign_onboarding",
      "mcp__electionsmcp__get_catalog",
      "mcp__electionsmcp__list_primary_calendar"
    ],
    "ask": [
      "mcp__electionsmcp__election_calendar",
      "mcp__electionsmcp__create_scenario",
      "mcp__electionsmcp__render_chart",
      "mcp__electionsmcp__roll_up_race",
      "mcp__electionsmcp__help",
      "mcp__electionsmcp__roll_up_primary"
    ],
    "deny": [
      "mcp__electionsmcp__set_performance",
      "mcp__electionsmcp__set_view",
      "mcp__electionsmcp__commit_version",
      "mcp__electionsmcp__set_candidates",
      "mcp__electionsmcp__set_turnout",
      "mcp__electionsmcp__add_map_comment",
      "mcp__electionsmcp__apply_uniform_swing",
      "mcp__electionsmcp__share_simulation",
      "mcp__electionsmcp__apply_swing_to_query",
      "mcp__electionsmcp__set_primary_shares",
      "mcp__electionsmcp__primary_batch_edit",
      "mcp__electionsmcp__set_race_scope",
      "mcp__electionsmcp__call_tool"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as electionsmcp. Review it before you use it.