officials

Origin-signed US political data: 25,546 officials, bills, votes, positions with sources.

Should I use this

Quality & Safety

A
Description quality
99%
Schema completeness
86%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'politics_bill' description lacks action verbin politics_bill

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,604Tokens (tool definitions)
~1.1 KBTypical response size
Significant attention impact (4.38% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "officials": {
      "url": "https://politics.rootz.global/mcp"
    }
  }
}

Remote endpoints

https://politics.rootz.global/mcpstreamable-http

What it can do

Tool inventory

Tools (30)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢politics_represent(zip)

Representation lookup for a US ZIP code: both U.S. Senators, the U.S. House member for that ZIP's congressional district, and the state's statewide executives (governor, attorney general, and similar). Every official carries source_url (the capture origin) and source_link (a public page).

Input Schema

{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string",
      "description": "5-digit US ZIP code, e.g. 04101"
    }
  },
  "required": [
    "zip"
  ]
}
🟢politics_search(name, state, party, level, chamber, ...)

Search for politicians and elected officials across all levels of US government — federal, state, county, municipal. Filter by name, state, party, level, chamber, or office title. Returns officials with their current office, party, and contact info.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Official name (partial match, e.g. \"Sanders\" or \"Alexandria\")"
    },
    "state": {
      "type": "string",
      "description": "State abbreviation (e.g. FL, NY, CA)"
    },
    "party": {
      "type": "string",
      "description": "Party name (e.g. Democrat, Republican, Independent)"
    },
    "level": {
      "type": "string",
      "enum": [
        "federal",
        "state",
        "county",
        "municipal",
        "school"
      ],
      "description": "Government level"
    },
    "chamber": {
      "type": "string",
      "enum": [
        "senate",
        "house",
        "council",
        "board"
      ],
      "description": "Legislative chamber"
    },
    "office": {
      "type": "string",
      "description": "Office title (e.g. Senator, Mayor, Governor, Town Clerk)"
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "candidate",
        "former",
        "defeated"
      ],
      "description": "Status (default: active + candidate)"
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default 50)",
      "default": 50
    },
    "offset": {
      "type": "integer",
      "description": "Pagination offset",
      "default": 0
    }
  }
}
🟢politics_official(id, bioguide_id, positions_limit, positions_offset, expand)

Get full details for a specific official by ID — biography, party, office, policy positions, committee assignments, campaign finance, social media, and contact info. All data includes source URLs for verification.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Official ID from politics_search results"
    },
    "bioguide_id": {
      "type": "string",
      "description": "Congress.gov Bioguide ID (e.g. S000033 for Bernie Sanders)"
    },
    "positions_limit": {
      "type": "integer",
      "description": "Max policy positions to return (default 15, max 250). Response is bounded so it fits any AI client tool-result limit."
    },
    "positions_offset": {
      "type": "integer",
      "description": "Pagination offset for positions (page with offset += limit)."
    },
    "expand": {
      "type": "boolean",
      "description": "Return the fuller record (larger response, untruncated detail). Default false = bounded for AI consumption."
    }
  }
}
🟢politics_resolve(name, state, level)

Resolve a messy name string (e.g. "Rep. Johnson", "cornyn") to a canonical official — returns the best match with a 0-1 confidence score and ranked alternatives. Use this first when you have a name but not an ID; then call politics_official with best.id. Add state to disambiguate.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Name to resolve (partial/with title/lowercase all OK)"
    },
    "state": {
      "type": "string",
      "description": "State abbreviation to disambiguate (e.g. TX)"
    },
    "level": {
      "type": "string",
      "description": "Government level to disambiguate",
      "enum": [
        "federal",
        "state",
        "county",
        "municipal",
        "school"
      ]
    }
  },
  "required": [
    "name"
  ]
}
🟢politics_by_state(state)

Get all current officials for a US state — federal senators and representatives, state legislators, and any indexed local officials. Organized by government level.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "State abbreviation (e.g. FL, CA, TX)"
    }
  },
  "required": [
    "state"
  ]
}
🟢politics_positions(topic, state, party, compact, offset, ...)

Policy positions across officials by topic, covering who supports or opposes issues such as crypto, stablecoins, AI, healthcare, and guns. Each position carries a source URL and origin hash. Returns compact records by default (id, name, party, state, stance, summary, source) with a total count; the compact parameter controls row detail and offset controls paging.

Input Schema

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "Policy topic label — use exact stored labels: Cryptocurrency, Technology, Healthcare, Immigration, Climate, Gun Control, Abortion, Taxes, Economy, Education, National Security, Housing, Criminal Justice, Social Security, Voting Rights, Agriculture, Trade"
    },
    "state": {
      "type": "string",
      "description": "Filter by state (2-letter code)"
    },
    "party": {
      "type": "string",
      "description": "Filter by party (Republican, Democrat)"
    },
    "compact": {
      "type": "boolean",
      "default": true,
      "description": "Compact mode (default). Small bounded record per position; use with offset to page. Set false for full rows (limit capped at 50)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "description": "Pagination offset. Response includes total; page by offset += limit."
    },
    "limit": {
      "type": "integer",
      "default": 100,
      "description": "Max results per page. Compact: default 100, max 250. Full: default 25, max 50."
    }
  },
  "required": [
    "topic"
  ]
}
🟢politics_stats

Get summary statistics for the politics.rootz.global database — total officials, breakdown by level, party, state, and chamber. Shows coverage completeness.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢politics_timeline(id, limit)

Get the full origin timeline for a politician — every page snapshot, every position change, every data source with hash proof. The political wayback machine. Shows what changed, when, and where the data came from.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Official ID"
    },
    "limit": {
      "type": "integer",
      "default": 100
    }
  },
  "required": [
    "id"
  ]
}
🟢politics_changes(limit, since)

Get recent changes detected across all politicians — position shifts, website updates, new data. Each change links to the before/after snapshots with origin proof.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50
    },
    "since": {
      "type": "string",
      "description": "ISO date to filter changes after (e.g. 2026-05-01)"
    }
  }
}
🟢politics_origin

Get origin archive statistics — total snapshots, changes detected, origin proofs recorded, unique URLs tracked. Shows the depth of the political wayback machine.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡politics_bridge_create(state, zip, topics)

Create a citizen bridge page — a personalized workspace for tracking representatives, comparing positions, and taking action (write letters, log calls). Returns a shareable URL that any AI agent can collaborate on. Optionally auto-populates with the citizen's state representatives.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "State abbreviation — auto-adds federal representatives"
    },
    "zip": {
      "type": "string",
      "description": "ZIP code for precise district matching"
    },
    "topics": {
      "type": "string",
      "description": "Comma-separated topics of interest (e.g. Healthcare,Climate)"
    }
  }
}
🟢politics_bridge_session(hash, agent_id)

Current state of a citizen bridge workspace: tracked officials, saved comparisons, drafted actions, and messages.

Input Schema

{
  "type": "object",
  "properties": {
    "hash": {
      "type": "string",
      "description": "Bridge page session hash"
    },
    "agent_id": {
      "type": "string",
      "description": "Your agent identifier for multi-agent tracking"
    }
  },
  "required": [
    "hash"
  ]
}
⚪politics_bridge_compare(hash, official_ids, topic, title)

Compare multiple politicians side-by-side on a bridge page — positions, party, office, campaign finance. Optionally filter to a specific topic.

Input Schema

{
  "type": "object",
  "properties": {
    "hash": {
      "type": "string",
      "description": "Bridge page session hash"
    },
    "official_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "Array of official IDs to compare"
    },
    "topic": {
      "type": "string",
      "description": "Optional topic to focus comparison on"
    },
    "title": {
      "type": "string",
      "description": "Title for this comparison"
    }
  },
  "required": [
    "hash",
    "official_ids"
  ]
}
⚪politics_bridge_letter(hash, official_id, subject, body, action_type)

Draft a letter to a politician on the citizen's bridge page. The letter gets an origin hash for proof of content. Returns delivery options (email, web form, USPS, phone).

Input Schema

