senado_agenda_comissoes
Get the agenda of Brazilian Senate committee meetings. Filter by date or specific committee to find scheduled hearings and sessions.
Instructions
Obtém agenda de reuniões das comissões do Senado. Pode filtrar por data e comissão específica.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Data específica (YYYYMMDD) | |
| siglaComissao | No | Filtrar por comissão específica |
Implementation Reference
- src/tools/agenda.ts:127-194 (handler)The tool handler for 'senado_agenda_comissoes' — receives params (data, siglaComissao), parses with AgendaComissoesInput, calls AGENDA endpoint, processes reunioes, optionally filters by comissão, and returns formatted response.
// senado_agenda_comissoes server.tool( 'senado_agenda_comissoes', 'Obtém agenda de reuniões das comissões do Senado. Pode filtrar por data e comissão específica.', { data: z.string().regex(/^\d{8}$/).optional().describe('Data específica (YYYYMMDD)'), siglaComissao: z.string().min(2).optional().describe('Filtrar por comissão específica') }, async (params) => { try { const input = AgendaComissoesInput.parse(params); logger.info({ input }, 'Getting agenda comissoes'); // Use provided date or today const data = input.data || formatDateYYYYMMDD(new Date()); const endpoint = ENDPOINTS.AGENDA(data); const response = await apiRequest<any>(endpoint); let reunioes: any[] = []; if (response.Agenda?.Reunioes?.Reuniao) { reunioes = response.Agenda.Reunioes.Reuniao; } else if (response.AgendaComissoes?.Reunioes?.Reuniao) { reunioes = response.AgendaComissoes.Reunioes.Reuniao; } else if (response.Reunioes?.Reuniao) { reunioes = response.Reunioes.Reuniao; } if (!Array.isArray(reunioes)) { reunioes = reunioes ? [reunioes] : []; } let reunioesFormatadas = reunioes.map(parseReuniaoAgendada); // Filter by comissao if specified if (input.siglaComissao) { const siglaUpper = input.siglaComissao.toUpperCase(); reunioesFormatadas = reunioesFormatadas.filter(r => r.comissao.sigla.toUpperCase() === siglaUpper ); } const result = createSuccessResponse( { data, siglaComissao: input.siglaComissao || null, count: reunioesFormatadas.length, reunioes: reunioesFormatadas }, endpoint ); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { logger.error({ error }, 'Error getting agenda comissoes'); const errorResult = createErrorResponse( 'ERRO_AGENDA_COMISSOES', error instanceof Error ? error.message : 'Erro ao obter agenda das comissões', 'Verifique se a data está no formato correto (YYYYMMDD)' ); return { content: [{ type: 'text', text: JSON.stringify(errorResult, null, 2) }] }; } } ); - src/schemas/agenda.ts:21-32 (schema)Input schema (Zod) for AgendaComissoesInput: validates optional 'data' (YYYYMMDD regex) and optional 'siglaComissao' (min 2 chars, uppercased).
export const AgendaComissoesInput = z.object({ data: z.string() .regex(/^\d{8}$/, 'Formato deve ser YYYYMMDD') .optional() .describe('Data específica (YYYYMMDD)'), siglaComissao: z.string() .min(2) .toUpperCase() .optional() .describe('Filtrar por comissão específica') }); - src/tools/agenda.ts:65-65 (registration)The function registerAgendaTools(server: McpServer) that registers all agenda tools (including senado_agenda_comissoes) on the MCP server.
export function registerAgendaTools(server: McpServer) { - src/server.ts:30-30 (registration)Invocation of registerAgendaTools(server) in the Express-based server entry point, which registers the tool on the MCP server.
registerAgendaTools(server); - src/tools/agenda.ts:48-63 (helper)Helper function parseReuniaoAgendada that maps raw API response data to the ReuniaoAgendadaType (used by the handler to format each reunião).
function parseReuniaoAgendada(reuniao: any): ReuniaoAgendadaType { const comissaoData = reuniao.Comissao || reuniao.IdentificacaoComissao || {}; return { codigo: parseInt(reuniao.CodigoReuniao || reuniao.Codigo || '0'), comissao: { sigla: comissaoData.SiglaComissao || comissaoData.Sigla || '', nome: comissaoData.NomeComissao || comissaoData.Nome || '' }, data: reuniao.DataReuniao || reuniao.Data || '', hora: reuniao.HoraReuniao || reuniao.Hora || null, local: reuniao.LocalReuniao || reuniao.Local || null, tipo: reuniao.TipoReuniao?.DescricaoTipoReuniao || reuniao.Tipo || null, situacao: reuniao.SituacaoReuniao?.DescricaoSituacaoReuniao || reuniao.Situacao || null }; }