Skip to Content
~/ai-and-agentsSEI MCP Server (Python)

SEI MCP Server (Python)

~/vitorecomp/sei-mcp (main)
[Python]

Full-featured Model Context Protocol (MCP) server for interacting with the SEI electronic information system.

pythonmcpagentsautomation
# synced from github.com/vitorecomp/sei-mcp

🏛️ SEI MCP Server (Python) — Model Context Protocol for SEI WebServices v3.1+

An enterprise-grade Model Context Protocol (MCP) server built in Python that exposes the official SEI (Sistema Eletrônico de Informações) SOAP Web Services (SEI-WebServices-v3.1.pdf / sei.wsdl), SIP (Sistema de Permissões) Web Services, and External RH Web Services as 72 structured MCP tools for Google Cloud Gemini Enterprise, Claude Desktop, Cursor, and MCP Inspector.


✨ Key Features

  • Complete SEI v3.1+ Coverage (72 MCP Tools):
    • 25 Process & Workflow (Procedimentos) Tools: gerarProcedimento, consultarProcedimento, consultarProcedimentoIndividual, enviarProcesso, concluirProcesso, reabrirProcesso, sobrestarProcesso, removerSobrestamentoProcesso, anexarProcesso, desanexarProcesso, relacionarProcesso, removerRelacionamentoProcesso, atribuirProcesso, lancarAndamento, listarAndamentos, registrarAnotacao, bloquearProcesso, desbloquearProcesso, adicionarMarcador, removerMarcador, listarAndamentosMarcadores, definirControlePrazo, concluirControlePrazo, removerControlePrazo, listarExtensoesPermitidas.
    • 13 Document & File (Documentos & Arquivos) Tools: incluirDocumento, consultarDocumento, cancelarDocumento, gerarBloco, adicionarArquivo, adicionarConteudoArquivo, listarHipotesesLegais, listarTiposConferencia, agendarPublicacao, alterarPublicacao, cancelarAgendamentoPublicacao, consultarPublicacao, enviarEmail.
    • 12 Signature, Meeting & Internal Block (Blocos) Tools: incluirDocumentoBloco, retirarDocumentoBloco, incluirProcessoBloco, retirarProcessoBloco, disponibilizarBloco, cancelarDisponibilizacaoBloco, excluirBloco, reabrirBloco, devolverBloco, consultarBloco, listarBlocos, concluirBloco.
    • 17 Catalog & Parameter (Parâmetros) Tools: listarUnidades, listarTiposProcedimento, listarSeries, listarContatos, atualizarContatos, listarUsuarios, listarPaises, listarEstados, listarCidades, listarCargos, listarFeriados, listarMarcadoresUnidade, definirMarcador, listarTiposPrioridade, confirmarDisponibilizacaoPublicacao, enviarNotificacaoPublicacao, SinalizarDocumento.
    • 3 SIP Permission (SIP) Tools: sip_listarPermissao, sip_replicarPermissao, sip_replicarUsuario.
    • 1 External HR (RH) Tool: rh_listarCargoFuncao.
    • 1 Diagnostic Tool: get_system_info.
  • Dual-Transport HTTP Server (StreamableHTTP & SSE) + stdio:
    • POST /mcp: Modern MCP StreamableHTTP transport (used by Google Cloud Gemini Enterprise).
    • GET /sse & POST /messages?sessionId=...: Legacy MCP Server-Sent Events (SSE) transport.
    • --stdio: Standard input/output transport for local CLI / IDE agents.
  • Gemini Enterprise OAuth 2.0 Authentication & Discovery:
    • Exposes RFC 9728 GET /.well-known/oauth-protected-resource and RFC 8414 GET /.well-known/oauth-authorization-server.
    • Allows unauthenticated MCP discovery handshakes (initialize, notifications/initialized, ping, tools/list) so Gemini Enterprise’s “Validate & Save” and “Reload custom actions” always succeed.
    • Enforces Google OAuth 2.0 Bearer token validation (via https://oauth2.googleapis.com/tokeninfo) and optional OAUTH_CLIENT_ID audience verification on all tools/call tool executions in production.
  • Official SEI SOAP 1.1 RPC/Encoded Integration:
    • Parses sei-documentation/sei.wsdl to serialize all <wsdl:part> parameters in exact positional order as required by PHP’s SoapServer (controlador_ws.php?servico=sei).
    • Handles SOAP-ENC:Array (<item> elements), xsi:nil="true" optional fields, Base64 encoding, and MD5 checksum helpers for incluirDocumento and adicionarArquivo.

🏗️ System Architecture


🔐 Authentication Architecture

This server implements two distinct authentication layers:

1. Inbound Authentication: Gemini Enterprise -> MCP Server (OAuth 2.0)

Following the Gemini Enterprise MCP specification (mirrored from sei-mcp-prodesp):

Endpoint / MethodAuth RequirementPurpose
GET /healthPublicLiveness & readiness probe
GET /.well-known/oauth-protected-resourcePublicRFC 9728 OAuth 2.0 Protected Resource Metadata
GET /.well-known/oauth-authorization-serverPublicRFC 8414 OAuth 2.0 Authorization Server Metadata
POST /mcp (initialize, notifications/initialized, ping, tools/list)PublicAllows Gemini Enterprise to discover tools during connector registration
POST /mcp (tools/call)OAuth 2.0 Bearer TokenValidates Google OAuth 2.0 access token & OAUTH_CLIENT_ID audience
  • In Production (ENV=production and OAUTH_ENABLED=true): Every tools/call invocation must carry Authorization: Bearer <google_access_token>.
  • In Local Development (ENV=development and OAUTH_ENABLED=false): tools/call can be invoked without an OAuth token for rapid testing.

2. Outbound Authentication: MCP Server -> SEI Web Services (SEI-WebServices-v3.1.pdf)

Per the official SEI WebServices v3.1 Manual (sei-documentation/SEI-WebServices-v3.1.pdf, pages 5–8), every SOAP operation authenticates using:

  1. SiglaSistema (SEI_SIGLA_SISTEMA): System acronym registered in SEI under Administração -> Sistemas -> Novo.
  2. IdentificacaoServico (SEI_IDENTIFICACAO_SERVICO): Either:
    • The 72-character Access Key (Chave de Acesso) generated in SEI (Administração -> Sistemas -> Serviços -> Chave de Acesso) — recommended by SEI v3.1+, OR
    • The plain-text service name (Identificação) prefixed by its SHA-256 hash when authenticating against legacy SEI 3.0 services.
  3. IP Whitelisting (Servidores): In SEI under Administração -> Sistemas -> listar -> Serviços -> Servidores, register the outbound IP address (or CIDR mask) of the MCP server so SEI permits SOAP calls for the configured operations (Operações).
  4. IdUnidade (SEI_ID_UNIDADE): Default organizational unit ID automatically injected when not explicitly passed by the user in a tool call.

🧰 Complete Catalog of 72 MCP Tools

🩺 System & Diagnostics (1 Tool)

Tool NameDescription
get_system_infoReturns server status, configured SEI/SIP endpoints, default unit ID, and registered tool count.

📁 Process & Workflow Tools — src/tools/processos.py (25 Tools)

Tool NameSEI WSDL OperationDescription
gerarProcedimentogerarProcedimentoCreates a new administrative process (Procedimento) with optional initial documents, subjects, interested parties, and destination units.
consultarProcedimentoconsultarProcedimentoQueries comprehensive metadata of a process (subjects, interested parties, units, open locations, related/annexed processes).
consultarProcedimentoIndividualconsultarProcedimentoIndividualQueries individual process metadata in a specific context.
enviarProcessoenviarProcessoForwards (tramita) a process to one or more destination units (UnidadesDestino).
concluirProcessoconcluirProcessoConcludes (fecha) a process in the specified unit.
reabrirProcessoreabrirProcessoReopens a previously concluded process in the specified unit.
sobrestarProcessosobrestarProcessoSuspends (sobresta) a process, optionally linking it to another process.
removerSobrestamentoProcessoremoverSobrestamentoProcessoRemoves the suspension (sobrestamento) from a process.
anexarProcessoanexarProcessoAnnexes a subsidiary process (ProtocoloProcedimentoAnexado) to a principal process.
desanexarProcessodesanexarProcessoDetaches (desanexa) an annexed process from its principal process.
relacionarProcessorelacionarProcessoCreates a bidirectional link (relacionamento) between two processes.
removerRelacionamentoProcessoremoverRelacionamentoProcessoRemoves a relationship link between two processes.
atribuirProcessoatribuirProcessoAssigns (atribui) a process to a specific user (IdUsuario) within the unit.
lancarAndamentolancarAndamentoRecords a workflow progress entry (andamento) in the process history.
listarAndamentoslistarAndamentosLists workflow history entries (andamentos) for a process.
registrarAnotacaoregistrarAnotacaoRegisters or updates a unit note (anotação) on one or more processes.
bloquearProcessobloquearProcessoLocks (bloqueia) a process to prevent modifications.
desbloquearProcessodesbloquearProcessoUnlocks (desbloqueia) a previously locked process.
adicionarMarcadoradicionarMarcadorApplies unit markers/tags (marcadores) to one or more processes.
removerMarcadorremoverMarcadorRemoves unit markers/tags (marcadores) from one or more processes.
listarAndamentosMarcadoreslistarAndamentosMarcadoresLists the history of marker changes on a process in the unit.
definirControlePrazodefinirControlePrazoSets a deadline (controle de prazo by date or days) on one or more processes.
concluirControlePrazoconcluirControlePrazoMarks a deadline control as completed on one or more processes.
removerControlePrazoremoverControlePrazoRemoves a deadline control from one or more processes.
listarExtensoesPermitidaslistarExtensoesPermitidasLists file extensions permitted for external document uploads in SEI.

📄 Document & File Tools — src/tools/documentos.py (13 Tools)

Tool NameSEI WSDL OperationDescription
incluirDocumentoincluirDocumentoIncludes a generated (G) or external (R) document in a process (supports automatic Base64 encoding via ConteudoTextoPlano).
consultarDocumentoconsultarDocumentoQueries document metadata, signatures, publication data, and view link (LinkAcesso).
cancelarDocumentocancelarDocumentoCancels a document with justification (Motivo).
gerarBlocogerarBlocoCreates a new Signature (A), Internal (I), or Meeting (R) block.
adicionarArquivoadicionarArquivoStarts a chunked file upload (IdArquivo) with automatic Base64 & MD5 calculation if ConteudoTextoPlano is supplied.
adicionarConteudoArquivoadicionarConteudoArquivoAppends a Base64 content chunk to an in-progress IdArquivo upload.
listarHipotesesLegaislistarHipotesesLegaisLists legal hypotheses (Hipóteses Legais) for restricted (Restrito) or confidential (Sigiloso) access levels.
listarTiposConferencialistarTiposConferenciaLists authentication/certification types (Tipos de Conferência) for external documents.
agendarPublicacaoagendarPublicacaoSchedules a document for official publication (Publicação).
alterarPublicacaoalterarPublicacaoModifies an existing publication schedule.
cancelarAgendamentoPublicacaocancelarAgendamentoPublicacaoCancels a scheduled document publication.
consultarPublicacaoconsultarPublicacaoQueries publication details by publication ID, document ID, or protocol.
enviarEmailenviarEmailSends an official email from within a process (Procedimento), recording the email as a process document.

📦 Block, Catalog, SIP & RH Tools — src/tools/parametros.py (33 Tools)

Tool NameService / WSDL OperationDescription
incluirDocumentoBlocoSEI: incluirDocumentoBlocoAdds a document to a signature (A) or internal/meeting block (IdBloco).
retirarDocumentoBlocoSEI: retirarDocumentoBlocoRemoves a document from a block.
incluirProcessoBlocoSEI: incluirProcessoBlocoAdds a process (ProtocoloProcedimento) to an internal or meeting block.
retirarProcessoBlocoSEI: retirarProcessoBlocoRemoves a process from a block.
disponibilizarBlocoSEI: disponibilizarBlocoMakes a block available (disponibiliza) to its destination units.
cancelarDisponibilizacaoBlocoSEI: cancelarDisponibilizacaoBlocoCancels the availability of a block.
excluirBlocoSEI: excluirBlocoDeletes one or more blocks (IdBlocos).
reabrirBlocoSEI: reabrirBlocoReopens a concluded block.
devolverBlocoSEI: devolverBlocoReturns (devolve) a block received from another unit.
consultarBlocoSEI: consultarBlocoQueries details of a block and optionally lists its protocols (SinRetornarProtocolos).
listarBlocosSEI: listarBlocosLists blocks filtered by type (A, R, I), state (G, D, R, C), and unit.
concluirBlocoSEI: concluirBlocoConcludes one or more blocks.
listarUnidadesSEI: listarUnidadesLists organizational units (Unidades) permitted for the service.
listarTiposProcedimentoSEI: listarTiposProcedimentoLists process types (Tipos de Processo).
listarSeriesSEI: listarSeriesLists document types (Séries).
listarContatosSEI: listarContatosSearches contacts (Contatos) by type, words, CPF/CNPJ, or IDs.
atualizarContatosSEI: atualizarContatosCreates (I), alters (A), or deactivates (E) contact records in batch.
listarUsuariosSEI: listarUsuariosLists users with permission in the unit.
listarPaisesSEI: listarPaisesLists countries (Países) registered in SEI.
listarEstadosSEI: listarEstadosLists states/provinces (UF) registered in SEI.
listarCidadesSEI: listarCidadesLists cities (Municípios + IBGE code) registered in SEI.
listarCargosSEI: listarCargosLists official titles/positions (Cargos).
listarFeriadosSEI: listarFeriadosLists holidays (Feriados) for an organ within a date range.
listarMarcadoresUnidadeSEI: listarMarcadoresUnidadeLists markers (Marcadores) available in the unit.
definirMarcadorSEI: definirMarcadorCreates or updates unit marker definitions (DefinicaoMarcador).
listarTiposPrioridadeSEI: listarTiposPrioridadeLists priority types (Tipos de Prioridade).
confirmarDisponibilizacaoPublicacaoSEI: confirmarDisponibilizacaoPublicacaoConfirms publication availability in an external publication vehicle.
enviarNotificacaoPublicacaoSEI: enviarNotificacaoPublicacaoSends a publication notification in SEI.
SinalizarDocumentoSEI: SinalizarDocumentoApplies visual flags/signals (Sinalizações) to documents.
sip_listarPermissaoSIP: listarPermissaoQueries permissions registered in SIP (Sistema de Permissões).
sip_replicarPermissaoSIP: replicarPermissaoReplicates permissions in SIP across users/units.
sip_replicarUsuarioSIP: replicarUsuarioReplicates/synchronizes user records in SIP (I include, A alter, D deactivate, R reactivate, C query).
rh_listarCargoFuncaoRH: listarCargoFuncaoQueries job titles/functions (Cargo/Função) from an external HR SOAP Web Service.

🚀 Quickstart (Local Development)

1. Clone & Configure Environment

cp .env.example .env

Edit .env with your SEI credentials:

PORT=3000 HOST=0.0.0.0 ENV=development OAUTH_ENABLED=false # SEI SOAP WebService Configuration SEI_WS_URL=https://sei.orgao.gov.br/sei/controlador_ws.php?servico=sei SEI_SIGLA_SISTEMA=MCP_GEMINI SEI_IDENTIFICACAO_SERVICO=<72-character-chave-de-acesso> SEI_ID_UNIDADE=110000958 SEI_VERIFY_SSL=true SEI_TIMEOUT_SECONDS=60 # Optional SIP & RH WebService URLs SIP_WS_URL=https://sei.orgao.gov.br/sip/controlador_ws.php?servico=wsdl RH_WS_URL=

2. Install Dependencies (Optional if system packages are present)

pip install -r requirements.txt

3. Run the Server

# Start Dual-Transport HTTP Server (StreamableHTTP /mcp + SSE /sse) python3 -m src.server # Or run over stdio transport for local CLI clients python3 -m src.server --stdio

4. Run Unit & cURL Integration Tests

# Run Python unit test suite (WSDL parser, SOAP serializer, MCP JSON-RPC, OAuth 2.0) python3 -m unittest discover -s tests -v # Run automated 13-test cURL suite against a running server ./scripts/test-mcp-curl.sh --url http://localhost:3000

☁️ Deploying to Google Cloud Run with Terraform

Step 1: Build and Push Container Image via Cloud Build

gcloud builds submit --config=cloudbuild.yaml --project=YOUR_GCP_PROJECT_ID

Step 2: Provision Cloud Run + Global HTTPS Load Balancer with Terraform

The infra/ directory provisions:

  • Google Cloud APIs (run.googleapis.com, compute.googleapis.com)
  • Cloud Run v2 Service running sei-mcp-server
  • Global Static IP Address + Google-Managed SSL Certificate
  • Global External Application Load Balancer + Serverless NEG
cd infra cp terraform.tfvars.example terraform.tfvars # Edit terraform.tfvars with your project_id, domain, and SEI credentials terraform init terraform plan terraform apply

See infra/README.md  for detailed DNS and SSL certificate provisioning instructions.


🤖 Connecting to Google Cloud Gemini Enterprise

  1. Open the Google Cloud Console -> Gemini Enterprise -> Extensions / Custom Actions (MCP).
  2. Click Add MCP Server and configure:
    • Server URL: https://<YOUR_LOAD_BALANCER_DOMAIN>/mcp
    • Transport: Streamable HTTP
    • Authentication: OAuth 2.0
      • Client ID: Matches OAUTH_CLIENT_ID configured on Cloud Run
      • Client Secret: Your Google OAuth 2.0 Client Secret
      • Authorization URL: https://accounts.google.com/o/oauth2/v2/auth
      • Token URL: https://oauth2.googleapis.com/token
      • Scopes: openid email profile
  3. Click Validate & Save. Gemini Enterprise will perform an unauthenticated initialize and tools/list handshake to discover all 72 SEI tools, and will attach the end-user’s OAuth 2.0 Bearer token on every tools/call execution.

📂 Project Structure

sei-mcp/ ├── src/ │ ├── __init__.py │ ├── config.py # Environment & SEI/OAuth configuration loader │ ├── auth.py # Google OAuth 2.0 token verifier & MCP discovery bypass │ ├── mcp_server.py # JSON-RPC 2.0 MCP router (initialize, tools/list, tools/call) │ ├── server.py # Dual-transport HTTP server (/mcp, /sse, /messages, /health) │ ├── client/ │ │ ├── __init__.py │ │ └── sei_client.py # WSDL parser & SOAP 1.1 RPC/Encoded client for SEI/SIP/RH │ └── tools/ │ ├── __init__.py # Registers all 72 MCP tools │ ├── processos.py # 25 Process & workflow tools │ ├── documentos.py # 13 Document, file upload, publication & email tools │ └── parametros.py # 12 Block tools + 17 Catalog tools + 3 SIP + 1 RH tool ├── tests/ │ ├── test_wsdl_and_soap.py # Unit tests for WSDL parsing & SOAP 1.1 serialization │ └── test_mcp_server.py # Unit tests for MCP JSON-RPC & OAuth 2.0 middleware ├── scripts/ │ └── test-mcp-curl.sh # Automated 13-test cURL test suite (/health, /mcp, /sse) ├── infra/ # Terraform IaC (Cloud Run v2 + Global HTTPS Load Balancer) ├── sei-documentation/ # Official SEI WebServices v3.1 PDF manual & sei.wsdl ├── Dockerfile # Production Python 3.12 Slim container image ├── cloudbuild.yaml # Google Cloud Build pipeline ├── pyproject.toml # Python packaging & pytest/ruff/mypy configuration └── requirements.txt # Pinned Python dependencies

📄 License

Licensed under the MIT License .