Mem0
Mem0 подключает Qwen Code к внешнему сервису памяти. Он входит в основной пакет CLI: не устанавливайте @qwen-code/external-context-mem0 и не регистрируйте отдельный MCP-сервер для этого пути.
Подключение
Добавьте следующее в пользовательские настройки (~/.qwen/settings.json), затем перезапустите Qwen Code в доверенном проекте. Как и modelProviders, envKey указывает имя переменной учётных данных, а поле env верхнего уровня может содержать её значение:
{
"env": {
"MEM0_API_KEY": "<your-provider-key>"
},
"memory": {
"mem0": {
"baseUrl": "https://your-mem0-endpoint.example",
"protocol": "mem0-v2",
"envKey": "MEM0_API_KEY"
}
}
}Эта конфигурация в одном файле не требует экспорта в оболочке. Учётные данные в JSON хранятся в открытом виде: держите их в пользовательских настройках, не коммитьте в репозиторий и не прикладывайте к отчётам. В качестве альтернативы можно не указывать поле env верхнего уровня, а задать ключ в запускающей оболочке или в ~/.qwen/.env. Непустые значения в окружении процесса имеют приоритет над значениями из .env, которые, в свою очередь, имеют приоритет над settings.env.
Используйте origin эндпоинта, при необходимости с префиксом обратного прокси; не добавляйте /v2/memories/search или другой путь операции. Выберите контракт, который реально реализует ваш сервис:
mem0-v2(по умолчанию): PolarDB-стильAuthorization: Token, V2-поиск сlimit, запись V1.mem0-v3: Mem0 Platform V3,Authorization: Token, поиск/добавление V3.mem0-oss-2026-08: фиксированный OSS REST-контракт,X-API-Key,/searchи/memories.
Это полные контракты, а не универсальная совместимость версий. Неизвестные версии и другие форматы запросов/ответов требуют проверенного адаптера, а не переименованного URL. Исторические ID пресетов по-прежнему принимаются; aliyun-polardb-mysql-2026-08 сохраняет своё историческое поле поиска top_k и необработанное содержимое поиска.
Для доверенного адреса PolarDB, такого как http://your-endpoint:8080, дополнительно требуется "allowInsecureHttp": true. Обычный HTTP отправляет учётные данные в незашифрованном виде. Эта настройка не делает приватный эндпоинт достижимым и не обходит белые списки IP.
Qwen автоматически регистрирует external-context и обнаруживает context_search. Попросите Qwen выполнить поиск во внешней памяти; ничего не вспоминается и не отправляется автоматически на каждом ходу. Сервер с тем же именем в настройках оператора, конфигурации сессии или --mcp-config создаёт конфликт; удалите эту ручную конфигурацию при переходе на встроенный путь. Настройки рабочего пространства и записи .mcp.json проекта с таким именем переопределяются. Существующий приоритет MCP также затеняет сервер расширения с тем же именем, поэтому отключите расширенное расширение external-context при использовании встроенного пути. Удалите также старый ручной хук подтверждения записи, чтобы избежать дублирования подтверждений; пользовательский хук с тем же матчером не заменяет встроенное подтверждение.
Область действия и запись
Область действия пользователя/репозитория по умолчанию сохраняется между перезапусками и работает из подкаталогов Git. Перемещение репозитория или использование другого чекаута изменяет её, включая временные worktree --worktree и worktree изоляции агентов. Чтобы использовать известную область действия между worktree, установите scope.userId для V2/OSS или scope.appId для V3; необязательный scope.agentId применяется только к V2/OSS. Идентификаторы области действия не являются средствами контроля доступа на стороне провайдера.
Поиск доступен только для чтения по умолчанию. Чтобы включить сохранение, добавьте "enableWrites": true внутри memory.mem0, перезапустите интерактивный CLI и попросите Qwen сохранить нужное содержимое. Автоматически установленный хук запрашивает подтверждение точного содержимого, включая режим YOLO. Отклонение не отправляет запрос на запись. Записи используют infer: false.
PolarDB может возвращать массив сообщений одного пользователя в кодировке JSON для этих прямых импортов. mem0-v2 восстанавливает точный текст такого сообщения, когда результат помечен infer: false; исторический пресет aliyun-polardb-mysql-2026-08, обычный текст и другие протоколы остаются без изменений.
Неинтерактивные сессии и сессии ACP, а также сессии с отключёнными хуками, сохраняют только поиск. Режимы bare/safe, ненадёжные/предварительные папки и SSH-рабочие пространства не активируют эту локальную привязку. Настройки рабочего пространства не могут настроить привязку.
stored означает, что были возвращены валидные синхронные ID. accepted означает, что асинхронный запрос был принят, а не что сохранение завершено. failed означает окончательный отказ: устраните указанную причину перед повторной попыткой. unknown означает, что запись могла произойти: не повторяйте автоматически.
Параметры и устранение неполадок
envKey по умолчанию равен MEM0_API_KEY; используйте его для ссылки на другую переменную учётных данных и определите её значение через любой из источников выше. Историческое поле credentialEnv остаётся совместимым алиасом. Если оба поля заданы, их имена должны совпадать; конфликтующие имена вызывают ошибку, а не молчаливый выбор учётных данных. timeoutMs по умолчанию 5000, в диапазоне от 1 до 30000.
Проверьте статус подключения MCP при отсутствии учётных данных и ошибках провайдера. Таймаут требует проверки маршрутизации эндпоинта, белых списков IP-источников и доступности сервиса. Ошибка 401/403 требует проверки учётных данных и выбранного протокола. Не вставляйте учётные данные в логи или отчёты об ошибках.
Для исходных чекаутов выполните сборку и бандлинг один раз, чтобы существовали dist/mem0/main.js и dist/mem0/write-confirmation.js. Установленные основные пакеты содержат оба файла. Эта функция требует основного релиза CLI, содержащего изменение; публикация отдельного пакета Mem0 не требуется.