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:
- Transporte STDIO (servidores locais)
- Transporte HTTP Streamable (padrão moderno para servidores remotos)
- Transporte SSE (opção remota legada)
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
- O Bob inicia um servidor MCP como processo filho
- A comunicação ocorre por fluxos de processo: o Bob escreve no STDIN do servidor, e o servidor responde no STDOUT
- Cada mensagem é delimitada por um caractere de nova linha
- 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
- O servidor disponibiliza um único endpoint HTTP (endpoint MCP) que suporta os métodos POST e GET
- O Bob envia requisições a esse endpoint MCP via HTTP POST
- O servidor processa a requisição e envia a resposta
- 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
- O Bob se conecta ao endpoint SSE do servidor via requisição HTTP GET
- Isso estabelece uma conexão persistente onde o servidor pode enviar eventos ao Bob
- Para comunicação do cliente para o servidor, o Bob faz requisições HTTP POST a um endpoint separado
- 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:
- STDIO com acesso à rede: Um servidor STDIO local que atua como proxy para serviços remotos
- Remoto com comandos locais: Um servidor remoto que pode acionar operações na máquina do cliente via callbacks
- Padrão gateway: Servidores STDIO para operações locais que se conectam a servidores remotos para funções especializadas
Comparação de transportes
| Consideração | STDIO | HTTP Streamable / SSE |
|---|---|---|
| Localização | Somente máquina local | Local ou remoto |
| Clientes | Cliente único | Múltiplos clientes |
| Desempenho | Menor latência | Maior latência (overhead de rede) |
| Complexidade de configuração | Mais simples | Mais complexo (requer servidor HTTP) |
| Segurança | Inerentemente seguro | Requer medidas explícitas de segurança |
| Acesso à rede | Não necessário | Necessário |
| Escalabilidade | Limitado à máquina local | Pode distribuir pela rede |
| Implantação | Instalação por usuário | Instalação centralizada |
| Atualizações | Atualizações distribuídas | Atualizações centralizadas |
| Uso de recursos | Usa recursos do cliente | Usa recursos do servidor |
| Dependências | Dependências no lado do cliente | Dependê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.