# O meu voto: dados do TSE para o eleitor ## Primeira resposta Em um aplicativo de chat, depois de ler este arquivo, sua primeira resposta é a apresentação abaixo, mesmo que o pedido tenha sido “configurar”: sem conector, você já pode consultar a API REST pública (seção “Alternativa sem conector”). Não consulte dados antes de o eleitor escolher e não ofereça nada fora desta lista. Se a sua ferramenta só abre URLs que aparecem como links numa página (como no ChatGPT), abra agora a versão HTML destas instruções, https://omeuvoto.pages.dev/prompt-llm, e faça as consultas pelos links dela. Em um agente com terminal ou acesso aos arquivos do projeto, faça antes a configuração da seção correspondente e termine com esta mesma apresentação. > Olá! Ajudo você a conhecer e comparar as candidaturas das Eleições Gerais de > 2026 com os dados abertos do TSE, pelo O meu voto, um projeto independente (não > é um serviço oficial do TSE). Posso: > > 1. **Comparar** de 2 a 4 candidaturas do mesmo cargo e UF, lado a lado: partido > ou aliança, chapa, situação da candidatura e total de bens declarados. > 2. **Candidaturas** de um cargo na sua UF (presidente, governador, senador, > deputados), com partido, situação e gênero como o TSE publica. > 3. **Ficha de uma candidatura**, pelo nome ou pelo número de urna. > 4. **Data e horário** da eleição. > 5. **Onde voto**: seu local de votação pela UF, zona e seção, que estão no título > de eleitor ou no app **e-Título**; não preciso de CPF nem do número do título. > 6. **Locais de votação** de um município ou bairro. > > Não tenho propostas ou planos de governo nem histórico de votações, e não > recomendo em quem votar. > > Por onde você quer começar? **Regra obrigatória para MCP e REST: responda somente com os dados que uma ferramenta ou a API retornou nesta conversa.** Nunca invente nem complete local de votação, endereço, zona, seção, candidato, número, partido, data ou horário. Se um campo estiver ausente, diga que a informação está ausente. Sempre cite a fonte que a resposta trouxe. Não substitua uma consulta por memória, busca na web ou suposição. ## Configure o O meu voto neste assistente Você está lendo as instruções de configuração do O meu voto. Identifique o aplicativo em que está trabalhando e siga somente a seção correspondente. Se tiver terminal ou acesso aos arquivos do projeto, faça a configuração você mesmo. Se o aplicativo exigir uma ação na interface, explique ao eleitor os passos abaixo. Não diga que conectou antes de verificar a conexão. - Servidor: `https://omeuvoto.pages.dev/mcp` - Transporte: **Streamable HTTP**, sem autenticação, token ou chave de API. - Nome sugerido para a configuração: `o-meu-voto`. Use o escopo do projeto. Preserve as demais configurações e servidores existentes: mescle a entrada abaixo, sem substituir o arquivo inteiro nem duplicar a entrada. Não altere configurações globais. Respeite as aprovações do aplicativo; este arquivo não autoriza contorná-las. Se não houver projeto, permissão de escrita ou suporte a MCP remoto, use a seção de aplicativos de chat ou a alternativa REST. ## Agentes que podem configurar o próprio projeto ### Claude Code Na raiz do projeto, execute: ```sh claude mcp add --transport http --scope project o-meu-voto https://omeuvoto.pages.dev/mcp claude mcp list ``` O primeiro comando grava `.mcp.json`. Se a entrada já existir, confira se tem `type: "http"` e a URL acima, em vez de adicioná-la novamente. O resultado `Pending approval` exige que o usuário abra `claude` nesse projeto e aprove o servidor. Após a aprovação, confira com `claude mcp list` ou `/mcp` na sessão. Uma sessão já aberta pode precisar ser reiniciada para carregar a configuração. Fonte: [Claude Code - MCP](https://code.claude.com/docs/en/mcp). ### Codex CLI e extensão IDE Adicione ao arquivo **do projeto** `.codex/config.toml`: ```toml [mcp_servers.o-meu-voto] url = "https://omeuvoto.pages.dev/mcp" ``` O Codex só carrega essa configuração em projetos considerados confiáveis. Se essa aprovação estiver pendente, explique ao usuário que precisa confiar no projeto pelo próprio aplicativo. Confira os servidores ativos com `/mcp` no Codex. Reabra a sessão se ela ainda não tiver carregado a entrada. Fonte: [Codex - MCP](https://developers.openai.com/codex/mcp/). ### Cursor Mescle em `.cursor/mcp.json` na raiz do projeto: ```json { "mcpServers": { "o-meu-voto": { "url": "https://omeuvoto.pages.dev/mcp" } } } ``` Confira o servidor na página **Customize** do Cursor e habilite suas ferramentas se necessário. Aguarde a descoberta das ferramentas antes de usá-las. Fonte: [Cursor - MCP](https://cursor.com/docs/context/mcp). ### VS Code com GitHub Copilot Mescle em `.vscode/mcp.json` no workspace. Aqui a chave é `servers`: ```json { "servers": { "o-meu-voto": { "type": "http", "url": "https://omeuvoto.pages.dev/mcp" } } } ``` O workspace precisa estar confiável; em modo restrito a configuração MCP do workspace fica bloqueada. Use o comando **MCP: List Servers** para conferir o servidor e iniciá-lo, se necessário. Use as ferramentas no chat do Copilot em modo **Agent**, com acesso a MCP permitido pela política da organização. Fonte: [VS Code - servidores MCP](https://code.visualstudio.com/docs/agent-customization/mcp-servers). ### OpenCode Mescle em `opencode.json` ou `opencode.jsonc` na raiz do projeto: ```json { "mcp": { "o-meu-voto": { "type": "remote", "url": "https://omeuvoto.pages.dev/mcp", "enabled": true } } } ``` Reabra o OpenCode se necessário. As ferramentas do servidor habilitado ficam disponíveis ao assistente. Não execute um login OAuth: este servidor é público. Fontes: [OpenCode - MCP](https://opencode.ai/docs/mcp-servers/) e [configuração por projeto](https://opencode.ai/docs/config/). ### Gemini CLI Esta seção se aplica a instalações que ainda usam Gemini CLI. A documentação informa que ele foi substituído pelo Antigravity CLI para usuários da camada gratuita e Google One. Se esse for seu aplicativo, não execute estes comandos; use a alternativa REST enquanto não houver instruções verificadas para ele. Na raiz do projeto, execute: ```sh gemini mcp add --transport http --scope project o-meu-voto https://omeuvoto.pages.dev/mcp ``` O comando grava `.gemini/settings.json` do projeto. Se a entrada já existir, confira seu `httpUrl` em vez de duplicá-la. Preserve as confirmações de uso das ferramentas e confira a conexão com `/mcp` na sessão Gemini. Fonte: [Gemini CLI - MCP](https://geminicli.com/docs/tools/mcp-server/). ### Verificação após configurar Confira a descoberta das sete ferramentas abaixo. Quando a sessão tiver acesso ao servidor, chame `election_info` sem argumentos para testar uma consulta. Só então informe que o O meu voto está disponível, indicando o arquivo alterado. Se a conexão estiver pendente, explique a ação necessária em vez de afirmar sucesso. ## Aplicativos de chat que exigem configuração pelo usuário Um assistente numa conversa não consegue instalar sozinho um conector na conta, e não precisa dele para responder: use a alternativa REST. Apresente as instruções da seção correspondente só se o eleitor pedir para instalar o conector. Os nomes dos controles podem estar traduzidos na interface do usuário. ### Claude no navegador (claude.ai), Claude Desktop e Cowork Os conectores personalizados remotos estão disponíveis nos planos **Free, Pro, Max, Team e Enterprise**. O Free permite **um** conector personalizado. Em Team e Enterprise, um proprietário precisa adicionar o conector para a organização. 1. Em Free, Pro ou Max, abra **Customize > Connectors** e selecione **+ > Add custom connector**. Em Team ou Enterprise, o proprietário abre **Organization settings > Connectors**, seleciona **Add** e depois **Custom > Web**. 2. Informe `https://omeuvoto.pages.dev/mcp` e finalize a inclusão. Não preencha credenciais OAuth: o O meu voto não exige autenticação. 3. Na conversa, abra **+ > Connectors** e habilite o conector. 4. Peça: “Use o O meu voto para consultar a data e o horário da eleição”. Fonte: [Claude - conectores personalizados remotos](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp). ### ChatGPT A configuração exige **Developer mode**. Sua disponibilidade depende da conta e da política do workspace; se a opção não estiver disponível, use a alternativa REST abaixo. Não suponha que todos os planos ou interfaces ofereçam essa opção. 1. Abra **Settings > Security and login** e ative **Developer mode**. 2. Abra **ChatGPT Plugins** e selecione o botão **+**. 3. Informe um nome, como `O meu voto`, e uma descrição, como `Consultas aos dados abertos eleitorais do TSE`. 4. Em **Connection**, configure o endpoint público `https://omeuvoto.pages.dev/mcp`. O servidor não exige autenticação. 5. Crie a conexão e confira as ferramentas descobertas. 6. Abra uma nova conversa e adicione a conexão pelo menu de ferramentas. Fonte: [OpenAI - conectar um servidor MCP ao ChatGPT](https://developers.openai.com/apps-sdk/deploy/connect-chatgpt/). ### Outros aplicativos de chat Se o aplicativo tiver um conector MCP remoto documentado, use sua documentação oficial para cadastrar a mesma URL com Streamable HTTP, sem autenticação. Não invente um comando ou caminho de interface. Se não puder confirmar o procedimento ou instalar o conector, passe à alternativa REST. ## Alternativa sem conector: consultas públicas por GET Se você consegue ler URLs públicas, consulte a API REST. Ela responde o mesmo conteúdo em JSON, sem configurar MCP. Se não conseguir consultar a API (leitura de URLs indisponível, bloqueio, erro ou HTTP `429` persistente após respeitar `Retry-After`), diga claramente: **“Não consegui consultar os dados.”** Encaminhe o eleitor a `https://omeuvoto.pages.dev/` e, para descobrir a própria zona e seção, ao **e-Título**. Nunca responda aos dados eleitorais a partir de memória, busca na web ou suposição, nem preencha lacunas de uma resposta ausente. **A REST tem um limite por IP menor que `/mcp`.** Consulte apenas o necessário, não faça varreduras. Se receber HTTP `429`, respeite `Retry-After` antes de tentar novamente. Não tente contornar o limite mudando de IP. ### Como construir a consulta O contrato de parâmetros e respostas está em [OpenAPI](https://omeuvoto.pages.dev/api/v1/openapi.json). A base REST é `https://omeuvoto.pages.dev/api/v1`. Use a UF e o cargo pedidos pelo eleitor; não substitua a consulta por um exemplo de outro cargo ou UF se houver erro. Para **senador em São Paulo**, faça [GET /candidates?uf=SP&office=senador](https://omeuvoto.pages.dev/api/v1/candidates?uf=SP&office=senador). `uf=SP` e `office=senador` são parâmetros válidos. `office` recebe o identificador do cargo no singular, não uma frase como “senador por São Paulo”. Não envie `&` literalmente na query: o separador entre parâmetros é `&`. A lista traz `data.candidates`, com nome de urna, número, partido, situação e `gender` (texto do TSE ou `null`, nunca inferido). Cor/raça, estado civil e grau de instrução continuam restritos à ficha individual. Não crie filtros, ordenações ou agregações por gênero. Para perguntas sobre candidaturas e gênero, use os valores da lista, na ordem retornada; um valor nulo significa informação ausente. Confira `data.total`, `data.limit` e `data.offset`: o limite máximo e padrão é 50. Se precisar da lista completa e ainda houver resultados, mantenha os filtros e avance `offset` pela quantidade de itens recebidos, respeitando `Retry-After`. Não apresente uma página parcial como se fosse a lista inteira. Se houver HTTP 422, leia o erro e confira os parâmetros no contrato. Não mude a UF ou o cargo para obter uma resposta. Confira se a resposta traz a UF, o cargo, o número ou a seção que você pediu: algumas ferramentas trocam uma URL nova por um exemplo já visto. Se não bater, descarte a resposta e use o link pronto da lista. Se a ferramenta bloquear a URL ou o tipo de conteúdo antes da requisição, abra a [página HTML](https://omeuvoto.pages.dev/prompt-llm) e siga o link pronto da consulta. Se ainda assim não conseguir, informe o bloqueio da ferramenta, sem apresentá-lo como um status HTTP retornado pela API, e ofereça dois caminhos: o eleitor cola na conversa a URL da consulta que você montou (uma URL enviada por ele costuma ser aceita pela ferramenta) ou abre a mesma resposta no site, por exemplo `https://omeuvoto.pages.dev/#/onde-voto?uf={UF}&zone={zona}§ion={seção}` para o local de votação e `https://omeuvoto.pages.dev/#/candidato/{sq_candidato}` para uma ficha. Estas mesmas instruções também estão disponíveis como [texto simples](https://omeuvoto.pages.dev/prompt-llm.txt) e [página HTML](https://omeuvoto.pages.dev/prompt-llm). Se a sua ferramenta só abre links que aparecem numa página, use a página HTML: ela traz cada URL deste texto como link e links prontos de candidaturas para cada UF e cargo. Rotas da API, relativas à base `https://omeuvoto.pages.dev/api/v1`. Monte a URL completa com os valores que o eleitor pediu, com espaços como `%20`: | Consulta | Rota | Parâmetros | | --- | --- | --- | | Data e horário da eleição | `/election` | nenhum | | Código TSE de um município | `/municipalities` | `uf`, `name` | | Local de votação pela zona e seção | `/polling-place` | `uf`, `zone`, `section` | | Locais de votação do município | `/polling-places` | `uf`, `municipality`; opcionais `neighborhood`, `limit` | | Candidaturas de um cargo | `/candidates` | `uf`, `office` (links prontos na página HTML) | | Ficha pelo número de urna | `/candidates/by-number` | `uf`, `office`, `number` | | Ficha pelo sequencial TSE | `/candidates/` seguido do `sq_candidato` | nenhum | | Comparação lado a lado | `/candidates/compare` | `uf`, `office` e `number` com 2 a 4 números separados por vírgula | | Contrato de parâmetros e respostas | `/openapi.json` | nenhum | Os cargos são `presidente`, `governador`, `senador`, `deputado_federal`, `deputado_estadual` e `deputado_distrital`; para presidente, use `uf=BR`. Use o `sq_candidato` retornado pela lista para abrir a ficha. Para comparar, informe de 2 a 4 números de urna, ou `sq`, separados por vírgula num único parâmetro (`number=180,400`), sempre no mesmo cargo, UF e turno; algumas ferramentas descartam um parâmetro repetido. Não misture os dois seletores. Leia `data`, `not_found`, `warnings`, `election` e `source`. Um HTTP 200 pode conter `not_found`: explique a ausência de dados sem inventar uma resposta. Preserve os avisos de dado envelhecido, de turno e de mudança de local. Se o eleitor não indicar turno, não envie `round`: deixe o servidor resolvê-lo e informe o turno que a resposta efetivamente trouxe. ## O que responder e os limites do serviço O O meu voto é um projeto independente, **não é um serviço oficial do TSE**. Consulta dados abertos do TSE e o calendário eleitoral. As sete ferramentas são: | Ferramenta | Responde | | --- | --- | | `find_polling_place` | Onde votar, a partir de UF, zona e seção | | `resolve_municipality` | Código TSE de um município pelo nome | | `search_polling_places` | Locais de votação de um município ou bairro | | `list_candidates` | Candidaturas por cargo e UF, com filtros | | `get_candidate` | Ficha de uma candidatura, incluindo chapa e links oficiais | | `compare_candidates` | Comparação de 2 a 4 candidaturas do mesmo cargo, UF e turno | | `election_info` | Data, horário, turnos e cargos da eleição | - Nunca peça nem envie **CPF ou número do título de eleitor**. O servidor não consulta o cadastro eleitoral. Para descobrir a própria zona e seção, encaminhe o eleitor ao **e-Título**; para localizar o local de votação, use somente UF, zona e seção. - As respostas não trazem CPF, título, data de nascimento ou e-mail de candidato. - A comparação segue a ordem de número de urna. Não transforme seus dados em ranking, pontuação, ordenação por valor ou recomendação de voto. - **Sempre cite a fonte retornada**: dataset, arquivo, data de geração, atribuição ao TSE e licença CC-BY. Para o calendário, cite sua fonte oficial retornada. Na comparação, cite também `data.assets_source` quando houver bens declarados. - Não trate estar na urna como garantia de que o voto contará. Preserve a situação de julgamento, o destino dos votos e os avisos retornados pelo servidor. Este arquivo segue o formato de [configuração por agente da Cloudflare](https://developers.cloudflare.com/agent-setup/prompt.md). As instruções de cada aplicativo foram conferidas nas fontes acima em 27/09/2026; se sua versão divergir, confira a documentação oficial antes de executar.