Skip to main content
Glama

mcp-qmedia

Eigenentwickelter MCP-Server, der es textbasierten Agenten ermöglicht, Fragen zu Medien zu stellen – Bilder, Audio, Video. Der Agent übergibt Dateipfade (oder URLs) plus eine Frage; der Server sendet sie an Xiaomi MiMo-V2.5 (nativ omni-modal: Text/Bild/Audio/Video rein, Text raus) über die OpenCode Zen-Endpunkte und gibt die Antwort als Text zurück. Wird sowohl von opencode als auch von Claude Code verwendet.

Anbieter

Gleicher Codepfad für alle (OpenAI-kompatible /chat/completions, Base64-Inhaltsteile). Zwei sind integriert; weitere können über die Web-Oberfläche (unten) hinzugefügt, entfernt und der Standard gewechselt werden – oder durch Bearbeiten des Stores ~/.config/mcp-qmedia/providers.json (0600, außerhalb des Repos; kann Schlüssel enthalten). Pro Aufruf: backend="<name>"; QMEDIA_BACKEND überschreibt den gespeicherten Standard.

Anbieter

Endpunkt

Modell

Kosten / Grenzen

Schlüsseleintrag in opencodes auth.json

mimo-v2.5 - opencode go (Standard)

https://opencode.ai/zen/go/v1

mimo-v2.5

~0,14 $/M rein, 1M Kontext

opencode-go

mimo-v2.5-free - opencode zen

https://opencode.ai/zen/v1

mimo-v2.5-free

kostenlos, 200k Kontext, ratenbegrenzt (429 FreeUsageLimitError wenn erschöpft)

opencode

Related MCP server: Vision MCP Server

API-Schlüssel – niemals in diesem Repository

Pro Anbieter, Auflösungsreihenfolge: der eigene Schlüssel des Anbieters im Store (über die UI gesetzt) → QMEDIA_API_KEY → OPENCODE_API_KEY → ~/.local/share/opencode/auth.json (QMEDIA_AUTH_JSON): der auth_entry des Anbieters, dann jeder andere Eintrag mit einem Schlüssel. Wenn Sie also bei opencode go / zen angemeldet sind (opencode auth login), ist nichts zu konfigurieren. deploy/env.example enthält nur nicht-geheime Einstellungen; der Store wird mit 0600 geschrieben und liegt unter ~/.config, nicht in einem Repository.

Einrichtungsassistent + Test (auf Abruf, kein Dienst)

mcp-qmedia ui (= server.py ui [port]) bedient http://127.0.0.1:8938, solange es läuft – starten, konfigurieren, schließen (wie mcp-imaps Einrichtungsassistent): Liste der Anbieter (Standard markiert, Schlüsselstatus + woher der Schlüssel kommt – der Schlüssel selbst wird nie an den Browser gesendet), hinzufügen/bearbeiten/entfernen (eingebaute können zurückgesetzt, nicht entfernt werden), Standard festlegen, und ein Test-Panel: HTTP(s)-URLs oder lokale Pfade einfügen (eine pro Zeile), eine Frage (leer = die describe-Aufforderung), einen Anbieter auswählen, Fragen – Antwort + Zeit + seitenweise Verlauf. JSON-API dahinter: GET/POST /api/providers, DELETE /api/providers/<name>, POST /api/default, POST /api/ask {files, question, provider}, und GET /api/status (CORS *, gleiche Form wie der Status der Nachrichtendienste – die Hub-Seite (ai-agent-setup mcp-hub.service, http://127.0.0.1:8930/) fragt sie ab; eine gleiche Feldermenge wie die Dienste – aber qmedia ist kein Dienst und hat keine Hub-Karte; es erscheint in der Bridge-Karte des Hubs). Die Seite verlinkt zu "Alle Dienste ↗" (http://127.0.0.1:8930/); die Seite selbst ist web/page.html. Der MCP-Server liest bei jedem Aufruf denselben Store, sodass Änderungen sofort ohne Neustart wirksam werden.

Werkzeuge (Präfix qmedia_ in opencode, mcp__qmedia__ in Claude Code)

  • ask(files, question, backend="", system="") – das Hauptwerkzeug. files ist eine Liste von absoluten lokalen Pfaden (~/… ist okay; der Server ist ein gemeinsamer Dienst, sein Arbeitsverzeichnis ist nicht Ihr Projekt) oder http(s):// URLs; mehrere Dateien in einem Aufruf, damit das Modell sie in Beziehung setzen kann. Gibt einen kurzen Header zurück ([mimo-v2.5 - opencode go/mimo-v2.5 · 2 Datei(en) · 8,8 s] + pro Datei Typ/Größe) und die Antwort.

  • describe(files, backend="") – keine Frage nötig: ausführliche Beschreibung; Bilder inkl. aller sichtbaren Texte wörtlich, Audio als wörtliches Transkript, Video Szene für Szene mit Zeitstempeln + Transkript.

  • backends() – Anbieter: Endpunkte, Modelle, welcher Standard ist, ob ein Schlüssel für jeden aufgelöst wird (gibt nie den Schlüssel aus), ffmpeg-Verfügbarkeit, Grenzen, Store-Pfad.

Berechtigung: Alle drei sind schreibgeschützt und günstig → erlauben in beiden Agenten. Hinweis: ask/describe laden die angegebenen Dateien auf den konfigurierten Anbieter hoch (eine kostenpflichtige API für den Standard) – ein Erlaubnis-Wildcard bedeutet, dass ein Agent dies ohne Nachfrage tun kann, inklusive Plan-Modus; behalten Sie den Standard auf dem kostenlosen Anbieter, falls Ihnen das wichtig ist.

Medienverarbeitung

Art

Gesendet als

Anmerkungen

Bild (png/jpg/gif/webp/heic/avif…)

image_url data-URI

> QMEDIA_MAX_BYTES → auf ≤2000 px JPEG verkleinert via ffmpeg

Audio (wav/mp3 direkt; m4a/ogg/opus/flac/… transcodiert)

input_audio {data, format}

nicht-wav/mp3 oder zu groß → mp3 mono 16 kHz 48 kbps via ffmpeg

Video (mp4/webm direkt; mov/mkv/avi/… neu codiert)

video_url data-URI + input_audio der Tonspur

der Endpunkt betrachtet nur die Frames von video_url, daher wird die Tonspur extrahiert (ffprobe/ffmpeg) und als zweiter Teil gesendet; zu groß/andere Container → 480p/15 fps h264

Alles andere (pdf, docx…)

—

Fehler mit Auflistung, was unterstützt wird

Typ-Erkennung: Erweiterungstabelle → mimetypes → HTTP Content-Type → Magic-Bytes. ffmpeg ist optional, aber dringend empfohlen (dnf install ffmpeg); ohne es funktionieren nur Dateien, die keine Transcodierung benötigen.

Getestet am 17.08.2026 auf mimo-v2.5 - opencode go: Bild-OCR, wav-Transkription (espeak-Beispiel), 3 s mp4 mit Piepton (Frames + Tonspur) und Bild+Audio in einem Aufruf.

Einrichtung

Aufbau: server.py (stdio MCP-Server + ui-Assistentenmodus), web/page.html (die Assistentenseite), deploy/bin/mcp-qmedia (Starter), deploy/env.example (optionale nicht-geheime Einstellungen). Kein systemd-Unit: auf einem Rechner mit mehreren Agentensitzungen, starten Sie es einmal über mcp-proxy (ai-agent-setups mcp-bridge.service) oder lassen Sie jeden Client es starten. Einbinden mit Symlinks, sodass ein git pull den Rechner aktualisiert.

git clone git@github.com:spookysys/mcp-qmedia.git ~/.local/src/mcp-qmedia
cd ~/.local/src/mcp-qmedia
uv venv .venv --python 3.14 && uv pip install --python .venv/bin/python 'mcp>=1.9,<2' httpx
ln -s "$PWD/deploy/bin/mcp-qmedia" ~/.local/bin/          # launcher
# setup: mcp-qmedia ui   -> http://127.0.0.1:8938 (close it when done)
# optional: mkdir -p ~/.config/mcp-qmedia && cp deploy/env.example ~/.config/mcp-qmedia/env

opencode (opencode.jsonc):

"qmedia": { "type": "local", "command": ["/home/YOU/.local/bin/mcp-qmedia"], "enabled": true }
// or, shared through mcp-bridge: { "type": "remote", "url": "http://127.0.0.1:8939/servers/qmedia/sse" }
// permission: "qmedia_*": "allow"

Claude Code (Benutzerkontext):

claude mcp add -s user qmedia --transport stdio -- ~/.local/bin/mcp-qmedia
# or, shared through mcp-bridge: claude mcp add -s user qmedia --transport sse http://127.0.0.1:8939/servers/qmedia/sse
# settings.json permissions.allow: "mcp__qmedia__*"

Umgebungsvariablen

Variable

Standard

Bedeutung

QMEDIA_BACKEND

Store-Standard (mimo-v2.5 - opencode go)

Überschreibung des Standard-Anbieters; ein unbekannter Name ist ein Fehler (niemals stiller Fallback auf den kostenpflichtigen eingebauten)

QMEDIA_STORE

~/.config/mcp-qmedia/providers.json

Anbieter-Store (0600, kann Schlüssel enthalten)

QMEDIA_UI_PORT

8938

Port des bedarfsgesteuerten Einrichtungsassistenten (mcp-qmedia ui, 127.0.0.1)

QMEDIA_API_KEY, OPENCODE_API_KEY

—

Schlüssel-Überschreibung für Anbieter ohne gespeicherten Schlüssel (ansonsten der eigene auth_entry des Anbieters in opencodes auth.json – niemals der Schlüssel eines anderen Eintrags)

QMEDIA_AUTH_JSON

~/.local/share/opencode/auth.json

Wo opencode Anbieterschlüssel speichert

QMEDIA_MAX_BYTES

20000000

Pro-Datei-Grenze vor ffmpeg-Transcodierung

QMEDIA_TIMEOUT

300

Timeout des Modellaufrufs, Sekunden

MCP_QMEDIA_PYTHON

.venv/bin/python im Checkout-Verzeichnis

Starter: Interpreter-Überschreibung

MCP_QMEDIA_ENV

~/.config/mcp-qmedia/env

Starter: Einstellungsdatei zum Einlesen (optional)

MCP_QMEDIA_DIR

Checkout-Verzeichnis

systemd-Unit: Wo server.py ist

Related MCP Connectors

Related MCP Servers