{
  "type": "object",
  "properties": {
    "hash": {
      "type": "string",
      "description": "Bridge page session hash"
    },
    "official_id": {
      "type": "integer",
      "description": "Official to write to"
    },
    "subject": {
      "type": "string",
      "description": "Letter subject"
    },
    "body": {
      "type": "string",
      "description": "Letter body text"
    },
    "action_type": {
      "type": "string",
      "enum": [
        "letter",
        "email",
        "call",
        "meeting"
      ],
      "default": "letter"
    }
  },
  "required": [
    "hash",
    "official_id",
    "body"
  ]
}
🟢politics_bill(bill_id, include_text)

Details of a US bill or resolution: vote breakdown, sponsors, cosponsors, status, and origin proof. Returns metadata, a short text excerpt, and a text index by default; full legislative text is omitted because omnibus bills exceed typical token caps. The include_text parameter controls whether the complete text is returned in a single response.

Input Schema

{
  "type": "object",
  "properties": {
    "bill_id": {
      "type": "string",
      "description": "Bill ID (e.g. hr3424-119 for House bill 3424 in 119th Congress)"
    },
    "include_text": {
      "type": "string",
      "enum": [
        "none",
        "excerpt",
        "full"
      ],
      "default": "excerpt",
      "description": "excerpt (default): metadata + ~1.2KB head + text index. none: metadata + index only. full: entire full_text (may exceed the token cap for large bills)."
    }
  },
  "required": [
    "bill_id"
  ]
}
🟢politics_bill_toc(bill_id)

Section index for a bill: every "SEC. N" heading with its character offset and length, plus the whole-bill origin hash (content_hash) and total text length. A small response that describes the structure of a large bill.

Input Schema

{
  "type": "object",
  "properties": {
    "bill_id": {
      "type": "string",
      "description": "Bill ID (e.g. hr7148-119)"
    }
  },
  "required": [
    "bill_id"
  ]
}
🟢politics_bill_text(bill_id, part, section, max_chars)

One signed, bounded slice of a bill's full legislative text, addressed by part number or section label. Each response carries part and total_parts, next_part, the slice's part_sha256, and the whole-bill content_hash. Parts 1 through total_parts concatenated in order hash to content_hash, so a bill too large to return in a single response remains verifiable as complete and unaltered.

Input Schema

{
  "type": "object",
  "properties": {
    "bill_id": {
      "type": "string",
      "description": "Bill ID (e.g. hr7148-119)"
    },
    "part": {
      "type": "integer",
      "default": 1,
      "description": "1-based part number. Response tells you total_parts and next_part."
    },
    "section": {
      "type": "string",
      "description": "Jump to a section by label instead of part, e.g. \"2\", \"SEC. 2\", or \"preamble\". Overrides part."
    },
    "max_chars": {
      "type": "integer",
      "default": 30000,
      "description": "Max characters per part (2000–60000). Larger = fewer parts but bigger responses."
    }
  },
  "required": [
    "bill_id"
  ]
}
🟢politics_bills_search(topic, sponsor, congress, status, limit)

Search bills by topic, sponsor, status, or congress. Returns bill metadata and whether full text is available.

Input Schema

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "Topic keyword (e.g. crypto, defense, healthcare)"
    },
    "sponsor": {
      "type": "string",
      "description": "Sponsor name or bioguide ID"
    },
    "congress": {
      "type": "integer",
      "description": "Congress number (119 = 2025-2026)",
      "default": 119
    },
    "status": {
      "type": "string",
      "description": "Bill status: introduced, committee, passed_house, passed_senate, enacted"
    },
    "limit": {
      "type": "integer",
      "default": 20
    }
  }
}
🟢politics_candidate_feed(id, bioguide_id, positions_limit, positions_offset, expand)

Get a candidate's Campaign Data Standard (CDS) feed: a single machine-readable record of who they are, the offices they hold and seek, their positions in their own words (each source-linked), their voting record by reference, and declared data gaps. This is the standardized, signed feed an AI or reporter uses to grab a candidate's positions and verify they are genuine. Every MCP response is signed; the standalone signed feed is also at /official/{id}/candidate.json. Tier is "rootz-compiled" until the campaign claims and signs it ("candidate-signed").

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Official ID (from politics_search)"
    },
    "bioguide_id": {
      "type": "string",
      "description": "Bioguide ID (alternative to id)"
    },
    "positions_limit": {
      "type": "integer",
      "description": "Max positions in the delivered feed (default 15, max 500). The complete signed feed (all positions) is always at signed_feed_url."
    },
    "positions_offset": {
      "type": "integer",
      "description": "Pagination offset for positions."
    },
    "expand": {
      "type": "boolean",
      "description": "Deliver more positions inline (larger response). Default false = bounded for AI consumption."
    }
  }
}
🟢politics_alignment(id)

Compare an official's stated positions against their actual roll-call votes, per topic — what they SAY vs how they VOTED, both source-linked. Does NOT label agreement/contradiction (you judge and cite); surfaces the juxtaposition no unsigned source can. Use official id.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Official ID"
    }
  },
  "required": [
    "id"
  ]
}
🟢politics_coverage

Coverage map: per-state, per-dataset completeness (officials by level, positions, finance, state-legislative votes). Shows WHERE the data is deep (federal — complete) vs sparse (local). Use it to know whether silence means "no data captured" rather than "nothing there".

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢politics_methodology

Get the full transparency methodology — how we collect, assess, extract, sign, and verify political data. Includes quality assessment algorithm (signals + weights), trust levels, data sources, cron schedule, and what we can and cannot prove. Open and auditable.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢politics_provenance(official_id)

Get the complete origin proof chain for an official — every data source, content hash, quality assessment, snapshot history, and verification instructions. Proves where every piece of data came from.

Input Schema

{
  "type": "object",
  "properties": {
    "official_id": {
      "type": "integer",
      "description": "Official ID"
    }
  },
  "required": [
    "official_id"
  ]
}
🟢politics_speeches(bioguide_id, official_id, topic, date_from, date_to, ...)

Search Congressional Record floor speeches by official, topic, date range, or keyword. Returns verbatim text from the official government record with origin proof hash. Every speech is directly citable with a GPO source URL.

Input Schema

{
  "type": "object",
  "properties": {
    "bioguide_id": {
      "type": "string",
      "description": "Bioguide ID (e.g. L000571 for Lummis, S001184 for Tim Scott)"
    },
    "official_id": {
      "type": "integer",
      "description": "Official ID from politics_search"
    },
    "topic": {
      "type": "string",
      "description": "Topic (Cryptocurrency, Healthcare, Immigration, etc.)"
    },
    "date_from": {
      "type": "string",
      "description": "Start date ISO (e.g. 2025-01-03)"
    },
    "date_to": {
      "type": "string",
      "description": "End date ISO"
    },
    "chamber": {
      "type": "string",
      "enum": [
        "house",
        "senate"
      ],
      "description": "Filter by chamber"
    },
    "text": {
      "type": "string",
      "description": "Full-text search within speech content"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "description": "Max results"
    }
  }
}
🟢politics_candidates(state, office, party, has_url, limit, ...)

Registered federal candidates for the 2026 election cycle, filterable by state, office (senate, house, president), party, or presence of a campaign URL. Returns campaign website, social media links, FEC data, and position and speech counts.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Two-letter state code (e.g. ME, CA, TX)"
    },
    "office": {
      "type": "string",
      "enum": [
        "senate",
        "house",
        "president"
      ],
      "description": "Filter by office"
    },
    "party": {
      "type": "string",
      "description": "Filter by party (Democrat, Republican, Libertarian, etc.)"
    },
    "has_url": {
      "type": "boolean",
      "description": "Only return candidates with campaign websites"
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "description": "Max results (default 50)"
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "description": "Pagination offset"
    }
  }
}
🟢politics_state_votes(state, topic, days, limit, bill_id)

Search state legislature votes across 26+ US states. Filter by state, topic, or date. Returns bill title, vote result, yes/no counts.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Two-letter state code (CA, TX, NY, etc.)"
    },
    "topic": {
      "type": "string",
      "description": "Topic filter (Healthcare, Economy, Education, etc.)"
    },
    "days": {
      "type": "integer",
      "description": "Look back N days (default 30, max 365)",
      "default": 30
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default 30, max 100)",
      "default": 30
    },
    "bill_id": {
      "type": "string",
      "description": "Specific bill identifier (e.g. HB 1234)"
    }
  }
}
🟢politics_municipalities(state, name, type, limit)

Search US municipalities (cities, towns, villages, counties). Every incorporated place in the US with coordinates. Filter by state, name, or type. Returns website, platform, meeting calendar, and board/commission info where available.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Two-letter state code (MA, CA, TX, etc.)"
    },
    "name": {
      "type": "string",
      "description": "Municipality name (partial match)"
    },
    "type": {
      "type": "string",
      "description": "Place type: city, town, village, borough, county, cdp",
      "enum": [
        "city",
        "town",
        "village",
        "borough",
        "county",
        "cdp",
        "place",
        "charter_township"
      ]
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default 30)",
      "default": 30
    }
  }
}
🟡politics_create_watchlist(email, name, officials, topics, town, ...)

Creates a Just the Facts watchlist bound to an email address, covering any combination of specific officials, issue topics, and a town with state for local meetings, agendas, and minutes. Sends a double-opt-in confirmation email and returns the bridge workspace URL.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Subscriber email (required)"
    },
    "name": {
      "type": "string",
      "description": "Watchlist name"
    },
    "officials": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "Official IDs to track"
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Issue topics (e.g. Crypto, Healthcare)"
    },
    "town": {
      "type": "string",
      "description": "Town/city to track local meetings (e.g. Fort Myers)"
    },
    "state": {
      "type": "string",
      "description": "2-letter state for the town"
    },
    "cadence": {
      "type": "string",
      "enum": [
        "daily",
        "weekly"
      ],
      "description": "Digest frequency"
    },
    "report_prompt": {
      "type": "string",
      "description": "Plain-English brief for how the digest is written"
    }
  },
  "required": [
    "email"
  ]
}
🟢politics_polls(race_key, state, subject, pollster, since, ...)

Search the SIGNED public-poll archive. Unlike aggregators, every poll keeps the EXACT question wording, population base (LV/RV/adults), sample size, margin of error, mode, and per-option toplines — first-party sourced, snapshot-hashed, and cryptographically signed (verifiable). Filter by race_key, state, subject (e.g. "approval", "Senate"), pollster, or since (ISO date). Returns a list; call politics_poll {id} for full detail + signature. Use this when a question hinges on what a poll ACTUALLY asked vs how it was reported.

Input Schema

{
  "type": "object",
  "properties": {
    "race_key": {
      "type": "string",
      "description": "Stable contest key to get every poll of one race over time (e.g. us-pres-approval-trump)"
    },
    "state": {
      "type": "string",
      "description": "2-letter state (omit for national)"
    },
    "subject": {
      "type": "string",
      "description": "Subject substring (e.g. \"approval\", \"TX Senate\", \"immigration\")"
    },
    "pollster": {
      "type": "string",
      "description": "Pollster substring (e.g. \"Quinnipiac\", \"Emerson\")"
    },
    "since": {
      "type": "string",
      "description": "Only polls whose field_end >= this ISO date (e.g. 2026-08-01)"
    },
    "cycle": {
      "type": "integer",
      "description": "Election/survey cycle year (e.g. 2026)"
    },
    "limit": {
      "type": "integer",
      "default": 50
    },
    "offset": {
      "type": "integer",
      "default": 0
    }
  }
}
🟢politics_poll(id)

Get one poll in full: pollster, sponsor, field dates, population, sample size, margin of error, mode, the VERBATIM question(s) asked, per-option toplines, the first-party source_url, and the signature (poll_proof) that binds the exact wording and numbers. This is the ground truth to check any claim about a poll against.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Poll ID from politics_polls results"
    }
  },
  "required": [
    "id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded30 tools
verifiedversion not recorded30 tools