MCP Waifu Queue
Очередь MCP Waifu
Этот проект реализует сервер MCP (Model Context Protocol) для разговорного ИИ-персонажа «вайфу», использующий API OpenRouter через очередь Redis для асинхронной обработки. Он использует библиотеку FastMCP для упрощенной настройки и управления сервером.
Содержание
Related MCP server: local-agent-context
Возможности
Генерация текста через OpenRouter с использованием модели из
~/.model-openrouterилиopenrouter/free.Очередь запросов с использованием Redis для асинхронной обработки параллельных запросов.
API, совместимый с MCP, с использованием
FastMCP.Отслеживание статуса заданий через ресурсы MCP.
Конфигурация через переменные окружения (файл
.env).Загрузка ключей API:
OpenRouter:
OPENROUTER_API_KEYили~/.api-openrouter
Файлы выбора модели в домашней директории:
~/.model-openrouterдля имени модели OpenRouter
Архитектура
Проект состоит из нескольких ключевых компонентов:
main.py: Основная точка входа, инициализирующая приложениеFastMCPи определяющая инструменты/ресурсы MCP.respond.py: Содержит основную логику генерации текста с использованием API OpenRouter.task_queue.py: Обрабатывает взаимодействие с очередью Redis (используяpython-rq), ставя запросы на генерацию в очередь.utils.py: Содержит вспомогательные функции, в частностиcall_predict_response, которая выполняется воркером для вызова логики генерации вrespond.py.worker.py: Воркер Redis (python-rq), который обрабатывает задания из очереди, вызываяcall_predict_response.config.py: Управляет конфигурацией с помощьюpydantic-settings.models.py: Определяет модели Pydantic для валидации запросов и ответов MCP.
Поток запроса выглядит следующим образом:
Клиент отправляет запрос к инструменту MCP
generate_text(определен вmain.py).Инструмент ставит запрос (промпт) в очередь Redis (обрабатывается
task_queue.py).Процесс
worker.pyзабирает задание из очереди.Воркер выполняет функцию
call_predict_response(изutils.py).call_predict_responseвызывает функциюpredict_response(вrespond.py), которая взаимодействует с API OpenRouter.Сгенерированный текст (или сообщение об ошибке) возвращается функцией
predict_responseи сохраняется как результат задания в RQ.Клиент может получить статус и результат задания, используя ресурс MCP
job://{job_id}(определен вmain.py).
graph LR
subgraph Client
A[User/Client] -->|1. Send Prompt via MCP Tool| B(mcp-waifu-queue: main.py)
end
subgraph mcp-waifu-queue Server
B -->|2. Enqueue Job (prompt)| C[Redis Queue]
B -->|7. Return Job ID| A
D[RQ Worker (worker.py)] --|>| C
D -->|3. Dequeue Job & Execute| E(utils.call_predict_response)
E -->|4. Call Generation Logic| F(respond.predict_response)
F -->|5. Call OpenRouter API| G[OpenRouter API]
G -->|6. Return Response| F
F --> E
E -->|Update Job Result in Redis| C
A -->|8. Check Status via MCP Resource| B
B -->|9. Fetch Job Status/Result| C
B -->|10. Return Status/Result| A
endПредварительные требования
Python 3.7+
pipилиuv(установщик пакетов Python)Сервер Redis (установлен и запущен)
Ключ API OpenRouter
Инструкции по установке Redis в вашей системе можно найти на официальном сайте Redis: https://redis.io/docs/getting-started/ Вы можете получить ключ API OpenRouter здесь: https://openrouter.ai/
Установка
Клонируйте репозиторий:
git clone <YOUR_REPOSITORY_URL> cd mcp-waifu-queueСоздайте и активируйте виртуальное окружение с помощью
uv:python -m uv venv .venv .venv/Scripts/python.exe -m ensurepip .venv/Scripts/python.exe -m pip install uvУстановите зависимости:
.venv/Scripts/python.exe -m uv pip install -r requirements.txt .venv/Scripts/python.exe -m uv pip install -r requirements-dev.txt
Конфигурация
Имена моделей через файлы в $HOME:
Файл модели OpenRouter:
echo "openrouter/free" > ~/.model-openrouter
Ключи API: Предпочтительно через переменные окружения с резервным копированием в файл:
OpenRouter:
OPENROUTER_API_KEYили~/.api-openrouterGXP6
(Замените
YOUR_API_KEY_HEREна ваш реальный ключ)Другие настройки: Скопируйте файл
.env.exampleв.env:cp .env.example .envИзмените файл
.env, чтобы задать остальные значения конфигурации:MAX_NEW_TOKENS: Максимальное количество токенов для ответа (по умолчанию:2048).REDIS_URL: URL вашего сервера Redis (по умолчанию:redis://localhost:6379).FLASK_ENV,FLASK_APP: Опционально, относится к Flask, если он используется где-то еще, не является основным для работы сервера/воркера MCP.
Запуск службы
Убедитесь, что Redis запущен. Если вы установили его локально, вам может потребоваться запустить процесс сервера Redis (например, командой
redis-serverили через менеджер служб).Запустите воркер RQ: Откройте терминал, активируйте виртуальное окружение (
source .venv/bin/activateили аналогично) и выполните:python -m mcp_waifu_queue.workerЭта команда запускает процесс воркера, который будет прослушивать задания в очереди Redis, определенной в вашем файле
.env. Оставьте этот терминал запущенным.Запустите сервер MCP: Откройте другой терминал, активируйте виртуальное окружение и запустите сервер MCP с помощью инструмента типа
uvicorn(возможно, вам потребуется установить его:pip install uvicornилиuv pip install uvicorn):uvicorn mcp_waifu_queue.main:app --reload --port 8000 # Example portЗамените
8000на желаемый порт. Флаг--reloadполезен для разработки.Альтернативно, вы можете использовать скрипт
start-services.sh(предназначен в основном для сред Linux/macOS), который пытается запустить Redis (если он не запущен) и воркер в фоновом режиме:# Ensure the script is executable: chmod +x ./scripts/start-services.sh ./scripts/start-services.sh # Then start the MCP server manually as shown above.
API MCP
Сервер предоставляет следующие конечные точки, совместимые с MCP:
Инструменты
generate_textОписание: Отправляет запрос на генерацию текста в API OpenRouter через фоновую очередь.
Входные данные:
{"prompt": "Ваш текстовый промпт здесь"}(Тип:GenerateTextRequest)Выходные данные:
{"job_id": "rq:job:..."}(Уникальный ID для задания в очереди)
Ресурсы
job://{job_id}Описание: Получает статус и результат ранее отправленного задания.
Параметр URI:
job_id(ID, возвращенный инструментомgenerate_text).Выходные данные:
{"status": "...", "result": "..."}(Тип:JobStatusResponse)status: Текущее состояние задания (например, "queued", "started", "finished", "failed"). RQ внутренне использует немного другие термины ("started" против "processing", "finished" против "completed"). Ресурс выполняет их сопоставление.result: Сгенерированный текст, если статус задания "completed", в противном случаеnull. Если задание завершилось ошибкой, результат может бытьnullили содержать информацию об ошибке в зависимости от обработки RQ.
Тестирование
Проект включает тесты. Убедитесь, что вы установили тестовые зависимости (pip install -e .[test] или uv pip install -e .[test]).
Запустите тесты с помощью pytest:
pytest testsПримечание: Тесты могут потребовать имитации Redis (fakeredis) и, возможно, вызовов API OpenRouter в зависимости от их реализации.
Устранение неполадок
Ошибка:
OpenRouter API key not available: Убедитесь, чтоOPENROUTER_API_KEYзадан или файл~/.api-openrouterсуществует и содержит ваш ключ в одну строку (без пробелов).Задания застревают в "queued": Проверьте, что воркер RQ (
python -m mcp_waifu_queue.worker) запущен в отдельном терминале и подключен к тому же экземпляру Redis, который указан в.env. Проверьте логи воркера на наличие ошибок.ConnectionRefusedError (Redis): Убедитесь, что ваш сервер Redis запущен и доступен по адресу
REDIS_URL, указанному в.env.Проблемы с подключением к серверу MCP: Убедитесь, что сервер MCP (
uvicorn ...) запущен и вы подключаетесь к правильному хосту/порту.
Участие в разработке
Сделайте форк репозитория.
Создайте новую ветку для вашей функции или исправления ошибки (
git checkout -b feature/your-feature-name).Внесите изменения и закоммитьте их (
git commit -am 'Add some feature').Отправьте ветку в ваш форкнутый репозиторий (
git push origin feature/your-feature-name).Создайте Pull Request в оригинальный репозиторий.
Пожалуйста, придерживайтесь стандартов кодирования и правил линтинга проекта (ruff).
Лицензия
Этот проект лицензирован по лицензии MIT-0 — подробности см. в файле LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA plugin-based MCP server that enables AI assistants to interact with external systems through custom tools, resources, and prompts.4AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA local MCP server that gives AI coding agents persistent memory and context across sessions.9MIT
- AlicenseBqualityFmaintenanceA feature-rich MCP server for Discord, giving AI companions full presence in Discord communities — reading, responding, reacting, searching, and speaking.264651MIT
- AlicenseNot gradedqualityDmaintenanceMCP server integrating Higgsfield AI API for image generation, video animation, and speech-to-video synthesis with character management and job tracking.4MIT
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for AI dialogue using various LLM models via AceDataCloud
Cloud-hosted MCP server for durable AI memory
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/waifuai/mcp-waifu-queue'
If you have feedback or need assistance with the MCP directory API, please join our Discord server