Transportes de servidor MCP

O MCP suporta mecanismos de transporte para comunicação entre o Bob Shell e servidores MCP.

Visão geral

O MCP oferece três opções de transporte, cada uma adequada para diferentes cenários de implantação:

Cada transporte tem características, vantagens e casos de uso distintos.

Transporte STDIO

O transporte STDIO é executado localmente na sua máquina e se comunica via fluxos de entrada/saída padrão.

Como funciona o transporte STDIO

  1. O Bob inicia um servidor MCP como processo filho
  2. A comunicação ocorre por fluxos de processo: o Bob escreve no STDIN do servidor, e o servidor responde no STDOUT
  3. Cada mensagem é delimitada por um caractere de nova linha
  4. As mensagens são formatadas como JSON-RPC 2.0
Cliente                   Servidor
  |                         |
  |---- mensagem JSON ----->| (via STDIN)
  |                         | (processa requisição)
  |<---- mensagem JSON -----| (via STDOUT)
  |                         |

Características do STDIO

  • Localidade: Executa na mesma máquina que o Bob
  • Desempenho: Latência e overhead muito baixos (sem camada de rede)
  • Simplicidade: Comunicação direta entre processos sem configuração de rede
  • Relacionamento: Relacionamento um-para-um entre cliente e servidor
  • Segurança: Inerentemente mais seguro sem exposição de rede

Quando usar STDIO

O transporte STDIO é ideal para:

  • Integrações locais e ferramentas na mesma máquina
  • Operações sensíveis à segurança
  • Requisitos de baixa latência
  • Cenários com cliente único (uma instância do Bob por servidor)
  • Ferramentas de linha de comando e scripts

Exemplo de implementação STDIO

const server = new Server({name: 'servidor-local', version: '1.0.0'});
// Registrar ferramentas...

// Usar transporte STDIO
const transport = new StdioServerTransport(server);
transport.listen();

Transporte HTTP Streamable

O transporte HTTP Streamable é o padrão moderno para comunicação remota com servidores MCP, substituindo o transporte HTTP+SSE mais antigo. Opera sobre HTTP/HTTPS e permite implementações de servidor mais flexíveis.

Como funciona o transporte HTTP Streamable

  1. O servidor disponibiliza um único endpoint HTTP (endpoint MCP) que suporta os métodos POST e GET
  2. O Bob envia requisições a esse endpoint MCP via HTTP POST
  3. O servidor processa a requisição e envia a resposta
  4. Opcionalmente, o servidor pode usar Server-Sent Events (SSE) na mesma conexão para transmitir múltiplas mensagens ou notificações ao Bob

Isso permite interações simples de requisição-resposta, além de streaming avançado e comunicação iniciada pelo servidor.

Cliente                            Servidor
  |                                  |
  |---- HTTP POST /endpoint_mcp ---->| (requisição do cliente)
  |                                  | (processa requisição)
  |<--- Resposta HTTP / Stream SSE --| (resposta / stream do servidor)
  |                                  |

Características do HTTP Streamable

  • Padrão moderno: Método preferido para novas implementações remotas de servidores MCP
  • Acesso remoto: Pode ser hospedado em uma máquina diferente do Bob
  • Escalabilidade: Pode lidar com múltiplas conexões de clientes simultaneamente
  • Protocolo: Funciona sobre HTTP/HTTPS padrão
  • Flexibilidade: Suporta requisição-resposta simples e streaming avançado
  • Endpoint único: Usa um único caminho de URL para toda a comunicação MCP
  • Autenticação: Pode usar mecanismos de autenticação HTTP padrão
  • Compatibilidade retroativa: Servidores podem manter compatibilidade com clientes HTTP+SSE mais antigos

Quando usar HTTP Streamable

O transporte HTTP Streamable é ideal para:

  • Todo novo desenvolvimento de servidores MCP remotos
  • Servidores que exigem comunicação robusta, escalável e flexível
  • Integrações que possam envolver streaming de dados ou notificações enviadas pelo servidor
  • Serviços públicos ou ferramentas centralizadas
  • Substituição de implementações legadas de transporte SSE

Exemplo de implementação HTTP Streamable

Configuração em ~/.bob/mcp_settings.json (global) ou .bob/mcp.json (projeto):

{
  "mcpServers": {
    "NomeDoMCPHTTPStreamable": {
      "httpURL": "http://localhost:8080/mcp"
    }
  }
}

Para implementação no lado do servidor, consulte a documentação do SDK MCP para StreamableHTTPClientTransport.

Compatibilidade retroativa com HTTP+SSE

Clientes e servidores podem manter compatibilidade retroativa com o transporte HTTP+SSE obsoleto.

Servidores que queiram suportar clientes mais antigos devem continuar a hospedar os endpoints SSE (/events) e POST (/message) do transporte antigo, junto com o novo endpoint MCP definido para o transporte HTTP Streamable.

Transporte SSE (legado)

O transporte Server-Sent Events (SSE) é executado em um servidor remoto e se comunica via HTTP/HTTPS. Para novos servidores remotos, use o transporte HTTP Streamable.

Como funciona o transporte SSE

  1. O Bob se conecta ao endpoint SSE do servidor via requisição HTTP GET
  2. Isso estabelece uma conexão persistente onde o servidor pode enviar eventos ao Bob
  3. Para comunicação do cliente para o servidor, o Bob faz requisições HTTP POST a um endpoint separado
  4. A comunicação ocorre em dois canais:
    • Stream de eventos (GET): atualizações do servidor para o cliente
    • Endpoint de mensagens (POST): requisições do cliente para o servidor
Cliente                            Servidor
  |                                  |
  |---- HTTP GET /events ----------->| (estabelecer conexão SSE)
  |<---- stream de eventos SSE ------| (conexão persistente)
  |                                  |
  |---- HTTP POST /message --------->| (requisição do cliente)
  |<---- evento SSE com resposta ----| (resposta do servidor)
  |                                  |

Características do SSE

  • Acesso remoto: Pode ser hospedado em uma máquina diferente do Bob
  • Escalabilidade: Pode lidar com múltiplas conexões de clientes simultaneamente
  • Protocolo: Funciona sobre HTTP padrão (sem protocolos especiais)
  • Persistência: Mantém uma conexão persistente para mensagens do servidor para o cliente
  • Autenticação: Pode usar mecanismos de autenticação HTTP padrão

Quando usar SSE

O transporte SSE é adequado para:

  • Acesso remoto por redes
  • Cenários com múltiplos clientes
  • Serviços públicos
  • Ferramentas centralizadas que muitos usuários precisam acessar
  • Integração com serviços web

Exemplo de implementação SSE

import express from 'express';

const app = express();
const server = new Server({name: 'servidor-remoto', version: '1.0.0'});
// Registrar ferramentas...

// Usar transporte SSE
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('Servidor MCP ouvindo na porta 3000');
});

Considerações de implantação

A escolha entre STDIO e transportes remotos (HTTP Streamable ou SSE) impacta diretamente como você implanta e gerencia seus servidores MCP.

STDIO: Implantação local

Servidores STDIO são executados localmente na mesma máquina que o Bob:

  • Instalação: O executável do servidor deve ser instalado em cada máquina do usuário
  • Distribuição: É necessário fornecer pacotes de instalação para diferentes sistemas operacionais
  • Atualizações: Cada instância deve ser atualizada separadamente
  • Recursos: Usa CPU, memória e disco da máquina local
  • Controle de acesso: Depende das permissões do sistema de arquivos local
  • Integração: Fácil integração com recursos do sistema local (arquivos, processos)
  • Execução: Inicia e para com o Bob (ciclo de vida de processo filho)
  • Dependências: Quaisquer dependências devem ser instaladas na máquina do usuário

Exemplo de caso de uso:

Uma ferramenta local de busca em arquivos usando STDIO:

  • Executa na sua máquina
  • Tem acesso direto ao sistema de arquivos local
  • Inicia quando necessário pelo Bob
  • Não requer configuração de rede
  • Precisa ser instalada junto com o Bob ou via gerenciador de pacotes

Remoto: Implantação hospedada

Servidores remotos (HTTP Streamable ou SSE) podem ser implantados em servidores remotos e acessados pela rede:

  • Instalação: Instalado uma vez em um servidor, acessado por muitos usuários
  • Distribuição: Uma única implantação atende múltiplos clientes
  • Atualizações: Atualizações centralizadas afetam todos os usuários imediatamente
  • Recursos: Usa recursos do servidor, não da máquina local
  • Controle de acesso: Gerenciado por sistemas de autenticação e autorização
  • Integração: Integração mais complexa com recursos específicos de usuário
  • Execução: Executa como serviço independente (frequentemente de forma contínua)
  • Dependências: Gerenciadas no servidor, não nas máquinas dos usuários

Exemplo de caso de uso:

Uma ferramenta de consulta a banco de dados usando transporte remoto:

  • Executa em um servidor central
  • Conecta a bancos de dados com credenciais do lado do servidor
  • Fica disponível continuamente para múltiplos usuários
  • Requer configuração adequada de segurança de rede
  • É implantada usando tecnologias de container ou nuvem

Abordagens híbridas

Alguns cenários se beneficiam de uma abordagem híbrida:

  1. STDIO com acesso à rede: Um servidor STDIO local que atua como proxy para serviços remotos
  2. Remoto com comandos locais: Um servidor remoto que pode acionar operações na máquina do cliente via callbacks
  3. Padrão gateway: Servidores STDIO para operações locais que se conectam a servidores remotos para funções especializadas

Comparação de transportes

ConsideraçãoSTDIOHTTP Streamable / SSE
LocalizaçãoSomente máquina localLocal ou remoto
ClientesCliente únicoMúltiplos clientes
DesempenhoMenor latênciaMaior latência (overhead de rede)
Complexidade de configuraçãoMais simplesMais complexo (requer servidor HTTP)
SegurançaInerentemente seguroRequer medidas explícitas de segurança
Acesso à redeNão necessárioNecessário
EscalabilidadeLimitado à máquina localPode distribuir pela rede
ImplantaçãoInstalação por usuárioInstalação centralizada
AtualizaçõesAtualizações distribuídasAtualizações centralizadas
Uso de recursosUsa recursos do clienteUsa recursos do servidor
DependênciasDependências no lado do clienteDependências no lado do servidor

Configurar transportes no Bob Shell

Para informações detalhadas sobre como configurar transportes no Bob Shell, incluindo exemplos de configuração, veja MCP no Bob Shell.

Como está este tópico?