Team Relay MCP
Leia, pesquise e escreva notas do cofre Obsidian através do servidor colaborativo Team Relay. Suporta pastas compartilhadas e sincronização em tempo real.
Documentação
EVC Team Relay - Servidor MCP
Dê ao seu agente de IA acesso de leitura/escrita ao seu cofre Obsidian.
Seu agente lê suas notas, cria novas e permanece sincronizado — tudo através da API Team Relay.
Funciona com Claude Code, Codex CLI, OpenCode e qualquer cliente compatível com MCP.
Início Rápido
1. Instalação
Opção A — via PyPI (recomendado):
Nenhuma instalação necessária — uvx baixa e executa automaticamente. Pule para a etapa 2.
Opção B — a partir do código-fonte:
git clone https://github.com/entire-vc/evc-team-relay-mcp.git
cd evc-team-relay-mcp
uv sync # or: pip install .
2. Configure sua ferramenta de IA
Adicione o servidor MCP à configuração da sua ferramenta. Escolha um método de autenticação:
Chave de agente (recomendado) — crie uma chave nas configurações do plugin Obsidian → Team Relay → Chaves de Agente. Suporta leitura e escrita: list_files, read_file, tr_search e upsert_file funcionam com uma única chave. Início rápido →
E-mail + senha — use uma conta de agente dedicada na sua instância Relay.
Claude Code — chave de agente
Adicione ao .mcp.json na raiz do seu projeto ou ao ~/.claude/.mcp.json:
{
"mcpServers": {
"evc-relay": {
"command": "uvx",
"args": ["evc-team-relay-mcp"],
"env": {
"RELAY_CP_URL": "https://cp.yourdomain.com",
"RELAY_AGENT_KEY": "tr_agent_your_key_here"
}
}
}
}
Claude Code — e-mail/senha
{
"mcpServers": {
"evc-relay": {
"command": "uvx",
"args": ["evc-team-relay-mcp"],
"env": {
"RELAY_CP_URL": "https://cp.yourdomain.com",
"RELAY_EMAIL": "agent@yourdomain.com",
"RELAY_PASSWORD": "your-password"
}
}
}
}
Codex CLI
Adicione ao seu codex.json:
{
"mcp_servers": {
"evc-relay": {
"type": "stdio",
"command": "uvx",
"args": ["evc-team-relay-mcp"],
"env": {
"RELAY_CP_URL": "https://cp.yourdomain.com",
"RELAY_AGENT_KEY": "tr_agent_your_key_here"
}
}
}
}
OpenCode
Adicione ao opencode.json:
{
"mcpServers": {
"evc-relay": {
"command": "uvx",
"args": ["evc-team-relay-mcp"],
"env": {
"RELAY_CP_URL": "https://cp.yourdomain.com",
"RELAY_AGENT_KEY": "tr_agent_your_key_here"
}
}
}
}
A partir do código-fonte (todas as ferramentas)
Se você instalou a partir do código-fonte em vez do PyPI, substitua "command": "uvx" / "args": ["evc-team-relay-mcp"] por:
"command": "uv",
"args": ["run", "--directory", "/path/to/evc-team-relay-mcp", "relay_mcp.py"]
Variáveis de ambiente:
| Variável | Obrigatória | Descrição |
|---|---|---|
RELAY_CP_URL | Sim | URL base do plano de controle |
RELAY_AGENT_KEY | Uma de | Chave de agente das configurações do plugin — leitura + escrita (recomendado) |
RELAY_EMAIL | Uma de | E-mail da conta (modo e-mail/senha) |
RELAY_PASSWORD | Uma de | Senha da conta (modo e-mail/senha) |
Modelos de configuração prontos para copiar também estão em config/.
3. Use
Seu agente de IA agora tem estas ferramentas:
| Ferramenta | Descrição |
|---|---|
authenticate | Autenticar com credenciais (gerenciado automaticamente) |
list_shares | Listar compartilhamentos acessíveis (filtrar por tipo, propriedade) |
list_files | Listar arquivos em um compartilhamento de pasta |
read_file | Ler um arquivo por caminho de um compartilhamento de pasta |
read_document | Não implementado — sem rota de backend em qualquer modo de autenticação, sempre gera erro |
upsert_file | Criar ou atualizar um arquivo por caminho — somente no modo chave de agente; gera erro no modo e-mail/senha (JWT) |
write_document | Não implementado — sem rota de backend em qualquer modo de autenticação, sempre gera erro |
delete_file | Não implementado — sem rota de backend em qualquer modo de autenticação, sempre gera erro |
Fluxo de trabalho típico: list_shares -> list_files -> read_file / upsert_file
A autenticação é automática — o servidor faz login e renova tokens internamente.
Matriz de disponibilidade de ferramentas
Nem toda ferramenta funciona em todos os modos de autenticação, e um grupo não funciona em nenhum modo — são dois fatos não relacionados, então não os confunda:
| Grupo | Ferramentas | Status |
|---|---|---|
| Chave de agente, compartilhamentos de pasta | list_files, read_file, upsert_file | Funcionando — o único caminho de escrita neste servidor MCP |
| JWT (e-mail/senha) | list_files, tr_search, read_file | Funcionando, somente leitura por design |
| Sem rota de backend em nenhum modo | read_document, write_document, delete_file | Sempre gera ValueError — não é uma restrição de autenticação |
- O acesso de escrita é somente com chave de agente, por política sancionada (veja
TR-05 (#0cdd5328)):
upsert_fileé a única ferramenta de escrita com rota de backend funcional, e ela só escreve quando uma chave de agente (RELAY_AGENT_KEY/RELAY_AGENT_KEYS) está configurada. Chamarupsert_fileno modo JWT gera umValueErrorclaro indicando o modo chave de agente como solução, em vez de um 404 confuso. read_document,write_documentedelete_filesão uma lacuna separada e independente — o plano de controle não tem rota de backend para eles de forma alguma, nem no modo chave de agente. Trocar para uma chave de agente não fará com que funcionem: o conteúdo ao vivo de compartilhamentos de documentos é somente CRDT/WebSocket (sem ponte REST), e a exclusão por arquivo não tem rotaDELETEno servidor ainda. Se rotas para esses forem adicionadas no futuro, elas ainda seguiriam a política de escrita somente com chave de agente acima — JWT permaneceria somente leitura.
Implantação Remota (Transporte HTTP)
Para implantações compartilhadas ou do lado do servidor, execute como um servidor HTTP:
# Direct
uv run relay_mcp.py --transport http --port 8888
# Docker (pulls from Docker Hub automatically)
RELAY_CP_URL=https://cp.yourdomain.com \
RELAY_EMAIL=agent@yourdomain.com \
RELAY_PASSWORD=your-password \
docker compose up -d
# Or pull explicitly
docker pull deadalusevc/evc-team-relay-mcp:latest
Por padrão, o servidor vincula-se a 127.0.0.1 (somente localhost) — o endpoint não é
acessível pela rede, mesmo que o host tenha um IP público. Isso corresponde ao caso
comum de um único cliente MCP na mesma máquina que o servidor.
Em seguida, configure seu cliente MCP para conectar via HTTP:
{
"mcpServers": {
"evc-relay": {
"type": "streamable-http",
"url": "http://127.0.0.1:8888/mcp"
}
}
}
Acesso remoto via túnel SSH (recomendado)
Se seu cliente MCP roda em uma máquina diferente do servidor, faça um túnel para a porta vinculada ao localhost em vez de expô-la publicamente:
# From the client machine, forward local 8888 to the server's localhost:8888
ssh -N -L 8888:127.0.0.1:8888 user@your-server
Depois aponte a configuração do cliente para http://127.0.0.1:8888/mcp como acima — o tráfego
passa pelo túnel SSH, e o endereço de vinculação do servidor nunca precisa mudar.
Vinculação pública / proxy reverso (opt-in)
Se você realmente precisar que o servidor aceite conexões de outros hosts diretamente
(por exemplo, atrás de um proxy reverso que termina TLS e lida com autenticação), passe
--host explicitamente:
uv run relay_mcp.py --transport http --port 8888 --host 0.0.0.0
Faça isso somente atrás de um proxy reverso ou firewall — o endpoint HTTP do MCP
não tem autenticação embutida, então vinculá-lo a 0.0.0.0 em uma rede aberta
expõe todas as chamadas de ferramentas do relay a qualquer pessoa que alcance a porta.
Segurança
O servidor MCP oferece vantagens significativas de segurança em relação a integrações baseadas em shell:
- Sem execução de shell — todas as operações são chamadas de funções Python via JSON-RPC, eliminando riscos de injeção de comandos
- Sem argumentos de CLI — credenciais e tokens nunca são passados como argumentos de processo (invisíveis na saída de
ps) - Gerenciamento automático de tokens — o servidor lida com login, renovação de JWT e ciclo de vida de tokens internamente; o agente nunca toca em tokens brutos
- Entradas tipadas — todos os parâmetros são validados contra o JSON Schema antes da execução
- Processo único persistente — sem spawn de shell por chamada, sem vazamento de ambiente entre invocações
Nota: Se você está usando a habilidade OpenClaw (scripts bash), considere migrar para este servidor MCP para uma integração mais segura e sustentável.
Como Funciona
┌─────────────┐ MCP ┌──────────────┐ REST API ┌──────────────┐ Yjs CRDT ┌──────────────┐
│ AI Agent │ ◄────────────► │ MCP Server │ ◄─────────────► │ Team Relay │ ◄──────────────► │ Obsidian │
│ (any tool) │ stdio / HTTP │ (this repo) │ read/write │ Server │ real-time │ Client │
└─────────────┘ └──────────────┘ └──────────────┘ sync └──────────────┘
O servidor MCP encapsula a API REST do Team Relay em ferramentas MCP padrão. O Team Relay armazena documentos como CRDTs Yjs e os sincroniza com clientes Obsidian em tempo real. Alterações feitas pelo agente aparecem no Obsidian instantaneamente — e vice-versa.
Pré-requisitos
- Python 3.10+ com uv (recomendado) ou pip
- Uma instância EVC Team Relay em execução (auto-hospedada ou hospedada)
- Uma conta de usuário no plano de controle do Relay
Parte de Todo o Kit de Ferramentas VC
| Produto | O que faz | Link |
|---|---|---|
| Team Relay | Servidor de colaboração auto-hospedado | repositório |
| Team Relay Plugin | Plugin Obsidian para Team Relay | repositório |
| Relay MCP | Servidor MCP para agentes de IA | este repositório |
| OpenClaw Skill | Habilidade de agente OpenClaw (bash) | repositório |
| Local Sync | Sincronização do cofre <-> ferramentas de desenvolvimento de IA | repositório |
| Spark MCP | Servidor MCP para catálogo de fluxos de trabalho de IA | repositório |
Comunidade
Licença
MIT