Таблица симптомов и причин: от «у меня нет такого инструмента» до блокировки хостингом и невидимых кнопок входа. Что смотреть в журнале вызовов.
Сначала: журнал вызовов
Откройте Компоненты → Dharma MCP → Журнал вызовов. Он показывает, дошёл ли клиент до сайта и на каком шаге остановился.
| Что в журнале | Что это значит |
|---|---|
Нет вообще записей от клиента (auth/…, oauth/…, initialize) | Запрос не дошёл до сайта: неверный адрес, перенаправление, защита хостинга |
oauth/consent и oauth/token «Успешно», а после них пусто | Вход прошёл, но следующий запрос клиента блокирует веб-сервер (см. ниже «Защита от ИИ-ботов») |
auth/rejected | Клиент пришёл с токеном, но сервер его не принял: отозван, просрочен или неверен |
initialize и tools/list успешны, нужных инструментов нет | Набор-плагин выключен или у токена нет нужной области |
Частые проблемы
| Симптом | Причина и решение |
|---|---|
| Ассистент отвечает «у меня нет такого инструмента / коннектора» | Коннектор не добавлен или не включён в этом чате. Добавьте в Настройки → Коннекторы и включите через «+» в новом чате. |
| В браузере по адресу сервера написано «Use POST with a JSON-RPC 2.0 body» | Это нормально: сервер принимает только запросы программ. Для проверки в браузере откройте /.well-known/oauth-authorization-server. |
| «Вы вошли на сервер Dharma MCP, но затем он отклонил запрос Claude» | Чаще всего хостинг блокирует запросы Claude (см. «Защита от ИИ-ботов»). Проверьте журнал: если после oauth/token нет записей, причина в этом. |
| На странице входа или согласия не видно кнопки | Стили шаблона делают основную кнопку невидимой. На входе нажмите Enter в поле пароля; на согласии обновите расширение до 0.6.1 или новее. |
| 401 «токен не передан» при верном токене | Хостинг не передаёт заголовок Authorization. Добавьте в .htaccess строки из статьи про хостинг в документации (RewriteRule для HTTP_AUTHORIZATION). |
| 403 «нужен HTTPS» | Сайт открыт по HTTP или прокси скрывает HTTPS (проверьте X-Forwarded-Proto). |
| 401 «токен недействителен / срок действия истёк» | Создайте новый токен или переподключитесь через вход на сайте. |
| 429 | Слишком много запросов за минуту (лимит по умолчанию 60): подождите или увеличьте лимит в настройках. |
| «Ответ слишком большой» | Попросите ассистента запрашивать данные частями (постранично) или с фильтром. |
| Инструмент отвечает «нет прав» | У пользователя токена нет права Joomla на это действие. Возьмите токен пользователя с нужными правами. |
| Инструменты «Шаблон» или «Система» не появились | Включите плагины этих наборов (Система → Плагины, группа dharmamcp), выдайте области template:* или system:*, пользователь токена — Суперпользователь, затем переподключите клиент. |
| «Хостинг не блокирует запросы Claude и ChatGPT» красное на странице «Подключение» | См. следующий раздел. |
Защита от ИИ-ботов на хостинге
Многие хостинги блокируют по подписи программы (User-Agent) запросы ClaudeBot, Claude-User, GPTBot, OpenAI и подобные: веб-сервер отвечает пустой страницей «403 Forbidden» ещё до Joomla. Claude и ChatGPT подписывают свои запросы к серверу такими именами, поэтому вход проходит, а подключение обрывается.
Проверка из терминала (должен быть ответ 401, а не 403):
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://ваш-сайт/mcp -A "Claude-User" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
Что делать:
- Найдите в панели хостинга или в конфигурации nginx правило блокировки (ищите слово
ClaudeBot) и сделайте исключение для адреса/mcp(и/index.php/mcp). Остальной сайт можно оставить защищённым. Пример для nginx есть в документации проекта. - Если у вас общий (shared) хостинг без доступа к настройкам сервера, напишите в поддержку: «разрешить User-Agent Claude-User и openai-mcp для адреса /mcp».
- Если исключение невозможно, подключайтесь программами, не подписанными именами ИИ-ботов: Claude Code, Codex, Cursor работают по токену со своей подписью, а проблема касается именно облачных Claude и ChatGPT.
Что прислать, если нужна помощь
- Название программы (и браузерная она или приложение), шаг, на котором остановились.
- Точный текст ошибки или скриншот.
- Время попытки: по нему легко найти записи в журнале вызовов.