MCP Waifu Queue
MCP Waifu Queue
Dieses Projekt implementiert einen MCP-Server (Model Context Protocol) für einen KI-„Waifu“-Charakter für Konversationen, der die OpenRouter-API über eine Redis-Warteschlange für die asynchrone Verarbeitung nutzt. Es verwendet die FastMCP-Bibliothek für eine vereinfachte Server-Einrichtung und -Verwaltung.
Inhaltsverzeichnis
Related MCP server: local-agent-context
Funktionen
Textgenerierung über OpenRouter unter Verwendung des Modells aus
~/.model-openrouteroderopenrouter/free.Anfragen-Warteschlange mittels Redis zur asynchronen Verarbeitung gleichzeitiger Anfragen.
MCP-konforme API unter Verwendung von
FastMCP.Nachverfolgung des Auftragsstatus über MCP-Ressourcen.
Konfiguration über Umgebungsvariablen (
.env-Datei).Laden von API-Schlüsseln:
OpenRouter:
OPENROUTER_API_KEYoder~/.api-openrouter
Modellauswahl-Dateien im Home-Verzeichnis:
~/.model-openrouterfür den Namen des OpenRouter-Modells
Architektur
Das Projekt besteht aus mehreren Schlüsselkomponenten:
main.py: Der Haupteinstiegspunkt, der dieFastMCP-Anwendung initialisiert und MCP-Tools/Ressourcen definiert.respond.py: Enthält die Kernlogik zur Textgenerierung unter Verwendung der OpenRouter-API.task_queue.py: Verwaltet die Interaktionen mit der Redis-Warteschlange (unter Verwendung vonpython-rq) und stellt Generierungsanfragen in die Warteschlange.utils.py: Enthält Hilfsfunktionen, insbesonderecall_predict_response, die vom Worker ausgeführt wird, um die Generierungslogik inrespond.pyaufzurufen.worker.py: Ein Redis-Worker (python-rq), der Aufträge aus der Warteschlange verarbeitet undcall_predict_responseaufruft.config.py: Verwaltet die Konfiguration unter Verwendung vonpydantic-settings.models.py: Definiert Pydantic-Modelle für die Validierung von MCP-Anfragen und -Antworten.
Der Ablauf einer Anfrage ist wie folgt:
Ein Client sendet eine Anfrage an das
generate_textMCP-Tool (definiert inmain.py).Das Tool stellt die Anfrage (Prompt) in eine Redis-Warteschlange (verwaltet durch
task_queue.py).Ein
worker.py-Prozess nimmt den Auftrag aus der Warteschlange auf.Der Worker führt die Funktion
call_predict_response(ausutils.py) aus.call_predict_responseruft die Funktionpredict_response(inrespond.py) auf, die mit der OpenRouter-API interagiert.Der generierte Text (oder eine Fehlermeldung) wird von
predict_responsezurückgegeben und von RQ als Auftragsergebnis gespeichert.Der Client kann den Auftragsstatus und das Ergebnis über die
job://{job_id}MCP-Ressource (definiert inmain.py) abrufen.
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
endVoraussetzungen
Python 3.7+
pipoderuv(Python-Paket-Installer)Redis-Server (installiert und laufend)
Ein OpenRouter-API-Schlüssel
Anleitungen zur Installation von Redis auf Ihrem System finden Sie auf der offiziellen Redis-Website: https://redis.io/docs/getting-started/ Einen OpenRouter-API-Schlüssel erhalten Sie unter: https://openrouter.ai/
Installation
Klonen Sie das Repository:
git clone <YOUR_REPOSITORY_URL> cd mcp-waifu-queueErstellen und aktivieren Sie eine virtuelle Umgebung mit
uv:python -m uv venv .venv .venv/Scripts/python.exe -m ensurepip .venv/Scripts/python.exe -m pip install uvInstallieren Sie die Abhängigkeiten:
.venv/Scripts/python.exe -m uv pip install -r requirements.txt .venv/Scripts/python.exe -m uv pip install -r requirements-dev.txt
Konfiguration
Modellnamen über Dateien im $HOME-Verzeichnis:
OpenRouter-Modelldatei:
echo "openrouter/free" > ~/.model-openrouter
API-Schlüssel: Bevorzugt über Umgebungsvariablen mit Datei-Fallback:
OpenRouter:
OPENROUTER_API_KEYoder~/.api-openrouterGXP6
(Ersetzen Sie
YOUR_API_KEY_HEREdurch Ihren tatsächlichen Schlüssel)Weitere Einstellungen: Kopieren Sie die
.env.example-Datei nach.env:cp .env.example .envÄndern Sie die
.env-Datei, um die restlichen Konfigurationswerte festzulegen:MAX_NEW_TOKENS: Maximale Anzahl an Token für die Antwort (Standard:2048).REDIS_URL: Die URL Ihres Redis-Servers (Standard:redis://localhost:6379).FLASK_ENV,FLASK_APP: Optional, bezogen auf Flask, falls anderswo verwendet, nicht wesentlich für den Betrieb des MCP-Servers/Workers.
Ausführen des Dienstes
Stellen Sie sicher, dass Redis läuft. Wenn Sie es lokal installiert haben, müssen Sie möglicherweise den Redis-Server-Prozess starten (z. B. Befehl
redis-serveroder über einen Dienstmanager).Starten Sie den RQ-Worker: Öffnen Sie ein Terminal, aktivieren Sie Ihre virtuelle Umgebung (
source .venv/bin/activateoder ähnlich) und führen Sie aus:python -m mcp_waifu_queue.workerDieser Befehl startet den Worker-Prozess, der auf Aufträge in der in Ihrer
.env-Datei definierten Redis-Warteschlange wartet. Lassen Sie dieses Terminal geöffnet.Starten Sie den MCP-Server: Öffnen Sie ein weiteres Terminal, aktivieren Sie die virtuelle Umgebung und führen Sie den MCP-Server mit einem Tool wie
uvicornaus (Sie müssen es möglicherweise installieren:pip install uvicornoderuv pip install uvicorn):uvicorn mcp_waifu_queue.main:app --reload --port 8000 # Example portErsetzen Sie
8000durch Ihren gewünschten Port. Das--reload-Flag ist nützlich für die Entwicklung.Alternativ können Sie das Skript
start-services.shverwenden (hauptsächlich für Linux/macOS-Umgebungen konzipiert), das versucht, Redis (falls nicht laufend) und den Worker im Hintergrund zu starten:# Ensure the script is executable: chmod +x ./scripts/start-services.sh ./scripts/start-services.sh # Then start the MCP server manually as shown above.
MCP-API
Der Server stellt die folgenden MCP-konformen Endpunkte bereit:
Tools
generate_textBeschreibung: Sendet eine Textgenerierungsanfrage über die Hintergrund-Warteschlange an die OpenRouter-API.
Eingabe:
{"prompt": "Ihr Text-Prompt hier"}(Typ:GenerateTextRequest)Ausgabe:
{"job_id": "rq:job:..."}(Eine eindeutige ID für den in die Warteschlange eingereihten Auftrag)
Ressourcen
job://{job_id}Beschreibung: Ruft den Status und das Ergebnis eines zuvor übermittelten Auftrags ab.
URI-Parameter:
job_id(Die vomgenerate_text-Tool zurückgegebene ID).Ausgabe:
{"status": "...", "result": "..."}(Typ:JobStatusResponse)status: Der aktuelle Zustand des Auftrags (z. B. "queued", "started", "finished", "failed"). RQ verwendet intern leicht abweichende Begriffe ("started" vs. "processing", "finished" vs. "completed"). Die Ressource bildet diese ab.result: Der generierte Text, wenn der Auftragsstatus "completed" ist, andernfallsnull. Wenn der Auftrag fehlgeschlagen ist, kann das Ergebnisnullsein oder Fehlerinformationen enthalten, abhängig von der Handhabung durch RQ.
Testen
Das Projekt enthält Tests. Stellen Sie sicher, dass Sie die Testabhängigkeiten installiert haben (pip install -e .[test] oder uv pip install -e .[test]).
Führen Sie Tests mit pytest aus:
pytest testsHinweis: Tests erfordern möglicherweise das Mocking von Redis (fakeredis) und potenziell der OpenRouter-API-Aufrufe, abhängig von deren Implementierung.
Fehlerbehebung
Fehler:
OpenRouter API key not available: Stellen Sie sicher, dassOPENROUTER_API_KEYgesetzt ist oder~/.api-openroutermit Ihrem Schlüssel in einer einzigen Zeile (ohne Leerzeichen) existiert.Aufträge bleiben in "queued" hängen: Überprüfen Sie, ob der RQ-Worker (
python -m mcp_waifu_queue.worker) in einem separaten Terminal läuft und mit derselben Redis-Instanz verbunden ist, die in.envangegeben ist. Überprüfen Sie die Worker-Protokolle auf Fehler.ConnectionRefusedError (Redis): Stellen Sie sicher, dass Ihr Redis-Server läuft und unter der in
.envangegebenenREDIS_URLerreichbar ist.Verbindungsprobleme zum MCP-Server: Stellen Sie sicher, dass der MCP-Server (
uvicorn ...) läuft und Sie sich mit dem richtigen Host/Port verbinden.
Mitwirken
Forken Sie das Repository.
Erstellen Sie einen neuen Branch für Ihr Feature oder Ihren Bugfix (
git checkout -b feature/your-feature-name).Nehmen Sie Ihre Änderungen vor und committen Sie diese (
git commit -am 'Add some feature').Pushen Sie Ihren Branch auf Ihr geforktes Repository (
git push origin feature/your-feature-name).Erstellen Sie einen Pull Request für das ursprüngliche Repository.
Bitte halten Sie sich an die Codierungsstandards und Linting-Regeln (ruff) des Projekts.
Lizenz
Dieses Projekt ist unter der MIT-0-Lizenz lizenziert - siehe die Datei LICENSE für Details.
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