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

SEI MCP Server (TypeScript)

~/vitorecomp/sei-mcp-prodesp (main)
[TypeScript]

TypeScript Model Context Protocol (MCP) implementation tailored for SEI Prodesp workflows.

typescriptmcpplaywright
# synced from github.com/vitorecomp/sei-mcp-prodesp

SEI MCP Server for Gemini Enterprise

A production-ready Model Context Protocol (MCP) server built with Node.js, Express, and TypeScript providing full integration with the SEI (Sistema Eletrônico de Informações) APIs of the São Paulo State Government (IntegradorSP / Rota.SP).

Equipped with dual transports (StreamableHTTP on /mcp and SSE on /sse), Google OAuth 2.0 discovery endpoints, automated IDP.SP token management, and comprehensive tools for Gemini Enterprise, Claude, and MCP clients.


🏛️ Architecture

┌─────────────────────────────────────────────────────────────────────────┐ │ Gemini Enterprise │ │ (Admin Console / Extensions / Tools) │ └────────────────────────────────────┬────────────────────────────────────┘ │ HTTPS / SSE Request with Google OAuth Bearer Token `Authorization: Bearer <OAUTH_ACCESS_TOKEN>` │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ GCP External Application Load Balancer │ │ (Global Static IP + Managed SSL via Terraform) │ └────────────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ Serverless NEG / Google Cloud Run │ │ (Container on Port 3000) │ └────────────────────────────────────┬────────────────────────────────────┘ │ ┌────────────────────────────┼────────────────────────────┐ │ │ │ ▼ ▼ ▼ ┌───────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │ GET /health │ │ POST /mcp │ │ GET /sse & │ │(Unauthenticated Probe)│ │ (StreamableHTTP) │ │ POST /messages │ └───────────────────────┘ └──────────┬──────────┘ └──────────┬──────────┘ │ │ ▼ ▼ ┌──────────────────────────────────────────────┐ │ SEI Client │ │ (IDP.SP OAuth Auth Gate + Request Headers) │ └──────┬───────────────┬──────────────┬────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────────┐ ┌───────────┐ ┌───────────────┐ │ sei-processos │ │sei-docum. │ │sei-parametros │ │(Gestão Processos)│ │(Documentos│ │(Unidades, │ │ │ │ e Anexos) │ │Contatos,etc.) │ └──────────────────┘ └───────────┘ └───────────────┘

📋 Prerequisites

  • Google Cloud SDK (gcloud) installed and authenticated.
  • Terraform CLI  (>= 1.5.0).
  • Node.js  (v20.x or v22.x LTS) & npm (for local development).
  • A Google Cloud Project with billing enabled and the following APIs activated:
    gcloud services enable run.googleapis.com compute.googleapis.com cloudbuild.googleapis.com
  • SEI Credentials (IDP.SP client credentials / token, SiglaSistema, Identificação de Serviço, ID Unidade).

⚙️ Configuration & Environment Variables

Configure server behavior and SEI integration parameters in .env (refer to .env.example):

Server & Security Settings

VariableDescriptionDefault
PORTListening port for the application3000
HOSTBinding network address0.0.0.0
NODE_ENVEnvironment mode (production, development, dev)production
OAUTH_ENABLEDWhen set to true, enforces Google OAuth 2.0 token verification on tools/call. Default is enabled in production.false (dev) / true (prod)
OAUTH_CLIENT_IDGoogle OAuth 2.0 Client ID for audience verification(none)

SEI APIs & IDP.SP Authentication

VariableDescriptionExample / Default
SEI_PROCESSOS_URLBase URL for sei-processos APIhttps://sei-processos.api-hml.rota.sp.gov.br
SEI_DOCUMENTOS_URLBase URL for sei-documentos APIhttps://sei-documentos.api-hml.rota.sp.gov.br
SEI_PARAMETROS_URLBase URL for sei-parametros APIhttps://sei-parametros.api-hml.rota.sp.gov.br
IDPSP_TOKEN_URLIDP.SP OAuth 2.0 token exchange endpointhttps://rhsso.idp-hml.sp.gov.br/auth/realms/idpsp/protocol/openid-connect/token
IDPSP_CLIENT_IDIDP.SP Client ID for automated token generationyour-idpsp-client-id
IDPSP_CLIENT_SECRETIDP.SP Client Secretyour-idpsp-client-secret
SEI_BEARER_TOKENStatic JWT Bearer Token (alternative to client credentials)(optional)
SEI_SIGLA_SISTEMASigla do Sistema cadastrado no SEIINTEGRACAOCLIENTES
SEI_IDENTIFICACAO_SERVICOToken / Chave de serviço cadastrada no SEIyour-service-token-hash
SEI_ID_UNIDADEID da Unidade executora no SEI110000384
SEI_REGIONALRegional do Município (obrigatório apenas para SEI Cidades)(opcional)

🚀 Streamlined Deployment: Gemini Enterprise with Terraform

Follow these step-by-step instructions to deploy the SEI MCP server to Google Cloud and connect it to Gemini Enterprise.

Step 1: Build & Deploy Container to Cloud Run

Build the multi-stage Docker image using Google Cloud Build and deploy it to Google Cloud Run:

# 1. Ensure you are in the project root directory cd /path/to/sei-mcp # 2. Set your GCP project gcloud config set project YOUR_GCP_PROJECT_ID # 3. Build Docker container image via Cloud Build gcloud builds submit --tag gcr.io/YOUR_GCP_PROJECT_ID/sei-mcp-server:latest . # 4. Deploy to Cloud Run (Google OAuth 2.0 authentication enforced in production) gcloud run deploy sei-mcp-server \ --image gcr.io/YOUR_GCP_PROJECT_ID/sei-mcp-server:latest \ --region southamerica-east1 \ --platform managed \ --allow-unauthenticated \ --port 3000 \ --set-env-vars NODE_ENV=production,OAUTH_CLIENT_ID="YOUR_OAUTH_CLIENT_ID.apps.googleusercontent.com",SEI_SIGLA_SISTEMA="INTEGRACAOCLIENTES",SEI_IDENTIFICACAO_SERVICO="YOUR_SEI_TOKEN",SEI_ID_UNIDADE="110000384",IDPSP_CLIENT_ID="YOUR_IDPSP_ID",IDPSP_CLIENT_SECRET="YOUR_IDPSP_SECRET" \ --min-instances 0 \ --max-instances 5 \ --timeout 300
Note
  • In production (NODE_ENV=production), the server enforces Google OAuth 2.0 authentication on all tools/call invocations while keeping tool discovery unblocked for seamless synchronization in Gemini Enterprise.
  • In development (NODE_ENV=dev), authentication is disabled for frictionless local testing.

Step 2: Provision Load Balancer & Static IP with Terraform

Use the included Terraform module in infra/ to provision an External Application Load Balancer with a Serverless NEG pointing to your Cloud Run service.

  1. Navigate to the infrastructure directory:

    cd infra
  2. Create your terraform.tfvars:

    cp terraform.tfvars.example terraform.tfvars
  3. Edit infra/terraform.tfvars:

    project_id = "YOUR_GCP_PROJECT_ID" region = "southamerica-east1" cloud_run_service_name = "sei-mcp-server" # Optional: Set to true if you have a custom domain pointing to the Load Balancer IP enable_ssl = false domain_name = ""
  4. Initialize and apply Terraform:

    terraform init terraform apply
  5. Retrieve the outputs:

    • load_balancer_ip: Static IP of the Load Balancer (e.g. 34.120.x.x).
    • mcp_sse_endpoint_http: SSE endpoint URL (e.g. http://34.120.x.x/sse or https://<YOUR-DOMAIN>/sse).
    • mcp_http_endpoint: StreamableHTTP endpoint URL (e.g. https://<YOUR-DOMAIN>/mcp).

Step 3: Configure Google OAuth 2.0 Credentials in GCP Console

When integrating with Gemini Enterprise, configure the OAuth 2.0 client credentials:

  1. Open Google Cloud Console > APIs & Services > Credentials.
  2. Click Create Credentials > OAuth client ID.
  3. Select Application type: Web application.
  4. Set Name: Gemini Enterprise SEI MCP Extension.
  5. Under Authorized redirect URIs, add both of the following redirect URIs:
    • https://vertexaisearch.cloud.google.com/oauth-redirect
    • https://vertexaisearch.cloud.google.com/static/oauth/oauth.html
  6. Click Create and copy your Client ID and Client Secret.

Step 4: Register Extension in Gemini Enterprise

In the Gemini Enterprise Admin Console (or Vertex AI Extensions / Custom Tools), add a new MCP Server extension using the following values:

FieldValue / DescriptionExample
MCP Server URLYour deployed StreamableHTTP or SSE endpoint URLhttps://mcp-demo-sei.aidemo.space/mcp (or /sse)
Authorization URLGoogle OAuth 2.0 Authorization Endpointhttps://accounts.google.com/o/oauth2/v2/auth
Authorization URL ParametersOffline access & consent prompt query params&access_type=offline&prompt=consent
Token URLGoogle OAuth 2.0 Token Exchange Endpointhttps://oauth2.googleapis.com/token
Client IDOAuth 2.0 Client ID from GCP Credentialsxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.apps.googleusercontent.com
Client SecretOAuth 2.0 Client Secret from GCP CredentialsGOCSPX-xxxxxxxxxxxxxxxxxxxxxxxx
ScopesSpace-separated list of OAuth scopesopenid email profile

Click Validate & Save. Gemini Enterprise connects to the endpoint, performs protocol handshake and tool discovery, and registers all 68+ SEI tools automatically.


Step 5: Verify in Gemini Enterprise Chat

Once registered, users can invoke the SEI tools naturally from Gemini Enterprise prompts:

  • “Liste os processos abertos na minha unidade no SEI” → invokes sei_listar_processos
  • “Consulte o andamento do processo 03.110000147.0000001/2024-99” → invokes sei_consultar_processo
  • “Crie um novo processo administrativo de Compras e Serviços” → invokes sei_gerar_processo
  • “Inclua um parecer em HTML no processo” → invokes sei_incluir_documento
  • “Quais são as séries documentais disponíveis?” → invokes sei_listar_series
  • “Qual o status de saúde do servidor MCP?” → invokes get_system_info

🛠️ Complete MCP Tools Catalog

The server exports all operations from the SEI API documentation across three domains:

1. Processos (sei-processos)

Tool NameDescriptionKey Parameters
sei_listar_processosLista a mesa de processos da unidadetipo (G/R), usuario, apenasMeus, start, limit
sei_consultar_processoConsulta processo por número de protocoloprotocoloProcedimento, flags de andamento/interessados/assuntos
sei_gerar_processoCria novo processo administrativo no SEIidTipoProcedimento, especificacao, nivelAcesso, idHipoteseLegal, interessados, assuntos
sei_excluir_processoExclui um processoprotocoloProcedimento
sei_listar_documentos_processoLista todos os documentos de um processoprotocoloProcedimento, start, limit, sinRetornarStatus
sei_enviar_processoTramita/envia processo para outras unidadesprotocoloProcedimento, unidadesDestino, dataRetornoProgramado
sei_concluir_processoConclui o processo na unidade atualprotocoloProcedimento
sei_reabrir_processoReabre um processo concluídoprotocoloProcedimento
sei_bloquear_processoBloqueia processo contra alteraçõesprotocoloProcedimento
sei_receber_processoRecebe formalmente o processo na unidadeprotocoloProcedimento
sei_atribuir_processoAtribui responsabilidade do processo a usuárioprotocoloProcedimento, idUsuario, sinReabrir
sei_listar_atribuicoes_usuarioConsulta processos atribuídos por CPFcpf, sinRetornarRecebidos, sinRetornarGerados
sei_relacionar_processosCria relacionamento bilateral entre processosprotocoloProcedimento1, protocoloProcedimento2
sei_remover_relacionamento_processosRemove relacionamento entre processosprotocoloProcedimento1, protocoloProcedimento2
sei_anexar_processoAnexa processo secundário a um principalprotocoloProcedimentoPrincipal, protocoloProcedimentoAnexado
sei_desanexar_processoDesanexa processo com justificativaprotocoloProcedimentoPrincipal, protocoloProcedimentoAnexado, motivo
sei_sobrestar_processoSobresta/suspende andamento do processoprotocoloProcedimento, motivo, protocoloProcedimentoVinculado
sei_remover_sobrestamento_processoRemove sobrestamento do processoprotocoloProcedimento
sei_definir_controle_prazoDefine ou atualiza controle de prazoprotocoloProcedimento, dataPrazo, dias, sinDiasUteis
sei_remover_controle_prazoRemove controle de prazoprotocoloProcedimento
sei_concluir_controle_prazoConclui controle de prazoprotocoloProcedimento
sei_definir_marcador_processoAplica marcador/tag colorida no processoprotocoloProcedimento, idMarcador, texto
sei_listar_marcadores_unidadeLista marcadores disponíveis na unidadeNenhum
sei_listar_andamentos_marcadoresLista histórico de marcadores do processoprotocoloProcedimento, marcadores
sei_alterar_nivel_acesso_processoAltera nível de acesso (Público/Restrito)protocoloProcedimento, nivelAcesso, hipotese
sei_lancar_andamentoInsere andamento manual no históricoprotocoloProcedimento, idTarefa, atributos
sei_listar_andamentosLista andamentos do processoprotocoloProcedimento, retornaAtributos, tarefas
sei_listar_andamentos_completoConsulta avançada de histórico e atividadesprotocoloProcedimento, tipoHistorico, dataInicio, dataFim, idUsuario, unidadeOrigem
sei_listar_tipos_processoLista tipos de processos configuradosNenhum
sei_disponibilizar_acesso_externoGera acesso externo para usuário/interessadoprotocoloProcedimento, emailUnidade, emailDestinatario, motivo, dias, senha
sei_listar_disponibilizacoes_acesso_externoLista acessos externos de um processoprotocoloProcedimento
sei_cancelar_disponibilizacao_acesso_externoCancela acesso externoprotocoloProcedimento, idAcessoExterno, motivo
sei_consultar_processos_individuaisConsulta processos por usuário interessadoidOrgaoProcedimento, idTipoProcedimento, siglaUsuario

2. Documentos (sei-documentos)

Tool NameDescriptionKey Parameters
sei_incluir_documentoInclui documento gerado (HTML) ou externo (PDF) no processotipo (G/R), protocoloProcedimento, idSerie, conteudo, idArquivo, nivelAcesso
sei_consultar_documentoConsulta metadados de documento no SEIprotocoloDocumento, retornarAndamento, retornarAssinaturas, retornarCampos
sei_excluir_documentoExclui documento não assinado/bloqueadoprotocoloDocumento
sei_cancelar_documentoCancela documento formalmente no SEIprotocoloDocumento, motivo
sei_obter_conteudo_documentoObtém conteúdo do documento (Base64 + UTF-8)protocoloFormatado
sei_download_anexo_documentoBaixa arquivo anexo binário em Base64protocoloFormatado
sei_upload_arquivoFaz upload de arquivo anexo (< 10MB)nome, conteudoBase64 (MD5 e tamanho calculados automaticamente)
sei_upload_arquivo_conteudoEnvia partes adicionais de arquivos (> 10MB)idArquivo, conteudoBase64
sei_enviar_emailEnvia e-mail oficial com anexos do processoprotocoloProcedimento, de, para, assunto, mensagem, idDocumentos

3. Parâmetros e Utilitários (sei-parametros)

Tool NameDescriptionKey Parameters
sei_listar_unidadesLista e filtra unidades do SEIidTipoProcedimento, idSerie, idOrgao, start, limit
sei_listar_usuariosLista usuários da unidadeidUsuario
sei_replicar_usuarioReplica usuário entre instânciasidReplicacao, usuario
sei_listar_seriesLista séries/tipos de documentoidTipoProcedimento
sei_listar_hipoteses_legaisLista hipóteses legais de sigilo/restriçãonivelAcesso (1=Restrito, 2=Sigiloso)
sei_listar_assuntosPesquisa assuntos arquivísticospalavrasPesquisa, start, limit
sei_listar_contatosPesquisa contatos cadastradosnome, cpf, sigla, matricula, idTipoContato
sei_criar_ou_atualizar_contatosCria ou altera contatos no SEIcontatos (array com dados cadastrais)
sei_excluir_desativar_contatoExclui, desativa ou reativa contatoidContato, staOperacao (E/D/R)
sei_consultar_blocoConsulta bloco de assinatura / internoidBloco, sinRetornarProtocolos
sei_excluir_blocoExclui um blocoidBloco
sei_disponibilizar_blocoDisponibiliza bloco para outras unidadesidBloco
sei_cancelar_disponibilizacao_blocoCancela disponibilização de blocoidBloco
sei_incluir_documento_blocoInclui documento em um blocoidBloco, protocoloDocumento, anotacao
sei_remover_documento_blocoRemove documento de um blocoidBloco, protocoloDocumento
sei_incluir_processo_blocoInclui processo em um blocoidBloco, protocoloProcedimento, anotacao
sei_remover_processo_blocoRemove processo de um blocoidBloco, protocoloProcedimento
sei_listar_textos_padraoLista modelos de texto padrão da unidadepalavrasPesquisa
sei_consultar_texto_padraoConsulta conteúdo de texto padrãoidTextoPadrao
sei_listar_cargosLista cargos cadastrados com vocativoidCargo
sei_listar_paisesLista países cadastradosNenhum
sei_listar_estadosLista estados por paísidPais
sei_listar_cidadesLista cidades por país e estadoidPais, idEstado
sei_listar_feriadosLista feriados de um órgãoidOrgao, dataInicial, dataFinal
sei_listar_extensoes_permitidasLista extensões de arquivo permitidasidArquivoExtensao
sei_listar_tipos_conferenciaLista tipos de conferência de documento externoNenhum

💻 Local Development & Testing

1. Install & Run Locally

# Install dependencies npm install # Run with hot-reload npm run dev

2. Verify Endpoints with curl

  • Health Check:

    curl -i http://localhost:3000/health
  • SSE Stream with Google OAuth Access Token:

    curl -N -i -H "Authorization: Bearer $(gcloud auth print-access-token)" http://localhost:3000/sse
  • Testing with Authentication Disabled (Local Only):

    OAUTH_ENABLED=false npm run dev curl -N -i http://localhost:3000/sse

🔍 Troubleshooting

  • 401 Unauthorized / 403 Forbidden:
    • 401 Unauthorized: Missing Authorization: Bearer <token> header in the request.
    • 403 Forbidden: The OAuth 2.0 token is invalid, expired, or failed audience verification against OAUTH_CLIENT_ID. Verify that the OAuth client credentials in Gemini Enterprise match the GCP project settings.
  • Connection Timeout: Ensure the Cloud Run service --timeout is set to 300 seconds or higher to support long-lived Server-Sent Events connections.
  • Health Check Endpoint: Load balancers and cloud probes can monitor /health (unauthenticated, returns HTTP 200 OK).

📄 License

This project is licensed under the MIT License .