evc-team-relay-mcp

evc-team-relay-mcp

от entire-vc
MCP-сервер, дающий AI-агентам прямой доступ к заметкам Obsidian: чтение, запись и синхронизация через Team Relay API. Работает с Claude Code, Codex CLI и любыми MCP-клиентами. Безопасный JSON-RPC б...

EVC Team Relay - MCP Server

PyPI Docker Hub License: MIT MCP Smithery Install via Spark

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.

evc-team-relay-mcp MCP server

Quick Start

1. Install

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 .
2. Configure your AI tool

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.

Claude Code — agent key

Add to .mcp.json in your project root or ~/.claude/.mcp.json:

Инструменты были проиндексированы:
authenticateтолько чтениеидемпотентныйвнешний мир

Проверяет, какой режим аутентификации активен (agent key или email/password), и авторизуется, если нужно. Не принимает аргументов; вызовите его первым, один раз, перед любым другим инструментом. В режиме agent key (задана переменная RELAY_AGENT_KEY или RELAY_AGENT_KEYS): вход не нужен, каждый запрос передаёт X-Agent-Key напрямую, этот инструмент просто сообщает, какой режим активен. В режиме email/password: авторизуется с помощью переменных окружения RELAY_EMAIL и RELAY_PASSWORD. Полученный токен хранится внутри инструмента; последующие вызовы инструментов используют его автоматически - вам никогда не придётся передавать его самостоятельно.

Параметры

Без параметров.

delete_fileидемпотентныйвнешний мир

Зарезервировано для удаления отдельных файлов; пока недоступно на сервере. Всегда выбрасывает исключение: у control-plane нет маршрута DELETE для отдельного файла folder-share НИ В ОДНОМ режиме аутентификации (agent-key или JWT). Дело не в разнице между JWT и agent-key, удаление отдельных файлов просто ещё не реализовано на стороне сервера. Учтите, это не связано с политикой записи только для agent-key, которая управляет upsert_file: даже когда (или если) маршрут удаления появится, он будет следовать той же политике (только agent-key, JWT только для чтения). Аргументы: share_id: UUID folder-share. file_path: Путь к файлу внутри папки (например, "old-note.md").

Параметры
  • file_pathstringобязательный

    Путь к файлу внутри папки, например "old-note.md".

  • share_idstringобязательный

    UUID общей папки.

list_filesтолько чтениеидемпотентныйвнешний мир

Перечисляет все файлы в общей папке с их метаданными. Только чтение; не загружает содержимое файлов (для этого используйте read_file). В режиме agent-key (заданы RELAY_AGENT_KEYS или RELAY_AGENT_KEY): использует endpoint agent-key; share_id может быть UUID или веб-слагом. В режиме email/пароль: share_id должен быть UUID. Args: share_id: UUID или веб-слаг общего доступа к папке, например "a1b2c3d4-..." или "research-vault". Returns: Объект с share_id и картой файлов (path -> metadata). Точный набор ключей метаданных для каждого файла управляется сервером, поэтому здесь используется свободная структура dict[str, Any], а не строгая схема с фиксированными полями.

Параметры
  • share_idstringобязательный

    UUID или веб-слаг общего доступа к папке, как возвращает list_shares.

list_sharesтолько чтениеидемпотентныйвнешний мир

