Arcmira
Busca transcripciones de YouTube y podcasts: menciones, impulso, patrocinadores, recomendaciones orgánicas y transcripciones completas.
Servidor MCP alojado
npx add-mcp 'https://mcp.arcmira.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Arcmira: Búsqueda de Transcripciones de YouTube
Dale a tu IA la capacidad de encontrar quién dijo qué con marcas de tiempo, descubrir de qué se habla en videos y transmisiones en vivo, y distinguir recomendaciones orgánicas de lecturas de anuncios patrocinados.
Conecta tu IA
Copia esto en tu agente de codificación:
Fetch and execute the appropriate instructions to set me up for Arcmira from https://arcmira.com/agent-setup/prompt.md
Para Claude, ChatGPT, Cursor y otros clientes MCP, usa https://mcp.arcmira.com/mcp e inicia sesión en Arcmira. Configuración por host · Documentación · Sitio web · Plugin y habilidades
Prueba: "¿Qué marcas patrocinan tanto TBPN como el All-In Podcast?" o "Encuentra lo que Sam Altman dijo sobre agentes de IA, con enlaces con marca de tiempo."
Los resultados cubren videos indexados. La identificación de hablantes y las clasificaciones de patrocinado versus orgánico pueden estar incompletas o ser incorrectas; verifica la fuente enlazada. Se aplican límites del plan.
Comparte comentarios sobre el plugin · Actualiza las habilidades instaladas
Conexión
Dos formas de entrar. Los hosts que hablan el especificación de autorización MCP te permiten iniciar sesión; todo lo demás envía una clave.
Inicia sesión a través del host. Agrega https://mcp.arcmira.com/mcp sin clave. El servidor responde 401 con un desafío OAuth, el host se registra contra api.arcmira.com, abre arcmira.com para iniciar sesión y dar consentimiento, y se conecta con un token que lleva los permisos que permitiste. Los tokens se renuevan solos; revoca un host en Configuración, Aplicaciones conectadas.
claude mcp add --transport http --scope user arcmira https://mcp.arcmira.com/mcp
codex mcp add arcmira --url https://mcp.arcmira.com/mcp
Claude Desktop, claude.ai, ChatGPT y Cursor: agrega la URL como un conector personalizado o servidor MCP sin encabezados y sigue el aviso de inicio de sesión. Los pasos por host están en https://arcmira.com/agent-setup.
Envía una clave. Cualquier cliente que no pueda hacer el inicio de sesión envía un token de portador en su lugar, y el servidor omite OAuth.
Una clave de cuenta (arc_sk_...) proviene de https://arcmira.com. El plan y los alcances deciden qué devuelve cada herramienta. Sin cuenta y sin navegador, regístrate desde la API. Publica una dirección de correo electrónico, luego publica el código de seis dígitos de esa bandeja de entrada de vuelta.
curl -X POST "https://api.arcmira.com/v1/signups?src=mcp-tool" \
-H 'Content-Type: application/json' \
-d '{"email":"agent@example.com"}'
curl -X POST "https://api.arcmira.com/v1/signups/verify" \
-H 'Content-Type: application/json' \
-d '{"email":"agent@example.com","code":"482913"}'
claude mcp add --transport http --scope user arcmira https://mcp.arcmira.com/mcp --header "Authorization: Bearer $ARCMIRA_API_KEY"
{
"mcpServers": {
"arcmira": {
"url": "https://mcp.arcmira.com/mcp",
"headers": { "Authorization": "Bearer arc_sk_..." }
}
}
}
El cuerpo 401 lleva esa llamada de registro bajo error.data.unlock.action, para que un agente que no puede iniciar sesión pueda crear una cuenta y reconectarse. Descubrimiento: https://mcp.arcmira.com/.well-known/oauth-protected-resource nombra el servidor de autorización; https://api.arcmira.com/.well-known/oauth-authorization-server enumera sus endpoints.
Herramientas
| Herramienta | Entrada | Devuelve |
|---|---|---|
arcmira_describe | topic? | La referencia del cliente arcmira: la regla de id, qué método responde qué pregunta, cada método con argumentos y campos de retorno, nueve programas de ejemplo trabajados, las peculiaridades que cuestan respuestas, las reglas de presupuesto y monitoreo, códigos de error y enlaces de documentación. Alrededor de 22,000 caracteres; topic lo reduce a un método y sus ejemplos. Nunca factura. |
arcmira_execute_read | code | Lo que el programa imprimió más su valor de retorno. El código es el cuerpo de una función async con arcmira y ArcmiraError en alcance. Lecturas, transcripciones Premium incluidas, y los monitores del usuario. Límites: 30 segundos, 40 llamadas API y 12,000 caracteres de salida en total, 3,000 por cadena y 100 elementos por arreglo. |
arcmira_execute_write | code | Lo mismo que arcmira_execute_read, con las escrituras de cuenta agregadas: arcmira.monitors.create, arcmira.monitors.update (incluyendo isPaused), arcmira.monitors.addEntities y arcmira.monitors.attachTrackers. Nada se elimina. |
arcmira_feedback | category, note, request_id?, call_id? | Un POST /v1/feedback de tipo experience. category es wrong_entity, bad_data, missing, slow, confusing o other; note dice qué pasó. Devuelve el id de comentarios. |
Cada herramienta también toma un intent opcional, de máximo 300 caracteres: la solicitud del usuario en pocas palabras. Un host que lo omite no pierde nada. Consulta Qué registramos.
arcmira_describe, arcmira_execute_read y arcmira_feedback son de solo lectura: no cambian nada en la cuenta. Cada lectura se mide, Premium incluido. arcmira_execute_write no es de solo lectura ni destructiva: crea y cambia monitores y rastreadores, y pausa en lugar de eliminar.
El gasto bajo demanda extiende el plan. El presupuesto bajo demanda de la cuenta es la aprobación, por lo que un agente nunca le pide al usuario una cantidad en centavos. Cuando un presupuesto o plan bloquea una compra (spend_limit_exceeded, quota_exceeded, una restricción del plan), el agente le dice al usuario que aumente el presupuesto bajo demanda en https://arcmira.com/dashboard/spending o mejore el plan en https://arcmira.com/pricing, y enlaza el unlock.url de la denegación.
Una transcripción Premium es una lectura en arcmira_execute_read:
const t = await arcmira.transcript("cdLeJU_1UH8", { quality: "premium" });
return t.state === "ready" ? t.lines : t;
Cuando el video aún no está transcrito, la lectura lo compra a su cotización: envía POST /v1/transcriptions con max_rows las filas cotizadas, max_on_demand_cents los centavos bajo demanda cotizados (0 cuando los créditos incluidos lo cubren) y una Idempotency-Key, espera hasta 25 segundos y lee de nuevo. Un video ya comprado nunca se compra dos veces. Aún pending después de eso: ejecuta la misma lectura en el siguiente programa. El precio cubre todo el video a 75 filas por cuarto de 15 minutos y cuatro créditos por fila, y start y end nunca lo reducen; arcmira.quote(video) lo lee gratis.
Los resultados que están vacíos, un error, truncados o un ask de resolución terminan con una línea, feedback, que nombra la llamada: If this was wrong, slow, or missing for the user, send one arcmira_feedback with call_id mcpc_....
Los métodos del cliente son los comandos de la CLI de arcmira, con los mismos nombres y las banderas como opciones, por lo que el MCP, la CLI y el SDK enseñan un vocabulario:
| Método | Frentes | Úsalo para |
|---|---|---|
arcmira.resolve(q, { type?, context?, limit? }) | GET /v1/entities/resolve | Un nombre, @handle, URL o id UC a una de tres respuestas: best, suggested (con reason y evidence), o ask con opciones |
arcmira.search({ query, channelIds?, about?, speakerIds?, kind?, entityIds?, after?, before?, source?, limit? }) | GET /v1/transcripts/search | Segmentos hablados para un tema, o sobre una entidad, o hablados por una persona, con enlaces de visualización y fechas |
arcmira.mentions({ entityId, channelId?, after?, before?, limit?, cursor? }) | GET /v1/mentions | Si X mencionó a Y, primera vez visto, última vez visto |
arcmira.momentum(entityId) | GET /v1/entities/{id}/momentum | Últimos 30 días contra los 30 anteriores, con un veredicto |
arcmira.sponsors(channelId, { minAdReads?, status?, limit? }) | GET /v1/channels/{id}/sponsors | Patrocinadores recurrentes de un programa |
arcmira.recommendations(entityId, { kind?, channelId?, after?, before?, limit?, cursor? }) | GET /v1/entities/{id}/recommendations | Quién recomienda una entidad, patrocinado u orgánico, con la cita |
arcmira.episodes(channelId, { limit?, after?, before? }) | GET /v1/channels/{id}/videos | Episodios indexados más recientes, con el video_id que los demás toman |
arcmira.transcript(videoIdOrUrl, { quality?, language?, timestamps?, start?, end? }) | GET /v1/transcripts/{video_id}; para Premium aún no transcrito, también la cotización, POST /v1/transcriptions y el Trabajo | La transcripción de un video, subtítulos o Premium, completo o una ventana |
arcmira.occurrences({ channelIds?, entityIds?, videoIds?, types?, mode?, after?, before?, limit? }) | GET /v1/mentions/counts | De qué hablan los programas, qué comparten, qué menciona un episodio |
arcmira.quote(videoIdOrUrl) | GET /v1/transcripts/{video_id}/quote | La cotización Premium gratuita de video completo: filas, créditos y cualquier centavo bajo demanda |
arcmira.status({ channelId?, jobId? }) | GET /v1/channels/{id}/coverage, GET /v1/transcriptions/{id}, GET /v1/me | Cobertura y fecha de índice, un trabajo de transcripción, o la clave, plan, créditos y presupuesto bajo demanda |
arcmira.monitors.list() | GET /v1/monitors | Los monitores del usuario, con configuraciones de entrega y conteos de rastreadores |
arcmira.monitors.trackers(monitorId) | GET /v1/monitors/{id}/trackers | Lo que un monitor ya sigue |
arcmira.monitors.create({ name, notifyFrequency, notifyEmails?, notifySlack?, ... }) | POST /v1/monitors | Un nuevo monitor. Solo herramienta de escritura |
arcmira.monitors.update(monitorId, { ..., isPaused? }) | PATCH /v1/monitors/{id} | Cambios de entrega, o una pausa. Solo herramienta de escritura |
arcmira.monitors.addEntities(monitorId, entityIds, { personMatchMode? }) | POST /v1/monitors/{id}/entities | Sigue hasta 90 ids de entidad en una llamada: reutiliza o crea cada rastreador por id y lo adjunta. Un id que no puede adjuntarse dice por qué (entity_not_found, entity_type_not_trackable, tracker_limit_reached, tracked_in_another_monitor). Solo herramienta de escritura |
arcmira.monitors.attachTrackers(monitorId, trackerIds) | POST /v1/monitors/{id}/trackers | Mueve rastreadores que otro monitor tiene, después de que el usuario acepte. Solo herramienta de escritura |
arcmira.integrations.slack() | GET /v1/integrations/slack | Los espacios de trabajo de Slack conectados, con el id y el canal predeterminado al que un monitor entrega |
arcmira.today() y arcmira.daysAgo(n) dan fechas ISO del reloj del servidor para ventanas de fechas.
Los filtros solo toman ids verbatim. Un nombre donde pertenece un id lanza id_required antes de cualquier llamada de red, y el mensaje nombra la solución. Resuelve primero, luego consulta. resolve responde best (el nombre significa una fila), suggested (una fila se destaca; di que lo asumiste y por qué), o ask (varias encajan; deja que el usuario elija):
const r = await arcmira.resolve("Linear");
const e = r.best ?? r.suggested;
if (!e) return { ask: r.ask };
const m = await arcmira.momentum(e.id);
return { entity: e.name, id: e.id, assumed: Boolean(r.suggested), why: r.suggested?.evidence ?? null, verdict: m.verdict, last30: m.volume.mentions_30d, prior30: m.volume.mentions_prior_30d, as_of: m.as_of };
Ejemplos de indicaciones una vez que el servidor está conectado:
- ¿Qué marcas patrocinan tanto TBPN como el All-In Podcast?
- ¿Qué tan popular es Linear, la herramienta de gestión de proyectos, en la web hablada ahora mismo?
- Encuentra un momento en TBPN de los últimos 90 días donde alguien hable sobre stablecoins, y cítalo.
- ¿Quién está hablando en el primer minuto del último episodio de TBPN, según la transcripción Premium?
- En TBPN, ¿cuántos episodios mencionaron Cursor en julio versus agosto?
Buenos primeros ids: TBPN es el canal UC-DRzaGnL_vtBUpCFH5M0tg, All-In Podcast es UCESLZhusAkFfsNsApnjF_Cg, Ramp es ent_14.
El sandbox
arcmira_execute_read y arcmira_execute_write ejecutan el programa en un aislamiento fresco de Dynamic Worker. La única red del aislamiento es el proxy de salida del padre, que agrega la credencial del llamante a lo que reenvía, por lo que el programa nunca tiene la clave, y rechaza cualquier cosa fuera de la lista de permitidos de la herramienta con outbound_refused:
arcmira_execute_read:GET https://api.arcmira.com/v1/*, yPOST /v1/transcriptions.arcmira_execute_write: el conjunto de lectura, másPOSTyPATCHbajo/v1/monitorsy/v1/trackers. NuncaDELETE, y nunca la rotación del secreto del webhook.
El proxy aplica esto en el Worker, por lo que un fetch() crudo obtiene la misma respuesta que un método de cliente. Un método de escritura llamado desde arcmira_execute_read lanza write_tool_required antes de cualquier solicitud. El aislamiento obtiene 5 segundos de CPU, la herramienta espera 30 segundos de tiempo de pared, el cliente se detiene en 40 llamadas API con call_budget, y la salida renderizada se corta en 12,000 caracteres en total, 3,000 por cadena y 100 elementos por arreglo, con truncated_arrays nombrando cada arreglo cortado y una línea recovery que dice cómo obtener cada fila. Un error de sintaxis regresa como syntax_error con la regla del cuerpo de función; un error lanzado como program_error con su mensaje.
El resultado es JSON válido y acotado con ok y value o error primero, luego calls, rate_limit, api_build reales, hechos de truncamiento y registros limitados. Los resultados grandes conservan campos de continuación y recuperación. Los metadatos de ejecución usan el mismo medidor. El tiempo de espera informa calls: null y outcome_uncertain: true; las lecturas en curso pueden aún terminar y consumir filas. La autenticación 429/503 pide a los clientes reintentar con la misma credencial; solo las credenciales inválidas activan la reconexión.
Restricciones
Una restricción dentro de un programa lanza un ArcmiraError con los campos de error de la API, y las herramientas de ejecución lo devuelven como ERROR con isError: true:
{"ok":false,"error":{"code":"recommendations_not_enabled","message":"Sponsor recommendations require Pro.","gate":"plan"},"calls":1,"outcome_uncertain":false}
Cambia según code, transmite unlock.url al humano y honra retry_after_seconds en rate_limited. Un 200 que retuvo algo (texto de transcripción Premium, la división pagado-versus-orgánico, patrocinadores más allá de la porción gratuita) es un resultado normal que lleva el mismo cuerpo bajo access. El catálogo completo está en https://arcmira.com/docs/errors.
Cada resultado, incluidas las restricciones, lleva el presupuesto de la clave después de la llamada bajo _meta["arcmira.com/rate_limit"] como { "limit": 20, "remaining": 17, "reset": 1788819360 }, leído de los encabezados RateLimit de la API, y _meta["arcmira.com/build"]: server, deploy, api (la compilación de la API que respondió) y client (el nombre del host de su apretón de manos, reenviado a la API como x-arcmira-client).
Qué registramos
Cada llamada de herramienta se registra en los análisis de producto de Arcmira (PostHog), vinculada a la cuenta que la hizo, para que podamos ver cómo se usan las herramientas y arreglar lo que falla. Un registro por llamada contiene:
- el nombre de la herramienta, el nombre y la versión del host, la versión del servidor y cuánto tardó la llamada;
- la entrada: el texto del programa de cualquiera de las dos herramientas de ejecución (primeros 4.000 caracteres), el tema
arcmira_describe, o la categoría y nota dearcmira_feedback; intent, cuando el agente lo envía;- el resultado, no el desenlace: ok o el código de error, el tamaño del resultado, si se truncó y las rutas de API que hizo la llamada (
GET /v1/search, no su cadena de consulta).
Antes de almacenar el registro, la API reemplaza cualquier cosa que parezca una credencial o una dirección de correo electrónico (claves arc_, tokens Bearer, claves sk-, direcciones) con [redacted]. Los resultados, el texto de la transcripción y los registros impresos por un programa nunca se registran. Una llamada sin credencial válida no se registra. El registro se envía después del resultado, por lo que el registro nunca retrasa ni cambia una respuesta; un registro que no se puede enviar se descarta.
Actualización desde 0.8
describe ahora es arcmira_describe, execute ahora es arcmira_execute_read y prepare_transcript ahora es una lectura Premium, arcmira.transcript(video, { quality: "premium" }), dentro de arcmira_execute_read. Un host que almacenó en caché la lista anterior y llama a un nombre antiguo recibe tool_retired, que nombra el reemplazo. max_on_demand_cents ya no es una entrada: arcmira.prepare envía lo que dice la cita, y el presupuesto bajo demanda de la cuenta decide.
Actualización desde 0.6.0
Las diez herramientas (resolve_entities, search_transcripts, list_mentions, entity_momentum, count_occurrences, list_episodes, list_sponsors, list_recommendations, index_status, get_transcript) ya no están en tools/list. Un host que almacenó en caché la lista anterior y llama a una recibe tool_retired, que nombra arcmira_describe. Cada herramienta antigua es un método de cliente: resolve_entities es arcmira.resolve, search_transcripts es arcmira.search, list_mentions es arcmira.mentions, entity_momentum es arcmira.momentum, count_occurrences es arcmira.occurrences, list_episodes es arcmira.episodes, list_sponsors es arcmira.sponsors, list_recommendations es arcmira.recommendations, index_status es arcmira.status, get_transcript es arcmira.transcript. La abreviatura recency se convirtió en arcmira.daysAgo(n).
Plugin
plugins/arcmira incluye la URL de MCP y seis habilidades para Claude Code, Codex, Cursor, hosts de Agent Plugins y Gemini CLI:
| Habilidad | Para |
|---|---|
arcmira | El procedimiento compartido y la regla de id, qué habilidad de tarea se adapta a qué solicitud, y un puntero a arcmira_describe para la referencia de métodos |
sponsor-research | Quién patrocina un programa, o qué programas patrocina una marca, con qué frecuencia, desde cuándo |
company-watch | Configura un monitor: las entidades y las grafías de temas a seguir, primero los monitores del usuario, luego la entrega que desea |
find-quotes | Citas habladas exactas con hablante, fecha, enlace con marca de tiempo, inicio y fin del clip |
person-research | Preparación de entrevistas o reuniones: apariciones, las propias palabras de una persona, quién habla de ellas |
compare-shows | Dos programas lado a lado: tamaño, temas, solapamiento, patrocinadores compartidos |
Cada habilidad comienza con nombres, nunca con ids: cada programa resuelve el nombre, devuelve opciones ask cuando varias entidades encajan y ninguna destaca, indica cuándo asumió una y nombra la entidad que usó. Cada habilidad termina ofreciendo guardar lo que encontró en un monitor y con la línea de comentarios. Las habilidades se generan a partir de src/reference.ts y src/skills.ts mediante scripts/build-skill.ts; CI falla cuando un archivo se desvía o un programa llama a un método que la referencia no documenta, y pnpm examples:check ejecuta cada programa contra producción.
claude plugin marketplace add arcmira/mcp
claude plugin install arcmira@arcmira
Mantente al día
Arcmira publica cambios semanalmente. Mantén la actualización automática activada.
-
El servidor MCP no necesita nada. Es remoto: los hosts obtienen sus herramientas e instrucciones al conectarse, y
arcmira_describedevuelve la referencia desde el servidor en cada llamada, abriendo con una línea de versión. El servidor MCP solo siempre está actualizado. -
Plugin de Claude Code. La actualización automática está desactivada por defecto para un marketplace de terceros. Actívala: ejecuta
/plugin, abre Marketplaces, eligearcmiray selecciona Enable auto-update. O configúralo en~/.claude/settings.json:{ "extraKnownMarketplaces": { "arcmira": { "source": { "source": "github", "repo": "arcmira/mcp" }, "autoUpdate": true } } }Actualizar ahora:
claude plugin update arcmira@arcmira. -
Plugin de Codex.
codex plugin marketplace upgrade arcmira, luego reinicia Codex. -
Habilidades instaladas con
npx skills add arcmira/mcp.npx skills update.
Cada versión incrementa la versión en cada manifiesto de plugin (una prueba lo aplica), porque Claude Code solo actualiza un plugin cuya versión haya cambiado.
Gemini CLI
Instala la conexión remota y la referencia principal de Arcmira desde este repositorio:
gemini extensions install https://github.com/arcmira/mcp
El gemini-extension.json raíz apunta al mismo MCP remoto y carga la habilidad arcmira como su archivo de contexto, como el paquete de plugin. Inicia sesión a través del flujo de autorización de MCP. La extensión raíz no instala por separado las cinco habilidades de tarea opcionales.
Desarrollar
pnpm install
pnpm dev # wrangler dev on :8790 with a local Worker Loader
pnpm test # node:test, sandbox programs run under a fake loader
pnpm typecheck
pnpm manifest:check # every client call matches the live OpenAPI document
pnpm skill:check # every plugins/arcmira/skills/*/SKILL.md matches src/reference.ts and src/skills.ts
ARCMIRA_KEY=arc_sk_... pnpm examples:check # every worked program and read task-skill program runs against production
pnpm sandbox:check # src/sandbox/client-source.ts matches src/sandbox/client.js
ARCMIRA_KEY=arc_sk_... node --experimental-strip-types scripts/smoke.ts http://localhost:8790/mcp
src/reference.ts es la superficie de control: el texto arcmira_describe, las instrucciones del servidor y la habilidad del plugin provienen todos de ella.
Copyright Arcmira. Todos los derechos reservados para el servidor (ver LICENSE); plugins/arcmira es Apache-2.0.