If you're running Team Relay to sync Obsidian vaults across your team, this server gives AI agents direct read/write access to those vaults through standard MCP tools. It wraps the Team Relay REST API so your agent can list shares, read files by path, and upsert documents without touching the shell. Authentication happens automatically via agent keys or email/password, and changes sync in real time through Yjs CRDTs. Works with Claude Code, Codex CLI, or any MCP client over stdio or HTTP. Use it when you want your agent working directly in your vault instead of managing separate knowledge bases or calling out to bash scripts.
RELAY_CP_URL*URL of the Team Relay control plane (e.g. https://cp.yourdomain.com)
RELAY_EMAIL*Email address for authenticating with the Team Relay server
RELAY_PASSWORD*secretPassword for authenticating with the Team Relay server
Give your AI agent read/write access to your Obsidian vault.
Your agent reads your notes, creates new ones, and stays in sync — all through the Team Relay API.
Works with Claude Code, Codex CLI, OpenCode, and any MCP-compatible client.
Option A — from PyPI (recommended):
No installation needed — uvx downloads and runs automatically. Skip to step 2.
Option B — from source:
git clone https://github.com/entire-vc/evc-team-relay-mcp.git
cd evc-team-relay-mcp
uv sync # or: pip install .
Add the MCP server to your tool's config. Choose one authentication method:
Agent key (recommended) — create a key in the Obsidian plugin → Team Relay settings → Agent Keys. Supports read and write: list_files, read_file, tr_search, and upsert_file all work with a single key. Quickstart →
Email + password — use a dedicated agent account on your Relay instance.
Add to .mcp.json in your project root or ~/.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"
}
}
}
}
{
"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"
}
}
}
}
Add to your 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"
}
}
}
}
Add to 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"
}
}
}
}
If you installed from source instead of PyPI, replace "command": "uvx" / "args": ["evc-team-relay-mcp"] with:
"command": "uv",
"args": ["run", "--directory", "/path/to/evc-team-relay-mcp", "relay_mcp.py"]
Environment variables:
| Variable | Required | Description |
|---|---|---|
RELAY_CP_URL | Yes | Control plane base URL |
RELAY_AGENT_KEY | One of | Agent key from plugin settings — read + write (recommended) |
RELAY_EMAIL | One of | Account email (email/password mode) |
RELAY_PASSWORD | One of | Account password (email/password mode) |
Ready-to-copy config templates are also in config/.
Your AI agent now has these tools:
| Tool | Description |
|---|---|
authenticate | Authenticate with credentials (auto-managed) |
list_shares | List accessible shares (filter by kind, ownership) |
list_files | List files in a folder share |
read_file | Read a file by path from a folder share |
read_document | Read document by doc_id (low-level) |
upsert_file | Create or update a file by path |
write_document | Write to a document by doc_id |
delete_file | Delete a file from a folder share |
Typical workflow: list_shares -> list_files -> read_file / upsert_file
Authentication is automatic — the server logs in and refreshes tokens internally.
For shared or server-side deployments, run as an HTTP server:
# 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
Then configure your MCP client to connect via HTTP:
{
"mcpServers": {
"evc-relay": {
"type": "streamable-http",
"url": "http://your-server:8888/mcp"
}
}
}
The MCP server provides significant security advantages over shell-based integrations:
ps output)Note: If you're using the OpenClaw skill (bash scripts), consider migrating to this MCP server for a more secure and maintainable integration.
┌─────────────┐ 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 └──────────────┘
The MCP server wraps Team Relay's REST API into standard MCP tools. Team Relay stores documents as Yjs CRDTs and syncs them to Obsidian clients in real-time. Changes made by the agent appear in Obsidian instantly — and vice versa.
| Product | What it does | Link |
|---|---|---|
| Team Relay | Self-hosted collaboration server | repo |
| Team Relay Plugin | Obsidian plugin for Team Relay | repo |
| Relay MCP | MCP server for AI agents | this repo |
| OpenClaw Skill | OpenClaw agent skill (bash) | repo |
| Local Sync | Vault <-> AI dev tools sync | repo |
| Spark MCP | MCP server for AI workflow catalog | repo |
MIT
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent