
mcp-remote exposto a injeção de comandos do SO
mcp-remoteConecte um Cliente MCP que só suporta servidores locais (stdio) a um Servidor MCP Remoto, com suporte a autenticação:
Nota: isto é uma prova de conceito funcional, mas deve ser considerado experimental.
Até agora, a maioria dos servidores MCP encontrados por aí são instalados localmente, usando o transporte stdio. Isso tem alguns benefícios: tanto o cliente quanto o servidor podem confiar implicitamente um no outro, uma vez que o usuário concedeu a ambos permissão para executar. Adicionar segredos como chaves de API pode ser feito usando variáveis de ambiente e eles nunca saem da sua máquina. E construir com base em npx e uvx também permitiu que os usuários evitassem etapas explícitas de instalação.
Mas há uma razão pela qual a maior parte do software que poderia ser movido para a web foi movida para a web: é muito mais fácil encontrar e corrigir bugs e iterar em novos recursos quando você pode enviar atualizações para todos os seus usuários com uma única implantação.
Com a mais recente especificação de Autorização do MCP, agora temos uma forma segura de compartilhar nossos servidores MCP com o mundo sem executar código nos laptops dos usuários. Ou, pelo menos, você teria, se todos os clientes MCP populares já a suportassem. A maioria é apenas stdio, e aqueles que suportam HTTP+SSE ainda não suportam os fluxos OAuth necessários.
É aí que entra o mcp-remote. Assim que o cliente MCP de sua escolha suportar servidores remotos autorizados, você pode removê-lo. Até lá, insira este one-liner e prepare-se para os clientes MCP que você quiser!
Todos os clientes MCP mais populares (Claude Desktop, Cursor e Windsurf) usam o seguinte formato de configuração:
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"mcp-remote",
"https://remote.mcp.server/sse"
]
}
}
}
Para contornar a autenticação ou emitir cabeçalhos personalizados em todas as solicitações ao seu servidor remoto, passe os argumentos de CLI --header:
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--header",
"Authorization: Bearer ${AUTH_TOKEN}"
],
"env": {
"AUTH_TOKEN": "..."
}
},
}
}
Nota: O Cursor e o Claude Desktop (Windows) têm um bug em que espaços dentro de args não são escapados quando ele invoca o npx, o que acaba danificando esses valores. Você pode contornar isso usando:
{
// rest of config...
"args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--header",
"Authorization:${AUTH_HEADER}" // note no spaces around ':'
],
"env": {
"AUTH_HEADER": "Bearer <auth-token>" // spaces OK in env vars
}
},
npx estiver gerando erros, considere adicionar -y como o primeiro argumento para aceitar automaticamente a instalação do pacote mcp-remote. "command": "npx",
"args": [
"-y"
"mcp-remote",
"https://remote.mcp.server/sse"
]
npx a sempre verificar se há uma versão atualizada do mcp-remote, adicione a flag @latest: "args": [
"mcp-remote@latest",
"https://remote.mcp.server/sse"
]
mcp-remote escuta um redirecionamento OAuth (por padrão, 3334), adicione um argumento adicional após a URL do servidor. Observe que, independentemente da porta especificada, se ela não estiver disponível, uma porta aberta será escolhida aleatoriamente. "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"9696"
]
mcp-remote registra como URL de callback OAuth (por padrão, localhost), adicione a flag --host. "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--host",
"127.0.0.1"
]
--allow-http. Nota: Isso deve ser usado apenas em redes privadas seguras, onde o tráfego não pode ser interceptado. "args": [
"mcp-remote",
"http://internal-service.vpc/sse",
"--allow-http"
]
--debug. Isso gravará logs detalhados em ~/.mcp-auth/{server_hash}_debug.log com registros de data e hora e informações detalhadas sobre o processo de autenticação, conexões e renovação de tokens. "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--debug"
]
--enable-proxy. Quando habilitado, o mcp-remote usará as configurações de proxy de variáveis de ambiente comuns (por exemplo, HTTP_PROXY, HTTPS_PROXY e NO_PROXY). "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--enable-proxy"
],
"env": {
"HTTPS_PROXY": "http://127.0.0.1:3128",
"NO_PROXY": "localhost,127.0.0.1"
}
--ignore-tool. Isso filtrará as ferramentas que correspondem aos padrões especificados tanto nas respostas de tools/list quanto bloqueará solicitações de tools/call. Suporta padrões curinga com *. "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--ignore-tool",
"delete*",
"--ignore-tool",
"remove*"
]
Você pode especificar várias flags --ignore-tool para ignorar padrões diferentes. Exemplos:
delete* - ignora todas as ferramentas que começam com "delete" (ex.: deleteTask, deleteUser)*account - ignora todas as ferramentas que terminam com "account" (ex.: getAccount, updateAccount)exactTool - ignora apenas a ferramenta chamada exatamente "exactTool"30 segundos), adicione a flag --auth-timeout com um valor em segundos. Isso é útil se o processo de autenticação no lado do servidor demorar muito. "args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--auth-timeout",
"60"
]
O MCP Remote suporta diferentes estratégias de transporte ao conectar-se a um servidor MCP. Isso permite controlar se ele usa Server-Sent Events (SSE) ou transporte HTTP, e em que ordem tenta cada um.
Especifique a estratégia de transporte com a flag --transport:
npx mcp-remote https://example.remote/server --transport sse-only
Estratégias disponíveis:
http-first (padrão): tenta o transporte HTTP primeiro e recorre ao SSE se o HTTP falhar com erro 404sse-first: tenta o transporte SSE primeiro e recorre ao HTTP se o SSE falhar com erro 405http-only: usa apenas o transporte HTTP; falha se o servidor não o suportarsse-only: usa apenas o transporte SSE; falha se o servidor não o suportarO MCP Remote suporta o fornecimento de metadados estáticos do cliente OAuth em vez de usar os padrões do mcp-remote. Isso é útil ao conectar-se a servidores OAuth que esperam IDs ou escopos específicos de cliente/software.
Forneça os metadados do cliente como uma string JSON ou como um caminho de arquivo com prefixo @ usando a flag --static-oauth-client-metadata:
npx mcp-remote https://example.remote/server --static-oauth-client-metadata '{ "scope": "space separated scopes" }'
# uses node readfile, so you probably want to use absolute paths if you're not sure what the cwd is
npx mcp-remote https://example.remote/server --static-oauth-client-metadata '@/Users/username/Library/Application Support/Claude/oauth_client_metadata.json'
De acordo com a especificação, os servidores são incentivados, mas não obrigados, a suportar o registro dinâmico de clientes OAuth.
Para esses servidores, o MCP Remote suporta o fornecimento de informações estáticas do cliente OAuth. Isso é útil ao conectar-se a servidores OAuth que exigem clientes pré-registrados.
Forneça os metadados do cliente como uma string JSON ou como um caminho de arquivo com prefixo @ usando a flag --static-oauth-client-info:
export MCP_REMOTE_CLIENT_ID=xxx
export MCP_REMOTE_CLIENT_SECRET=yyy
npx mcp-remote https://example.remote/server --static-oauth-client-info "{ \"client_id\": \"$MCP_REMOTE_CLIENT_ID\", \"client_secret\": \"$MCP_REMOTE_CLIENT_SECRET\" }"
# uses node readfile, so you probably want to use absolute paths if you're not sure what the cwd is
npx mcp-remote https://example.remote/server --static-oauth-client-info '@/Users/username/Library/Application Support/Claude/oauth_client_info.json'
Para adicionar um servidor MCP ao Claude Desktop, você precisa editar o arquivo de configuração localizado em:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonSe ele ainda não existir, talvez seja necessário ativá-lo em Configurações > Desenvolvedor.
Reinicie o Claude Desktop para aplicar as alterações no arquivo de configuração. Após reiniciar, você deve ver um ícone de martelo no canto inferior direito da caixa de entrada.
Documentação Oficial. O arquivo de configuração está localizado em ~/.cursor/mcp.json.
Desde a versão 0.48.0, o Cursor suporta servidores SSE sem autenticação diretamente. Se o seu servidor MCP estiver usando o protocolo oficial de autorização OAuth do MCP, você ainda precisa adicionar um servidor "command" e chamar o mcp-remote.
Documentação Oficial. O arquivo de configuração está localizado em ~/.codeium/windsurf/mcp_config.json.
Para instruções sobre como construir e implantar servidores MCP remotos, incluindo atuar como um cliente OAuth válido, consulte os seguintes recursos:
Em particular, consulte:
McpAgent usando o framework agents.Para obter mais informações sobre como testar esses servidores, consulte também:
Conhece mais recursos que gostaria de compartilhar? Por favor, adicione-os a este Readme e envie um PR!
~/.mcp-authO mcp-remote armazena todas as informações de credenciais dentro de ~/.mcp-auth (ou onde quer que seu MCP_REMOTE_CONFIG_DIR aponte). Se você estiver tendo problemas persistentes, tente executar:
rm -rf ~/.mcp-auth
Em seguida, reinicie seu cliente MCP.
Certifique-se de que a versão do Node que você tem instalada é 18 ou superior. O Claude Desktop usará a versão do Node do seu sistema, mesmo que você tenha uma versão mais nova instalada em outro lugar.
Ao modificar o claude_desktop_config.json, pode ser útil reiniciar completamente o Claude.
Você pode encontrar problemas se estiver atrás de uma VPN; tente definir a variável de ambiente NODE_EXTRA_CA_CERTS
para apontar para o arquivo de certificado da CA. Se estiver usando claude_desktop_config.json,
isso pode parecer:
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"mcp-remote",
"https://remote.mcp.server/sse"
],
"env": {
"NODE_EXTRA_CA_CERTS": "{your CA certificate file path}.pem"
}
}
}
}
tail -n 20 -F ~/Library/Logs/Claude/mcp*.logtail -n 20 -f "C:\Users\YourUsername\AppData\Local\Claude\Logs\mcp.log"Get-Content "C:\Users\YourUsername\AppData\Local\Claude\Logs\mcp.log" -Wait -Tail 20Para solucionar problemas complexos, especialmente com renovação de tokens ou problemas de autenticação, use a flag --debug:
"args": [
"mcp-remote",
"https://remote.mcp.server/sse",
"--debug"
]
Isso cria logs detalhados em ~/.mcp-auth/{server_hash}_debug.log com registros de data e hora e informações completas sobre cada etapa do processo de conexão e autenticação. Quando você encontrar problemas com renovação de tokens, problemas de suspensão/retomada do laptop ou problemas de autenticação, forneça esses logs ao buscar suporte.
Se você encontrar o seguinte erro, retornado pela URL /callback:
Authentication Error
Token exchange failed: HTTP 400
Você pode executar rm -rf ~/.mcp-auth para limpar qualquer estado e tokens armazenados localmente.
Execute o seguinte na linha de comando (não a partir de um servidor MCP):
npx -p mcp-remote@latest mcp-remote-client https://remote.mcp.server/sse
Isso executará todo o fluxo de autorização e tentará listar as ferramentas e os recursos na URL remota. Experimente isso depois de executar rm -rf ~/.mcp-auth para ver se credenciais desatualizadas são o seu problema; caso contrário, esperamos que o problema fique mais óbvio nesses logs do que nos do seu cliente MCP.