senado-br-mcp 3.21.0 → 3.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -114,16 +114,16 @@ const consultasSchema = {
114
114
  sourceEndpoint: EP_CONSULTAS_DETALHE,
115
115
  sourceField: "página de detalhe: <b>Autoria:</b> <span>…</span>",
116
116
  operationalization: "Lido da página de detalhe (visualizacaomateria) no crawl enriquecido; null quando o detalhe não expõe. Nome MANTIDO (informação pública por função — ver postura de privacidade).",
117
- caveat: "Detail-only (v2): populado pelo crawl de detalhe; null nas linhas ainda não enriquecidas.",
117
+ caveat: "Detail-only (v2): populado pelo crawl de detalhe; null nas linhas ainda não enriquecidas. Até a 3.21.0 o crawl só preencheu as ~3,4 mil consultas do primeiro lote: as demais ficaram null com a autoria publicada na página e são relidas desde então, até o teto por execução.",
118
118
  },
119
119
  {
120
120
  name: "relator",
121
121
  type: "string",
122
- description: "Relator(a) da matéria (agente público).",
122
+ description: "Relator(a) da matéria (agente público). Sempre null: a página da consulta não publica relatoria.",
123
123
  sourceEndpoint: EP_CONSULTAS_DETALHE,
124
- sourceField: "página de detalhe: <b>Relator(a):</b> <span>…</span>",
125
- operationalization: "Lido da página de detalhe (visualizacaomateria); null quando não há relatoria ou o detalhe não a expõe. Nome MANTIDO (público por função).",
126
- caveat: "Detail-only (v2): populado pelo crawl de detalhe; null nas linhas ainda não enriquecidas.",
124
+ sourceField: "página de detalhe: <b>Relator(a):</b> <span>…</span> (rótulo que a página não traz)",
125
+ operationalization: "O leitor procura o rótulo Relator(a) na página de detalhe (visualizacaomateria), mas a página publica só Autoria e Ementa: 0 de 8.145 consultas e 0 de 40.548 versões do histórico tiveram valor, e 42 páginas reais de anos e situações diferentes (medição de 18/10/2026) não traziam o rótulo. O relator da matéria está na API legislativa (/processo/relatoria), fora deste corpus.",
126
+ caveat: "Campo mantido por compatibilidade do formato; não use como dado. Vazio não significa matéria sem relator.",
127
127
  },
128
128
  {
129
129
  name: "status",
@@ -239,7 +239,7 @@ export function registerECidadaniaTools(server, _baseUrl, env, ctx) {
239
239
  }
240
240
  });
241
241
  // G2. senado_ecidadania_obter_consulta
242
- server.tool("senado_ecidadania_obter_consulta", "Obtém o detalhe de uma consulta pública específica do e-Cidadania. Retorna um objeto com `id`, `materia`, `ementa`, `votosSim`/`votosNao`/`totalVotos`, `percentualSim`/`percentualNao`, `status`, `autor`, `relator`, `url`. O portal não publica o período da consulta: `dataAbertura`/`dataEncerramento` (e `comissao`/`linkMateria`) vêm sempre `null` — a consulta abre quando a matéria entra em tramitação e encerra quando sai, refletido em `status`. O campo `comentarios` vem `null`: a página de consulta não possui recurso de comentários. Obtenha o `id` antes via `senado_ecidadania_listar_consultas` ou `senado_ecidadania_consultas_analise`.", { id: z.number().int().positive().describe("ID da consulta pública") }, async (params) => {
242
+ server.tool("senado_ecidadania_obter_consulta", "Obtém o detalhe de uma consulta pública específica do e-Cidadania. Retorna um objeto com `id`, `materia`, `ementa`, `votosSim`/`votosNao`/`totalVotos`, `percentualSim`/`percentualNao`, `status`, `autor`, `relator`, `url`. O portal não publica o período da consulta: `dataAbertura`/`dataEncerramento` (e `comissao`/`linkMateria`) vêm sempre `null` — a consulta abre quando a matéria entra em tramitação e encerra quando sai, refletido em `status`. O campo `comentarios` vem `null`: a página de consulta não possui recurso de comentários. O campo `relator` vem `null`: a página da consulta publica só autoria e ementa, não a relatoria — o relator da matéria sai de `senado_obter_materia` com o mesmo número (`codigoMateria` = `id`). Obtenha o `id` antes via `senado_ecidadania_listar_consultas` ou `senado_ecidadania_consultas_analise`.", { id: z.number().int().positive().describe("ID da consulta pública") }, async (params) => {
243
243
  try {
244
244
  const { value: r, fetchedAt } = await cachedFetchWithMeta("ecidadania_consulta", { id: params.id }, CACHE_ON_DEMAND, () => obterConsultaInternal(params.id));
245
245
  writeDetalheThrough(db, ctx, "consultas", params.id, r);
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the server version (kept in sync with package.json). */
2
- export const VERSION = "3.21.0";
2
+ export const VERSION = "3.21.1";
3
3
  export const USER_AGENT = `senado-br-mcp/${VERSION} (+https://senado.sidneybissoli.com; sbissoli76@gmail.com)`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "senado-br-mcp",
3
- "version": "3.21.0",
3
+ "version": "3.21.1",
4
4
  "description": "MCP server for Brazilian Senate open data — runs hosted on Cloudflare Workers or locally via npx (stdio)",
5
5
  "keywords": [
6
6
  "mcp",