Projeto IA.med Licença Apache-2.0 100% local

radar-cfm-mcp

Servidor MCP para consultar as resoluções do CFM sobre inteligência artificial, telemedicina e prontuário eletrônico, a partir de modelos de linguagem que rodam na sua própria máquina.

Antes de usar, leia

  • Não é fonte oficial do CFM e não substitui a leitura da resolução original.
  • Não é aconselhamento jurídico nem ético-profissional.
  • Resoluções podem ser revogadas ou substituídas. O projeto sinaliza isso quando consegue identificar no texto, mas não garante a detecção.
  • Todo resultado traz o link da fonte original, que deve ser conferida.

O problema

Por que este projeto existe

Espalhado em PDFs, sem dado aberto

As resoluções do CFM sobre IA, telemedicina e prontuário eletrônico ficam no portal de normas do conselho, sem API nem dado aberto estruturado. Cruzar tema, vigência e número dá trabalho manual.

Saber o que está vigente exige leitura

Uma resolução pode ter sido revogada ou substituída por outra. Descobrir o que ainda vale hoje significa abrir e comparar documentos um a um.

Um agente local não alcança isso sozinho

Um modelo de linguagem rodando na sua máquina não consegue consultar o portal e filtrar por tema. Falta a camada que exponha essa busca como ferramenta.

Como funciona

Do portal do conselho ao agente, em quatro camadas

  1. 01

    Crawler

    Varre o portal de normas do CFM com intervalo entre requisições. Um mesmo PDF nunca é baixado duas vezes, e só é baixado quando a ementa casa com um tema.

  2. 02

    Extração

    Converte PDF e HTML em texto e metadados: número, ano, ementa, data e o sinal de vigência.

  3. 03

    Armazenamento

    Guarda tudo localmente em DuckDB, com busca textual (FTS/BM25) e queda para LIKE quando o índice não está disponível.

  4. 04

    Ferramentas MCP

    Expõe a consulta por tema e o monitoramento de novas resoluções como tools, que o modelo local chama.

Toda resposta inclui a ementa e o link do PDF oficial. Um trecho extraído é ponto de partida para a leitura, não uma citação normativa.

As ferramentas

Duas tools MCP expostas ao modelo

O modelo chama estas funções durante a conversa. Cada resultado sempre traz a URL de origem para conferência. Os retornos abaixo mostram o formato; os campos são os do projeto.

consultar_resolucao_cfm

Resoluções relacionadas ao tema, mais relevantes primeiro. Revogadas vêm com vigente: false e a que as substituiu.

consultar_resolucao_cfm(tema: str, apenas_vigentes: bool = True)
{
  "tema": "telemedicina",
  "total": 3,
  "resultados": [
    {
      "identificador": "2314/2022",
      "numero": "2314",
      "ano": "2022",
      "data_publicacao": "2022-05-05",
      "ementa": "Define e disciplina a telemedicina...",
      "trecho_relevante": "...exercida por médico inscrito no CRM...",
      "vigente": true,
      "revogada_por": null,
      "url_origem": "https://portal.cfm.org.br/buscar-normas-cfm-e-crm",
      "url_pdf": "https://sistemas.cfm.org.br/normas/arquivos/resolucoes/BR/2022/2314_2022.pdf",
      "texto_completo_disponivel": true
    }
  ],
  "aviso": "Confira a URL de origem antes de tratar um trecho como a posição do CFM."
}
Exemplo do formato de retorno

monitorar_novas_resolucoes

O que foi publicado na janela de dias, filtrado pelos temas configurados (IA, telemedicina, prontuário).

monitorar_novas_resolucoes(dias: int = 30, filtrar_tema: bool = True)
{
  "dias": 30,
  "total": 1,
  "resultados": [
    {
      "identificador": "2381/2024",
      "vigente": true,
      "revogada_por": null,
      "url_pdf": "https://sistemas.cfm.org.br/normas/arquivos/resolucoes/BR/2024/2381_2024.pdf"
    }
  ]
}
Exemplo do formato de retorno (campos abreviados)

Como rodar

Roda na sua máquina

Não é um serviço hospedado. Você clona o repositório, sincroniza a base a partir do portal do CFM e o servidor MCP roda ali, no seu computador.

# 1. clonar o repositório
git clone https://github.com/fabianofilho/radar-cfm-mcp.git
cd radar-cfm-mcp

# 2. instalar as dependências
uv sync

# 3. configurar o ambiente
cp .env.example .env

# 4. rodar o crawl inicial
uv run cfm-cli sync --max-paginas 3   # teste rápido
uv run cfm-cli sync                    # varredura completa (~8 min)

# 5. subir o servidor MCP (stdio) e conectar ao seu cliente
uv run radar-cfm-mcp
Confira os comandos e opções no README do projeto.

Tudo acontece localmente. O crawler respeita o portal (intervalo entre requisições, cache e download só quando o tema casa) e nenhum dado seu é enviado a terceiros por esta ferramenta.