MCP server that wraps the Dagster GraphQL API — manage runs, assets, schedules, sensors, and backfills from any MCP client
Racemodel is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Model and map U.S. election races: scenarios, swing, turnout and precinct-level roll-ups.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user racemodel-mcp '--' npx -y @reneturcios/racemodel mcp
# 2 — ask your agent for something these tools do
# resolve_geography, resolve_candidate, search_candidates and 45 more
Racemodel costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Racemodel as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user racemodel-mcp '--' npx -y @reneturcios/racemodel mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
48 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | "CA-03", "El Dorado County CA", "the 4th state senate district in California", "Pennsylvania" |
| year | integer | no | Disambiguates post-redistricting boundaries; defaults to current cycle. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | A candidate or officeholder name — full ("Lauren Boebert"), last-name ("Boebert"), or any registry alias. Matching folds free-typed names onto the canonical person. |
| party | string | no | Optional — keep only matches of this party (D/R/I), normalized by leading letter. For a stage/party-scoped picker. |
| office | string | no | Optional — keep only matches whose current OR next-race office matches (house, senate, governor, state_senate, state_assembly, …); the "us_" prefix is optional ("house" == "us_house"). |
| cycle | integer | no | Optional — keep only matches whose next_race is in this cycle (e.g. 2026). |
| limit | integer | no | Max people to return when a name is ambiguous (default 8). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| party | string | no | Optional — only this party (D/R/I/L/G), normalized by leading letter. |
| office | string | no | Optional — match the registry office label. Keywords president / senate / house / governor are normalized; anything else is a case-insensitive substring on the label. The "us_" prefix is ignored. |
| q | string | no | Optional — case-insensitive substring on the candidate name or any alias (typeahead). |
| limit | integer | no | Max results (default 50). total reports the full match count; truncated:true when the list was trimmed. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| address | string | yes | A full street address ("123 Main St, Dallas, TX"), a 5-digit ZIP, a district code ("NC-4", "AK-AL"), a state name/abbreviation, or a canonical state/House geography ID. |
| include_officials | boolean | no | Attach the sitting officeholder for each resolved seat (from the committed legislator file). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| geo_id | string | yes | "us" (national), a state as "us-pa" / postal "PA" / FIPS "42", or a district id — all accepted. |
| cycle | integer | no | Defaults to the next election year from today. |
| stage | string | no | primary selects the dem_primary and rep_primary variants; general excludes them; all returns both. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | Postal abbreviation ("PA") for the per-state 4-year horizon; omit for the national summary. |
| cycle | integer | no | Defaults to the next election year from today. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| expected_version | string | no | Optional optimistic-concurrency token: the scenario updated_at you last read. If the scenario changed since, the write is refused with version_conflict + the current token instead of overwriting concu |
| simulation_id | string | no | — |
| total_votes | integer | no | Explicit vote volume for a custom campaign city or reviewed precinct. Use level:"custom" and geo_id from get_campaign_vote_data. A precinct requires its own total; source-election turnout is never cop |
| scenario_id | string | yes | The simulation_id (scenario_id alias until the scenario model lands). |
| geo_id | string | yes | — |
| shares | object | yes | candidate_id → share. Accepts 0–1 or 0–100. |
| turnout | number | no | 0–1 expected turnout (stored as metadata on precinct overrides). |
| margin | number | no | Shorthand for two-candidate D−R margin in points; sets D/R shares around 50. |
| rebalance | string | no | — |
| level | string | no | EM-136: explicit office for the override. A bare state geo (us-pa) otherwise defaults to senate — pass level to target president or governor instead (president is stored as a state-level aggregate tha |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scenario_id | string | yes | The scenario/simulation handle (EM-056: simulation_id is accepted as an alias). |
| geo_id | string | no | District or state geography — accepts the resolve_geography slug ("us-pa"), postal ("PA"), or FIPS ("42") (EM-056). Defaults to the simulation's race_scope geography. |
| goal_mode | string | no | plurality = beat the leading opponent (default); majority = 50.01% share; share = explicit target_pct. |
| margin | number | no | plurality: win by at least this many votes. |
| target_pct | number | no | — |
| candidate_id | string | no | — |
| context | string | no | Free-text constraints, echoed back (e.g. "field ops in Orange and Durham only"). |
| filter | object | no | Precinct property → condition map within the requested geography. Properties: external_id, GEOID, name, state, county, county_fips, shape_id, votes_dem, votes_rep, votes_total, pct_dem_lead, official_ |
| limit | integer | no | — |
| offset | integer | no | Page start; pass next.offset from the prior result with the same scope and filters. |
| rolloff_rate | number | no | Explicit roll-off rate (see compute_vote_goal). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| baseline_id | string | no | Optional explicit source pin. Only 2024_president_mixed_grain is currently selectable. Known county sources return baseline_selection_unavailable; unreconciled sources return baseline_not_model_eligib |
| campaign_id | string | no | Custom campaign to model inside its exact attached city boundary. |
| expected_campaign_revision | integer | no | — |
| boundary_version | string | no | — |
| idempotency_key | string | no | Optional workspace-scoped retry key for listed races; required for custom campaign models. Identical retries return the same scenario and baseline version. Reusing a key with different creation inputs |
| race_id | string | no | Optional; the Race this scenario belongs to. |
| contest_id | string | no | Optional; sets the scenario's race_scope from a canonical contest_id. |
| import_from | string | no | Optional; copy overrides+candidates from an existing scenario_id. |
| tags | array | no | — |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| version_id | string | no | Exact saved version for a custom city model. |
| expected_version_hash | string | no | — |
| simulation_id | string | yes | — |
| campaign_id_a | string | no | Optional campaign custody for A when the model belongs to multiple readable campaigns. Does not grant access. |
| campaign_id_b | string | no | Optional campaign custody for B when the model belongs to multiple readable campaigns. Does not grant access. |
| version_a | string | no | Difference comparison: exact saved version of A. Omit only when its latest version matches the live model. |
| version_b | string | no | Difference comparison: exact saved version of B. Omit only when its latest version matches the live model. |
| expected_hash_a | string | no | Optional expected immutable version hash for A; mismatches refuse. |
| expected_hash_b | string | no | Optional expected immutable version hash for B; mismatches refuse. |
| compare_simulation_id | string | no | Compare B against simulation_id (A), using D-minus-R margin(B) minus margin(A). Requires one explicit state and county/precinct grain; both saved general-election models must share office/cycle/electo |
| difference_scale_pp | number | no | Difference-only symmetric color extent: legend runs from negative this value through zero to positive this value. Omit to fit the largest absolute delta; out-of-scale values are disclosed as clamped. |
| view | string | no | difference uses compare_simulation_id as B and simulation_id as A; returns the zero-centered B-minus-A color scale and exact county/precinct rows. |
| level | string | no | Which map the view renders. Default president (or whatever set_view last scoped). house = HOUSE CONTROL (per-state delegation winners + the 218 banner); state_senate/state_assembly = one state's chamb |
| state | string | no | Optional postal code or 2-digit FIPS — scope the map to one state. president → its county breakdown; senate/governor/exec → that RACE's local county (default) or precinct features from its own overrid |
| grain | string | no | With a state scoped, the grain of the local features returned: "county" (default) or "precinct". Applies to a statewide-level race (senate/governor/exec — its own overrides) AND to a PRIMARY sim scope |
| cycle | integer | no | — |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| campaign_id_a | string | no | Optional campaign custody for A when the model belongs to multiple readable campaigns. Does not grant access. |
| campaign_id_b | string | no | Optional campaign custody for B when the model belongs to multiple readable campaigns. Does not grant access. |
| version_a | string | no | Difference comparison: exact saved version of A. Omit only when its latest version matches the live model. |
| version_b | string | no | Difference comparison: exact saved version of B. Omit only when its latest version matches the live model. |
| expected_hash_a | string | no | Optional expected immutable version hash for A; mismatches refuse. |
| expected_hash_b | string | no | Optional expected immutable version hash for B; mismatches refuse. |
| compare_simulation_id | string | no | Compare B against simulation_id (A), using D-minus-R margin(B) minus margin(A). Requires one explicit state and county/precinct grain; both saved general-election models must share office/cycle/electo |
| difference_scale_pp | number | no | Difference-only symmetric color extent: legend runs from negative this value through zero to positive this value. Omit to fit the largest absolute delta; out-of-scale values are disclosed as clamped. |
| comparison_layout | string | no | Difference-only 1200x630 card: one B-minus-A map (default), or the same-grain A | B | B-minus-A maps with explicit legends. |
| level | string | no | Which map to render. Default president. house = HOUSE CONTROL: states shaded by delegation majority, D/R seat tally, 218 banner (for one state's district map use grain:"house" with a state scope inste |
| layers | object | no | Draw saved highlight annotations on matching visible geography. Omit to honor set_view layers.highlights (default true); false hides them for this export only. Pins and notes are not rendered. |
| format | string | no | Image format. Default svg (png needs the resvg renderer on the host; degrades to svg if absent). |
| state | string | no | Optional — scope the image to a state (postal "NC" or 2-digit FIPS). president → that state's per-county choropleth; senate/governor/exec → that RACE's LOCAL county map from its own overrides (5-digit |
| geo_id | string | no | Optional — a geo slug like "us-nc" to scope to that state. |
| feature_id | string | no | Optional — a state fips (37) or county/precinct id (37xxx) to scope to its state. |
| view | string | no | "result" (default) = the outcome map; "swing" = colour by margin CHANGE vs the baseline (where the scenario MOVES the map). "difference" = margin(B)-margin(A), requires compare_simulation_id and one e |
| theme | string | no | MAP THEME preset for the rendered image (list_map_themes: control | analyst | field | civic | accessible | broadcast | terrain) — the SAME token resolution the live wall uses, so a civic-themed report |
| states | array | no | CUSTOM MAP (president): a list of states (postal "PA" or 2-digit FIPS) → a cropped county choropleth of just those states' counties, in their real relative positions, zoomed to the region. Combine wit |
| features | array | no | CUSTOM MAP (president): an explicit list of geo_ids to include — county FIPS (5-digit), state FIPS (2-digit), or "us-xx". Hand-pick any counties across states; the map crops to exactly them. Combine w |
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,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | no | Scenario to render; for share_comparison this is A, or the single model with version_a/version_b. |
| simulation_id_a | string | no | share_comparison only: A model, alternative to simulation_id. Conflicting aliases refuse. |
| simulation_id_b | string | no | share_comparison only: B model in the same contest. Omit for two explicit versions of A. |
| compare_simulation_id | string | no | share_comparison only: alias for simulation_id_b. |
| campaign_id_a | string | no | Optional campaign custody for A when the model belongs to multiple readable campaigns. Does not grant access. |
| campaign_id_b | string | no | Optional campaign custody for B when the model belongs to multiple readable campaigns. Does not grant access. |
| version_a | string | no | Difference comparison: exact saved version of A. Omit only when its latest version matches the live model. |
| version_b | string | no | Difference comparison: exact saved version of B. Omit only when its latest version matches the live model. |
| expected_hash_a | string | no | Optional expected immutable version hash for A; mismatches refuse. |
| expected_hash_b | string | no | Optional expected immutable version hash for B; mismatches refuse. |
| level | string | no | share_comparison only: statewide office; defaults to the saved scope. Both versions must match office, state, cycle and general-election stage. |
| type | string | yes | Which widget. share_comparison = saved candidate shares before/after, with paired version anchors and one state. Primary: delegate_standings (bars+clinch), clinch_dial (gauge), delegate_momentum (line |
| party | string | no | For the primary charts — which party's race (defaults to the sim's primary mode). |
| asof | integer/null | no | For the primary charts — evaluate the race at this calendar checkpoint (contests counted), the same asof roll_up_primary takes: standings/clinch totals, the momentum timeline's end, and the calendar s |
| office | string | no | For seat_hemicycle / decisive_seats — which chamber (default house). state_senate/state_assembly also need state. |
| state | string | no | State postal or FIPS. Required for share_comparison and state-leg seat_hemicycle/decisive_seats. |
| cycle | integer | no | Election cycle for seat_hemicycle / decisive_seats (defaults to the sim's cycle, else 2026) — drives the Senate class + governor calendar. |
| context_simulation_id | string | no | seat_hemicycle / decisive_seats only — compute the WHOLE chamber rollup from THIS scenario (a linked national/statewide view's scenario) instead of simulation_id. Pair with overlay_from_simulation_id |
| overlay_from_simulation_id | string | no | seat_hemicycle / decisive_seats only — the scenario that supplies the ONE overlaid race's modeled result. Travels with overlay_race; passing one without the other is refused (overlay_incomplete). |
| overlay_race | object | no | The single race to swap in from overlay_from_simulation_id: {office, state, district}. office must match the card's chamber; statewide offices need only state; house takes the district GEOID ("0604") |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | no | The map/level the view should show. |
| state | string | no | Postal code or 2-digit FIPS to scope to (pass empty string to clear to the national view). |
| cycle | integer | no | — |
| camera_geo_id | string | no | Optional geo to frame the camera on (defaults to the scoped state). 2-digit state / 5-digit county / district GEOID / precinct id. |
| zoom | number | no | Optional camera zoom; omit to fit the geo's bounds. |
| layers | object | no | View toggles such as precincts/highlights plus the canonical "actuals:pres_2024" baseline layer. |
| stage | string | no | The race stage the viewer should see. Persisted on view_state + broadcast live; a primary-mode sim's own mode remains the identity truth (this is the VIEW). |
| asof | integer/null | no | The primary calendar playhead — contests counted in the race-so-far (the number set_primary_asof takes). null = full calendar. Writes sim.primary.asof (the store the viewer's scoreboard/map run at), s |
| contest | string | no | Playhead targeting by contest instead of a number: a state postal code ("FL"), 2-digit FIPS, or full name — the playhead jumps to INCLUDE that contest (same semantics as set_primary_asof). |
| contest_index | integer | no | Playhead targeting by 1-based calendar ordinal (list_primary_calendar order). |
| map_grain | string | no | The Map View grain toggle: states | counties | precincts (singular accepted, stored plural). |
| map_theme | string | no | Pin a MAP THEME audience preset on this view (list_map_themes has the registry: control | analyst | field | civic | accessible | broadcast | terrain). The open viewer restyles live; "none" clears the |
| source | string | no | The per-state Outcome SOURCE control (which grain governs the shown outcome). Stored on view_state; the sim's own grain_pref pin stays set_primary_grain_pref's job. |
| selected_geo | object | no | The selected feature on the map ({level, feature_id} — e.g. {level:"county", feature_id:"12086"} for Miami-Dade). Pass feature_id:"" to clear the selection. |
| rail | string | no | Which right-rail panel the viewer should have open. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scenario_id | string | yes | — |
| version_id | string | no | Optional; defaults to the latest version. When set, the response includes the full per-precinct state for that version. |
| expected_version_hash | string | no | Optional exact content hash from list_scenario_versions. Requires version_id; a mismatch is refused rather than returning a different saved model. |
| include_state | boolean | no | Include the full per-precinct state even for the latest version (for redrawing the map). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scenario_id | string | yes | — |
| title | string | no | Optional SHORT card title (<=80 chars), distinct from the longer summary — what the VERSIONS card shows as its heading, e.g. "Orange County flip". |
| summary | string | no | Human-readable note on what changed, e.g. "Flipped Orange County to D+40". |
| annotation_ids | array | no | Optional — annotation ids (pins/highlights/notes on this sim) this version explains. Validated against the sim's annotations; unknown ids are reported in unlinked and dropped, never invented. |
| insight_ids | array | no | Optional — insight ids (ins_…) this version explains. Validated against the sim's insights; unknown ids are reported in unlinked and dropped. |
| include_diff | boolean | no | Inline the full before/after diff in the response (can be very large). Default false: return compact diff_stats only; fetch the full diff via diff_versions when needed. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tags | array | no | Return only scenarios carrying any of these tags. |
| limit | integer | no | — |
| offset | integer | no | Use previous next_offset with unchanged tags and limit. Ordered by updated_at descending, scenario_id ascending. Restart at 0 after inventory changes. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scenario_id | string | yes | — |
| version_a | string | yes | — |
| version_b | string | yes | — |
| limit | integer | no | Maximum changed precinct cells in this page. Summary counts cover the full version pair. |
| offset | integer | no | Use precinct_page.next_offset to continue in stable precinct-id order. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | yes | Two-letter state postal code (e.g. "TX", "NC", "GA", "FL", "PA", "MI", "AZ"). |
| election_date | string | no | Optional election date in YYYY-MM-DD format (e.g. "2024-11-05", "2026-03-03", "2026-08-18"). Defaults to the most recent covered election for the state. |
| election_type | string | no | Optional election stage filter. |
| county_fips | string | no | Optional 5-digit county FIPS code (e.g. "48081", "37021") to scope returns and turnout to one county. |
| office_level | string | no | Optional canonical office level filter. |
| office | string | no | Optional office substring filter (e.g. "U.S. Senate", "Governor"). |
| district | string | no | Optional district code filter for legislative or congressional races (e.g. "10", "11"). |
| source_id | string | no | Optional 64-character SHA-256 source identifier for a specific county/state return file. |
| include_precincts | boolean | no | When true, include per-precinct early voting, mail, election-day, and turnout breakdowns inside each race. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | Optional two-letter state code (e.g. "PA", "GA", "NC", "MI", "WI", "AZ", "NV", "TX"). |
| county_fips | string | no | Optional 5-digit county FIPS code (e.g. "37183" for Wake NC, "04013" for Maricopa AZ). |
| tier | string | no | Optional competitiveness tier filter. |
| sort | string | no | Sort order (default ballots_cast_2024). |
| limit | integer | no | Maximum counties to return (default 100, max 500). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | Optional two-letter state code (e.g. "PA", "GA", "MI", "WI", "CA", "TX"). |
| year | integer | no | Optional election year filter (1976 through 2026). |
| limit | integer | no | Maximum rows to return (default 100, max 500). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
Read live 2026-11-03 General Election pre-election mail ballot requests, mail ballots returned, early in-person ballots, and ballot composition by voter registration party (DEM/REP/UNA/Other) from continuously…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | Optional two-letter state code (e.g. "NC", "VA", "GA", "PA"). |
| county_fips | string | no | Optional 5-digit county FIPS code (e.g. "37183"). |
| election_date | string | no | Election date in YYYY-MM-DD format (default "2026-11-03"). |
| include_precincts | boolean | no | With county_fips (Texas): also return cumulative 2026 early ballots per precinct, aggregated from the SOS early-voting roster. |
| limit | integer | no | Maximum county rows to return (default 100, max 500). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | Two-letter state postal code (e.g. "TX", "NC", "GA", "PA"). |
| county_fips | string | no | Optional 5-digit county FIPS code. |
| election_id | integer | no | Optional RoutPoint election identifier. |
| contest_id | integer | no | Optional RoutPoint contest identifier for single-contest precinct returns. |
| mapsmcp_precinct_id | string | no | Optional MapsMCP precinct UUID filter. |
| year | integer | no | Optional election year (e.g. 2024, 2022, 2026). |
| election_date | string | no | Optional election date in YYYY-MM-DD format. |
| election_type | string | no | Optional election stage (default general). |
| office | string | no | Optional office name filter. |
| office_level | string | no | Optional canonical office level. |
| district | string | no | Optional legislative or congressional district code. |
| party | string | no | Optional party filter. |
| limit | integer | no | Maximum rows to return (default 100, max 500). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fips | string | no | Optional 5-digit county FIPS code (e.g. "48201" for Harris County TX, "17031" for Cook County IL). |
| state | string | no | Optional two-letter state code (e.g. "TX", "IL", "CA"). |
| office_level | string | no | Optional office level filter. |
| party | string | no | Optional party filter. |
| q | string | no | Optional name or title search query. |
| limit | integer | no | Maximum officials to return (default 100, max 200). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fips | string | no | Optional 5-digit county FIPS code (e.g. "06087" for Santa Cruz County CA, "36061" for New York County NY) for a full county dossier. |
| state | string | no | Optional two-letter state code (e.g. "CA", "TX", "NY") to rank counties across a state. |
| sort | string | no | Sort field when ranking counties in a state (default avg_annual_wage_usd). |
| limit | integer | no | Maximum counties to return when ranking a state (default 50, max 200). |
| offset | integer | no | Pagination offset (default 0). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| expected_version | string | no | The last-read updated_at token; custom model writes refuse stale edits. |
| simulation_id | string | yes | — |
| level | string | yes | — |
| candidates | array | yes | — |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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%…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | no | president (default) = the classic ACS-threshold dials below. Any other level = the race-scoped ballots lever (turnout_change_pct + cohort). |
| college | number | no | — |
| immig | number | no | — |
| highHome | number | no | — |
| lowHome | number | no | — |
| hiUnemp | number | no | — |
| toward_candidate_id | string | no | — |
| turnout_change_pct | number | no | Race-scoped levels only: percent change to BALLOTS cast in the matched geography (-12 = 12% fewer, +8 = 8% more). Composes multiplicatively with prior levers; the factor is clamped to [0.05, 5]. |
| geo_ids | array | no | Explicit geography cohort — 5-digit county FIPS on statewide levels (e.g. "23005" = Cumberland ME), district external ids on house/state-leg, or precinct external ids (they contain a dash, e.g. "34013 |
| counties | array | no | Alias of geo_ids for county cohorts. |
| criterion | object | no | ACS-style county matcher (statewide levels): e.g. {field:"population", op:"lt", value:30000} = rural counties. Filters WITHIN geo_ids when both are passed; scope a bare criterion with state_fips. |
| state_fips | string | no | 2-digit state FIPS to scope a criterion cohort to one state (e.g. "23" = Maine). |
| clear | boolean | no | Race-scoped levels only: true removes every turnout (ballots) factor on this level and its set_turnout levers, returning ballots to the baseline. Vote-share edits stay. Do not combine with turnout_cha |
| source | string | no | Where this user-authored assumption came from (user statement, field report, or source citation) — stored on the lever's audit entry. |
| assumption | string | no | The modeling assumption in plain words (e.g. "youth demobilization scenario") — stored on the lever's audit entry. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| audience_scope | object | no | Who can read this discussion or assignment. Replies and work originating in a discussion inherit its audience. |
| simulation_id | string | yes | — |
| campaign_id | string | no | Campaign that owns this War Room message. The simulation must be tagged into it. Omit only for scenario-global discussion. |
| body | string | yes | The comment text (supports @mentions by email/handle). |
| idempotency_key | string | no | Optional retry key. Replays return the same post and immutable context instead of duplicating the message. |
| feature_id | string | no | Anchor to this feature (5-digit county FIPS / precinct external_id / 2-digit state FIPS / district GEOID). |
| level | string | no | Feature anchor level (county|precinct|state|house|state_senate|state_assembly). Defaults to the sim level. |
| lng | number | no | Free-point anchor longitude (use with lat). |
| lat | number | no | Free-point anchor latitude (use with lng). |
| parent_id | string | no | Reply to this comment id (creates a thread; inherits the parent's anchor). |
| attachments | array | no | Attachments on the message: [{name,url,mime,size,object_path?,kind?}]. An UPLOADED FILE rides as the object_path returned by /api/chat-upload — the bucket is private, so each read mints a fresh short- |
| object | object | no | Anchor the comment to an OBJECT (a strategy / strategy step / annotation / version / candidate / workspace person / canonical report widget), not a map place — the comment is ABOUT that object. A pers |
| report_context | object | no | Bind this discussion to the exact immutable report widget the user is viewing. The report and widget must belong to simulation_id and the caller's workspace; the resulting receipt uses that report's p |
| canvass_kind | string | no | Make this a color-coded FIELD-MAP PIN (Map View canvassing) instead of a plain comment: supporter (green) | voter (amber) | door (blue) | target (red) | note (teal). Use with a point anchor (lng+lat) |
| canvass_data | object | no | Optional structured data for a field pin: { label, status, support_score, contacted_at, … } — anything your campaign tracks per pin. |
| title | string | no | Optional short name for the post (a strategy/target/event has one; plain chat does not — feeds fall back to a body excerpt). Indexed for full-text search alongside body. |
| regions | array | no | The post's MANY-TO-MANY location — the region/turf/shapefile ids this post covers (a multi-area comment's selected regions, a canvass turf, a target's shapes). ONE comment can anchor to MANY areas: pa |
| region_kind | string | no | What grain the regions[] ids are (precinct|county|state|district). Defaults to the anchor level. |
| category | string | no | UNIFIED WAR ROOM OBJECTS: what kind of floater this placement is. Every category shares the same anchor model and starts a thread; the category drives the icon, the War Room grouping, and which payloa |
| icon_type | string | no | The icon/subtype within the category — e.g. note: why|risk|fact|question; target: by role; canvass: the drop kind; action: follow_up|call|door|research|decision. |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| campaign_id | string | no | Exact campaign War Room to read. The simulation must be filed under it. |
| include_resolved | boolean | no | Include resolved comments (default true). |
| comment_ids | array | no | Read only these comments (a delta after a live event named them). The reply carries subset:true plus missing[] for ids that are not in this War Room. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | yes | — |
| swing_pp | number | yes | — |
| toward_candidate_id | string | no | — |
| decay_halflife | number | no | Optional. Half-life in DAYS: past decay_start_date the applied swing halves every this-many days (exponential fade toward baseline). Omit for a permanent swing (today's behavior). |
| decay_start_date | string | no | YYYY-MM-DD the shift lands / peaks (decay measured forward from here). Default: today. Only used when decay_halflife is set. |
| as_of | string | no | YYYY-MM-DD timeline point at which to evaluate the decayed swing. Default: decay_start_date (full magnitude). Only used when decay_halflife is set. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | yes | — |
| chamber | boolean | no | level:"senate" only — return real chamber control ({D,R,I,seats_up,held_over,majority_status}) via the same math as senate_control, instead of the 50-state race scoreboard. |
| cycle | integer | no | Election cycle for chamber control (level:"senate", chamber:true); default 2028. Ignored otherwise. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| level | string | no | Filter by office/level (e.g. president, senate, house, governor). |
| mode | string | no | Filter by president modeling mode: general | dem_primary_2028 | rep_primary_2028. |
| cycle | integer | no | Filter by election cycle year (e.g. 2028). |
| contest_id | string | no | Filter to sims bound to this contest_id. |
| race_id | string | no | Filter to sims bound to this race_id. |
| q | string | no | Case-insensitive substring match on the simulation name. |
| updated_since | string | no | Only sims modified at or after this ISO timestamp/date. |
| owner | string | no | Filter to sims created by this member user_id (the stable UUID from list_members) — "my sims" / "Dana's sims". Sims saved before identity stamping have no owner and never match. |
| limit | integer | no | Max rows to return (pagination page size). |
| offset | integer | no | Rows to skip before returning (pagination cursor). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
Read the canonical simulation/scenario state, including candidates, race scope, geography overrides, active version identity, provenance, and optional summary or selected dot-path fields.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| fields | no | Optional read shaping: the string "summary" → the compact identity card (target <5KB); an array of dot-paths (e.g. ["id","mode","primary.asof","primary.grain_pref","updated_at"]) → just those values f | |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | yes | — |
| grain | string | no | — |
| state | string | no | One postal code/FIPS for explicit county/precinct enumeration; may be inferred from a saved state race. |
| offset | integer | no | — |
| limit | integer | no | — |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id_a | string | yes | — |
| simulation_id_b | string | yes | — |
| campaign_id_a | string | no | Optional campaign custody for A when the model belongs to multiple readable campaigns. Does not grant access. |
| campaign_id_b | string | no | Optional campaign custody for B when the model belongs to multiple readable campaigns. Does not grant access. |
| version_a | string | no | Difference comparison: exact saved version of A. Omit only when its latest version matches the live model. |
| version_b | string | no | Difference comparison: exact saved version of B. Omit only when its latest version matches the live model. |
| expected_hash_a | string | no | Optional expected immutable version hash for A; mismatches refuse. |
| expected_hash_b | string | no | Optional expected immutable version hash for B; mismatches refuse. |
| state | string | no | Required for county/precinct comparison: one state postal code or FIPS. |
| grain | string | no | Return canonical local outcomes instead of a chamber tally. county|precinct for president/statewide races; district|precinct for House and state-legislative races. |
| format | string | no | Local comparison table format; CSV/GeoJSON add a private complete-file download URL. |
| limit | integer | no | — |
| offset | integer | no | — |
| level | string | yes | — |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
Mint a public, read-only link to the exact canonical scenario/version. Authenticate for durable workspace ownership; revoke_share disables the link.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| campaign_id | string | no | Optional campaign that contains this simulation. The share is authorized against that campaign and its frozen context/manifest retain the campaign id. |
| ttl_days | integer | no | — |
| include_impact | boolean | no | Include national impact only for an unscoped national model. Ignored for a single-race or primary scope. |
| include_deltas | boolean | no | Include modeled margin/share deltas from the canonical baseline for this exact race. |
| sections | array | no | Optional public-share section allowlist. Single-race shares remain race-scoped even when impact is requested. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| level | string | no | — |
| district_id | string | no | District external id (for level=president/senate/governor, the state). EM-056: accepts a resolve_geography handle in any format — the slug "us-pa", postal "PA", or FIPS "42" — and also reads geo_id/st |
| region_group | string | no | Optional saved county-grain workspace map region-group slug. Returns one modeled race rollup per named region. |
| region | string | no | Optional — with region_group, scope to exactly ONE region in the group (its slug), rolling up only that region's member counties. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| state | string | yes | Postal, FIPS, or resolve_geography slug ("us-pa") — required, scopes the query (EM-056: all formats accepted; also fills from geo_id). |
| filter | object | yes | Precinct property → condition map within the requested geography. Properties: external_id, GEOID, name, state, county, county_fips, shape_id, votes_dem, votes_rep, votes_total, pct_dem_lead, official_ |
| swing_pp | number | no | Percentage-point swing toward the target candidate. mode:"turnout": the percent of each precinct's ballots added for the target side. |
| target_margin_pp | number | no | Alternative to swing_pp: desired margin of the target party over the other major party, as a percentage of all modeled ballots in the filtered cohort. Requires mode:persuasion, explicit toward_candida |
| weights | object | no | Alternative to swing_pp: exact precinct external_id -> signed swing percentage points. Only these IDs change; all must be inside the state/filter with canonical ballots. Requires explicit D/R target, |
| toward_candidate_id | string | no | The candidate id receiving the swing (e.g. "D", "R", or a custom id). Inferred to the level's first candidate of opposite party if omitted. |
| max_precincts | integer | no | Safety cap on how many precincts get mutated. |
| level | string | no | The office these swung precincts model — folds them into that race's state rollup (same tag as set_precinct_pcts). REQUIRED for mode:"turnout"/"mixed" (the ballots ride that race's lever kernel; presi |
| mode | string | no | HOW the swing happens (EM-008). persuasion = conversion (×2 margin, ballots hold); turnout = one-sided ballots (×1 margin, votes_total moves); mixed = mix persuasion + the rest turnout. Omit for the c |
| mix | number | no | mode:"mixed" only — the fraction of swing_pp delivered via persuasion (the rest via turnout). |
| source | string | no | mode calls that move ballots: stored on the lever's audit entry. |
| assumption | string | no | mode calls that move ballots: stored on the lever's audit entry. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section | string | no | The next conversational step. Read connection first; all returns the complete guide when campaign tools are available. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Text search over this session's retained tool names and descriptions. Ranked: exact name, name substring, then description matches. |
| limit | integer | no | Maximum tool entries per discovery page, subject to the response byte budget. Repeat the same filters with next_cursor as cursor until null. |
| cursor | string | no | Opaque next_cursor from the previous discovery page. Keep the same query, category and workflow; restart if the authorized catalog changed. |
| expected_catalog_version | string | no | Optional catalog_version from a previous tools/list or get_catalog response. Returns catalog_changed so clients can detect schema drift and refresh cached bindings. |
| workflow | string | no | Opt into a workflow from the compact index. Filters browsing or search within the authorized inventory; never grants access or changes the connection profile. |
| tool | string | no | Exact retained tool name — returns the complete inputSchema and versioned AI guidance matching its use-<tool> MCP prompt when it is present in this session's tools/list. |
| category | string | no | Browse one category (e.g. "Scenario") in bounded pages. The category count is the full matching inventory, not this page length. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| party | string | yes | — |
| simulation_id | string | no | Optional. If given (and party=D), returns the sim's user-defined Dem calendar when one is set. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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":…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| party | string | yes | — |
| state | string | no | SINGLE-STATE mode: State FIPS ("19") or 2-letter abbr ("IA"). Provide state+shares OR states, not both. |
| shares | object | no | SINGLE-STATE mode: Map of candidate_id → percentage (0-100), e.g. {"vance": 42, "desantis": 30}. Must reference set_primary_candidates ids. Empty ({}) un-models the state. |
| states | object | no | BATCH mode: Map of state (FIPS or 2-letter abbr) → its {candidate_id: pct} shares, e.g. {"SC":{"newsom":31,"harris":24},"NH":{...}}. Writes all states in one atomic call; an invalid state fails the wh |
| include_rollup | boolean | no | BATCH mode only: also return the full delegate roll_up alongside the default trimmed delta summary. Ignored in single-state mode (which always echoes the full roll_up). |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| party | string | yes | — |
| asof | integer/null | no | Optional. Contests counted; omit/null = full calendar. |
| state | string | no | Optional. Scope the read to ONE contest (postal/FIPS/name): returns a state block with that contest's calendar position, modeling grain, and delegate allocation — and when the state sits BEYOND this |
| include_states | boolean | no | Optional. Also return by_state[]: per voted contest — delegates each candidate won, plus eff_shares (the effective per-state candidate shares after the county/precinct rollup), modeled_by ("precinct"| |
| by_district | boolean | no | Optional (Democratic only). Also return district_allocation: the SAME authoritative count broken out by DNC Rule 14 pool — per state, the district/at-large/PLEO pool sizes, and per congressional distr |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| setup_evidence | object | no | For automatic public-profile initialization: {kind:"primary_profile_start",model:"geographic-context-v1",profile_version:"2026-09-05.v1",ranking:[{id,name}]}. Use the same ordered ranking; the server |
| expected_version_hash | string | no | Copy expected_version_hash from the setup dry run to refuse overwriting an intervening edit. Exact already-applied replay returns the existing version. |
| simulation_id | string | yes | The scenario/simulation to edit (sim_…). |
| edits | array | yes | Ordered heterogeneous list of primary edits, each an object {op, …opArgs}. op is one of set_primary_shares, set_primary_county_shares, set_primary_precinct_shares, set_primary_candidates, set_primary_ |
| party | string | no | Default party (d/r) for edits that omit their own party. Defaults to the sim's primary party. |
| dry_run | boolean | no | DEFAULT true — preview only: returns before/after/delta/warnings/errors/viability_flags and writes NOTHING. Pass false to actually apply. |
| force | boolean | no | Apply despite soft WARNINGS (just-over-100 totals, viability flags, mode/geo/calendar notes). Still BLOCKS on hard errors (unknown candidate, malformed edit, shares over 100.5). Default false. |
| checkpoint_label | string | no | Optional label for the pre-batch rollback checkpoint version created on apply. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| simulation_id | string | yes | — |
| office | string | no | The office (seat) this race is for. This is the canonical parameter name; the older level is still accepted as an alias. |
| level | string | no | DEPRECATED alias for office (kept for back-compat). Prefer office. |
| geography_id | string | no | Accepts the canonical resolve_geography slug at every office — president "us" / "US"; senate & governor "us-pa", "PA", or FIPS "42"; house "us-ny-cd-17", "NY-17", or the FIPS+CD external_id "3617". St |
| candidate | string | no | A candidate/officeholder name ("Lauren Boebert") — resolved via resolve_candidate to their office + geography + cycle, so you scope their race in ONE call and they are auto-added to the roster as the |
| cycle | integer | no | — |
| stage | string | no | — |
| candidates | array | no | Optional array of real candidates running this race: [{id, name, party, color, incumbent?}]. Overwrites the office's candidate list. If omitted, keeps existing candidates. |
| rebind | boolean | no | Deliberately re-district a campaign already bound to a DIFFERENT geography. Without it, re-scoping a bound sim is rejected (scope_locked) — a campaign is tied to the district it was created in. |
| workspace_scope | string | no | Optional workspace for THIS call: use an exact personal/team ID from list_workspaces. Repeat on each call; it does not change the connection default. Must agree with MCP metadata and the effective HTT |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | The exact tool name, as get_catalog returns it. |
| arguments | object | no | That tool's arguments, exactly as its get_catalog schema describes. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Racemodel or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Racemodel can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.