Перечисляет общие папки и документы, к которым есть доступ у этого ключа или аккаунта. Перечисляет только то, на что выдан режим авторизации или ключ - доступ не создаёт и не меняет. Пример: list_shares(kind="folder"). В режиме нескольких ключей (задан RELAY_AGENT_KEYS): возвращает метаданные по каждому share, для которого настроен ключ; данные берутся через авторизацию по agent-key отдельно для каждого share. RELAY_AGENT_KEYS обычно строится по UUID share, но endpoint с чистыми метаданными share (/v1/web/shares/{ref}) разрешает только веб-слаги: UUID там всегда отдаёт 404. В таком случае инструмент переключается на files-index endpoint, адресуемый по UUID. Он доказывает, что share настоящий и доступный, но не может сообщить kind/path/visibility (вернётся kind="unknown" и file_count вместо них). Сбой по отдельному share (плохой ключ, не тот share, share действительно пропал) НИКОГДА не отбрасывается молча - он попадает в поле errors ответа. «Не удалось проверить этот share» и «проверил, его не существует» должны оставаться различимыми; именно схлопывание обоих случаев в пустой список и приводило к тому, что проблема с конфигом или авторизацией читалась как «у вас нет share». В режиме одного ключа (только RELAY_AGENT_KEY): возвращает пустой список - единственный ключ привязан к одному share, но к какому именно, неизвестно; вызывайте list_files или tr_search напрямую с известным share_id. В режиме email/password: возвращает все share, к которым у пользователя есть доступ. Аргументы: kind: Фильтр по типу share - "doc" или "folder". Пусто - значит все. owned_only: Если true, возвращает только share, принадлежащие пользователю (только в режиме email/password). Возвращает: При полном успехе: голый JSON-массив share (id, kind, path, visibility, user_role - или id/kind="unknown"/file_count для записей, разрешённых по UUID). Если какой-то share не удалось разрешить: JSON-объект {"shares": [...], "errors": {share_ref: "reason"}} вместо молча укороченного массива.

Параметры
  • kindstring

    Фильтрует по типу объекта: "doc" или "folder". Пустая строка возвращает все типы.

  • owned_onlyboolean

    Возвращает только доли, принадлежащие аутентифицированному пользователю. Только в режиме email/password; в режиме agent-key игнорируется.

read_documentтолько чтениеидемпотентныйвнешний мир

Зарезервировано для живого содержимого документа; пока недоступно на сервере, используйте read_file. Всегда выбрасывает исключение: у control-plane нет REST-маршрута для чтения живого содержимого документа по ID ни для общих ресурсов типа DOC, ни для doc_id файла в общем ресурсе-папке (этого понятия нет в текущей модели синхронизации папок на основе CAS). Это реальный пробел в бэкенде, а не ограничение agent-key против JWT. Вместо этого используйте read_file для общих ресурсов-папок: он работает и в режиме agent-key, и в режиме JWT. Аргументы: share_id: UUID общего ресурса (для проверки ACL). doc_id: UUID документа. По умолчанию равен share_id для общих ресурсов документов. key: ключ общего типа Yjs. По умолчанию "contents".

Параметры
  • doc_idstring

    UUID документа. По умолчанию принимает значение share_id, если не указан.

  • keystring

    Ключ shared-типа Yjs, в котором хранится содержимое документа.

  • share_idstringобязательный

    UUID общего ресурса, используется для проверки доступа.

read_fileтолько чтениеидемпотентныйвнешний мир

Читает один файл из общей папки по его пути. Только чтение. Возвращает полное содержимое файла одним ответом, частичного или диапазонного чтения нет. В режиме agent-key (когда задан RELAY_AGENT_KEY): получает через endpoint загрузки agent-key; share_id может быть UUID или web slug. В режиме email/пароль: получает через тот же CAS endpoint загрузки, что и режим agent-key, через Bearer JWT вместо X-Agent-Key; share_id должен быть UUID. Аргументы: share_id: UUID или web slug общей папки. file_path: путь к файлу внутри папки (например, "Marketing/plan.md"). Возвращает: {"path", "content", "format"} при успехе или {"error": ...}, если файл не существует. Это две разные формы ответа при одном и том же результате, эквивалентном HTTP-статусу 200, поэтому используется dict[str, Any], а не строгая схема по полям (более строгая схема отклонила бы форму ошибки как недопустимый вывод).

Параметры
  • file_pathstringобязательный

    Путь к файлу внутри общего ресурса, например "notes/todo.md".

  • share_idstringобязательный

    UUID или веб-слаг общего доступа к папке, как возвращает list_shares.

tr_searchтолько чтениеидемпотентныйвнешний мир

