Mcp Seipro — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Seipro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP Server do [SEI Pro](https://sei-pro.github.io/sei-pro/) para o SEI (Sistema Eletrônico de Informações) via API REST mod-wssei v2 + scraper do frontend web (modo híbrido).
116 tools para gerenciar processos, documentos, tramitação, assinatura, blocos, marcadores, acompanhamento, credenciamento, modelos e mais em qualquer instância do SEI. Cobertura completa da API mod-wssei v2 oficial (pengovbr/mod-wssei) mais um scraper HTTP do frontend web que dá ganhos de até 23× em operações de listagem (sei_listar_processos cai de ~14 s para ~600 ms warm).
Baixe o arquivo seipro.mcpb e abra com duplo-clique. O Claude Desktop instala automaticamente e pede suas credenciais.
pip install mcp-seiprogit clone https://github.com/sei-pro/mcp-seipro.git
cd mcp-seipro
python3 setup_claude.pyO script pergunta suas credenciais, instala o pacote e configura o Claude Desktop automaticamente.
| Variável | Obrigatória | Descrição |
|---|---|---|
SEI_URL | Sim | URL base da API mod-wssei v2 |
SEI_USUARIO | Sim | Usuário para autenticação |
SEI_SENHA | Sim | Senha para autenticação |
SEI_ORGAO | Sim | Código do órgão |
SEI_CONTEXTO | Não | Contexto opcional |
SEI_VERIFY_SSL | Não | true (padrão) ou false |
SEI_OCR_LANG | Não | Idioma do OCR (padrão: por) |
SEI_PERMITIR_RESTRITOS | Não | false (padrão) ou true. Ver "Privacidade e dados restritos" |
Dica: como obter `SEI_URL` e `SEI_ORGAO` direto pelo SEI
>
Na barra lateral do SEI (menu à esquerda), role até o final — você verá um QR Code para o aplicativo móvel. Esse QR Code contém um link com todas as informações necessárias:
>
`` https://sei.orgao.gov.br/sei/modulos/wssei/controlador_ws.php/api/v2;siglaorgao: ORGAO;orgao: 0;contexto: ``>
- `SEI_URL` — a URL antes do;(ex:https://sei.orgao.gov.br/sei/modulos/wssei/controlador_ws.php/api/v2) - `SEI_ORGAO` — o valor apósorgao:(ex:0)
>
Você pode escanear o QR Code com a câmera do celular para copiar o link, ou simplesmente anotar os dados a partir do menu.
Adicione ao .mcp.json do projeto ou ~/.claude.json (global):
{
"mcpServers": {
"seipro": {
"command": "mcp-seipro",
"env": {
"SEI_URL": "https://sei.orgao.gov.br/sei/modulos/wssei/controlador_ws.php/api/v2",
"SEI_USUARIO": "seu.usuario",
"SEI_SENHA": "sua-senha",
"SEI_ORGAO": "0"
}
}
}
}Edite ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"seipro": {
"command": "mcp-seipro",
"env": {
"SEI_URL": "https://sei.orgao.gov.br/sei/modulos/wssei/controlador_ws.php/api/v2",
"SEI_USUARIO": "seu.usuario",
"SEI_SENHA": "sua-senha",
"SEI_ORGAO": "0"
}
}
}
}Com o MCP SEI Pro configurado, basta conversar com o Claude em linguagem natural:
| Tool | Descrição |
|---|---|
sei_versao | Retorna versão do SEI e do mod-wssei instalado |
sei_listar_orgaos | Lista órgãos da instalação do SEI |
sei_listar_contextos | Lista contextos disponíveis para um órgão |
| Tool | Descrição |
|---|---|
sei_listar_unidades | Lista unidades acessíveis pelo usuário |
sei_trocar_unidade | Troca a unidade ativa |
sei_pesquisar_unidades | Pesquisa unidades por nome/sigla |
sei_pesquisar_outras_unidades | Pesquisa unidades excluindo a atual |
sei_pesquisar_textos_padrao | Pesquisa textos padrão internos da unidade |
sei_listar_usuarios | Lista usuários (filtra por unidade ativa e nome) |
sei_pesquisar_usuarios | Busca usuários por palavra-chave no órgão |
| Tool | Descrição |
|---|---|
sei_listar_processos | Lista caixa da unidade via scraper web (~23× mais rápido que REST). Suporta apenas_meus, tipo, filtro |
sei_pesquisar_processos | Pesquisa por texto, descrição, datas, unidade geradora, assunto ou grupo de acompanhamento |
sei_consultar_processo | Híbrido: REST (especificacao, assuntos, interessados, observacoes) + Web (lista de documentos da árvore) em paralelo |
sei_resumo_processos | Resumo agrupado por 17 campos (usa REST direto para flags estruturadas) |
sei_listar_unidades_processo | Lista unidades onde o processo está aberto |
sei_consultar_atribuicao | Consulta quem é responsável pelo processo |
sei_verificar_acesso | Verifica se o usuário tem acesso ao processo |
sei_listar_relacionamentos | Lista processos relacionados (mod-wssei 3.0.2+) |
sei_listar_atividades | Histórico de atividades/andamentos via scraper web (~2× mais rápido) |
sei_listar_interessados | Lista interessados do processo |
sei_listar_sobrestamentos | Lista histórico de sobrestamentos |
| Tool | Descrição |
|---|---|
sei_criar_processo | Cria novo processo (público ou restrito) |
sei_alterar_processo | Altera metadados (nível de acesso, especificação) |
sei_enviar_processo | Tramita para outra(s) unidade(s) — aceita sigla |
sei_concluir_processo | Conclui na unidade atual |
sei_reabrir_processo | Reabre processo concluído |
sei_receber_processo | Confirma recebimento na unidade |
sei_atribuir_processo | Atribui a um usuário (aceita nome) |
sei_remover_atribuicao | Remove atribuição de processo |
sei_marcar_nao_lido | Marca processo como não lido na unidade |
sei_sobrestar_processo | Sobresta processo (motivo obrigatório) |
sei_remover_sobrestamento | Remove sobrestamento |
sei_pesquisar_tipos_processo | Pesquisa tipos de processo |
sei_pesquisar_hipoteses_legais | Pesquisa hipóteses legais (restrito/sigiloso) |
| Tool | Descrição |
|---|---|
sei_pesquisar_assuntos | Pesquisa assuntos disponíveis |
sei_sugestao_assuntos_processo | Sugestões de assunto para um tipo de processo |
| Tool | Descrição |
|---|---|
sei_listar_credenciamentos | Lista credenciamentos de acesso ao processo |
sei_conceder_credenciamento | Concede acesso a um usuário |
sei_renunciar_credenciamento | Renuncia ao próprio acesso |
sei_cassar_credenciamento | Revoga acesso de um usuário |
| Tool | Descrição |
|---|---|
sei_arvore_processo | Árvore completa via scraper web (~10× mais rápido que REST). Aceita protocolo formatado |
sei_buscar_documento | Busca documento pelo número SEI (via Solr) |
sei_listar_documentos | Lista documentos via scraper web (~10× mais rápido). Aceita protocolo formatado |
sei_ler_documento | Lê documento (HTML ou PDF/OCR) em Markdown |
sei_baixar_anexo | Baixa documento externo em base64 (max 10MB) |
sei_consultar_documento_externo | Consulta metadados de documento externo |
sei_listar_assinaturas | Lista assinaturas de um documento |
sei_listar_blocos_documento | Lista blocos de assinatura do documento |
| Tool | Descrição |
|---|---|
sei_criar_documento | Cria documento interno vazio |
sei_criar_documento_externo | Cria documento externo com upload de arquivo |
sei_alterar_documento_interno | Altera metadados de documento interno |
sei_alterar_documento_externo | Altera metadados/arquivo de documento externo |
sei_listar_secoes | Lista seções editáveis de um documento |
sei_editar_secao | Altera conteúdo HTML (preenche somenteLeitura auto) |
sei_assinar_documento | Assinatura eletrônica |
sei_cancelar_assinatura | Tenta cancelar assinatura via edição |
sei_gerar_referencia | Gera hiperlink dinâmico para documento citado |
sei_estilos | Consulta dicionário de 39 estilos CSS do SEI |
| Tool | Descrição |
|---|---|
sei_pesquisar_tipos_documento | Pesquisa tipos de documento (séries) |
sei_pesquisar_tipos_documento_externo | Tipos aplicáveis a documentos externos |
sei_pesquisar_tipos_conferencia | Tipos de conferência (cópia, original, autenticada) |
sei_sugestao_assuntos_documento | Sugestões de assunto para um tipo de documento |
sei_listar_grupos_modelos | Lista grupos de modelos de documento |
sei_listar_modelos | Lista modelos de documento disponíveis |
sei_parametros_upload | Extensões/tamanhos permitidos para upload |
| Tool | Descrição |
|---|---|
sei_listar_assinantes | Lista cargos/funções para assinatura |
sei_listar_orgaos_assinante | Lista órgãos disponíveis para assinatura |
| Tool | Descrição |
|---|---|
sei_dar_ciencia | Dá ciência em documento ou processo |
sei_listar_ciencias | Lista ciências registradas |
sei_registrar_andamento | Registra andamento/atividade no processo |
| Tool | Descrição |
|---|---|
sei_criar_anotacao | Cria anotação (post-it) individual no processo |
sei_criar_observacao | Cria observação da unidade no processo |
| Tool | Descrição |
|---|---|
sei_pesquisar_contatos | Pesquisa contatos cadastrados |
sei_criar_contato | Cria novo contato |
| Tool | Descrição |
|---|---|
sei_criar_marcador | Cria marcador (lista cores se omitida) |
sei_excluir_marcador | Exclui marcador(es) |
sei_desativar_marcador | Desativa marcador(es) sem excluir |
sei_reativar_marcador | Reativa marcador(es) desativados |
sei_marcar_processo | Adiciona marcador a um processo |
sei_pesquisar_marcadores | Lista marcadores disponíveis |
sei_consultar_marcador_processo | Consulta marcadores ativos de um processo |
sei_historico_marcador_processo | Histórico de marcadores do processo |
| Tool | Descrição |
|---|---|
sei_acompanhar_processo | Adiciona acompanhamento especial |
sei_alterar_acompanhamento | Altera acompanhamento existente |
sei_remover_acompanhamento | Remove acompanhamento |
sei_listar_meus_acompanhamentos | Lista processos acompanhados pelo usuário |
sei_listar_acompanhamentos_unidade | Lista acompanhamentos da unidade |
sei_listar_grupos_acompanhamento | Lista grupos de acompanhamento |
sei_criar_grupo_acompanhamento | Cria grupo de acompanhamento |
sei_excluir_grupo_acompanhamento | Exclui grupo de acompanhamento |
| Tool | Descrição |
|---|---|
sei_criar_bloco_interno | Cria bloco interno |
sei_alterar_bloco_interno | Altera descrição do bloco |
sei_excluir_bloco_interno | Exclui bloco(s) |
sei_concluir_bloco_interno | Conclui bloco(s) |
sei_reabrir_bloco_interno | Reabre bloco concluído |
sei_incluir_processo_bloco_interno | Inclui processo(s) no bloco |
sei_retirar_processo_bloco_interno | Remove processo(s) do bloco |
sei_listar_processos_bloco_interno | Lista processos do bloco |
sei_anotar_processo_bloco_interno | Cria anotação em processo do bloco |
sei_alterar_anotacao_bloco_interno | Altera anotação do bloco |
| Tool | Descrição |
|---|---|
sei_criar_bloco_assinatura | Cria bloco (aceita sigla de unidades) |
sei_alterar_bloco_assinatura | Altera descrição do bloco |
sei_excluir_bloco_assinatura | Exclui bloco(s) |
sei_concluir_bloco_assinatura | Conclui bloco(s) |
sei_reabrir_bloco_assinatura | Reabre bloco concluído |
sei_retornar_bloco_assinatura | Retorna bloco para unidade de origem |
sei_incluir_documento_bloco_assinatura | Inclui documento(s) no bloco |
sei_retirar_documentos_bloco_assinatura | Remove documento(s) do bloco |
sei_listar_documentos_bloco_assinatura | Lista documentos do bloco |
sei_disponibilizar_bloco_assinatura | Disponibiliza bloco para assinatura |
sei_cancelar_disponibilizacao_bloco | Cancela disponibilização |
sei_pesquisar_blocos_assinatura | Pesquisa blocos existentes |
sei_assinar_bloco | Assina todos os documentos de um bloco |
sei_assinar_documentos_bloco | Assina documentos específicos de um bloco |
sei_anotar_documento_bloco_assinatura | Cria anotação em documento do bloco |
sei_alterar_anotacao_bloco_assinatura | Altera anotação do bloco |
Todos os 116 endpoints funcionam desde o mod-wssei 2.0.0 (SEI 4.0.x), exceto um:
| Tool | Versão mínima |
|---|---|
sei_listar_relacionamentos | mod-wssei 3.0.2+ (SEI 5.0.x) |
Tabela de compatibilidade SEI ↔ mod-wssei:
| Versão SEI | mod-wssei | Observações |
|---|---|---|
| 4.0.x | 2.0.x | Base completa (131 rotas) |
| 4.1.1 | 2.2.0 | Correções de bugs |
| 5.0.x | 3.0.1 | Compatibilidade PHP 8.2 |
| 5.0.x | 3.0.2 | +relacionamentos, +dataHora em assinaturas |
Se algum endpoint falhar com erro inesperado, use sei_versao para verificar a versão do mod-wssei instalada na sua instância do SEI.
Nota: a API mod-wssei v2 não expõe endpoint para cancelar assinatura de documentos em nenhuma versão (verificado até v3.0.2). A função existe no core do SEI (DocumentoRN::cancelarAssinaturaInternoControlado) mas não está exposta via REST. Osei_cancelar_assinaturausa o workaround de forçar uma edição mínima no documento.
A maioria das tools usa a REST mod-wssei v2 (estável, oficial, disponível desde SEI 4.0.x). Mas duas operações críticas para latência ganham com um caminho alternativo via scraping HTTP do frontend web do SEI:
| Tool | Estratégia | Ganho medido |
|---|---|---|
sei_listar_processos | Scraper web puro (procedimento_controlar.php em modo Detalhada) | ~14.7 s → ~625 ms (23×) |
sei_consultar_processo | Híbrido: REST /processo/consultar/{id} + scraper arvore_montar.php em paralelo | combina dados complementares |
sei_arvore_processo | Scraper web (arvore_montar.php) | ~12 s → ~1.1 s (10×) |
sei_listar_documentos | Scraper web (arvore_montar.php) | ~9.7 s → ~1.1 s (10×) |
sei_listar_atividades | Scraper web (procedimento_consultar_historico.php) | ~2.5 s → ~1.2 s (2×) |
pesquisar_tipos_processo | Cache in-memory TTL 1h | ~4.2 s → instant |
listar_unidades_usuario | Cache in-memory TTL 1h | ~3.0 s → instant |
pesquisar_marcadores | Cache in-memory TTL 1h | ~2.6 s → instant |
O scraper:
infra_hash capturado da cadeia de redirects pós-login (válido enquanto a sessão SIP viver).procedimento_controlar para POSTs subsequentes.Infra v1.5x+ (a maioria das instalações modernas).A REST mod-wssei continua sendo o caminho padrão para todas as outras operações e o fallback se o scraper falhar (ex: CAPTCHA após muitas tentativas, 2FA habilitado, mudança de layout no SEI). O método REST de listar_processos permanece disponível em SEIClient.listar_processos — não exposto como tool MCP, mas usado internamente pelo sei_resumo_processos (que precisa dos flags estruturados de status).
| Parâmetro | Aceita | Exemplo |
|---|---|---|
| Documento | Número SEI ou id interno | sei_ler_documento("2843449") |
| Processo | Protocolo ou IdProcedimento | sei_criar_anotacao(processo="50300.018905/2018-67") |
| Unidade | Sigla ou ID | sei_enviar_processo(unidades_destino="SFC") |
| Usuário | Nome ou ID | sei_atribuir_processo(usuario="Karina") |
Despachos: Paragrafo_Numerado_Nivel1 (corpo), âncora SEI no destinatário
Notas Técnicas: Item_Nivel1/2/3/4 (H1/H2/H3/H4), Item_Alinea_Letra (a, b, c), Item_Inciso_Romano (I, II, III)
Regra: toda numeração usa classes CSS, nunca texto manual.
O SEI classifica processos e documentos em três níveis: público (nivelAcesso=0), restrito (1) e sigiloso (2). O MCP usa as credenciais do usuário, então acessa o que o usuário enxergaria no SEI — incluindo restritos. Sigilosos exigem credenciamento prévio no próprio SEI.
Como conteúdo restrito pode trafegar para um provedor LLM (que talvez logue, retenha ou treine modelos com ele), o MCP impõe um gate de consentimento nas duas tools que entregam conteúdo bruto:
sei_ler_documento — markdown/texto/HTML do documentosei_baixar_anexo — base64 do arquivoComportamento padrão (mais seguro): se o documento tem nivelAcesso 1 ou 2 e a chamada não trouxe confirmar_acesso_restrito=true, o MCP responde com um JSON estruturado em pt-BR (consentimento_necessario=true, lista de riscos[] cobrindo LGPD/LAI/treinamento de modelos/sigilo funcional, e como_liberar). O conteúdo bruto não é entregue.
Existem duas formas de liberar:
| Forma | Escopo | Quando usar |
|---|---|---|
confirmar_acesso_restrito=true na chamada | Per-call | Decisão pontual do usuário ao usar o LLM |
SEI_PERMITIR_RESTRITOS=true (env var) | Servidor inteiro | Operador do MCP libera previamente |
Em ambos os casos, o conteúdo entregue vem com um disclaimer prefixado lembrando o nível de acesso, a hipótese legal e os riscos.
As demais tools (sei_consultar_processo, sei_consultar_documento_externo, etc.) não bloqueiam metadados — apenas anexam um campo _aviso_acesso quando detectam restrição, para o LLM repassar a informação ao usuário.
O gate trata restrito e sigiloso de forma idêntica. Sigiloso já tem proteção adicional do SEI (credenciamento). Se quiser regras diferentes, abra um issue.
O MCP define o protocolo elicitInput justamente para isso — o servidor pede input estruturado e o cliente renderiza UI nativa. O servidor SEI Pro implementa esse caminho desde v0.3.7: quando o cliente declara a capability, o gate aparece como modal/formulário no cliente, fora do alcance do modelo.
Hoje, no entanto, os clientes Anthropic conectados via Streamable HTTP (mcp.seipro.io no claude.ai/Claude Desktop com servidor remoto) não declaram a capability nem respondem aos requests de elicit. O servidor detecta isso e cai no JSON gate textual, que continua sendo a barreira efetiva. Quando esse suporte for ativado nos clientes Anthropic, o caminho de elicit começa a funcionar automaticamente — nada precisa mudar no servidor.
O fluxo "sem elicit" (atual): modelo recebe JSON estruturado de bloqueio → traduz os riscos ao usuário em texto → usuário digita autorização explícita → modelo passa confirmar_acesso_restrito=true na próxima chamada. Funciona bem com modelos grandes (Opus 4.7) e, com as docstrings + instrucao_para_modelo + nao_e_erro_tecnico introduzidos nas versões 0.3.5–0.3.7, também com modelos menores (Haiku 4.5).
O servidor pode rodar em modo HTTP para uso via Claude no celular, na web ou em qualquer cliente MCP remoto. Cada órgão faz seu próprio deploy — as credenciais do SEI são informadas pelo usuário na tela de login OAuth e nunca ficam armazenadas no servidor.
O Railway é uma plataforma de deploy na nuvem que facilita colocar aplicações no ar. Você faz push do código e o Railway cuida de build, domínio, SSL e escalabilidade.
macOS (Homebrew):
brew install railwaynpm (qualquer plataforma):
npm install -g @railway/cliVerificar instalação:
railway --versionrailway loginIsso abre o navegador para você autorizar o CLI na sua conta Railway.
git clone https://github.com/sei-pro/mcp-seipro.git
cd mcp-seiprorailway init -n mcp-seiproSe você tiver mais de um workspace, adicione --workspace "Nome do Workspace".
railway add --service mcp-seiproO servidor precisa de duas variáveis obrigatórias:
railway variables set \
JWT_SECRET="$(openssl rand -base64 48)" \
BASE_URL="https://SEU-PROJETO.up.railway.app"Nota: as credenciais do SEI (URL, usuário, senha) não ficam no servidor. São informadas pelo usuário na tela de login OAuth e encriptadas dentro do token.
railway domainIsso gera uma URL como https://mcp-seipro-production.up.railway.app. Copie essa URL.
Agora atualize a variável BASE_URL com a URL gerada:
railway variables set BASE_URL="https://mcp-seipro-production.up.railway.app"railway upAguarde o build finalizar (2-3 minutos na primeira vez). Ao terminar, verifique:
# Deve retornar HTTP 401 (protegido por OAuth)
curl -s -o /dev/null -w "%{http_code}" -X POST https://SEU-PROJETO.up.railway.app/mcpSe retornar 401, o servidor está rodando com autenticação ativa.
https://SEU-PROJETO.up.railway.app/mcpPronto! A configuração sincroniza automaticamente com o app mobile e a web.
O servidor detecta automaticamente o ambiente:
| Ambiente | Variável PORT | Transporte | Uso |
|---|---|---|---|
| Local | ausente | stdio | Claude Code / Claude Desktop |
| Railway | presente (injetada) | Streamable HTTP + OAuth | Claude mobile / web / remoto |
No modo remoto, as credenciais do SEI são encriptadas dentro do token JWT e nunca armazenadas no servidor. O Dockerfile inclui tesseract-ocr para OCR de PDFs escaneados.
railway domain --custom mcp.seu-orgao.gov.brConfigure um registro CNAME no DNS do seu órgão apontando para o valor fornecido pelo Railway. O certificado SSL é provisionado automaticamente.
Lembre-se de atualizar a variável BASE_URL:
railway variables set BASE_URL="https://mcp.seu-orgao.gov.br"
railway upPara atualizar com novas versões do mcp-seipro:
git pull
railway upPara OCR de PDFs escaneados (opcional):
tesseract-ocr e tesseract-ocr-porpoppler-utilsMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.