Skip to main content
Glama

mcp-qmedia

Servidor MCP propio que permite a agentes solo de texto hacer preguntas sobre contenido multimedia — imágenes, audio, video. El agente pasa rutas de archivo (o URLs) junto con una pregunta; el servidor las envía a Xiaomi MiMo-V2.5 (nativamente omni-modal: texto/imagen/audio/video de entrada, texto de salida) a través de los endpoints OpenCode Zen y devuelve la respuesta como texto. Se utiliza tanto desde opencode como desde Claude Code.

Proveedores

Mismo código para todos (compatible con OpenAI /chat/completions, partes de contenido en base64). Hay dos integrados; se pueden añadir más, eliminar y cambiar el predeterminado en la interfaz web (abajo) — o editando el almacén ~/.config/mcp-qmedia/providers.json (0600, fuera del repositorio; puede contener claves). Por llamada: backend="<nombre>"; QMEDIA_BACKEND anula el valor predeterminado almacenado.

proveedor

endpoint

modelo

coste/límites

entrada de clave en auth.json de opencode

mimo-v2.5 - opencode go (predet.)

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

mimo-v2.5

~0,14$/M entrada, 1M de contexto

opencode-go

mimo-v2.5-free - opencode zen

https://opencode.ai/zen/v1

mimo-v2.5-free

gratuito, 200k de contexto, con límite de tasa (429 FreeUsageLimitError cuando se agota)

opencode

Related MCP server: Vision MCP Server

Claves API — nunca en este repositorio

Por proveedor, orden de resolución: la clave propia del proveedor en el almacén (establecida a través de la interfaz) → QMEDIA_API_KEYOPENCODE_API_KEY~/.local/share/opencode/auth.json (QMEDIA_AUTH_JSON): la auth_entry del proveedor, luego cualquier otra entrada con una clave. Por lo tanto, si has iniciado sesión en opencode go / zen (opencode auth login), no hay nada que configurar. deploy/env.example solo contiene ajustes no secretos; el almacén se escribe con permisos 0600 y reside en ~/.config, no en ningún repositorio.

Asistente de configuración + prueba (bajo demanda, no un daemon)

mcp-qmedia ui (= server.py ui [port]) sirve http://127.0.0.1:8938 mientras se ejecuta — inícialo, configúralo, ciérralo (como el asistente de configuración de mcp-imap): lista de proveedores (predeterminado marcado, estado de la clave + de dónde proviene — la clave en sí nunca se envía al navegador), añadir/editar/eliminar (los integrados se pueden restablecer, no eliminar), establecer como predeterminado, y un panel de prueba: pega URLs http(s) o rutas locales (una por línea), una pregunta (vacía = el prompt describe), elige un proveedor, Preguntar — respuesta + tiempo + historial por página. API JSON detrás: GET/POST /api/providers, DELETE /api/providers/<nombre>, POST /api/default, POST /api/ask {files, question, provider}, y GET /api/status (CORS *, misma forma que el estado de los daemons de mensajería — la página central (ai-agent-setup mcp-hub.service, http://127.0.0.1:8930/) la consulta; el mismo conjunto de campos que los daemons — pero qmedia no es un daemon y no tiene tarjeta de hub; aparece en la tarjeta Bridge del hub). La página enlaza a "Todos los daemons ↗" (http://127.0.0.1:8930/); la página en sí es web/page.html. El servidor MCP lee el mismo almacén en cada llamada, por lo que los cambios se aplican inmediatamente sin necesidad de reiniciar.

Herramientas (prefijo qmedia_ en opencode, mcp__qmedia__ en Claude Code)

  • ask(files, question, backend="", system="") — la herramienta principal. files es una lista de rutas locales absolutas (~/… está bien; el servidor es un daemon compartido, su directorio de trabajo no es tu proyecto) o URLs http(s)://; varios archivos en una sola llamada para que el modelo pueda relacionarlos. Devuelve un encabezado corto ([mimo-v2.5 - opencode go/mimo-v2.5 · 2 archivo(s) · 8.8s] + tipo/tamaño por archivo) y la respuesta.

  • describe(files, backend="") — no se necesita pregunta: descripción exhaustiva; imágenes incluyendo todo el texto visible textualmente, audio como transcripción textual, video escena por escena con marcas de tiempo + transcripción.

  • backends() — proveedores: endpoints, modelos, cuál es el predeterminado, si se resuelve una clave para cada uno (nunca imprime la clave), disponibilidad de ffmpeg, límites, ruta del almacén.

