Skip to content

fix(install): регистрировать MCP через claude mcp add-json + permissions.allow#4

Open
xxxvita wants to merge 1 commit intovbcherepanov:mainfrom
xxxvita:fix/mcp-install-canonical-cli
Open

fix(install): регистрировать MCP через claude mcp add-json + permissions.allow#4
xxxvita wants to merge 1 commit intovbcherepanov:mainfrom
xxxvita:fix/mcp-install-canonical-cli

Conversation

@xxxvita
Copy link
Copy Markdown

@xxxvita xxxvita commented Apr 15, 2026

Что фиксится

В install.sh Step 4 сейчас записывает MCP-сервер в ~/.claude/settings.json в секцию mcpServers. Но Claude Code не читает MCP-конфиг из settings.json — каноничное хранилище это ~/.claude.json, и управляется оно через CLI claude mcp add / claude mcp add-json. В результате после стандартной установки команда /mcp в Claude Code может не увидеть сервер memory, и пользователь вынужден разбираться сам.

Этот PR переводит регистрацию MCP на каноничный путь и параллельно добавляет секцию permissions.allow в settings.json — без неё Claude каждый вызов memory_recall / memory_save / и т. д. сопровождает подтверждением, что ломает автоматические вызовы из хуков и делает CLAUDE.md-инструкции «Auto-Save Rules» бесполезными.

Что именно изменилось в install.sh

Step 4 — регистрация MCP (было → стало):

  • Было: python скрипт вручную правит $CLAUDE_SETTINGS, добавляя mcpServers.memory
  • Стало: claude mcp remove memory -s user (ignore error) → claude mcp add-json memory '<json>' -s user
  • Теперь установщик требует claude CLI в PATH и падает с понятной ошибкой, если его нет (раньше писал в settings.json мимо цели и рапортовал OK)

Step 4b2 (новый) — permissions.allow:

  • Добавляется 20 mcp__memory__* tool names в settings.json → permissions.allow
  • Делается идемпотентно: если ключ уже есть — не дублирует, только считает, сколько новых добавил
  • Список строго соответствует тулам, которые echo-им в финальном блоке установщика (строки 237-257)

Step 6 verify — проверка статуса:

  • Было: python читает settings.json и проверяет наличие mcpServers.memory (проверка проходила даже при нерабочей регистрации)
  • Стало: claude mcp get memory >/dev/null 2>&1 — реальная проверка через тот же CLI

README.md:

  • Одна строка в секции «What the installer does» — с ~/.claude/settings.json на ~/.claude.json (via claude mcp add-json)

Почему это важно

  1. Каноничный API. ~/.claude.json — внутренний формат, Anthropic может его менять. claude mcp CLI — документированный публичный интерфейс, который останется стабильным при рефакторингах.
  2. Permissions — это не опционально. Без permissions.allow хуки, которые автоматически сохраняют знания через memory_save, спамят диалог подтверждениями на каждый вызов. CLAUDE.md-правила типа «save decisions automatically» просто не работают.
  3. Проверка перестаёт врать. Старый verify шаг давал OK при успешной записи в settings.json — но сама регистрация могла быть мертва.

Риски и ограничения

  • Жёсткая зависимость от claude CLI. Раньше можно было поставить memory server до Claude Code (и даже вообще без него, для тестирования). Теперь installer прервётся на Step 4. Я считаю это корректным поведением — MCP server без Claude Code бесполезен, — но это изменение поведения, которое стоит обсудить.
  • Не тронул остальные env-переменные в mcpServers. Оставил те же CLAUDE_MEMORY_DIR и EMBEDDING_MODEL, не менял набор.
  • Список 20 тулов захардкожен. Если upstream добавит новые mcp__memory__* тулы, их надо будет отдельно добавить в этот список — до тех пор они будут подтверждаться вручную. Долгосрочное решение — генерировать список из src/server.py, но это выходит за рамки PR.

Что проверено

Протестировано end-to-end на Manjaro Linux:

  • После install.shclaude mcp get memory возвращает правильный конфиг
  • /mcp в Claude Code показывает memory: Connected
  • cat ~/.claude/settings.json | jq '.permissions.allow | length' показывает +20 новых пермишенов
  • Последующие memory_save / memory_recall из хуков выполняются без confirmation-промптов

Что не проверено

  • Не запускал на macOS после изменений (не было устройства под рукой). Изменения не macOS-специфичны — claude mcp add-json работает одинаково на обеих платформах — но formally не тестировал.

Generated with Claude Code

Claude Code reads MCP server config from ~/.claude.json (managed by
'claude mcp' CLI), NOT from ~/.claude/settings.json — writing
'mcpServers' into settings.json is silently ignored.

Also adds permissions.allow entries for the 20 memory tools, because
without explicit permissions Claude Code prompts for confirmation on
every tool call, which breaks automatic recall/save/error logging
from hooks.

Changes in install.sh:
- Step 4: register MCP via 'claude mcp add-json memory ... -s user'
  instead of editing settings.json; abort with clear message if the
  'claude' CLI is missing; remove-then-add makes the step idempotent.
- Step 4b2 (new): write permissions.allow with all 20 mcp__memory__*
  tool names.
- Step 6 verify: check registration with 'claude mcp get memory'
  instead of reading settings.json mcpServers.

README updated accordingly.

Reapplies the intent of 0659e71 on top of upstream v6.0 (which
rewrote README.md and kept the install.sh bug).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant