Server definition
- Hash
- sha256:64f5e5418a6e30e388fa646218d5edfa3580e37299b986b4d8dff898d818f24e
- What it is
- What a remote MCP server returned when asked what it offers: 30 tools
The blob, as servednamed by its sha256
{
"instructions": "Verified, origin-proofed US political data. Tools = actions; Resources = signed records as context (subscribe to get notified when a record changes); Prompts = provenance-enforcing workflows. Every fact traces to a signed source. Open a GET stream to this endpoint (with your Mcp-Session-Id) to receive notifications/resources/updated.",
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"id": {
"description": "Official ID",
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "politics_alignment",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bill_id": {
"description": "Bill ID (e.g. hr3424-119 for House bill 3424 in 119th Congress)",
"type": "string"
},
"include_text": {
"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).",
"enum": [
"none",
"excerpt",
"full"
],
"type": "string"
}
},
"required": [
"bill_id"
],
"type": "object"
},
"name": "politics_bill",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bill_id": {
"description": "Bill ID (e.g. hr7148-119)",
"type": "string"
},
"max_chars": {
"default": 30000,
"description": "Max characters per part (2000–60000). Larger = fewer parts but bigger responses.",
"type": "integer"
},
"part": {
"default": 1,
"description": "1-based part number. Response tells you total_parts and next_part.",
"type": "integer"
},
"section": {
"description": "Jump to a section by label instead of part, e.g. \"2\", \"SEC. 2\", or \"preamble\". Overrides part.",
"type": "string"
}
},
"required": [
"bill_id"
],
"type": "object"
},
"name": "politics_bill_text",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bill_id": {
"description": "Bill ID (e.g. hr7148-119)",
"type": "string"
}
},
"required": [
"bill_id"
],
"type": "object"
},
"name": "politics_bill_toc",
"outputSchema": null
},
{
"description": "Search bills by topic, sponsor, status, or congress. Returns bill metadata and whether full text is available.",
"inputSchema": {
"properties": {
"congress": {
"default": 119,
"description": "Congress number (119 = 2025-2026)",
"type": "integer"
},
"limit": {
"default": 20,
"type": "integer"
},
"sponsor": {
"description": "Sponsor name or bioguide ID",
"type": "string"
},
"status": {
"description": "Bill status: introduced, committee, passed_house, passed_senate, enacted",
"type": "string"
},
"topic": {
"description": "Topic keyword (e.g. crypto, defense, healthcare)",
"type": "string"
}
},
"type": "object"
},
"name": "politics_bills_search",
"outputSchema": null
},
{
"description": "Compare multiple politicians side-by-side on a bridge page — positions, party, office, campaign finance. Optionally filter to a specific topic.",
"inputSchema": {
"properties": {
"hash": {
"description": "Bridge page session hash",
"type": "string"
},
"official_ids": {
"description": "Array of official IDs to compare",
"items": {
"type": "integer"
},
"type": "array"
},
"title": {
"description": "Title for this comparison",
"type": "string"
},
"topic": {
"description": "Optional topic to focus comparison on",
"type": "string"
}
},
"required": [
"hash",
"official_ids"
],
"type": "object"
},
"name": "politics_bridge_compare",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"state": {
"description": "State abbreviation — auto-adds federal representatives",
"type": "string"
},
"topics": {
"description": "Comma-separated topics of interest (e.g. Healthcare,Climate)",
"type": "string"
},
"zip": {
"description": "ZIP code for precise district matching",
"type": "string"
}
},
"type": "object"
},
"name": "politics_bridge_create",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"properties": {
"action_type": {
"default": "letter",
"enum": [
"letter",
"email",
"call",
"meeting"
],
"type": "string"
},
"body": {
"description": "Letter body text",
"type": "string"
},
"hash": {
"description": "Bridge page session hash",
"type": "string"
},
"official_id": {
"description": "Official to write to",
"type": "integer"
},
"subject": {
"description": "Letter subject",
"type": "string"
}
},
"required": [
"hash",
"official_id",
"body"
],
"type": "object"
},
"name": "politics_bridge_letter",
"outputSchema": null
},
{
"description": "Current state of a citizen bridge workspace: tracked officials, saved comparisons, drafted actions, and messages.",
"inputSchema": {
"properties": {
"agent_id": {
"description": "Your agent identifier for multi-agent tracking",
"type": "string"
},
"hash": {
"description": "Bridge page session hash",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "politics_bridge_session",
"outputSchema": null
},
{
"description": "Get all current officials for a US state — federal senators and representatives, state legislators, and any indexed local officials. Organized by government level.",
"inputSchema": {
"properties": {
"state": {
"description": "State abbreviation (e.g. FL, CA, TX)",
"type": "string"
}
},
"required": [
"state"
],
"type": "object"
},
"name": "politics_by_state",
"outputSchema": null
},
{
"description": "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\").",
"inputSchema": {
"properties": {
"bioguide_id": {
"description": "Bioguide ID (alternative to id)",
"type": "string"
},
"expand": {
"description": "Deliver more positions inline (larger response). Default false = bounded for AI consumption.",
"type": "boolean"
},
"id": {
"description": "Official ID (from politics_search)",
"type": "integer"
},
"positions_limit": {
"description": "Max positions in the delivered feed (default 15, max 500). The complete signed feed (all positions) is always at signed_feed_url.",
"type": "integer"
},
"positions_offset": {
"description": "Pagination offset for positions.",
"type": "integer"
}
},
"type": "object"
},
"name": "politics_candidate_feed",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"has_url": {
"description": "Only return candidates with campaign websites",
"type": "boolean"
},
"limit": {
"default": 50,
"description": "Max results (default 50)",
"type": "integer"
},
"office": {
"description": "Filter by office",
"enum": [
"senate",
"house",
"president"
],
"type": "string"
},
"offset": {
"default": 0,
"description": "Pagination offset",
"type": "integer"
},
"party": {
"description": "Filter by party (Democrat, Republican, Libertarian, etc.)",
"type": "string"
},
"state": {
"description": "Two-letter state code (e.g. ME, CA, TX)",
"type": "string"
}
},
"type": "object"
},
"name": "politics_candidates",
"outputSchema": null
},
{
"description": "Get recent changes detected across all politicians — position shifts, website updates, new data. Each change links to the before/after snapshots with origin proof.",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"type": "integer"
},
"since": {
"description": "ISO date to filter changes after (e.g. 2026-05-01)",
"type": "string"
}
},
"type": "object"
},
"name": "politics_changes",
"outputSchema": null
},
{
"description": "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\".",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "politics_coverage",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"cadence": {
"description": "Digest frequency",
"enum": [
"daily",
"weekly"
],
"type": "string"
},
"email": {
"description": "Subscriber email (required)",
"type": "string"
},
"name": {
"description": "Watchlist name",
"type": "string"
},
"officials": {
"description": "Official IDs to track",
"items": {
"type": "integer"
},
"type": "array"
},
"report_prompt": {
"description": "Plain-English brief for how the digest is written",
"type": "string"
},
"state": {
"description": "2-letter state for the town",
"type": "string"
},
"topics": {
"description": "Issue topics (e.g. Crypto, Healthcare)",
"items": {
"type": "string"
},
"type": "array"
},
"town": {
"description": "Town/city to track local meetings (e.g. Fort Myers)",
"type": "string"
}
},
"required": [
"email"
],
"type": "object"
},
"name": "politics_create_watchlist",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "politics_methodology",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"default": 30,
"description": "Max results (default 30)",
"type": "integer"
},
"name": {
"description": "Municipality name (partial match)",
"type": "string"
},
"state": {
"description": "Two-letter state code (MA, CA, TX, etc.)",
"type": "string"
},
"type": {
"description": "Place type: city, town, village, borough, county, cdp",
"enum": [
"city",
"town",
"village",
"borough",
"county",
"cdp",
"place",
"charter_township"
],
"type": "string"
}
},
"type": "object"
},
"name": "politics_municipalities",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bioguide_id": {
"description": "Congress.gov Bioguide ID (e.g. S000033 for Bernie Sanders)",
"type": "string"
},
"expand": {
"description": "Return the fuller record (larger response, untruncated detail). Default false = bounded for AI consumption.",
"type": "boolean"
},
"id": {
"description": "Official ID from politics_search results",
"type": "integer"
},
"positions_limit": {
"description": "Max policy positions to return (default 15, max 250). Response is bounded so it fits any AI client tool-result limit.",
"type": "integer"
},
"positions_offset": {
"description": "Pagination offset for positions (page with offset += limit).",
"type": "integer"
}
},
"type": "object"
},
"name": "politics_official",
"outputSchema": null
},
{
"description": "Get origin archive statistics — total snapshots, changes detected, origin proofs recorded, unique URLs tracked. Shows the depth of the political wayback machine.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "politics_origin",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"id": {
"description": "Poll ID from politics_polls results",
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "politics_poll",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"cycle": {
"description": "Election/survey cycle year (e.g. 2026)",
"type": "integer"
},
"limit": {
"default": 50,
"type": "integer"
},
"offset": {
"default": 0,
"type": "integer"
},
"pollster": {
"description": "Pollster substring (e.g. \"Quinnipiac\", \"Emerson\")",
"type": "string"
},
"race_key": {
"description": "Stable contest key to get every poll of one race over time (e.g. us-pres-approval-trump)",
"type": "string"
},
"since": {
"description": "Only polls whose field_end >= this ISO date (e.g. 2026-08-01)",
"type": "string"
},
"state": {
"description": "2-letter state (omit for national)",
"type": "string"
},
"subject": {
"description": "Subject substring (e.g. \"approval\", \"TX Senate\", \"immigration\")",
"type": "string"
}
},
"type": "object"
},
"name": "politics_polls",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"compact": {
"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).",
"type": "boolean"
},
"limit": {
"default": 100,
"description": "Max results per page. Compact: default 100, max 250. Full: default 25, max 50.",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset. Response includes total; page by offset += limit.",
"type": "integer"
},
"party": {
"description": "Filter by party (Republican, Democrat)",
"type": "string"
},
"state": {
"description": "Filter by state (2-letter code)",
"type": "string"
},
"topic": {
"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",
"type": "string"
}
},
"required": [
"topic"
],
"type": "object"
},
"name": "politics_positions",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"official_id": {
"description": "Official ID",
"type": "integer"
}
},
"required": [
"official_id"
],
"type": "object"
},
"name": "politics_provenance",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"properties": {
"zip": {
"description": "5-digit US ZIP code, e.g. 04101",
"type": "string"
}
},
"required": [
"zip"
],
"type": "object"
},
"name": "politics_represent",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"level": {
"description": "Government level to disambiguate",
"enum": [
"federal",
"state",
"county",
"municipal",
"school"
],
"type": "string"
},
"name": {
"description": "Name to resolve (partial/with title/lowercase all OK)",
"type": "string"
},
"state": {
"description": "State abbreviation to disambiguate (e.g. TX)",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "politics_resolve",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"chamber": {
"description": "Legislative chamber",
"enum": [
"senate",
"house",
"council",
"board"
],
"type": "string"
},
"level": {
"description": "Government level",
"enum": [
"federal",
"state",
"county",
"municipal",
"school"
],
"type": "string"
},
"limit": {
"default": 50,
"description": "Max results (default 50)",
"type": "integer"
},
"name": {
"description": "Official name (partial match, e.g. \"Sanders\" or \"Alexandria\")",
"type": "string"
},
"office": {
"description": "Office title (e.g. Senator, Mayor, Governor, Town Clerk)",
"type": "string"
},
"offset": {
"default": 0,
"description": "Pagination offset",
"type": "integer"
},
"party": {
"description": "Party name (e.g. Democrat, Republican, Independent)",
"type": "string"
},
"state": {
"description": "State abbreviation (e.g. FL, NY, CA)",
"type": "string"
},
"status": {
"description": "Status (default: active + candidate)",
"enum": [
"active",
"candidate",
"former",
"defeated"
],
"type": "string"
}
},
"type": "object"
},
"name": "politics_search",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bioguide_id": {
"description": "Bioguide ID (e.g. L000571 for Lummis, S001184 for Tim Scott)",
"type": "string"
},
"chamber": {
"description": "Filter by chamber",
"enum": [
"house",
"senate"
],
"type": "string"
},
"date_from": {
"description": "Start date ISO (e.g. 2025-01-03)",
"type": "string"
},
"date_to": {
"description": "End date ISO",
"type": "string"
},
"limit": {
"default": 20,
"description": "Max results",
"type": "integer"
},
"official_id": {
"description": "Official ID from politics_search",
"type": "integer"
},
"text": {
"description": "Full-text search within speech content",
"type": "string"
},
"topic": {
"description": "Topic (Cryptocurrency, Healthcare, Immigration, etc.)",
"type": "string"
}
},
"type": "object"
},
"name": "politics_speeches",
"outputSchema": null
},
{
"description": "Search state legislature votes across 26+ US states. Filter by state, topic, or date. Returns bill title, vote result, yes/no counts.",
"inputSchema": {
"properties": {
"bill_id": {
"description": "Specific bill identifier (e.g. HB 1234)",
"type": "string"
},
"days": {
"default": 30,
"description": "Look back N days (default 30, max 365)",
"type": "integer"
},
"limit": {
"default": 30,
"description": "Max results (default 30, max 100)",
"type": "integer"
},
"state": {
"description": "Two-letter state code (CA, TX, NY, etc.)",
"type": "string"
},
"topic": {
"description": "Topic filter (Healthcare, Economy, Education, etc.)",
"type": "string"
}
},
"type": "object"
},
"name": "politics_state_votes",
"outputSchema": null
},
{
"description": "Get summary statistics for the politics.rootz.global database — total officials, breakdown by level, party, state, and chamber. Shows coverage completeness.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "politics_stats",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"id": {
"description": "Official ID",
"type": "integer"
},
"limit": {
"default": 100,
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "politics_timeline",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:64f5e5418a6e30e388fa646218d5edfa3580e37299b986b4d8dff898d818f24e | sha256sum