MCP YouTube Transcript
An MCP server retrieving transcripts of YouTube videos
Descripción del creador (original en inglés)
Create and manage CodeQR short links, QR codes, and analytics from any MCP client.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Funciona en Claude para web, escritorio y móvil:
https://mcp.codeqr.io/mcpEjecuta esto en tu terminal
claude mcp add --transport http codeqr https://mcp.codeqr.io/mcpPégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"codeqr": {
"url": "https://mcp.codeqr.io/mcp"
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"codeqr": {
"type": "http",
"url": "https://mcp.codeqr.io/mcp"
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
ChatGPT solo se conecta a servidores en internet:
https://mcp.codeqr.io/mcpLos nombres de los menús pueden variar un poco según el plan y con el tiempo.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Todavía no hemos leído la lista de herramientas de este servidor; revisamos los endpoints por turnos.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con el dominio codeqr.io (el registro comprueba quién es dueño del dominio)
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; leemos la lista de herramientas cuando revisamos el endpoint
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en la nube del creador. Te conectas por internet sin instalar nada, pero lo que envías pasa por los servidores del creador.
El repo de GitHub cambió por última vez –, y la última versión (0.1.0) llegó al registro hace 3 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. Se conecta por URL, así que también funcionan las apps que aceptan servidores MCP remotos, como ChatGPT en modo desarrollador.
En la misma categoría: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
An MCP server retrieving transcripts of YouTube videos
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Remote MCP server for CodeQR with OAuth 2.0 authentication. Compatible with ChatGPT, OpenAI Agents SDK, Grok (xAI), and any MCP client supporting Streamable HTTP transport.
┌──────────┐ ┌─────────────────────┐ ┌──────────┐
│ ChatGPT │ │ CodeQR MCP Remote │ │ CodeQR │ │ or any │─────▶│ │─────▶│ API │ │ MCP │◀─────│ OAuth 2.0 + MCP │◀─────│ │ │ client │ │ Streamable HTTP │ │ │ └──────────┘ └─────────────────────┘ └──────────┘
/.well-known/oauth-protected-resourcePOST /oauth/registerGET /oauth/authorize shows this server's consent screen — the app's self-declared name, marked unverified unless its exact redirect URI is listed in src/oauth/verified-clients.ts, and the host that redirect URI points at. On approval the user goes to CodeQR, where they log in, choose which project to grant access to, and approve — no API key is ever handled. The callback only completes in the browser that approved.GET /oauth/callback, which trades the code for an access + refresh token pairPOST /mcpThe CodeQR access token lasts 7 days and is renewed transparently. Each renewal gives the session another 120 days, so a connection in use does not expire on a fixed date; an idle one ends 120 days after its last renewal, and none outlives one year from when it was made (the expires_in the client is given).
# Install dependencies
npm install
cp .env.example .env
npm run dev
npm run build npm start
The project is configured for Vercel serverless functions:
# Install Vercel CLI
npm i -g vercel
vercel
The app will be available at https://your-project.vercel.app. All routes are handled by the serverless function at api/server.ts.
OAuth storage: Set Upstash Redis (UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN) so authorization codes, access tokens, and registered clients persist across serverless invocations. If these variables are omitted, the server falls back to an in-memory store (fine for local development only).
docker build -t codeqr-mcp-remote .
docker run -p 3000:3000 -e SERVER_URL=https://mcp.codeqr.io codeqr-mcp-remote
Set environment variables:
SERVER_URL — Your public server URL (e.g., https://mcp.codeqr.io)UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN — Recommended for multi-instance or restartsPORT — Port (usually set automatically by the platform)https://mcp.codeqr.io/mcp)from openai import OpenAI
client = OpenAI()
response = client.responses.create( model="gpt-4o", tools=[{ "type": "mcp", "server_label": "codeqr", "server_url": "https://mcp.codeqr.io/mcp", "require_approval": "never", }], input="Create a short link for https://codeqr.io", )
| Tool | Description |
|---|---|
create_link | Create a shortened link |
list_links | List all short links |
get_link_info | Get link details |
update_link | Update a link |
delete_link | Delete a link |
create_qrcode | Create a dynamic QR code encoding a URL, Wi-Fi credentials, a contact card, WhatsApp, email, SMS, a phone number, text or a crypto request |
list_qrcodes | List all QR codes |
update_qrcode | Change where an existing QR code points, without reprinting it |
delete_qrcode | Delete a QR code; printed copies stop resolving |
get_analytics | Query click analytics |
list_domains | List custom domains |
list_tags | List tags |
create_tag | Create a tag |
get_workspace | Read the authorized workspace: name, slug and plan |
Conversion event tools are not offered. track_lead and track_sale need the conversions.write scope, which CodeQR grants to workspace owners only, and requesting it makes CodeQR reject the whole authorization for everyone else. The per-link trackConversion toggle is a links.write field and IS exposed on create_link/update_link (plans that include conversion tracking only).
Smart rules are exposed on create_link/update_link as rules: conditional routing by any of the twelve attributes the API implements, and traffic splitting across 2-4 destinations, which is how an A/B test is expressed — one rule with no condition and a split. Where the workspace doesn't have smart rules enabled, the API rejects the whole call — the create or update fails outright, so no link or QR code is created without the rules it asked for — and the server doesn't forward that rejection as-is: it reports that smart rules aren't enabled on this workspace, with a link to details. src/plan-limit-message.ts recognizes plan wording it knows: a capability gate like this one becomes "isn't enabled on this workspace", a quota becomes "has reached its limit of N …"; anything it doesn't recognize passes through unchanged. Four of the field's invariants cannot be stated in JSON Schema (weights totalling 100, url xor split, the all-or-nothing condition, the unconditional rule coming last), so they are checked in src/smart-rules.ts before the request is sent — which saves a round-trip and answers in a sentence, rather than the serialized error body the SDK surfaces.
The trap worth knowing: value is compared whole and case-insensitively against what the request carries, which for three attributes is narrower than the name suggests. device is the operating system (iOS, Android, Windows, Mac OS, Linux — never mobile), language a two-letter code, referrer a bare domain. A wrong value is not an error anywhere: the API accepts any string and the rule silently never matches.
create_qrcode/update_qrcode also take title and walletPass. title sets the QR code's display title and is printed in large type on the Google/Apple Wallet pass saved from the code (replacing "QR Code"). Within walletPass, name and logo override the workspace name and logo shown on that pass, and barcodeText sets the text shown under the QR code, e.g. a member name or card number; when it is absent, CodeQR sends no text for that line — the title is never repeated there. Custom branding is only available on plans that include it, and never during a trial: a new non-null walletPass is rejected with 403 on any other plan or during a trial, while null (clearing it) is always accepted. Outside those plans, or during a trial, a stored value is ignored when the pass is built, so passes fall back to the workspace name and logo. logo is an https URL: the API downloads it and stores its own copy, so the response returns that copy's URL, not the one sent. barcodeText is 1-40 characters after trimming. On update_qrcode, an object replaces the stored value as a whole (a field left out of it is cleared, not merged) — send name, logo and barcodeText together to keep all three; null clears the override and reverts to the workspace branding, the same way rules: null ends a running smart-rules test.
With MCP_UI_ENABLED=1, hosts that render MCP Apps (ChatGPT, Claude) show a card for the QR code or short link returned by create_qrcode, update_qrcode, create_link, update_link and get_link_info: its image, short link with a copy button, whether it is dynamic, the destination and the scan or click count, plus a button to open it in the CodeQR dashboard and one that asks how many scans or clicks it had.
_meta.ui.resourceUri points at ui://codeqr/item-card.v1.html, served through resources/read (src/widgets/). Each read is logged as mcp.resource_read.structuredContent (an allowlist of fields; hosts show it to the model too) and _meta["io.codeqr/card"] (image and dashboard URLs, for the card only). content is unchanged, for clients without UI.get_analytics gets an analytics card (ui://codeqr/analytics.v1.html): what is counted and for which period, the total, a trend line or the top five rows, and a button to open the analytics in the dashboard. Its 24h / 7d / 30d chips re-run the call from inside the card through the host (tools/call), only when the host says it can, and only with intervals every plan can read.web/item-card/ and web/analytics/, with the bridge to the host in web/shared/. yarn widgets:build bundles them into src/widgets/generated/, which is committed; yarn verify fails when it is stale. To look at them in a browser, run node scripts/build-widgets.mjs --html, serve web/dev/ and open harness.html?fixture=qr&theme=dark&locale=pt-BR&width=375 or harness.html?widget=analytics&fixture=countries&interval=30d.Unset, the tool list, the resource list and every result are what they were.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /health | No | Health check |
| GET | /.well-known/oauth-protected-resource | No | OAuth resource metadata (RFC 9728) |
| GET | /.well-known/oauth-authorization-server | No | OAuth server metadata (RFC 8414) |
| POST | /oauth/register | No | Dynamic client registration (RFC 7591) |
| GET | /oauth/authorize | No | Consent screen: which app, and where access is sent |
| POST | /oauth/authorize | No | Consent decision; on approval redirects to CodeQR |
| GET | /oauth/callback | No | Return leg from CodeQR |
| POST | /oauth/token | No | Token exchange |
| POST | /mcp | Bearer | MCP Streamable HTTP endpoint |
src/
├── index.ts # Express app & server startup ├── config.ts # Environment configuration ├── oauth/ │ ├── store.ts # OAuth state: Upstash Redis or in-memory fallback │ └── pkce.ts # PKCE S256 verification ├── middleware/ │ └── auth.ts # Bearer token validation middleware └── routes/ ├── well-known.ts # OAuth discovery metadata endpoints ├── oauth.ts # Authorization & token endpoints └── mcp.ts # MCP tool definitions & handlers
.env.example) for serverless and multi-instance deployments. Without it, the in-memory store is used (single process only).Solo se muestra el principio; lee el resto en el repo