{"server":"electionsmcp","transport":"Streamable HTTP — POST JSON-RPC to this URL; responses are JSON (no SSE).","endpoint":"https://beta.electionsmcp.com/mcp","protocol_versions":["2026-07-28","2025-06-18","2024-11-05"],"protocol":{"modern":{"versions":["2026-07-28"],"how":"No handshake. Every POST carries its own protocol version and capabilities in `params._meta`, and the server holds no session between requests. Required on EVERY request: `_meta[\"io.modelcontextprotocol/protocolVersion\"]` and `_meta[\"io.modelcontextprotocol/clientCapabilities\"]` (an empty object is valid); `_meta[\"io.modelcontextprotocol/clientInfo\"]` is recommended. Mirror the version into the `MCP-Protocol-Version` header and the method into `Mcp-Method` (plus `Mcp-Name` for tools/call) — the server validates header against body and answers -32020 on a mismatch. Results carry `resultType` and `_meta[\"io.modelcontextprotocol/serverInfo\"]`.","discover":"POST server/discover for supportedVersions + capabilities in one call. Optional — you may invoke any method inline and handle -32022 (UnsupportedProtocolVersion) if the version is not served."},"legacy":{"versions":["2025-06-18","2024-11-05"],"how":"The handshake era: POST initialize first, then tools/list → tools/call. Still fully supported and unchanged — send no `_meta` protocol fields and the server serves you exactly as before. Requests whose `MCP-Protocol-Version` header names one of these versions, and requests with no header at all, are served this way."}},"auth":"Optional. Send your key as `Authorization: Bearer <key>` OR `x-electionsmcp-key: <key>` for the durable (save) tier; without a key you get a read/simulate sandbox. A bad key never blocks — it just stays in the sandbox.","product":"Build user-controlled election scenarios at the finest supported local grain, compare candidates, and coordinate campaign work through MCP.","baseline":{"baseline_id":"2024_president_mixed_grain","year":2024,"office":"president","grain":"mixed","provenance_version":"2024-president-mixed-grain-v1","description":"The canonical mixed-grain 2024 presidential baseline uses verified precinct or reporting-unit results where supported, with declared county/state fallbacks elsewhere.","disclosure":"Results are approximate. Precinct and county totals may vary because of source coverage, reporting, and geographic differences."},"tool_profiles":"tools/list is an authority boundary: keyless sessions get the CORE modeling loop; authenticated sessions get WORKBENCH (modeling + campaign operations, people, tasks, War Room, approved files/outputs). `x-electionsmcp-tools: core` may slim an authenticated session; legacy `full` resolves to the caller's normal profile.","connect":{"streamable_http_clients":"Point the client at this URL (e.g. claude.ai connectors, recent MCP SDK). It will POST initialize → tools/list → tools/call.","url_plus_headers_config":{"mcpServers":{"electionsmcp":{"url":"https://beta.electionsmcp.com/mcp","headers":{"x-electionsmcp-key":"YOUR_KEY"}}}},"stdio_clients_eg_claude_desktop":{"mcpServers":{"electionsmcp":{"command":"npx","args":["-y","mcp-remote","https://beta.electionsmcp.com/mcp","--header","x-electionsmcp-key:YOUR_KEY"]}}},"legacy_sse_clients":"If your client uses the older HTTP+SSE transport: connect to https://beta.electionsmcp.com/sse (it advertises the POST /messages endpoint).","quick_test_curl":"curl -sX POST https://beta.electionsmcp.com/mcp -H 'content-type: application/json' -H 'authorization: Bearer YOUR_KEY' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'"},"quickstarts":[{"goal":"Build a presidential scenario","steps":["create_simulation","set_cycle(2028) + set_mode(\"general\")","set_candidates(level:\"president\")","set_performance / set_turnout — your assumptions","get_tally(\"president\") — the Electoral College result","list_scenario_versions / diff_versions — compare versions","share_simulation — a public read-only scenario link"]},{"goal":"Model a presidential primary","steps":["create_simulation","set_mode(\"dem_primary_2028\" or \"rep_primary_2028\")","set_primary_candidates — define the prospective field","set_primary_shares — model states","roll_up_primary — calculate delegates","set_compare_paths — compare candidate paths"]},{"goal":"Explore a scenario by geography","steps":["bind_session({page_url}) when a model is already open","get_view — read the exact scenario and selection","get_shapes(layer:\"actuals:pres_2024\") — load supported geography","aggregate_precincts(simulation_id) — scenario-scoped local rollup with provenance","render_view — create a map from the same scenario version"]},{"goal":"Coordinate campaign work","steps":["create_campaign — establish the campaign context","list_people — find collaborators","add_map_comment — discuss the selected geography","assign_task — turn the selection or conversation into work","membership_summary — read concise leadership status"]},{"goal":"Share a modeled result","steps":["read the exact scenario version with get_scenario","share_simulation — mint a public read-only scenario link","authenticate when you need generate_report — create a durable report pinned to that version"]}],"feedback":"Use the in-app Feedback panel for product feedback and support.","next":"Once connected, call the `help` tool for the profile-aware modeling and operations workflow."}