Находит файлы в общей папке по совпадению без учёта регистра в пути или имени. Только чтение; не скачивает содержимое файлов (для этого используйте read_file). Пример: tr_search(share_id="research-vault", query="roadmap"). В режиме agent-key (RELAY_AGENT_KEY задан): share_id может быть UUID или web slug. В режиме email/password: share_id должен быть UUID. Аргументы: share_id: UUID или web slug общей папки. query: Строка поиска, которая сопоставляется с путями файлов без учёта регистра. limit: Максимальное число возвращаемых результатов (по умолчанию 20). Возвращает: JSON-список совпавших файлов: [{"id": doc_id_or_null, "title": filename_without_ext, "path": full_path, "relay_url": "relay://<slug>/<path>", "updated_at": null}]

Параметры
  • limitinteger

    Возвращает максимальное количество совпадений.

  • querystringобязательный

    Подстрока без учёта регистра, которая сопоставляется с путями к файлам.

  • share_idstringобязательный

    UUID или web slug папки общего доступа, возвращаемые list_shares.

upsert_fileидемпотентныйвнешний мир

Создаёт или перезаписывает файл в общей папке; он синхронизируется в хранилища подписчиков. Только с ключом агента. Доступ на запись только с ключом агента, так и задумано - это санкционированная постоянная политика (а не временный пробел): режим ключа агента - единственный разрешённый путь записи в этом MCP-сервере. Режим ключа агента (задан RELAY_AGENT_KEY): - share_id может быть UUID общей папки или веб-слагом (например, "research-vault") - Для общих папок используется /sync-upload → файл попадает в хранилище синхронизации CRDT и появляется в локальных хранилищах Obsidian у подписчиков на следующем цикле синхронизации - Для общих документов происходит откат к /upload (только веб-публикация) - list_files, read_file и tr_search тоже работают с тем же ключом агента Режим email/пароль (JWT) - всегда выбрасывает исключение; намеренно только для чтения. Для произвольной (не опубликованной в вебе) общей папки нет маршрута записи, доступного по JWT, и даже если бы он существовал, режим JWT по политике остаётся только для чтения. Для записи используйте режим ключа агента. Аргументы: share_id: UUID общей папки (режим email/пароль) или веб-слаг (режим ключа агента). file_path: Путь к файлу внутри общей папки (например, "notes/todo.md"). content: Полное текстовое содержимое для записи. Возвращает: Объект с path, size/operation и необязательным public_url (режим ключа агента). Точный набор ключей задаёт сервер (плюс добавленный здесь ключ "operation"), отсюда dict[str, Any].

Параметры
  • contentstringобязательный

    Полное текстовое содержимое для записи, заменяющее файл, если он уже существует.

  • file_pathstringобязательный

    Путь к файлу внутри общего ресурса, например "notes/todo.md".

  • share_idstringобязательный

    Передаёт UUID (режим email/пароль) или web slug (режим agent-key).

write_documentидемпотентныйвнешний мир

Зарезервировано для записи живых документов; на сервере пока недоступно, используйте upsert_file. Всегда вызывает исключение: у control-plane нет REST-маршрута для записи живого содержимого документа по ID (содержимое doc-share доступно только через CRDT/WebSocket). Это реальный пробел в бэкенде в ОБОИХ режимах (agent-key и JWT), а не ограничение agent-key против JWT. Но если бы такой маршрут когда-либо добавили, то согласно принятой политике записи (только через agent-key) режим JWT всё равно остался бы только для чтения. Аргументы: share_id: UUID общего ресурса (для проверки ACL). doc_id: UUID документа. content: Полное текстовое содержимое для записи (заменяет весь документ). key: Ключ общего типа Yjs. По умолчанию "contents".

Параметры
  • contentstringобязательный

    Полный текст для записи, который заменит весь документ.

  • doc_idstringобязательный

    UUID документа

  • keystring

    Ключ shared-типа Yjs, в котором хранится содержимое документа.

  • share_idstringобязательный

    UUID общего ресурса, используется для проверки доступа.

1.0.9основная
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0

Выберите клиент, чтобы установить evc-team-relay-mcp:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "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"
      }
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"evc-team-relay-mcp-oe9bckqo3s\",\"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\"}}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add evc-team-relay-mcp-oe9bckqo3s --env RELAY_CP_URL=https://cp.yourdomain.com --env RELAY_AGENT_KEY=tr_agent_your_key_here -- uvx evc-team-relay-mcp

Либо через JSON-конфиг:

claude mcp add-json evc-team-relay-mcp-oe9bckqo3s "{\"command\":\"uvx\",\"args\":[\"evc-team-relay-mcp\"],\"env\":{\"RELAY_CP_URL\":\"https://cp.yourdomain.com\",\"RELAY_AGENT_KEY\":\"tr_agent_your_key_here\"}}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add evc-team-relay-mcp-oe9bckqo3s --env RELAY_CP_URL=https://cp.yourdomain.com --env RELAY_AGENT_KEY=tr_agent_your_key_here -- uvx evc-team-relay-mcp

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.evc-team-relay-mcp-oe9bckqo3s]
command = "uvx"
args = ["evc-team-relay-mcp"]

[mcp_servers.evc-team-relay-mcp-oe9bckqo3s.env]
RELAY_CP_URL = "https://cp.yourdomain.com"
RELAY_AGENT_KEY = "tr_agent_your_key_here"
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите evc-team-relay-mcp, а в поле команды запуска — строку ниже:
uvx evc-team-relay-mcp

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например evc-team-relay-mcp-oe9bckqo3s.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: evc-team-relay-mcp-oe9bckqo3s
    command: uvx
    args:
      - "evc-team-relay-mcp"
    env:
      RELAY_CP_URL: https://cp.yourdomain.com
      RELAY_AGENT_KEY: tr_agent_your_key_here
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "evc-team-relay-mcp-oe9bckqo3s": {
      "command": "uvx",
      "args": [
        "evc-team-relay-mcp"
      ],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}

Похожие MCP-сервера

louis030195/easy-obsidian-mcp

louis030195/easy-obsidian-mcp

от louis030195

MCP-сервер для подключения AI-ассистентов (Claude, ChatGPT) к Obsidian: поиск, чтение и анализ связей между заметками. Полезен для пользователей Obsidian, которые хотят задействовать ИИ для работы ...

TypeScript⭐ 17
j0hanz/filesystem-context-mcp-server

j0hanz/filesystem-context-mcp-server

от j0hanz

Безопасный MCP сервер для работы с файловой системой: чтение, запись, поиск, сравнение и патч файлов. Все операции изолированы в разрешённых директориях с защитой от обхода путей. Подходит для AI-ассистентов, которым нужен контролируемый доступ к файлам.

TypeScript⭐ 25
efforthye/fast-filesystem-mcp

efforthye/fast-filesystem-mcp

от efforthye

MCP инструмент для файловой системы через Claude Desktop. Поддерживает чтение и запись больших файлов, пакетное редактирование с резервированием, поиск по содержимому. Полезен для автоматизации файловых операций.

TypeScript⭐ 64
MarkusPfundstein/mcp-obsidian

MarkusPfundstein/mcp-obsidian

от markuspfundstein

Управляет заметками Obsidian: ищет по ключевым словам, читает, дополняет и создаёт новые. Требуется плагин Local REST API.

Python⭐ 4482
rps321321/obsidian-mcp-pro

rps321321/obsidian-mcp-pro

от rps321321

Полнофункциональный MCP сервер для Obsidian с 41 инструментом: чтение, запись, поиск, теги, ссылки, canvas, семантический поиск и анализ графов. Дает AI-ассистентам глубокий доступ к хранилищу заметок через протокол MCP.

TypeScript⭐ 33
akseyh/bear-mcp-server

akseyh/bear-mcp-server

от akseyh

MCP-сервер для работы с заметками Bear Notes. Через SQLite читает все заметки, ищет по тексту и выводит теги. Интегрируется с MCP-клиентами (Claude Desktop) для автоматизации вашей базы знаний на m...

JavaScript⭐ 45
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин