Saltar para o conteúdo principal Saltar para a navegação Saltar para o rodapé
Programa de Parceiros de Design: registe-se gratuitamente, plano BUSINESS vitalício

Configuração do Servidor MCP

Ligue agentes de IA à infraestrutura Rediacc usando o servidor Model Context Protocol (MCP).

Visão Geral

O comando rdc mcp serve inicia um servidor MCP (Model Context Protocol) local que os agentes de IA podem usar para gerir a sua infraestrutura. O servidor usa transporte stdio; o agente de IA lança-o como subprocesso e comunica via JSON-RPC.

Pré-requisitos: rdc instalado e configurado com pelo menos uma máquina.

Claude Code

Adicione ao ficheiro .mcp.json do seu projeto:

{
  "mcpServers": {
    "rdc": {
      "command": "rdc",
      "args": ["mcp", "serve"]
    }
  }
}

Ou com uma configuração com nome:

{
  "mcpServers": {
    "rdc": {
      "command": "rdc",
      "args": ["mcp", "serve", "--config", "production"]
    }
  }
}

Cursor

Abra Definições -> Servidores MCP -> Adicionar Servidor:

  • Nome: rdc
  • Comando: rdc mcp serve
  • Transporte: stdio

Ferramentas Disponíveis

Ferramentas de Leitura (seguras, sem efeitos secundários)

FerramentaDescrição
machine_queryObter informação do sistema, contentores, serviços e uso de recursos de uma máquina
machine_containersListar contentores Docker com estado, saúde, uso de recursos, labels e domínio de rota automática
machine_servicesListar serviços systemd geridos pelo rediacc (nome, estado, sub-estado, contagem de reinícios, memória, repositório proprietário)
machine_reposListar repositórios implementados (nome, GUID, tamanho, estado de montagem, estado Docker, contagem de contentores, uso de disco, data de modificação, Rediaccfile presente)
machine_healthExecutar verificação de saúde numa máquina (sistema, contentores, serviços, armazenamento)
machine_listListar todas as máquinas configuradas
config_repositoriesListar repositórios configurados com mapeamentos nome-para-GUID
config_show_infraMostrar configuração de infraestrutura para uma máquina (domínio base, IPs públicos, TLS, zona Cloudflare)
config_providersListar fornecedores de nuvem configurados para aprovisionamento de máquinas
agent_capabilitiesListar todos os comandos CLI rdc disponíveis com os seus argumentos e opções
repo_secret_listListar nomes de segredos + modos de entrega para um repositório (nunca valores, nunca digests). Seguro para leitura.
repo_secret_getObter o digest SHA-256 de um segredo + modo de entrega. O valor em texto simples nunca é devolvido por design. Use para verificar se um segredo existe ou foi rodado.

Ferramentas de Escrita (destrutivas)

FerramentaDescrição
repo_createCriar um novo repositório encriptado numa máquina
repo_upImplementar/atualizar um repositório (executa Rediaccfile up, inicia contentores). Use mount para primeira implementação ou após pull
repo_downParar contentores do repositório. Por omissão, NÃO desmonta. Use unmount para também fechar o contentor LUKS
repo_deleteEliminar um repositório (destrói contentores, volumes, imagem encriptada). Credencial arquivada para recuperação
repo_forkCriar um fork CoW com novo GUID e networkId (cópia totalmente independente, forking online suportado)
backup_pushEnviar cópia de segurança do repositório para armazenamento ou outra máquina (mesmo GUID — cópia de segurança/migração, não fork)
backup_pullReceber cópia de segurança do repositório de armazenamento ou máquina. Após pull, implementar com repo_up (mount=true)
machine_provisionAprovisionar uma nova máquina num fornecedor de nuvem usando OpenTofu
machine_deprovisionDestruir uma máquina aprovisionada na nuvem e remover da configuração
config_add_providerAdicionar uma configuração de fornecedor de nuvem para aprovisionamento de máquinas
config_remove_providerRemover uma configuração de fornecedor de nuvem
term_execExecutar um comando numa máquina remota via SSH

Exemplos de Fluxos de Trabalho

Verificar estado da máquina:

“Qual é o estado da minha máquina de produção?”

O agente chama machine_query -> devolve informação do sistema, contentores em execução, serviços e uso de recursos.

Implementar uma aplicação:

“Implementa o gitlab na minha máquina de staging”

O agente chama repo_up com name: "gitlab" e machine: "staging" -> implementa o repositório, devolve sucesso/falha.

Depurar um serviço com falhas:

“O meu nextcloud está lento, descobre o que está errado”

O agente chama machine_health -> machine_containers -> term_exec para ler os registos -> identifica o problema e sugere uma solução.

Opções de Configuração

OpçãoPredefiniçãoDescrição
--config <name>(configuração predefinida)Configuração com nome a usar para todos os comandos
--timeout <ms>120000Tempo limite predefinido do comando em milissegundos
--allow-granddesligadoPermitir operações destrutivas em repositórios grand (não-fork)

Segurança

O servidor MCP impõe duas camadas de proteção:

Modo apenas-fork (predefinição)

Por omissão, o servidor corre em modo apenas-fork; as ferramentas de escrita (repo_up, repo_down, repo_delete, backup_push, backup_pull, term_exec) só podem operar em repositórios fork. Os repositórios grand (originais) estão protegidos de modificações por agentes.

Os segredos por repositório são exclusivos da CLI por design. repo_secret_set e repo_secret_unset são intencionalmente não expostos como ferramentas MCP. As escritas requerem uma pré-condição --current <previous-value> (ou --rotate-secret para reconhecer uma rotação não verificada), e essa cerimónia precisa de ser acompanhada por um humano. Os agentes que precisem de sugerir uma rotação de segredo devem chamar repo_secret_get para confirmar o digest e depois transmitir o comando CLI orientado ao operador ao utilizador através do campo estruturado next.options[].run no envelope de erro JSON. Consulte Segurança de Agentes de IA para o padrão completo, e Repositórios — Segredos para o procedimento orientado ao utilizador.

Para permitir que um agente modifique repositórios grand, inicie com --allow-grand:

{
  "mcpServers": {
    "rdc": {
      "command": "rdc",
      "args": ["mcp", "serve", "--allow-grand"]
    }
  }
}

Também pode definir a variável de ambiente REDIACC_ALLOW_GRAND_REPO com o nome de um único repositório, uma lista separada por vírgulas de nomes de repositórios (por exemplo repo1,repo2,repo3), ou * para todos os repositórios. Os espaços em branco em torno das entradas são ignorados, pelo que repo1, repo2 também funciona. O acesso ao nível da máquina (como term connect -m <machine> sem repositório) ainda requer *; uma lista de nomes de repositórios não o desbloqueia.

Chaves SSH por repositório e sandbox do lado do servidor

Cada repositório tem o seu próprio par de chaves SSH. A chave pública é implementada em authorized_keys com um prefixo command= que força todas as sessões SSH através de renet sandbox-gateway <repo-name>, um ForceCommand do lado do servidor que não pode ser contornado por nenhum cliente, incluindo o VS Code.

Como funciona:

  1. rdc repo create ou rdc repo fork gera um par de chaves ed25519 único por repositório
  2. A chave pública é implementada no remoto com command="renet sandbox-gateway <name>"
  3. Cada ligação SSH usando essa chave passa pelo gateway, que aplica:
    • Landlock LSM, restrições de sistema de ficheiros ao nível do kernel para o caminho de montagem do repositório
    • Overlay OverlayFS do home, escritas em $HOME capturadas por repositório, leituras passam para o home real
    • TMPDIR por repositório em <datastore>/.interim/sandbox/<name>/tmp/
    • Acesso Docker via o socket Docker isolado do repositório
    • Descida de privilégios para o utilizador universal (rediacc)
  4. O .envrc do repositório é carregado automaticamente para configuração do Docker e do ambiente

RW Permitido: caminho de montagem do repositório, espaço de trabalho sandbox por repositório, diretório home (via overlay), socket Docker RO Permitido: caminhos do sistema (/usr, /bin, /etc, /proc, /sys) Bloqueado: caminhos de montagem de outros repositórios, ficheiros do sistema fora da lista de permissões

Integração com VS Code: Cada repositório tem a sua própria instalação do servidor VS Code em <datastore>/.interim/sandbox/<name>/.vscode-server/. Múltiplos repositórios podem estar abertos simultaneamente com ambientes sandbox independentes, sem partilha de servidor entre repositórios.

Isto previne o movimento lateral — mesmo que um agente obtenha acesso shell a um fork, não pode ler nem modificar outros repositórios na mesma máquina. O SSH ao nível da máquina (sem repositório) usa a chave de equipa e não tem sandbox.

Arquitetura

O servidor MCP é sem estado. Cada chamada de ferramenta lança o rdc como processo filho isolado com as flags --output json --yes --quiet. Isto significa:

  • Não há fugas de estado entre chamadas de ferramentas
  • Usa a sua configuração rdc e chaves SSH existentes
  • Funciona com os adaptadores local e cloud
  • Os erros num comando não afetam os outros