Permiso: las tres son de solo lectura y económicas → permitir en ambos agentes. Nota: ask/describe suben los archivos dados al proveedor configurado (una API de pago para el predeterminado) — un comodín de lista de permitidos significa que un agente puede hacerlo sin preguntar, incluido el modo de plan; mantén el predeterminado en el proveedor gratuito si eso te importa.

Manejo de medios

tipo

enviado como

notas

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

URI de datos image_url

> QMEDIA_MAX_BYTES → reducido a ≤2000 px jpeg mediante ffmpeg

audio (wav/mp3 directo; m4a/ogg/opus/flac/… transcod.)

input_audio {data, format}

no wav/mp3 o sobredimensionado → mp3 mono 16 kHz 48 kbps mediante ffmpeg

video (mp4/webm directo; mov/mkv/avi/… recodificado)

URI de datos video_url + input_audio de la banda sonora

el endpoint solo mira los fotogramas de video_url, por lo que la pista de audio se extrae (ffprobe/ffmpeg) y se envía como una segunda parte; sobredimensionado/otros contenedores → 480p/15 fps h264

cualquier otra cosa (pdf, docx…)

error que indica qué es compatible

Detección de tipo: tabla de extensiones → mimetypesContent-Type HTTP → bytes mágicos. ffmpeg es opcional pero muy recomendado (dnf install ffmpeg); sin él, solo funcionan los archivos que no necesitan transcodificación.

Verificado el 2026-08-17 en mimo-v2.5 - opencode go: OCR de imágenes, transcripción wav (muestra de espeak), mp4 de 3 s con pitido (fotogramas + banda sonora), e imagen+audio en una sola llamada.

Configuración

Estructura: server.py (servidor MCP stdio + modo asistente ui), web/page.html (la página del asistente), deploy/bin/mcp-qmedia (lanzador), deploy/env.example (ajustes no secretos opcionales). Sin unidad systemd: en una máquina con varias sesiones de agente, ejecútalo una vez a través de mcp-proxy (mcp-bridge.service de ai-agent-setup) o deja que cada cliente lo inicie. Conéctalo con enlaces simbólicos para que un git pull actualice la máquina.

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 (ámbito de usuario):

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__*"

Variables de entorno

var

predeterminado

significado

QMEDIA_BACKEND

almacén predet. (mimo-v2.5 - opencode go)

anulación del proveedor predeterminado; un nombre desconocido es un error (nunca una caída silenciosa al integrado de pago)

QMEDIA_STORE

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

almacén de proveedores (0600, puede contener claves)

QMEDIA_UI_PORT

8938

puerto del asistente de configuración bajo demanda (mcp-qmedia ui, 127.0.0.1)

QMEDIA_API_KEY, OPENCODE_API_KEY

anulación de clave para proveedores sin clave almacenada (si no, la auth_entry propia del proveedor en auth.json de opencode — nunca la clave de otra entrada)

QMEDIA_AUTH_JSON

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

dónde guarda opencode las claves de los proveedores

QMEDIA_MAX_BYTES

20000000

límite por archivo antes de la transcodificación con ffmpeg

QMEDIA_TIMEOUT

300

tiempo de espera de la llamada al modelo, en segundos

MCP_QMEDIA_PYTHON

.venv/bin/python en el checkout

lanzador: anulación del intérprete

MCP_QMEDIA_ENV

~/.config/mcp-qmedia/env

lanzador: archivo de configuración a cargar (opcional)

MCP_QMEDIA_DIR

checkout

unidad systemd: dónde está server.py

F
license - not found
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • 15 media & data tools for AI agents: search, transcribe, subtitles, voiceover, translate & more.

  • Generate images, video, and audio with Glif's media-generation agent

View all MCP Connectors

Latest Blog Posts

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/spookysys/mcp-qmedia'

If you have feedback or need assistance with the MCP directory API, please join our Discord server