6Modulo 6

MCP - Model Context Protocol

40 min

Introducción: El problema de las capacidades limitadas

Imagina que Claude Code es como un asistente muy inteligente que vive en tu terminal. Por defecto, puede leer archivos, escribir código y ejecutar comandos bash. Estas son herramientas poderosas, pero hay un límite: solo puede interactuar directamente con tu sistema de archivos y tu shell.

¿Qué pasa cuando necesitas que Claude:

  • Consulte datos de una base de datos PostgreSQL?
  • Cree un issue en tu sistema de tickets de GitHub?
  • Navegue por una página web y extraiga información?
  • Envíe mensajes a Slack o correos electrónicos?
  • Acceda a tu calendario de Google o tus notas en Notion?

Aquí es donde entra MCP — el puente que conecta Claude Code con el mundo exterior.


¿Qué es MCP?

MCP (Model Context Protocol) es un protocolo estándar y de código abierto desarrollado por Anthropic para conectar modelos de lenguaje grandes (LLMs) como Claude con herramientas externas, bases de datos, APIs y servicios.

Piensa en MCP como el "USB-C de las aplicaciones de IA" — un estándar universal que permite que cualquier herramienta se conecte con cualquier LLM que soporte el protocolo.

Definición formal

MCP es un protocolo basado en JSON-RPC 2.0 que permite a las aplicaciones de IA:

  • Acceder a fuentes de datos (archivos, bases de datos, APIs)
  • Usar herramientas (buscadores, calculadoras, automatizadores)
  • Integrarse con flujos de trabajo (sistemas empresariales, servicios cloud)

Fecha de lanzamiento: Noviembre 2024 Gobernanza actual (2026): Agentic AI Foundation (AAIF) bajo la Linux Foundation, co-fundada por Anthropic, Block y OpenAI.


¿Cómo funciona MCP?

MCP funciona con una arquitectura cliente-servidor:

┌─────────────────┐          ┌──────────────┐          ┌─────────────────┐
│  Claude Code    │ ←──MCP──→│  MCP Server  │ ←─────→  │  Servicio       │
│  (Cliente)      │          │              │          │  Externo        │
│                 │          │              │          │  (GitHub, DB,   │
│  - Lee prompts  │          │  - Expone    │          │   Slack, etc.)  │
│  - Envía        │          │    tools     │          │                 │
│    requests     │          │  - Traduce   │          │                 │
│  - Recibe       │          │    datos     │          │                 │
│    resultados   │          │              │          │                 │
└─────────────────┘          └──────────────┘          └─────────────────┘

Componentes clave

  1. Cliente MCP: Claude Code actúa como cliente que solicita capacidades
  2. Servidor MCP: Software que expone herramientas y datos de un servicio específico
  3. Protocolo: JSON-RPC 2.0 para la comunicación estandarizada

Flujo de comunicación

  1. Claude Code se conecta a uno o más servidores MCP
  2. Cada servidor MCP expone sus capacidades (tools, resources, prompts)
  3. Cuando necesitas usar una herramienta, Claude envía una solicitud al servidor correspondiente
  4. El servidor MCP ejecuta la acción en el servicio externo
  5. El servidor devuelve los resultados a Claude Code
  6. Claude procesa los resultados y continúa con tu tarea

Ejemplo práctico:

Usuario: "Crea un issue en GitHub para reportar el bug que encontramos"
 
Claude Code → MCP Server GitHub: create_issue(title="Bug X", body="...")
MCP Server → GitHub API: POST /repos/user/repo/issues
GitHub API → MCP Server: {id: 123, url: "..."}
MCP Server → Claude Code: Issue creado exitosamente
Claude Code → Usuario: "He creado el issue #123 en GitHub"

Casos de uso principales

MCP permite escenarios que serían imposibles o muy complejos solo con herramientas nativas:

1. Integración con sistemas de tickets

> "Implementa la feature descrita en JIRA issue ENG-4521 y crea un PR en GitHub"

Claude lee el issue de JIRA, implementa el código, crea el commit y abre el PR — todo automáticamente.

2. Consultas a bases de datos

> "Muéstrame los 10 usuarios más activos del último mes según nuestra DB de PostgreSQL"

Claude ejecuta la query SQL apropiada y presenta los resultados en formato legible.

3. Análisis de monitoreo

> "Revisa Sentry para ver si hay errores relacionados con el feature de login"

Claude accede a tus herramientas de monitoreo y analiza los logs.

4. Automatización de navegadores

> "Ve a nuestra página de pricing y verifica que todos los precios se muestren correctamente"

Con Playwright MCP, Claude puede controlar un navegador real.

5. Integración con herramientas de diseño

> "Actualiza nuestro componente de header basándote en el diseño nuevo de Figma"

Claude lee el diseño de Figma y genera el código correspondiente.

6. Workflows empresariales

> "Envía un mensaje en el canal #engineering de Slack con el resumen del PR que acabo de crear"

Integración con herramientas de comunicación del equipo.


Beneficios de MCP

1. Extensibilidad sin límites

No hay que esperar a que Anthropic agregue soporte para cada herramienta. La comunidad puede crear servidores MCP para cualquier servicio.

2. Estandarización

Un solo protocolo para múltiples servicios. Aprendes a configurar un servidor MCP y sabes configurar todos.

3. Separación de responsabilidades

  • Claude Code: Se enfoca en entender tu intención y generar código
  • MCP Server: Se encarga de los detalles de integración con cada servicio
  • Servicio externo: Solo necesita una API estándar

4. Mantenimiento independiente

Si GitHub cambia su API, solo se actualiza el servidor MCP de GitHub. Claude Code no necesita cambios.

5. Reutilización entre LLMs

MCP es un estándar abierto. Cualquier LLM que implemente MCP puede usar los mismos servidores.

6. Seguridad y control

Los servidores MCP pueden configurarse con permisos específicos y autenticación OAuth 2.0.


MCP vs CLI directo: ¿Cuándo usar cada uno?

No siempre necesitas MCP. A veces, ejecutar un comando CLI directamente con Bash es más simple.

EscenarioRecomendaciónRazón
Git operationsCLI directo (git status)Comando simple, sin estado
npm/yarn commandsCLI directo (npm install)Proceso de una sola ejecución
Navegación de archivosCLI directo (ls, find)Operaciones stateless
AWS CLICLI directo (aws s3 ls)Comandos independientes
Navegador webMCP (Playwright)Requiere mantener estado (sesión)
Bases de datosMCP (PostgreSQL)Conexión persistente
APIs con autenticaciónMCP (GitHub, Slack)Gestión de tokens compleja
Herramientas interactivasMCPMúltiples operaciones relacionadas

Ejemplo comparativo

CLI directo (mejor opción):

> "Ejecuta git status y muéstrame los archivos modificados"
# Claude simplemente ejecuta: git status

MCP (mejor opción):

> "Busca todos los PRs abiertos en GitHub que mencionen 'authentication'
   y resume el estado de cada uno"
# Con MCP: Claude consulta la API de GitHub múltiples veces,
# mantiene contexto entre llamadas, y procesa resultados complejos

Regla general

  • CLI directo: Operaciones simples, stateless, de una sola ejecución
  • MCP: Operaciones complejas, con estado, que requieren múltiples interacciones

El ecosistema MCP

MCP es de código abierto y tiene una comunidad activa creando servidores para todo tipo de servicios:

Servidores MCP populares (2026)

  • Playwright: Automatización de navegadores
  • GitHub: Issues, PRs, repositorios
  • PostgreSQL: Consultas a bases de datos
  • Slack: Mensajería y canales
  • Filesystem: Acceso extendido a archivos
  • Google Calendar: Gestión de eventos
  • Notion: Notas y bases de datos
  • Sentry: Monitoreo de errores
  • Figma: Diseños y componentes

En el siguiente punto (6.2) exploraremos los MCPs más populares en detalle.

Recursos de la comunidad


Conclusión

MCP transforma Claude Code de un asistente de código en un orquestador de ecosistemas completos. Ya no estás limitado a leer archivos y ejecutar comandos — ahora Claude puede interactuar con prácticamente cualquier herramienta o servicio que uses.

Lo importante a recordar:

  • MCP es un protocolo estándar para conectar LLMs con herramientas externas
  • Funciona con arquitectura cliente-servidor
  • Claude Code actúa como cliente MCP
  • Los servidores MCP exponen capacidades de servicios externos
  • Es mejor que CLI directo para operaciones complejas con estado
  • Hay un ecosistema creciente de servidores MCP disponibles

En los siguientes puntos del módulo aprenderás:

  • 6.2: Los MCPs más populares y qué puedes hacer con cada uno
  • 6.3: Cómo instalar y configurar servidores MCP
  • 6.4: Cuándo usar MCP vs CLI directo (casos avanzados)
  • 6.5: Filosofía recomendada para usar MCP efectivamente

Recursos adicionales


6.2 MCPs populares

Introducción: El ecosistema MCP en 2026

Desde el lanzamiento de MCP en noviembre de 2024, el ecosistema ha crecido exponencialmente. En 2026 existen más de 7,900 servidores MCP disponibles, desde soluciones oficiales hasta herramientas comunitarias especializadas.

En este punto exploraremos los MCPs más populares y útiles para desarrolladores, organizados por categorías, con casos de uso específicos y ejemplos prácticos.

Nota importante: Este punto se enfoca en qué puede hacer cada MCP. En el punto 6.3 aprenderás cómo instalarlos y configurarlos.


Categorías de MCPs

🌐 Automatización de navegadores

Playwright

Servidor MCP para automatización de navegadores web usando Playwright.

Casos de uso principales:

  • Testing automatizado de interfaces de usuario
  • Web scraping estructurado y confiable
  • Navegación automática por flujos web
  • Captura de screenshots y videos
  • Validación de diseños responsive

Ejemplos de prompts:

> "Navega a nuestra página de pricing y verifica que todos los planes
   muestren el precio correcto"
 
> "Accede al dashboard de producción, haz login con las credenciales de test,
   y captura un screenshot del estado actual"
 
> "Ejecuta un test E2E del flujo de compra completo y reporta cualquier error"

Consideraciones:

  • Requiere Playwright instalado localmente
  • Ideal para operaciones complejas que requieren estado del navegador
  • Más eficiente que herramientas basadas en screenshots

Browserbase

Automatización de navegadores en la nube.

Casos de uso principales:

  • Navegación web sin instalar Playwright localmente
  • Extracción de datos a escala
  • Llenado automático de formularios
  • Automatización en ambientes sin GUI

Ejemplos de prompts:

> "Extrae todos los posts del blog de la competencia publicados este mes"
 
> "Completa el formulario de contacto en [url] con los datos del cliente"

Consideraciones:

  • Basado en cloud, no requiere setup local
  • Requiere cuenta en Browserbase
  • Mejor para operaciones distribuidas

🔧 Integración con plataformas de desarrollo

GitHub (Oficial)

Servidor MCP oficial de GitHub para gestión completa de repositorios.

Casos de uso principales:

  • Búsqueda avanzada de código en repositorios
  • Gestión de issues y pull requests
  • Code reviews automatizados
  • Creación y gestión de branches
  • Consulta de GitHub Actions

Ejemplos de prompts:

> "Busca todos los archivos en nuestro repo que usen la función
   deprecatedAPI y crea un issue para cada uno"
 
> "Revisa el PR #456 y comenta sobre problemas de seguridad potenciales"
 
> "Crea una rama feature/new-auth, implementa autenticación JWT,
   y abre un PR con descripción detallada"
 
> "Muéstrame todos los PRs abiertos que mencionan 'performance'
   y resume el estado de cada uno"

Características especiales:

  • Modo solo lectura: Evita modificaciones accidentales
  • Toolsets dinámicos: Habilita/deshabilita grupos de funcionalidades
  • Búsqueda avanzada: Soporte completo de la sintaxis de GitHub Search
  • Iconos Octicon: Visualización nativa en clientes que lo soporten

Configuración básica:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxx"
      }
    }
  }
}

Consideraciones:

  • Requiere GitHub Personal Access Token
  • Soporta modo read-only para seguridad
  • Actualizado activamente por GitHub (2026)

GitLab

Similar a GitHub MCP pero para GitLab.

Casos de uso principales:

  • Gestión de merge requests
  • CI/CD pipeline management
  • Issues y milestones
  • Wiki y documentación

Ejemplos de prompts:

> "Analiza los pipelines que fallaron esta semana y crea un reporte"
 
> "Actualiza el wiki del proyecto con la nueva arquitectura"

Linear

Gestión de proyectos e issues estilo ágil.

Casos de uso principales:

  • Crear y actualizar issues de forma automática
  • Sincronizar tareas entre código y Linear
  • Reporting de sprints
  • Gestión de ciclos y roadmaps

Ejemplos de prompts:

> "Crea un issue en Linear para cada TODO que encuentres en el código"
 
> "Muéstrame todas las tareas asignadas a mí en el sprint actual"

🗄️ Bases de datos

PostgreSQL

Servidor MCP para consultas y gestión de bases de datos PostgreSQL.

Casos de uso principales:

  • Consultas SQL en lenguaje natural
  • Análisis de datos y generación de reportes
  • Gestión de schemas
  • Debugging de queries
  • Migraciones de datos

Ejemplos de prompts:

> "Muéstrame los 10 usuarios más activos del último mes"
 
> "Analiza la tabla orders y encuentra patrones de compra inusuales"
 
> "Genera un reporte de ventas por categoría de producto"
 
> "Optimiza esta query SQL: [pegar query lenta]"

Configuración básica:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/dbname"
      }
    }
  }
}

Consideraciones:

  • Soporta modo read-only (recomendado para producción)
  • Pooling de conexiones incluido
  • Ideal para análisis de datos ad-hoc

MongoDB

Servidor MCP para bases de datos NoSQL MongoDB.

Casos de uso principales:

  • Consultas a colecciones en lenguaje natural
  • Agregaciones complejas
  • Análisis de documentos JSON
  • Debugging de queries

Ejemplos de prompts:

> "Busca todos los usuarios que se registraron en los últimos 7 días
   y tienen más de 5 pedidos"
 
> "Analiza la colección de logs y encuentra errores recurrentes"

Configuración básica:

{
  "mcpServers": {
    "mongodb": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-database-server"],
      "env": {
        "DB_TYPE": "mongodb",
        "MONGODB_CONNECTION_STRING": "mongodb://localhost:27017/mydb"
      }
    }
  }
}

SQLite

Servidor MCP para bases de datos SQLite locales.

Casos de uso principales:

  • Análisis de bases de datos locales
  • Testing con datos locales
  • Exploración de schemas
  • Prototipos y desarrollo

Ejemplos de prompts:

> "Crea una tabla de usuarios con campos básicos y genera datos de prueba"
 
> "Analiza la base de datos local.db y muéstrame su estructura"

Consideraciones:

  • Sin dependencias externas
  • Perfecto para desarrollo local
  • Soporta CRUD completo

💬 Comunicación y productividad

Slack

Servidor MCP para integración completa con Slack.

Casos de uso principales:

  • Buscar mensajes y conversaciones
  • Enviar mensajes a canales o DMs
  • Resumir threads y conversaciones
  • Análisis de sentimiento en canales
  • Notificaciones automáticas

Ejemplos de prompts:

> "Busca en #engineering todas las menciones de 'deployment issue'
   en los últimos 3 días y resume los problemas"
 
> "Envía un mensaje al canal #general anunciando el release v2.0"
 
> "Resume el thread más largo del canal #product esta semana"
 
> "Analiza el sentimiento en #support y reporta si hay clientes frustrados"

Características especiales:

  • Modo stealth: Sin permisos adicionales ni bots
  • Modo OAuth: Autenticación segura
  • Soporte DM/Group DM: Mensajes directos y grupales
  • Smart history: Paginación inteligente de historial
  • Transporte flexible: Stdio, SSE, HTTP

Configuración básica:

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-xxxxx",
        "SLACK_TEAM_ID": "T12345"
      }
    }
  }
}

Consideraciones:

  • Requiere Slack Bot Token
  • Varios servidores disponibles con distintas capacidades
  • Respeta permisos de Slack workspace

Discord

Similar a Slack MCP pero para Discord.

Casos de uso principales:

  • Gestión de servidores Discord
  • Moderación automática
  • Análisis de comunidades
  • Bots personalizados

Gmail

Servidor MCP para gestión de correos electrónicos.

Casos de uso principales:

  • Enviar correos automáticamente
  • Buscar y filtrar emails
  • Crear borradores de emails
  • Gestión de labels y carpetas

Ejemplos de prompts:

> "Busca todos los emails de clientes que mencionan 'bug' esta semana"
 
> "Crea un borrador de email invitando a 10 usuarios beta a probar la nueva feature"
 
> "Resume los emails importantes no leídos"

Notion

Servidor MCP para integración con Notion.

Casos de uso principales:

  • Crear y actualizar páginas automáticamente
  • Consultar bases de datos de Notion
  • Sincronizar documentación
  • Gestión de wikis y knowledge bases

Ejemplos de prompts:

> "Crea una página en Notion documentando la nueva API que acabamos de implementar"
 
> "Busca en la wiki de Notion cómo configuramos el entorno de staging"
 
> "Actualiza la base de datos de features con el estado actual del proyecto"

Consideraciones:

  • Requiere Notion API key
  • Respeta estructura de workspaces

Google Calendar

Servidor MCP para gestión de calendario.

Casos de uso principales:

  • Crear eventos automáticamente
  • Consultar disponibilidad
  • Gestión de recordatorios
  • Análisis de tiempo

Ejemplos de prompts:

> "Agenda una reunión de 1 hora con el equipo para revisar el sprint"
 
> "Muéstrame mi calendario de la próxima semana"
 
> "Encuentra un hueco de 30 minutos para una demo esta semana"

📊 Monitoreo y observabilidad

Sentry

Servidor MCP para monitoreo de errores y excepciones.

Casos de uso principales:

  • Consultar errores recientes
  • Análisis de stack traces
  • Identificar patrones de errores
  • Priorización de bugs

Ejemplos de prompts:

> "Muéstrame los errores más frecuentes en producción en las últimas 24 horas"
 
> "Analiza el error SENTRY-123 y sugiere una solución"
 
> "¿Hay nuevos errores desde el último deployment?"

Consideraciones:

  • Requiere cuenta Sentry y API token
  • Acceso a proyectos específicos

Datadog

Servidor MCP para métricas y logs.

Casos de uso principales:

  • Consultar métricas de rendimiento
  • Análisis de logs
  • Alertas y dashboards
  • Troubleshooting

Ejemplos de prompts:

> "Muéstrame el uso de CPU de los últimos 3 días"
 
> "¿Hay alguna métrica anormal en producción ahora mismo?"

🎨 Diseño

Figma (Oficial)

Servidor MCP oficial de Figma para integración con diseños.

Casos de uso principales:

  • Generar código desde frames de Figma
  • Extraer variables y componentes de diseño
  • Sincronizar sistemas de diseño con código
  • Implementar diseños con precisión
  • Integrar diagramas FigJam en desarrollo

Ejemplos de prompts:

> "Genera el componente React para el botón primario del sistema de diseño en Figma"
 
> "Implementa este frame de Figma: [url] usando Tailwind CSS"
 
> "Extrae todos los colores y tokens del archivo de diseño y créalos como
   variables CSS"
 
> "Compara el componente Header en el código con el diseño de Figma
   y lista las diferencias"

Formas de uso:

  1. Servidor local: A través de la app de escritorio Figma (http://127.0.0.1:3845/mcp)
  2. Servidor remoto: Directamente desde https://mcp.figma.com/mcp

Características especiales:

  • Selección de frames: Selecciona frames en Figma Desktop y úsalos directamente
  • Enlaces compartidos: Pasa URLs de Figma para extraer información
  • Recursos Make: Acceso a componentes de código de archivos Make
  • FigJam: Extracción de diagramas y flujos

Caso de uso real:

Un equipo usó Figma MCP + Jira MCP para convertir un diseño complejo en 6 epics y 20 user stories en 10 minutos.

Consideraciones:

  • Requiere cuenta Figma
  • Funciona con archivos públicos y privados (con permisos)
  • Ideal para equipos con sistemas de diseño

🗂️ Sistema de archivos

Filesystem

Servidor MCP oficial para acceso extendido a archivos.

Casos de uso principales:

  • Operaciones de archivos con controles de seguridad
  • Acceso a directorios específicos
  • Lectura/escritura con permisos granulares
  • Búsqueda avanzada de archivos

Ejemplos de prompts:

> "Busca todos los archivos .env en el proyecto y verifica que estén en .gitignore"
 
> "Lista todos los archivos modificados en los últimos 2 días"

Consideraciones:

  • Controles de acceso configurables
  • Más seguro que acceso bash directo
  • Limitado a rutas específicas

Everything Search (Windows)

Búsqueda ultra-rápida de archivos en Windows.

Casos de uso principales:

  • Búsqueda instantánea de archivos
  • Localizar recursos rápidamente
  • Indexación completa del sistema

Ejemplos de prompts:

> "Encuentra todos los archivos PDF que contengan 'invoice' en el nombre"

☁️ APIs y servicios cloud

Stripe

Servidor MCP para integración con Stripe.

Casos de uso principales:

  • Gestión de pagos y suscripciones
  • Procesamiento de reembolsos
  • Consulta de transacciones
  • Análisis de revenue

Ejemplos de prompts:

> "Muéstrame todas las suscripciones activas del plan Pro"
 
> "Procesa un reembolso para el pago pi_xxxxx"
 
> "¿Cuál fue el revenue total del mes pasado?"

Consideraciones:

  • Requiere API keys de Stripe
  • Manejo cuidadoso de datos sensibles
  • Modo read-only recomendado para seguridad

AWS Suite

Servidores MCP oficiales para servicios AWS.

Servicios soportados:

  • DynamoDB: Consultas y gestión de tablas
  • Aurora: Bases de datos relacionales
  • Neptune: Grafos de datos
  • S3: Almacenamiento de objetos
  • Lambda: Funciones serverless
  • CloudFormation: Validación de templates

Casos de uso principales:

  • Gestión de infraestructura cloud
  • Consultas a servicios AWS
  • Troubleshooting de deployments
  • Validación de configuraciones

Ejemplos de prompts:

> "Lista todos los buckets S3 y su tamaño total"
 
> "Valida este template de CloudFormation y reporta problemas de seguridad"
 
> "Consulta la tabla DynamoDB users-prod para el usuario con id=123"

Consideraciones:

  • Requiere AWS credentials configuradas
  • Respeta IAM policies
  • Ideal si tu infraestructura está en AWS

Cloudflare

Servidor MCP para Cloudflare.

Casos de uso principales:

  • Gestión de Workers
  • KV storage operations
  • R2 object storage
  • D1 database queries

Ejemplos de prompts:

> "Despliega este Worker a producción"
 
> "Consulta la KV store auth-tokens para el usuario X"

🔍 Búsqueda y conocimiento

Brave Search

Búsqueda web general.

Casos de uso principales:

  • Búsqueda de información actualizada
  • Investigación web
  • Fact-checking

Ejemplos de prompts:

> "Busca las mejores prácticas de React 19 publicadas en 2026"

Context7

Documentación técnica actualizada en tiempo real.

Casos de uso principales:

  • Consultar versiones específicas de librerías
  • Documentación siempre actualizada
  • Referencias técnicas precisas

Ejemplos de prompts:

> "¿Cómo se usa el hook useFormStatus en React 19?"
 
> "Muéstrame la sintaxis de Zod para validar arrays anidados"

Consideraciones:

  • Alternativa a confiar en datos de entrenamiento
  • Especialmente útil para frameworks que cambian rápido

Firecrawl

Web scraping y búsqueda avanzada.

Casos de uso principales:

  • Extracción estructurada de datos web
  • Scraping a escala
  • Monitoreo de sitios web

Ejemplos de prompts:

> "Extrae todos los precios de la página de la competencia"
 
> "Monitorea [url] y notifícame si hay cambios"

Exa

Motor de búsqueda optimizado para IA.

Casos de uso principales:

  • Búsquedas semánticas
  • Investigación profunda
  • Búsqueda específica para agentes IA

GPT Researcher

Generación de reportes de investigación citados.

Casos de uso principales:

  • Investigación técnica profunda
  • Evaluaciones arquitectónicas
  • Reportes con fuentes verificadas

Ejemplos de prompts:

> "Investiga las opciones de bases de datos vectoriales y crea un reporte
   comparando sus características, rendimiento y casos de uso"

🧪 Desarrollo y testing

E2B

Ejecución de código en sandboxes seguros.

Casos de uso principales:

  • Ejecutar código no confiable de forma segura
  • Testing de snippets
  • Validación de código generado
  • Entornos de desarrollo efímeros

Ejemplos de prompts:

> "Ejecuta este script Python en un sandbox y muéstrame el output"
 
> "Prueba esta función con diferentes inputs y reporta los resultados"

Consideraciones:

  • Totalmente aislado y seguro
  • Soporta múltiples lenguajes
  • Ideal para generar y validar código

Chrome DevTools MCP

Inspección de navegadores en vivo.

Casos de uso principales:

  • Debugging de aplicaciones web
  • Inspección de performance
  • Análisis de red

Ejemplos de prompts:

> "Inspecciona la página actual y reporta problemas de performance"
 
> "Analiza todas las llamadas de red y encuentra las más lentas"

📚 Datos y análisis

Kaggle

Acceso a datasets, modelos y competiciones de Kaggle.

Casos de uso principales:

  • Descargar datasets para ML
  • Análisis exploratorio de datos
  • Benchmarking con notebooks públicos

Ejemplos de prompts:

> "Descarga el dataset de Titanic de Kaggle y haz un análisis exploratorio"
 
> "Busca competiciones de NLP activas"

Alpha Vantage

Datos financieros en tiempo real.

Casos de uso principales:

  • Análisis de acciones
  • Datos de criptomonedas
  • Commodities y forex

Ejemplos de prompts:

> "Muéstrame el precio de cierre de AAPL en los últimos 30 días"
 
> "Analiza la correlación entre BTC y ETH este mes"

🎉 Otros MCPs especializados

Supabase

Plataforma de backend como servicio.

Casos de uso principales:

  • Gestión de bases de datos
  • Autenticación
  • Edge functions
  • Storage

Magic UI

Patrones de React/Tailwind de referencia.

Casos de uso principales:

  • Generación de componentes UI
  • Aplicación de patterns consistentes
  • Aceleración de desarrollo frontend

Twilio

SMS y llamadas telefónicas.

Casos de uso principales:

  • Envío de SMS
  • Notificaciones telefónicas
  • Verificación de usuarios

Tabla comparativa de MCPs populares

MCPCategoríaCaso de Uso PrincipalComplejidadAuth
PlaywrightNavegadoresTesting UI, scrapingMediaNo
BrowserbaseNavegadoresAutomatización cloudMedia
GitHubDesarrolloIssues, PRs, códigoBaja
GitLabDesarrolloCI/CD, merge requestsBaja
LinearProductividadProject managementBaja
PostgreSQLBases de datosConsultas SQLMediaSí*
MongoDBBases de datosConsultas NoSQLMediaSí*
SQLiteBases de datosBD localesBajaNo
SlackComunicaciónMensajería, búsquedaMedia
DiscordComunicaciónComunidades, botsMedia
GmailComunicaciónEmail managementMedia
NotionProductividadDocs, wikis, bases datosBaja
Google CalendarProductividadGestión de eventosBaja
SentryMonitoreoError trackingBaja
DatadogMonitoreoMétricas, logsMedia
FigmaDiseñoDesign-to-codeMedia
FilesystemSistemaOperaciones archivosBajaNo
StripePagosTransacciones, revenueMedia
AWS SuiteCloudInfraestructuraAlta
CloudflareCloudWorkers, KV, R2Media
Brave SearchBúsquedaWeb searchBajaNo
Context7BúsquedaDocumentación técnicaBajaNo
FirecrawlBúsquedaWeb scrapingMedia
E2BDesarrolloCode sandboxingMedia
KaggleDatosML datasetsBaja
SupabaseBackendBaaS completoMedia

*Requiere connection string (credenciales incluidas)


Cómo elegir qué MCPs instalar

Paso 1: Evalúa tu workflow actual

Hazte estas preguntas:

  • ¿Qué tareas manuales repito frecuentemente?
  • ¿Qué servicios externos consulto a menudo?
  • ¿Qué integraciones beneficiarían mi desarrollo diario?
  • ¿Qué herramientas usa mi equipo?

Paso 2: Prioriza por frecuencia de uso

Categoriza los MCPs:

  • Alta prioridad: Uso diario o varias veces por semana
  • Media prioridad: Uso semanal o mensual
  • Baja prioridad: Casos edge o experimentación

Paso 3: Empieza con lo básico

Para desarrollo web típico, considera:

  1. GitHub (si usas GitHub)
  2. PostgreSQL (si usas bases de datos relacionales)
  3. Slack o Discord (si tu equipo las usa)
  4. Figma (si trabajas con diseñadores)

Para desarrollo full-stack: Agrega: 5. Sentry o herramienta de monitoreo que uses 6. Stripe (si manejas pagos) 7. Playwright (para testing)

Paso 4: Evita sobrecarga de contexto

⚠️ Importante: No instales todos los MCPs disponibles

  • Cada MCP consume espacio de contexto
  • Demasiados MCPs pueden confundir al modelo
  • En 2026, Claude Code tiene MCP Tool Search que carga tools dinámicamente si tienes muchos MCPs

Regla práctica: Comienza con 3-5 MCPs. Agrega más según necesidad real.

Paso 5: Considera seguridad

Para cada MCP pregúntate:

  • ¿Qué permisos necesita?
  • ¿Puede modificar datos críticos?
  • ¿Debería usar modo read-only?
  • ¿Las credenciales están seguras?

Dónde encontrar más MCPs

Directorios oficiales y de la comunidad

  1. mcpservers.org - Colección curada de servidores MCP organizados por categorías
  2. mcp.so - +17,000 servidores MCP de la comunidad
  3. PulseMCP.com - +7,900 servidores actualizados diariamente
  4. mcp-awesome.com - 1,200+ servidores verificados con guías
  5. Glama.ai - Marketplace visual con previews
  6. MCP Server Finder - Directorio searchable
  7. GitHub: modelcontextprotocol/servers - Repositorio oficial

Listas awesome de GitHub

Buscadores especializados

Usa términos como:

  • "MCP server for [tecnología]"
  • "[servicio] MCP integration"
  • "awesome mcp servers"

MCPs experimentales y de nicho

Además de los MCPs populares, existe un ecosistema de servidores especializados:

Por industria

  • Salud: Integración con sistemas médicos (FHIR, HL7)
  • Finanzas: Trading APIs, análisis financiero
  • E-commerce: Shopify, WooCommerce, Magento
  • Educación: LMS, sistemas académicos

Experimentales

  • Blockchain: Web3, contratos inteligentes
  • IoT: Integración con dispositivos
  • Gaming: Steam, Unity, game engines
  • 3D: Blender, CAD, impresión 3D

De nicho

  • Herramientas específicas de empresas
  • Integraciones legacy
  • APIs propietarias

Consejo: Evalúa bien los MCPs experimentales antes de usarlos en producción. Revisa:

  • Mantenimiento activo
  • Documentación
  • Issues en GitHub
  • Seguridad del código

Conclusión

El ecosistema MCP en 2026 es rico y diverso. Con más de 7,900 servidores disponibles, hay opciones para prácticamente cualquier caso de uso.

Puntos clave:

  • Los MCPs transforman Claude Code en un orquestador universal de herramientas
  • Existen MCPs para desarrollo, bases de datos, comunicación, diseño, cloud y más
  • No necesitas instalar todos los MCPs — elige los relevantes para tu workflow
  • La comunidad contribuye constantemente con nuevos servidores
  • MCP Tool Search (2026) permite manejar cientos de tools sin saturar el contexto

Próximos pasos: En el siguiente punto (6.3) aprenderás cómo instalar y configurar estos MCPs en Claude Code, con ejemplos prácticos y mejores prácticas.


Recursos adicionales


6.3 Gestión de MCPs

Introducción

En el punto anterior conociste los MCPs más populares y qué puede hacer cada uno. Ahora es momento de aprender a instalarlos, configurarlos y gestionarlos en Claude Code.

Este punto es completamente práctico. Al final, serás capaz de:

  • Instalar cualquier MCP con el método apropiado
  • Configurar autenticación y permisos
  • Gestionar MCPs instalados (listar, actualizar, remover)
  • Optimizar performance con MCP Tool Search
  • Resolver problemas comunes
  • Compartir configuración de MCPs con tu equipo

Comandos principales de gestión

Antes de instalar, familiarízate con los comandos básicos:

# Listar todos los MCPs configurados
claude mcp list
 
# Ver detalles de un MCP específico
claude mcp get github
 
# Eliminar un MCP
claude mcp remove github
 
# Revisar estado en sesión interactiva
/mcp
 
# Resetear opciones de project scope
claude mcp reset-project-choices

Instalación de MCPs

Existen dos métodos principales para instalar MCPs: CLI Wizard (interactivo) y configuración manual.

Método 1: CLI Wizard (Recomendado para empezar)

El método más simple es usar el comando claude mcp add que te guía paso a paso.

Sintaxis básica:

claude mcp add [opciones] <nombre> -- <comando> [args...]

Orden importante: Todas las opciones (--transport, --env, --scope, --header) deben ir antes del nombre del servidor. Usa -- para separar opciones del comando.

Ventajas del CLI Wizard

✅ Interactivo y guiado ✅ Validación automática ✅ Menos propenso a errores ✅ Ideal para aprender

Desventajas

❌ Lento para múltiples MCPs ❌ No documenta la configuración ❌ Difícil de automatizar

Método 2: Configuración manual

Edita directamente el archivo de configuración JSON.

Ubicaciones:

  • Local: ~/.claude.json (dentro de la ruta del proyecto)
  • Project: .mcp.json (raíz del proyecto)
  • User: ~/.claude.json (global)

Estructura básica:

{
  "mcpServers": {
    "nombre-del-mcp": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}"
      }
    },
    "otro-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@some/mcp-server"],
      "env": {
        "API_KEY": "${SECRET_KEY}"
      }
    }
  }
}

Ventajas de configuración manual

✅ Rápido para múltiples MCPs ✅ Documentable (comentarios en commits) ✅ Fácil de copiar/compartir ✅ Control total

Desventajas

❌ Requiere conocer la sintaxis ❌ Propenso a errores de formato ❌ Sin validación automática

¿Cuándo usar cada método?

SituaciónMétodo recomendado
Instalando tu primer MCPCLI Wizard
Aprendiendo cómo funcionaCLI Wizard
Instalando 1-2 MCPsCLI Wizard
Setup inicial de proyectoCLI Wizard
Instalando 5+ MCPsManual
Configuración complejaManual
Compartiendo con equipoManual
Automatización (scripts)Manual

Tipos de transporte

MCP soporta tres tipos de transporte. Cada uno tiene casos de uso específicos.

HTTP (Recomendado)

Servidores remotos que se comunican vía HTTP.

Cuándo usar:

  • Servicios cloud (GitHub, Slack, Notion)
  • APIs remotas
  • MCPs oficiales de empresas

Sintaxis:

claude mcp add --transport http <nombre> <url>

Ejemplo:

# Notion MCP
claude mcp add --transport http notion https://mcp.notion.com/mcp
 
# Con autenticación Bearer
claude mcp add --transport http api https://api.example.com/mcp \
  --header "Authorization: Bearer your-token"

Configuración manual:

{
  "mcpServers": {
    "notion": {
      "type": "http",
      "url": "https://mcp.notion.com/mcp"
    },
    "api-auth": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}"
      }
    }
  }
}

SSE (Server-Sent Events) — ⚠️ Deprecado

Transmisión de datos en tiempo real.

Nota 2026: SSE está siendo deprecado en favor de HTTP. Úsalo solo si el MCP específicamente lo requiere.

Sintaxis:

claude mcp add --transport sse <nombre> <url>

Ejemplo:

claude mcp add --transport sse dashboard https://api.company.com/sse \
  --header "X-API-Key: your-key"

⚠️ Limitación: SSE no está soportado en la extensión VS Code, solo en CLI.


Stdio (Standard Input/Output)

Procesos locales que se comunican vía stdin/stdout.

Cuándo usar:

  • Servidores MCP instalados localmente con npm/npx
  • Scripts personalizados
  • Herramientas que requieren acceso directo al sistema
  • Bases de datos locales

Sintaxis:

claude mcp add --transport stdio <nombre> -- <comando> [args...]

Ejemplos:

# PostgreSQL
claude mcp add --transport stdio postgres \
  -- npx -y @modelcontextprotocol/server-postgres
 
# Slack
claude mcp add --transport stdio slack \
  -- npx -y @modelcontextprotocol/server-slack
 
# Playwright
claude mcp add --transport stdio playwright \
  -- npx -y @executeautomation/playwright-mcp-server

Configuración manual:

{
  "mcpServers": {
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/db"
      }
    }
  }
}

⚠️ Windows: Usa el wrapper cmd /c:

claude mcp add --transport stdio my-server \
  -- cmd /c npx -y @some/package

Scopes de instalación

Los MCPs pueden instalarse en tres scopes diferentes que determinan dónde se guarda la configuración y quién puede acceder.

Tabla comparativa de scopes

ScopeArchivoUbicaciónCompartidoVersionadoUso típico
Local~/.claude.jsonRuta proyectoNoNoCredenciales personales, MCPs solo para ti
Project.mcp.jsonRaíz proyectoSí (equipo)Sí (git)MCPs del proyecto, config compartida
User~/.claude.jsonGlobalNoNoMCPs personales multi-proyecto

Local Scope (Default)

Archivo: ~/.claude.json (dentro de la ruta del proyecto)

Características:

  • Privado para ti
  • Solo accesible en el directorio actual del proyecto
  • Por defecto si no especificas scope

Cuándo usar:

  • Credenciales sensibles (tokens personales)
  • MCPs que solo tú necesitas
  • Testing de MCPs experimentales

Sintaxis:

# Implícito (default)
claude mcp add --transport http stripe https://mcp.stripe.com
 
# Explícito
claude mcp add --transport http stripe --scope local https://mcp.stripe.com

Project Scope

Archivo: .mcp.json en la raíz del proyecto

Características:

  • Compartido con todo el equipo
  • Se versiona en git
  • Todos usan la misma configuración

Cuándo usar:

  • MCPs que el equipo necesita (GitHub, Jira)
  • Configuración estándar del proyecto
  • Onboarding de nuevos devs

Sintaxis:

claude mcp add --transport http github --scope project \
  https://api.githubcopilot.com/mcp/

⚠️ Importante para project scope:

  • NUNCA incluir credenciales directamente
  • Usar variables de entorno: ${GITHUB_TOKEN}
  • Documentar en README qué variables se necesitan

Ejemplo de .mcp.json seguro:

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DB_CONNECTION_STRING}"
      }
    }
  }
}

README.md correspondiente:

## Configuración de MCPs
 
Este proyecto usa los siguientes MCPs:
 
### GitHub MCP
Requiere: `GITHUB_TOKEN` con permisos de repo
 
### PostgreSQL MCP
Requiere: `DB_CONNECTION_STRING` en formato:
`postgresql://user:pass@host:5432/dbname`
 
### Setup
1. Copia `.env.example` a `.env`
2. Completa las variables requeridas
3. Ejecuta `source .env` antes de iniciar Claude Code

User Scope

Archivo: ~/.claude.json (global, fuera del proyecto)

Características:

  • Disponible en todos tus proyectos
  • Privado para ti
  • No versionado

Cuándo usar:

  • MCPs que usas en múltiples proyectos
  • Herramientas personales (tu configuración de Notion, Calendar)
  • Utilidades generales

Sintaxis:

claude mcp add --transport http hubspot --scope user \
  https://mcp.hubspot.com/anthropic

Precedencia de scopes

Cuando existe un MCP con el mismo nombre en múltiples scopes:

Local > Project > User
(mayor)          (menor)

Ejemplo:

Local:   github → https://api.githubcopilot.com (token personal)
Project: github → https://api.githubcopilot.com (token del equipo)
 
Resultado: Se usa el MCP local con tu token personal

Esto permite overrides personales sin afectar la configuración del equipo.


Autenticación y credenciales

Los MCPs requieren diferentes tipos de autenticación según el servicio.

OAuth 2.0

Servicios que lo usan: GitHub, Slack, Notion, Figma, Sentry, Google, etc.

Flujo de instalación:

  1. Instalar el MCP
  2. Usar /mcp dentro de Claude Code
  3. Seguir el flujo en el navegador
  4. Tokens se guardan y refrescan automáticamente

Ejemplo con GitHub:

# 1. Instalar
claude mcp add --transport http github https://api.githubcopilot.com/mcp/
 
# 2. Dentro de Claude Code interactivo
> /mcp
# Selecciona GitHub y sigue el flujo OAuth
 
# 3. Verificar
> "Lista los PRs abiertos en mi repo"

Troubleshooting OAuth:

Si el navegador no se abre automáticamente:

  • Presiona c para copiar la URL al portapapeles
  • Pégala manualmente en el navegador

Si la autenticación falla después de completar OAuth:

  • Reinicia Claude Code
  • Usa claude mcp remove github y reinstala
  • Verifica que tu navegador acepte cookies

API Keys y Tokens

Servicios que lo usan: Stripe, Twilio, bases de datos, APIs custom

Método 1: Variables de entorno en comando

claude mcp add --transport stdio db \
  --env DATABASE_URL="postgresql://user:pass@localhost:5432/db" \
  -- npx -y @modelcontextprotocol/server-postgres

Método 2: Variables de entorno del sistema (Recomendado)

# En tu shell (bash/zsh)
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export STRIPE_KEY="sk_test_xxxxxxxxxx"
export DATABASE_URL="postgresql://user:pass@localhost:5432/db"
 
# Instalar con placeholders
claude mcp add --transport stdio postgres \
  --env DATABASE_URL="${DATABASE_URL}" \
  -- npx -y @modelcontextprotocol/server-postgres

Método 3: Archivo .env (Mejores prácticas)

Crea .env en la raíz del proyecto:

# .env
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
STRIPE_KEY=sk_test_xxxxxxxxxx
DATABASE_URL=postgresql://user:pass@localhost:5432/db

Agrega a .gitignore:

.env
.env.*

Carga antes de ejecutar Claude:

# Opción 1: source manual
source .env && claude
 
# Opción 2: dotenv (instalar globalmente)
npm install -g dotenv-cli
dotenv claude
 
# Opción 3: direnv (automático)
# Instalar direnv, luego crea .envrc:
echo 'source .env' > .envrc
direnv allow
claude  # Variables cargadas automáticamente

Connection Strings

Para bases de datos: PostgreSQL, MongoDB, MySQL, etc.

Formato PostgreSQL:

postgresql://[user]:[password]@[host]:[port]/[database]

Formato MongoDB:

mongodb://[user]:[password]@[host]:[port]/[database]

Ejemplo seguro:

# .env
DB_READONLY="postgresql://readonly:readpass@prod-db.company.com:5432/analytics"
DB_READWRITE="postgresql://admin:adminpass@localhost:5432/dev"
 
# .mcp.json (project scope)
{
  "mcpServers": {
    "db-prod": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DB_READONLY}"
      }
    }
  }
}

⚠️ Seguridad:

  • Usa usuarios read-only para producción
  • Nunca commites connection strings
  • Usa SSH tunnels para DBs remotas si es posible

Headers personalizados

Para APIs que requieren headers específicos.

Sintaxis CLI:

claude mcp add --transport http api https://api.example.com/mcp \
  --header "Authorization: Bearer ${API_TOKEN}" \
  --header "X-API-Version: 2024-01-01"

Configuración manual:

{
  "mcpServers": {
    "custom-api": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}",
        "X-API-Version": "2024-01-01",
        "X-Client-ID": "${CLIENT_ID}"
      }
    }
  }
}

Ejemplos prácticos de instalación

Ejemplo 1: GitHub (OAuth, HTTP)

# Instalación
claude mcp add --transport http github https://api.githubcopilot.com/mcp/
 
# Autenticación
# Dentro de Claude Code:
> /mcp
# Selecciona GitHub → Sigue flujo OAuth
 
# Verificación
> "Muéstrame los PRs abiertos en anthropics/claude-code"

Ejemplo 2: PostgreSQL (Connection string, Stdio)

# Setup de variables
export DATABASE_URL="postgresql://readonly:pass@localhost:5432/analytics"
 
# Instalación
claude mcp add --transport stdio postgres \
  --env DATABASE_URL="${DATABASE_URL}" \
  -- npx -y @modelcontextprotocol/server-postgres
 
# Verificación
> "Consulta la tabla users y muéstrame los últimos 5 registros"

Ejemplo 3: Slack (Bot token, Stdio)

# Obtén tokens de https://api.slack.com/apps
export SLACK_BOT_TOKEN="xoxb-xxxxxxxxxxxxx"
export SLACK_TEAM_ID="T12345678"
 
# Instalación
claude mcp add --transport stdio slack \
  --env SLACK_BOT_TOKEN="${SLACK_BOT_TOKEN}" \
  --env SLACK_TEAM_ID="${SLACK_TEAM_ID}" \
  -- npx -y @modelcontextprotocol/server-slack
 
# Verificación
> "Busca en el canal #engineering mensajes sobre 'deployment'"

Ejemplo 4: Figma (Remoto HTTP con OAuth)

# Instalación
claude mcp add --transport http figma https://mcp.figma.com/mcp
 
# Autenticación
> /mcp
# Sigue flujo OAuth de Figma
 
# Verificación
> "Genera el componente Button del sistema de diseño:
   https://figma.com/file/abc123..."

Alternativa (Local - requiere Figma Desktop):

# Figma Desktop debe estar corriendo
claude mcp add --transport http figma-local http://127.0.0.1:3845/mcp

Ejemplo 5: Playwright (Local Stdio)

# Instalación
claude mcp add --transport stdio playwright \
  -- npx -y @executeautomation/playwright-mcp-server
 
# Verificación
> "Navega a https://example.com y verifica que el título
   de la página contiene 'Example'"

Ejemplo 6: Stripe (API Key, HTTP)

# Setup
export STRIPE_KEY="sk_test_xxxxxxxxxxxxx"
 
# Instalación
claude mcp add --transport http stripe https://mcp.stripe.com \
  --header "Authorization: Bearer ${STRIPE_KEY}"
 
# Verificación
> "Muéstrame las suscripciones activas del plan Pro"

MCP Tool Search (Feature 2026)

¿Qué es?

MCP Tool Search es una característica que permite carga dinámica de herramientas cuando tienes muchos MCPs instalados.

El problema que resuelve

Antes de Tool Search:

  • GitHub MCP: ~46,000 tokens (91 herramientas)
  • Playwright: ~9,700 tokens (21 herramientas)
  • AWS: ~9,100 tokens (7 herramientas)

Un usuario reportó 144,802 tokens consumidos solo en definiciones de herramientas MCP, dejando poco espacio para trabajo real.

Cómo funciona

Antes (sin Tool Search):

[Claude recibe TODAS las definiciones de tools al inicio]
- 91 tools de GitHub
- 21 tools de Playwright
- ...
Total: ~100K tokens consumidos

Ahora (con Tool Search):

[Claude recibe una herramienta de búsqueda]
Cuando necesita algo:
1. Busca: "create pull request" → encuentra 3-5 tools relevantes
2. Carga solo esas tools: ~3K tokens
3. Las usa y las descarga después

Cuándo se activa

Automático por defecto:

  • < 10,000 tokens en tools: Carga normal
  • > 10,000 tokens en tools: Tool Search se activa automáticamente

Configuración

# Default (automático con threshold 10%)
claude
 
# Threshold personalizado (5%)
ENABLE_TOOL_SEARCH=auto:5 claude
 
# Siempre activado
ENABLE_TOOL_SEARCH=true claude
 
# Desactivado
ENABLE_TOOL_SEARCH=false claude

Verificar estado

Dentro de Claude Code:

# Ver desglose de tokens
> /context
 
# Análisis detallado de MCPs
> /doctor

Resultados medibles

Reducción de tokens: 77K → 8.7K (85% de reducción)

Mejora de precisión:

  • Claude Opus 4: 49% → 74%
  • Claude Opus 4.5: 79.5% → 88.1%

Requisitos

⚠️ Modelos compatibles:

  • ✅ Sonnet 4 y superiores
  • ✅ Opus 4 y superiores
  • ❌ Haiku (no soporta tool search)

Gestión de output de MCPs

Límites de tokens

Los MCPs pueden devolver respuestas muy grandes. Claude Code tiene límites configurables:

  • Warning threshold: 10,000 tokens
  • Límite por defecto: 25,000 tokens
  • Configurable: Variable MAX_MCP_OUTPUT_TOKENS

Configurar límite

# Aumentar límite a 50K tokens
export MAX_MCP_OUTPUT_TOKENS=50000
claude
 
# Sin límite (no recomendado)
export MAX_MCP_OUTPUT_TOKENS=0
claude

Ejemplo de warning

> "Dame todos los commits del repo en los últimos 6 meses"
 
⚠️ Warning: MCP output exceeded 10,000 tokens
This may consume significant context space.

Solución: Refina tu prompt para pedir datos más específicos:

> "Dame los commits del último mes que toquen archivos en /src"

Troubleshooting común

Problema 1: MCP no aparece en claude mcp list

Síntomas: Instalaste un MCP pero no aparece listado.

Diagnóstico:

# Verifica sintaxis del archivo de configuración
cat ~/.claude.json  # o .mcp.json
 
# Busca errores de JSON

Soluciones:

  • Verifica que el JSON es válido (comas, llaves, comillas)
  • Asegúrate de usar el scope correcto
  • Reinicia Claude Code después de editar manualmente

Ejemplo de error común:

// ❌ MAL: Coma extra
{
  "mcpServers": {
    "github": {...},   // <-- coma extra
  }
}
 
// ✅ BIEN
{
  "mcpServers": {
    "github": {...}
  }
}

Problema 2: Error de autenticación

Síntomas: "Authentication failed", "Unauthorized", "401"

Para OAuth (GitHub, Slack, Notion):

# 1. Re-autenticar
> /mcp
# Selecciona el servicio → Clear authentication → Autenticar de nuevo
 
# 2. Si no funciona, reinstalar
claude mcp remove github
claude mcp add --transport http github https://api.githubcopilot.com/mcp/
> /mcp  # Autenticar

Para API Keys:

# Verifica que la variable está definida
echo $GITHUB_TOKEN
echo $DATABASE_URL
 
# Si está vacía, exporta de nuevo
export GITHUB_TOKEN="ghp_xxxxx"
 
# Verifica permisos del token (GitHub)
# https://github.com/settings/tokens

⚠️ Problema conocido: OAuth exitoso pero reconexión falla

"Authentication successful, but server reconnection failed.
You may need to manually restart Claude Code."

Solución: Reinicia Claude Code completamente.


Problema 3: MCP lento o timeout

Síntomas: "Connection timeout", "MCP server not responding"

Soluciones:

# 1. Aumentar timeout global
export MCP_TIMEOUT=30000  # 30 segundos (default: 10s)
claude
 
# 2. Verificar conectividad
ping mcp.notion.com
 
# 3. Revisar logs del servidor (stdio)
# Los errores aparecen en la consola de Claude Code
 
# 4. Para npx, limpiar cache
npm cache clean --force

Problema 4: npx no encuentra el paquete

Síntomas: "command not found", "package not found"

Soluciones:

# 1. Instalar globalmente primero (testing)
npm install -g @modelcontextprotocol/server-github
which server-github  # Verificar ruta
 
# 2. Especificar versión exacta
claude mcp add --transport stdio github \
  -- npx -y @modelcontextprotocol/server-github@1.0.0
 
# 3. Usar yarn o pnpm en lugar de npx
claude mcp add --transport stdio github \
  -- yarn dlx @modelcontextprotocol/server-github
 
# 4. Limpiar cache de npm
npm cache clean --force

Problema 5: Windows - cmd /c no funciona

Síntomas: En Windows, npx no se ejecuta correctamente

Solución 1: Usar wrapper cmd /c

claude mcp add --transport stdio my-server \
  -- cmd /c npx -y @some/package

Solución 2: PowerShell

claude mcp add --transport stdio my-server `
  -- powershell -Command "npx -y @some/package"

Solución 3: Ruta absoluta

# Encuentra la ruta de npx
where npx
# C:\Program Files\nodejs\npx.cmd
 
# Úsala directamente
claude mcp add --transport stdio my-server \
  -- "C:\Program Files\nodejs\npx.cmd" -y @some/package

Problema 6: WSL2 - conexión rechazada

Síntomas: "Connection refused" en WSL2 con MCPs remotos

Causa: Firewall de Windows bloquea la conexión desde WSL2

Solución:

# 1. Permitir puerto en Windows Firewall
# Configuración → Firewall → Reglas de entrada → Nueva regla
 
# 2. Usar IP correcta de WSL2
ip addr show eth0  # Anota la IP
 
# 3. En la configuración del MCP, usa la IP de WSL2
# en lugar de localhost

Problema 7: Variables de entorno no se expanden

Síntomas: ${DATABASE_URL} aparece literal en vez de expandirse

Causa: Inconsistencia entre clientes MCP

Solución:

# En lugar de confiar en expansión de .mcp.json,
# exporta la variable ANTES de ejecutar Claude
 
export DATABASE_URL="postgresql://..."
claude

Workaround para project scope:

# Crea script de setup
# setup-env.sh
#!/bin/bash
source .env
claude
 
# Equipo ejecuta:
./setup-env.sh

Mejores prácticas

Seguridad

🔒 Nunca commites credenciales

# .gitignore
.env
.env.*
.claude.json       # Si contiene credenciales
*.local.json

🔒 Usa read-only para producción

# Base de datos de producción
# Usuario: readonly con permisos SELECT únicamente
DATABASE_URL="postgresql://readonly:pass@prod-db:5432/analytics"

🔒 Limita permisos de tokens

# GitHub token: Solo permisos necesarios
# ✅ repo:status, read:org
# ❌ delete_repo, admin:org

🔒 Usa environment variable placeholders

// ✅ BIEN (project scope)
{
  "mcpServers": {
    "github": {
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    }
  }
}
 
// ❌ MAL
{
  "mcpServers": {
    "github": {
      "headers": {
        "Authorization": "Bearer ghp_realtoken123"
      }
    }
  }
}

Organización

📁 Nombres descriptivos

# ❌ MAL
claude mcp add --transport http api https://...
 
# ✅ BIEN
claude mcp add --transport http github-work https://...
claude mcp add --transport http github-personal https://...

📁 Agrupa por proyecto

# Project scope (.mcp.json)
- MCPs que el equipo necesita
- Configuración estándar
 
# Local scope
- Tus credenciales personales
- MCPs experimentales
 
# User scope
- Herramientas personales multi-proyecto

📁 Documenta configuración compleja

{
  "mcpServers": {
    // GitHub MCP para gestión de repos
    // Requiere: GITHUB_TOKEN con permisos repo:*
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    }
  }
}

Performance

⚡ No instales MCPs que no uses

# Revisa qué MCPs tienes
claude mcp list
 
# Elimina los que no usas
claude mcp remove unused-mcp

⚡ Usa Tool Search para muchos MCPs

# Si tienes 5+ MCPs con muchas tools
ENABLE_TOOL_SEARCH=auto:5 claude

⚡ Configura timeouts apropiados

# Para MCPs lentos (consultas pesadas a DB)
export MCP_TIMEOUT=30000  # 30 segundos
 
# Para MCPs rápidos (default está bien)
# 10 segundos

Mantenimiento

🔄 Actualiza MCPs regularmente

# Para MCPs vía npx, siempre usa -y para última versión
# npx -y obtiene la versión más reciente
 
# Si instalaste globalmente
npm update -g @modelcontextprotocol/server-github
 
# Verifica versiones
npm list -g --depth=0 | grep mcp

🔄 Prueba después de updates

# Después de actualizar un MCP
> /mcp
# Verifica que el MCP aparece y está conectado
 
# Prueba funcionalidad básica
> "Lista los repos" # GitHub MCP
> "Consulta la tabla users" # PostgreSQL MCP

🔄 Mantén backup de configuración

# Backup manual
cp ~/.claude.json ~/.claude.json.backup
cp .mcp.json .mcp.json.backup
 
# Mejor: versiona en git (sin credenciales)
git add .mcp.json
git commit -m "docs: actualizar configuración de MCPs"

MCPs en equipo

Compartir configuración

Escenario: Tu equipo necesita los mismos MCPs (GitHub, PostgreSQL, Slack)

Setup recomendado:

  1. Crea .mcp.json en project scope:
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "slack": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}",
        "SLACK_TEAM_ID": "${SLACK_TEAM_ID}"
      }
    }
  }
}
  1. Crea .env.example:
# .env.example - Template para el equipo
GITHUB_TOKEN=ghp_your_token_here
DATABASE_URL=postgresql://user:pass@localhost:5432/dbname
SLACK_BOT_TOKEN=xoxb-your-token-here
SLACK_TEAM_ID=T12345678
  1. Documenta en README.md:
## Configuración de MCPs
 
### Requisitos
- Node.js 18+
- Claude Code instalado
 
### Setup
1. Copia el template de variables:
   ```bash
   cp .env.example .env
  1. Completa las variables en .env:

    • GITHUB_TOKEN: Crea un token aquí
      • Permisos necesarios: repo, read:org
    • DATABASE_URL: Connection string de PostgreSQL
      • Para dev local: postgresql://postgres:postgres@localhost:5432/mydb
    • SLACK_BOT_TOKEN y SLACK_TEAM_ID: Obtén aquí
  2. Carga variables y ejecuta Claude:

    source .env && claude

MCPs configurados

  • GitHub: Gestión de repos, PRs, issues
  • PostgreSQL: Consultas a base de datos
  • Slack: Mensajería y búsqueda en canales

Troubleshooting

  • Si GitHub no autentica: /mcp → Selecciona GitHub → Sigue OAuth
  • Si PostgreSQL no conecta: Verifica DATABASE_URL en .env
 
4. **Agrega a `.gitignore`**:

.env .claude.json

 
5. **Commitea la configuración**:
```bash
git add .mcp.json .env.example README.md .gitignore
git commit -m "feat: configurar MCPs del equipo"
git push

Onboarding de nuevos devs

Script de setup automatizado (setup-mcps.sh):

#!/bin/bash
set -e
 
echo "🚀 Setup de MCPs para el proyecto"
 
# 1. Verificar que existe .env
if [ ! -f .env ]; then
  echo "⚠️  .env no encontrado"
  echo "📝 Copiando template..."
  cp .env.example .env
  echo "✅ .env creado. Por favor completa las variables y vuelve a ejecutar."
  exit 1
fi
 
# 2. Cargar variables
source .env
 
# 3. Verificar variables requeridas
required_vars=("GITHUB_TOKEN" "DATABASE_URL" "SLACK_BOT_TOKEN" "SLACK_TEAM_ID")
for var in "${required_vars[@]}"; do
  if [ -z "${!var}" ]; then
    echo "❌ Variable $var no definida en .env"
    exit 1
  fi
done
 
echo "✅ Todas las variables configuradas"
 
# 4. Verificar Claude Code
if ! command -v claude &> /dev/null; then
  echo "❌ Claude Code no está instalado"
  echo "Instala desde: https://code.claude.com"
  exit 1
fi
 
echo "✅ Claude Code instalado"
 
# 5. Los MCPs se cargan automáticamente desde .mcp.json
echo "✅ MCPs configurados desde .mcp.json"
 
# 6. Instrucciones de autenticación OAuth
echo ""
echo "📋 Pasos finales:"
echo "1. Ejecuta: source .env && claude"
echo "2. Dentro de Claude, ejecuta: /mcp"
echo "3. Autentica GitHub siguiendo el flujo OAuth"
echo ""
echo "🎉 ¡Listo para usar MCPs!"

Uso por nuevos devs:

git clone https://github.com/company/proyecto
cd proyecto
chmod +x setup-mcps.sh
./setup-mcps.sh

Comandos de gestión avanzados

Importar desde Claude Desktop

Si ya usas MCPs en Claude Desktop, puedes importarlos:

# Importar a local scope (default)
claude mcp add-from-claude-desktop
 
# Importar a user scope
claude mcp add-from-claude-desktop --scope user

Agregar desde JSON directo

Para configuraciones complejas:

claude mcp add-json weather-api '{
  "type": "http",
  "url": "https://api.weather.com/mcp",
  "headers": {
    "Authorization": "Bearer token123"
  }
}'

Claude Code como servidor MCP

Puedes usar Claude Code como servidor MCP para otros clientes:

# Iniciar Claude Code en modo servidor
claude mcp serve
 
# Configurar en otro cliente (ej: Claude Desktop)
# claude_desktop_config.json
{
  "mcpServers": {
    "claude-code": {
      "type": "stdio",
      "command": "/usr/local/bin/claude",
      "args": ["mcp", "serve"],
      "env": {}
    }
  }
}

Conclusión

La gestión de MCPs es fundamental para aprovechar al máximo Claude Code. Con la práctica, instalar y configurar MCPs se vuelve rutinario.

Resumen de lo aprendido:

  • ✅ Dos métodos de instalación: CLI wizard (rápido) y manual (control)
  • ✅ Tres transportes: HTTP (remoto), SSE (deprecado), Stdio (local)
  • ✅ Tres scopes: Local (personal), Project (equipo), User (multi-proyecto)
  • ✅ Autenticación: OAuth, API Keys, Connection strings
  • ✅ Tool Search: Optimización automática para muchos MCPs
  • ✅ Troubleshooting: Soluciones a problemas comunes
  • ✅ Mejores prácticas: Seguridad, organización, performance
  • ✅ MCPs en equipo: Compartir configuración de forma segura

Próximos pasos: En los siguientes puntos del módulo aprenderás:

  • 6.4: MCP vs CLI - Cuándo usar cada uno (análisis avanzado)
  • 6.5: Filosofía recomendada para usar MCPs efectivamente
  • 6.6: Configuración avanzada de MCP (managed MCPs, policies)

Recursos adicionales


6.4 MCP vs CLI: ¿Cuándo usar cada uno?

Introducción

En el punto 6.1 introdujimos la distinción básica entre usar MCP y usar CLI directo con Claude Code. Establecimos que:

  • CLI directo es mejor para operaciones simples, stateless y de una sola ejecución
  • MCP es mejor para operaciones complejas, con estado y que requieren múltiples interacciones

Pero la realidad es más matizada. Esta decisión afecta directamente la performance, mantenibilidad y experiencia tanto tuya como de tu equipo. Una mala elección puede resultar en:

  • 🐌 Latencias innecesarias
  • 🧠 Consumo excesivo de contexto
  • 🔧 Configuración compleja sin beneficios
  • 🐛 Debugging difícil

En este punto profundizaremos con criterios técnicos, patrones, casos de uso reales y una guía práctica para tomar la decisión correcta.


Marco de decisión: Criterios clave

Para decidir entre MCP y CLI, evalúa estos seis criterios:

1. Estado (Statefulness)

El criterio más importante.

¿Qué es el estado?

Estado se refiere a información que debe persistir entre múltiples operaciones relacionadas.

Ejemplos stateless:

# Cada comando es independiente, no requiere estado previo
git status
npm install
ls -la
curl https://api.example.com/users

Ejemplos stateful:

# Requiere mantener sesión de navegador activa
1. Navegar a página de login
2. Llenar formulario (requiere DOM cargado)
3. Hacer clic en submit (mantiene cookies)
4. Navegar a dashboard (usa la sesión)
 
# Requiere conexión persistente a la base de datos
1. Conectar a PostgreSQL
2. Ejecutar transacción BEGIN
3. Múltiples INSERTs relacionados
4. COMMIT final
 
# Requiere OAuth con refresh de tokens
1. Autenticar en GitHub
2. Listar PRs de un repo
3. Comentar en PR específico
4. Crear issue relacionado

Regla de oro

CaracterísticaCLI directoMCP
Operaciones independientes✅ Ideal⚠️ Overkill
Requiere mantener sesión❌ Frágil✅ Ideal
Conexión persistente❌ Múltiples conexiones✅ Una conexión
Tokens que expiran❌ Manejo manual✅ Refresh automático

2. Complejidad de la operación

Operaciones simples

Características:

  • 1 comando
  • Sin parsing complejo
  • Resultado directo

Ejemplo (CLI ideal):

# Ver archivos modificados en git
git status --short
 
# Instalar dependencias
npm install
 
# Listar contenedores Docker
docker ps

Operaciones complejas

Características:

  • Múltiples pasos interdependientes
  • Parsing y transformación de datos
  • Lógica condicional

Ejemplo (MCP ideal):

Prompt: "Analiza los PRs abiertos en el repo, identifica cuáles tienen
         conflictos, revisa los archivos afectados y genera un reporte
         con sugerencias de priorización"
 
Con GitHub MCP:
1. Listar PRs abiertos
2. Para cada PR, obtener conflictos
3. Para PRs con conflictos, analizar archivos
4. Evaluar impacto y prioridad
5. Generar reporte estructurado
 
Con CLI (gh):
- Requeriría múltiples comandos gh pr list, gh pr view, gh api...
- Parsing manual de JSONs
- Lógica compleja en bash/scripts
- Frágil y difícil de mantener

Umbral práctico

  • 1-2 comandos relacionados → CLI directo
  • 3+ comandos interdependientes → Considera MCP

3. Frecuencia de uso

¿Cuántas veces ejecutarás esta operación?

Una vez / raramente:

# CLI directo es perfecto
aws s3 ls s3://my-bucket --region us-east-1
docker system prune -a

Varias veces por día / múltiples proyectos:

# MCP justifica el setup inicial
- Consultar issues de JIRA diariamente → JIRA MCP
- Analizar logs de Sentry frecuentemente → Sentry MCP
- Consultar métricas de Datadog regularmente → Datadog MCP

Trade-off: Setup vs Beneficio

Costo de setup de MCP:
- Instalación: 5-10 minutos
- Configuración de credenciales: 5 minutos
- Aprendizaje inicial: 10-15 minutos
Total: ~30 minutos
 
Beneficio por uso:
- Ahorro de tiempo por operación: 2-5 minutos
- Break-even: 6-15 usos
 
Conclusión:
Si lo usarás >10 veces, MCP vale la pena
Si lo usarás <5 veces, CLI directo es mejor

4. Necesidad de contexto persistente

Sin contexto persistente

CLI es suficiente:

# Cada llamada es independiente
curl https://api.example.com/status
gh pr list --state open
kubectl get pods

Con contexto persistente

MCP es superior:

Ejemplo 1: Navegación web

Con curl (frágil):
- Cada request pierde cookies
- No puede ejecutar JavaScript
- No mantiene estado del DOM
 
Con Playwright MCP (robusto):
- Sesión persistente
- JavaScript ejecutado
- DOM completo disponible
- Screenshots del estado actual

Ejemplo 2: Base de datos con transacciones

Con psql (complicado):
- Cada comando abre nueva conexión
- Transacciones requieren archivos SQL
- Difícil mantener estado entre queries
 
Con PostgreSQL MCP (fluido):
- Una conexión persistente
- Transacciones naturales
- Contexto entre queries
- Análisis iterativo de datos

5. Autenticación y autorización

Autenticación simple

CLI funciona bien:

# Token estático en variable de entorno
export GITHUB_TOKEN="ghp_xxxxx"
gh pr list
 
# API key simple
curl -H "X-API-Key: $API_KEY" https://api.example.com/data

Autenticación compleja

MCP es necesario:

Tipo de authCLI directoMCP
OAuth 2.0❌ Flujo manual, tokens expirados✅ Flujo automático, refresh incluido
SAML/SSO❌ No soportado✅ Integración nativa
MFA❌ Interacción manual✅ Gestión automática
Tokens rotativos❌ Manejo manual✅ Rotación automática

Ejemplo real: Slack

# CLI directo (problemático)
# Tokens de Slack expiran cada 12 horas
# Requiere re-autenticación manual
curl -H "Authorization: Bearer $TOKEN" https://slack.com/api/...
 
# Slack MCP (robusto)
# OAuth automático
# Refresh de tokens transparente
# Claude solo pregunta: "Busca mensajes en #engineering sobre 'deployment'"

6. Procesamiento de respuestas

Respuestas simples

CLI suficiente:

# Texto plano, fácil de leer
git log --oneline
 
# JSON simple
curl https://api.example.com/status | jq '.status'
 
# Lista de strings
docker images --format "{{.Repository}}"

Respuestas complejas

MCP mejor:

Ejemplo: Análisis de PRs en GitHub

# Con gh CLI (tedioso)
gh pr list --json number,title,author,updatedAt,mergeable
# Resultado: JSON que Claude debe parsear en cada llamada
# Para analizar archivos de cada PR: más llamadas a gh pr view
 
# Con GitHub MCP (fluido)
# Claude internamente:
# 1. Obtiene PRs estructurados
# 2. Analiza relaciones entre datos
# 3. Filtra y agrupa según criterios complejos
# 4. Presenta resultados directamente interpretados

Ventaja clave de MCP: Los servidores MCP devuelven datos pre-estructurados y tipados que el LLM puede razonar mejor, en lugar de parsear texto o JSON raw.


Casos de uso específicos

Ahora analicemos casos reales con comparativa detallada.

Caso 1: Git operations

CLI directo (Recomendado)

Por qué funciona bien:

  • Comandos git son stateless por naturaleza
  • Salidas simples y legibles
  • Ampliamente conocidos y documentados
  • Sin overhead de configuración

Ejemplos ideales:

git status
git log --oneline -10
git diff main..feature-branch
git blame src/utils.ts
git branch --list

Cuándo CLI no es suficiente:

  • Análisis profundo de historia (ej: "encuentra todos los commits que tocaron autenticación")
  • Generación de reportes complejos
  • Análisis de patrones en múltiples repos

Cuándo considerar alternativas

Para análisis complejos:

Prompt: "Analiza los últimos 100 commits, identifica cuáles introdujeron
         cambios en archivos de seguridad, revisa si tienen tests asociados,
         y genera un reporte de cobertura de testing en features de seguridad"
 
Mejor enfoque: CLI + Procesamiento por Claude
- git log con formato custom
- Claude procesa la salida
- Sin necesidad de MCP específico

Conclusión: CLI directo gana en >95% de casos de Git.


Caso 2: GitHub operations

El debate: gh CLI vs GitHub MCP

Este caso es controversial. Analicemos objetivamente:

gh CLI (Herramienta madura)

Ventajas:

  • ✅ Ampliamente usado y testeado
  • ✅ Integración perfecta con CI/CD
  • ✅ Consume menos contexto
  • ✅ Debugging transparente
  • ✅ Ya está en training data de Claude

Ejemplo:

# Listar PRs abiertos
gh pr list --state open
 
# Ver detalles de un PR
gh pr view 123
 
# Crear un PR
gh pr create --title "Fix bug" --body "Description"
 
# Aprobar un PR
gh pr review 123 --approve

Limitaciones:

  • Requiere múltiples comandos para workflows complejos
  • Parsing de JSON cuando se necesitan datos estructurados
  • No mantiene contexto entre operaciones

GitHub MCP (Integración AI-native)

Ventajas:

  • ✅ Operaciones con lenguaje natural
  • ✅ Datos pre-estructurados para el LLM
  • ✅ Workflows complejos en un solo prompt
  • ✅ Relaciones entre entidades (PRs ↔ Issues ↔ Commits)

Ejemplo:

Prompt: "Busca todos los PRs abiertos que mencionan 'authentication',
         revisa cuáles tienen conflictos, para los que no tienen conflictos
         verifica si los tests pasan, y para los que pasan tests hazme
         un resumen de los cambios y sugiéreme cuál revisar primero"
 
Con gh CLI: Requerirías ~6-8 comandos + parsing + lógica
Con GitHub MCP: Un prompt → Claude orquesta todas las llamadas necesarias

Limitaciones:

  • Consume más contexto (sin Tool Search)
  • Debugging menos transparente
  • Overhead de setup inicial

Comparativa directa

Criteriogh CLIGitHub MCP
Operaciones simples⭐⭐⭐⭐⭐ Más rápido⭐⭐⭐ Funciona pero overkill
Workflows complejos⭐⭐⭐ Requiere múltiples comandos⭐⭐⭐⭐⭐ Natural con prompts
Consumo de contexto⭐⭐⭐⭐⭐ Mínimo⭐⭐ Alto (mejora con Tool Search)
Debugging⭐⭐⭐⭐⭐ Transparente⭐⭐ Opaco
Setup inicial⭐⭐⭐⭐⭐ Ninguno⭐⭐⭐ Moderado
CI/CD integration⭐⭐⭐⭐⭐ Perfecto⭐⭐ No aplica
Lenguaje natural⭐⭐ No⭐⭐⭐⭐⭐ Sí

Recomendación final

Usa gh CLI cuando:

  • Operaciones individuales (listar PRs, ver issues)
  • Scripts y CI/CD
  • Quieres control total
  • Eres desarrollador experimentado

Usa GitHub MCP cuando:

  • Workflows multi-paso complejos
  • Análisis y reportes automatizados
  • Tu equipo prefiere lenguaje natural
  • Integración con otros MCPs (ej: Jira + GitHub)

Solución híbrida: Muchos equipos usan ambos:

  • gh CLI para operaciones rápidas cotidianas
  • GitHub MCP para análisis y workflows complejos

Caso 3: Navegación y automatización web

curl/wget (Limitado)

Casos válidos:

# APIs REST simples
curl https://api.example.com/users
 
# Descargar archivos
wget https://example.com/file.zip
 
# Health checks
curl -I https://myapp.com/health

Limitaciones críticas:

  • ❌ No ejecuta JavaScript
  • ❌ No mantiene estado del navegador
  • ❌ No puede interactuar (clicks, forms)
  • ❌ No renderiza páginas dinámicas (SPAs)

Playwright MCP (Automatización completa)

Casos ideales:

# Testing E2E
Prompt: "Navega a la página de login, inicia sesión con credenciales de test,
         ve al dashboard, verifica que se muestren los datos del usuario,
         y toma un screenshot"
 
# Web scraping de SPAs
Prompt: "Extrae todos los productos de esta tienda e-commerce,
         incluyendo precios, descripciones e imágenes"
 
# Automatización de formularios
Prompt: "Completa el formulario de contacto con estos datos:
         nombre, email, mensaje"
 
# Validación visual
Prompt: "Compara el diseño actual con el screenshot de referencia
         y reporta diferencias"

Ventajas sobre curl:

  • ✅ Navegador real (Chromium/Firefox/WebKit)
  • ✅ JavaScript ejecutado completamente
  • ✅ Mantiene sesión y cookies
  • ✅ Puede interactuar con elementos
  • ✅ Screenshots y videos
  • ✅ Manejo de diálogos y popups

Comparativa

Tareacurl/wgetPlaywright MCP
Fetch API REST⭐⭐⭐⭐⭐ Perfecto⭐⭐⭐ Overkill
Descargar archivo⭐⭐⭐⭐⭐ Simple⭐⭐ Innecesario
Scraping SPA❌ No funciona⭐⭐⭐⭐⭐ Ideal
Testing E2E❌ No aplica⭐⭐⭐⭐⭐ Diseñado para esto
Llenar formularios❌ Imposible⭐⭐⭐⭐⭐ Trivial
Mantener sesión⭐ Muy frágil⭐⭐⭐⭐⭐ Natural

Conclusión: Si necesitas un navegador real, Playwright MCP. Si solo necesitas hacer un HTTP request, curl.


Caso 4: Bases de datos

psql/mysql CLI (Acceso directo)

Casos válidos:

# Query ad-hoc rápida
psql -d mydb -c "SELECT COUNT(*) FROM users"
 
# Export de datos
pg_dump mydb > backup.sql
 
# Verificar conectividad
psql -d mydb -c "SELECT version()"

Ventajas:

  • Respuesta inmediata
  • Sin overhead
  • Herramientas maduras

Limitaciones:

  • Múltiples conexiones para múltiples queries
  • Parsing manual de resultados
  • Sin análisis inteligente

PostgreSQL/MongoDB MCP (Análisis inteligente)

Casos ideales:

# Exploración interactiva
Prompt: "Muéstrame las 10 tablas más grandes de la base de datos"
 
# Análisis de datos
Prompt: "Encuentra usuarios que se registraron en los últimos 30 días
         pero no han hecho ninguna compra, agrupa por país y muéstrame
         estadísticas"
 
# Optimización de queries
Prompt: "Esta query es lenta: [pegar query]. Analiza el plan de ejecución
         y sugiéreme optimizaciones"
 
# Schema introspection
Prompt: "Explícame la relación entre las tablas users, orders y products"

Ventajas sobre psql directo:

  • ✅ Una conexión persistente
  • ✅ Transacciones naturales
  • ✅ Schema introspection automático
  • ✅ Claude entiende relaciones entre tablas
  • ✅ Queries iterativas más fluidas
  • ✅ Análisis de performance metrics (pg_stat_statements)

Comparativa

Tareapsql CLIPostgreSQL MCP
Query simple⭐⭐⭐⭐⭐ Inmediato⭐⭐⭐⭐ Funciona
Múltiples queries relacionadas⭐⭐ Múltiples conexiones⭐⭐⭐⭐⭐ Una conexión
Análisis exploratorio⭐⭐ Manual⭐⭐⭐⭐⭐ Asistido por IA
Transacciones⭐⭐⭐ Archivos SQL⭐⭐⭐⭐⭐ Natural
Schema introspection⭐⭐ Comandos \d⭐⭐⭐⭐⭐ Automático
Optimización⭐⭐ EXPLAIN manual⭐⭐⭐⭐⭐ Análisis asistido

Recomendación

Usa psql CLI cuando:

  • Query única y rápida
  • Scripts de migración
  • Backup/restore
  • Eres DBA experto y prefieres control directo

Usa PostgreSQL MCP cuando:

  • Análisis exploratorio de datos
  • Necesitas ayuda con SQL complejo
  • Múltiples queries relacionadas
  • Debugging de performance
  • Onboarding de developers que no dominan SQL

Caso 5: Comunicación (Slack/Discord)

CLI/API directa (Limitado)

Slack CLI:

# Enviar mensaje
slack chat send --channel "#general" --text "Deploy completed"
 
# Listar canales
slack conversations list

Limitaciones:

  • No hay contexto de conversaciones
  • Búsqueda limitada
  • Sin análisis de sentimiento
  • Interacción básica

Slack MCP (Integración completa)

Casos avanzados:

# Búsqueda contextual
Prompt: "Busca en #engineering todas las menciones de 'deployment issue'
         en los últimos 3 días, resume los problemas reportados y
         verifica si se resolvieron"
 
# Análisis de sentimiento
Prompt: "Analiza el canal #support y dime si hay clientes frustrados
         que necesiten atención urgente"
 
# Automatización de respuestas
Prompt: "Cuando alguien mencione 'build failed' en #ci-alerts,
         envía un mensaje en #engineering con el link del log"
 
# Resumen de threads
Prompt: "Resume el thread más largo del canal #product esta semana"

Ventajas:

  • Contexto completo de conversaciones
  • Búsqueda semántica
  • Análisis de threads
  • Integración con otros MCPs (ej: crear issue en GitHub basado en mensaje de Slack)

Conclusión: Para mensajería simple, CLI. Para análisis y automatización, MCP.


Matriz de decisión rápida

Usa este flowchart para decidir rápidamente:

┌─────────────────────────────────────┐
│ ¿Necesitas mantener estado entre    │
│ operaciones? (sesión, conexión)     │
└──────────────┬──────────────────────┘

       ┌───────┴────────┐
       │ SÍ             │ NO
       ▼                ▼
   ┌───────┐        ┌───────────────────────────┐
   │  MCP  │        │ ¿Requiere autenticación   │
   └───────┘        │ compleja? (OAuth, MFA)    │
                    └────────┬──────────────────┘

                     ┌───────┴────────┐
                     │ SÍ             │ NO
                     ▼                ▼
                 ┌───────┐        ┌──────────────────────┐
                 │  MCP  │        │ ¿Son >3 pasos        │
                 └───────┘        │ relacionados?        │
                                  └────────┬─────────────┘

                                   ┌───────┴────────┐
                                   │ SÍ             │ NO
                                   ▼                ▼
                               ┌───────┐        ┌─────────────────────┐
                               │  MCP  │        │ ¿Necesitas parsing  │
                               └───────┘        │ complejo?           │
                                                └────────┬────────────┘

                                                 ┌───────┴────────┐
                                                 │ SÍ             │ NO
                                                 ▼                ▼
                                             ┌───────┐        ┌──────┐
                                             │  MCP  │        │ CLI  │
                                             └───────┘        └──────┘

Tabla resumen

CriterioCLI directoMCP
Operaciones stateless✅ Ideal⚠️ Overkill
Operaciones stateful❌ Frágil✅ Ideal
1-2 comandos simples✅ Rápido⚠️ Innecesario
3+ comandos interdependientes⚠️ Complejo✅ Natural
Autenticación simple (API key)✅ Funciona⚠️ No crítico
OAuth/MFA/SAML❌ Manual✅ Automático
Uso una vez/raramente✅ Sin setup❌ Setup no justificado
Uso frecuente (diario)⚠️ Repetitivo✅ Eficiente
Salida simple (texto)✅ Legible⚠️ No crítico
Datos complejos (JSON profundo)⚠️ Parsing manual✅ Pre-estructurado
CI/CD/Scripts✅ Perfecto❌ No aplica
Interacción humano-IA⚠️ Verboso✅ Natural

Patrones comunes

Patrón 1: "CLI first, MCP when it hurts"

Descripción: Empieza siempre con CLI directo. Solo migra a MCP cuando encuentres friction repetidamente.

Señales de que necesitas MCP:

  • 🔴 Repites los mismos 3+ comandos frecuentemente
  • 🔴 Pasas >5 minutos parseando salidas
  • 🔴 Escribes scripts bash frágiles
  • 🔴 Pierdes sesiones/conexiones constantemente
  • 🔴 La autenticación es un dolor de cabeza

Ejemplo:

# Semana 1: CLI funciona bien
git log --oneline | grep "auth"
git show abc123
git blame src/auth.ts
 
# Semana 2: Repites lo mismo muchas veces
# Mismo flujo de comandos 10+ veces
 
# Semana 3: Escribes un script
# Script bash con parsing frágil
 
# Semana 4: El script falla por cambios en formato
# Debugging del script toma horas
 
# Solución: GitHub MCP + prompt natural
"Analiza todos los commits relacionados con autenticación,
 identifica quién hizo más cambios y qué archivos se modificaron"

Patrón 2: "MCP para servicios, CLI para sistema"

Regla práctica:

Servicios externos (APIs cloud, SaaS) → MCP
  - GitHub → GitHub MCP
  - Slack → Slack MCP
  - PostgreSQL → PostgreSQL MCP
  - Stripe → Stripe MCP
 
Operaciones del sistema (local) → CLI
  - git → git CLI
  - npm/yarn → CLI directo
  - docker → docker CLI
  - filesystem → ls, find, grep

Razón: Los servicios externos se benefician de:

  • Autenticación gestionada
  • Estado persistente
  • APIs complejas abstraídas
  • Rate limiting manejado

Patrón 3: "Estado es la frontera"

Sin estado necesario:

# CLI es perfecto
git status               # Sin estado
npm run build           # Sin estado
docker ps               # Sin estado
curl api.com/status     # Sin estado

Con estado necesario:

# MCP es superior
Navegador web           # Mantiene DOM, cookies, sesión
Conexión DB             # Pool de conexiones, transacciones
OAuth services          # Tokens, refresh automático
WebSocket connections   # Conexión persistente

Test rápido: "¿Necesito recordar información de la operación anterior para la siguiente?"

  • NO → CLI
  • → MCP

Anti-patrones (qué NO hacer)

❌ Anti-patrón 1: "MCP para todo"

Problema: Instalar MCPs para operaciones que el CLI hace perfectamente.

Ejemplo malo:

// .mcp.json
{
  "mcpServers": {
    "git": {...},           // ❌ Innecesario
    "npm": {...},           // ❌ Innecesario
    "filesystem": {...},    // ❌ Innecesario (ya tienes bash)
    "curl": {...}           // ❌ Innecesario
  }
}

Por qué es malo:

  • Sobrecarga de contexto (menos espacio para tu código)
  • Setup complejo sin beneficio
  • Debugging más difícil
  • Mayor superficie de fallos

Solución correcta: Solo instala MCPs que agreguen valor real:

  • GitHub MCP: Análisis complejos de repos ✅
  • PostgreSQL MCP: Exploración de datos ✅
  • Playwright MCP: Testing E2E ✅

❌ Anti-patrón 2: "CLI cuando necesitas estado"

Problema: Intentar mantener estado con scripts bash frágiles.

Ejemplo malo:

#!/bin/bash
# Intentar automatizar navegación web con curl
 
# 1. Get login page
curl https://app.com/login > login.html
 
# 2. Extract CSRF token (frágil!)
TOKEN=$(grep csrf login.html | sed 's/.*value="\(.*\)".*/\1/')
 
# 3. Intentar login (sin cookies!)
curl -X POST https://app.com/login \
  -d "username=user&password=pass&csrf=$TOKEN"
 
# 4. Acceder dashboard (sin sesión!)
curl https://app.com/dashboard
# ❌ Falla: No hay sesión activa

Por qué es malo:

  • No ejecuta JavaScript
  • No mantiene cookies/sesión
  • Frágil ante cambios en HTML
  • Difícil de debuggear

Solución correcta:

# Playwright MCP
Prompt: "Navega a app.com, haz login con credenciales de test,
         ve al dashboard y extrae los datos del usuario"
 
# Playwright mantiene:
- Estado del navegador
- Cookies y sesión
- JavaScript ejecutado
- DOM completo

❌ Anti-patrón 3: "Crear MCP personalizado para casos simples"

Problema: Invertir semanas desarrollando un MCP personalizado para algo que el CLI hace en minutos.

Ejemplo malo:

Situación: Necesito ejecutar un script interno de la empresa
           que valida configuraciones
 
Mal enfoque:
1. Crear MCP server personalizado (2-3 días de desarrollo)
2. Configurar autenticación
3. Dockerizar
4. Deploy
5. Configurar en Claude Code
 
Total: ~1 semana de trabajo

Por qué es malo:

  • Overhead de desarrollo enorme
  • Mantenimiento continuo necesario
  • Complejidad innecesaria

Solución correcta:

# Simplemente ejecuta el script
./scripts/validate-config.sh
 
# O si quieres integración más fluida, usa un hook
# .claude/settings.json
{
  "hooks": {
    "beforeBashTool": "./scripts/validate-config.sh"
  }
}

Cuándo SÍ crear un MCP personalizado:

  • Tu herramienta será usada por múltiples proyectos
  • Requiere estado complejo
  • Otros equipos pueden beneficiarse
  • Es un servicio interno crítico usado diariamente

Consideraciones avanzadas

Performance

Latencia de startup

CLI directo:

Tiempo de inicio: ~10-50ms
- Bash/shell ya está en memoria
- Comandos nativos instantáneos

MCP:

Tiempo de inicio (primera vez): ~500-2000ms
- Establecer conexión
- Autenticación
- Inicialización del servidor
 
Tiempo de inicio (subsecuente): ~100-300ms
- Conexión reutilizada (si es stateful)

Implicaciones:

  • Para 1 operación: CLI gana
  • Para 10+ operaciones: MCP gana (conexión persistente)

Consumo de contexto

Sin Tool Search:

Ejemplo real:
- GitHub MCP: ~46,000 tokens (91 herramientas)
- Playwright MCP: ~9,700 tokens (21 herramientas)
- AWS MCPs: ~9,100 tokens (7 herramientas)
 
Total con 5 MCPs: ~100,000 tokens
Contexto disponible para trabajo: 100,000 tokens
→ 50% del contexto consumido por definiciones de tools

Con Tool Search (2026):

Contexto por MCP tools: ~1,000 tokens (herramienta de búsqueda)
Total con 5 MCPs: ~5,000 tokens
Contexto disponible: 195,000 tokens
→ Reducción del 95% en consumo de contexto

Recomendación:

  • Si usas 5+ MCPs, habilita Tool Search: ENABLE_TOOL_SEARCH=auto:5 claude
  • Revisa consumo con: /context

Portabilidad y reproducibilidad

CLI es más portable

Ventajas:

# Funciona en CI/CD sin configuración
npm ci
npm test
 
# Funciona en cualquier máquina con git
git clone repo
cd repo
npm install
 
# Scripts reproducibles
#!/bin/bash
set -e
npm run build
npm run test
docker build -t myapp .

MCP requiere setup:

// .mcp.json necesario
// Variables de entorno necesarias
// Credenciales necesarias
// No funciona out-of-the-box en CI

Cuándo cada uno es apropiado

ContextoRecomendación
CI/CD pipelinesCLI directo
Scripts de deployCLI directo
Setup de nuevo devCLI primero, luego MCPs opcionales
Onboarding automatizadoCLI para básico, MCPs para avanzado
Sesión interactiva con ClaudeMCPs tienen ventaja
Headless automationCLI directo

Experiencia del equipo

Equipo experto en CLI

Perfil:

  • Desarrolladores senior
  • Cómodos con terminal
  • Scripts bash/shell avanzados
  • Conocen bien las herramientas

Recomendación:

  • Mantener CLI como default
  • Agregar MCPs solo para casos donde agreguen valor claro
  • Ejemplo: Playwright para testing, GitHub MCP para análisis complejos

Equipo menos técnico o nuevo

Perfil:

  • Junior developers
  • Diseñadores que programan
  • Product managers técnicos
  • Menos experiencia con CLI

Recomendación:

  • MCPs pueden bajar la barrera de entrada
  • Interfaces naturales más amigables
  • Ejemplo: PostgreSQL MCP permite queries sin dominar SQL

Costos

CLI: Generalmente gratis

git, npm, docker, curl, etc. → Sin costo
gh (GitHub CLI) → Gratis
psql → Gratis

MCPs: Pueden tener costos

MCPs remotos (HTTP):

  • GitHub MCP vía Copilot → Incluido en licencia
  • Stripe MCP → Sin costo adicional (usa tu cuenta)
  • Browserbase → $50-200/mes según uso
  • Context7 → $20/mes

MCPs locales (Stdio):

  • Playwright → Gratis (usa tu CPU)
  • PostgreSQL → Gratis (tu DB)

Costo de Claude Code:

  • Consumo de contexto → Afecta pricing de API
  • Más MCPs = más contexto = potencialmente más costo

Recomendación: Evalúa trade-off:

¿Ahorro de tiempo > Costo de MCP/contexto?
  SÍ → Usar MCP
  NO → Mantener CLI

Casos edge y situaciones especiales

Caso 1: Servicios híbridos (GitHub, Slack)

Situación: GitHub tiene excelente CLI (gh) Y excelente MCP.

¿Cuál usar?

Enfoque práctico: Ambos, según contexto

# CLI para operaciones rápidas y cotidianas
gh pr list
gh pr view 123
gh issue create
 
# MCP para análisis y workflows complejos
"Analiza todos los PRs del milestone Q1-2026, identifica los que están
 bloqueados, revisa qué issues los bloquean, y genera un reporte de
 priorización"

Coexistencia:

// .mcp.json
{
  "mcpServers": {
    "github": {...}  // Para workflows complejos
  }
}
 
// Y también usas gh CLI cuando es más directo
// Claude puede usar ambos según lo que sea más apropiado

Regla práctica:

  • Operación única y directa → gh CLI
  • Workflow multi-paso con lógica → GitHub MCP

Caso 2: Servicios sin MCP disponible

Situación: Tu empresa usa una herramienta interna o un SaaS de nicho sin MCP oficial.

¿Cuándo crear tu propio MCP?

Criterios para justificar desarrollo:

SÍ, crea un MCP si:

  • La herramienta se usa diariamente
  • Múltiples personas en el equipo la necesitan
  • Tiene una API estructurada
  • Requiere estado complejo (OAuth, sesiones)
  • El workflow es multi-paso repetitivo
  • Otros equipos/proyectos podrían reutilizarlo

Costo estimado:

  • MCP simple: 2-4 días
  • MCP medio: 1-2 semanas
  • MCP complejo (OAuth, state): 2-4 semanas

NO, usa CLI si:

  • Uso ocasional (< 1 vez por semana)
  • Solo tú lo necesitas
  • Ya tiene buen CLI
  • Operaciones simples stateless
  • Equipo pequeño, no justifica inversión

Alternativa: Wrapper con CLI

# Crea un script wrapper
#!/bin/bash
# internal-tool.sh
 
API_KEY=$INTERNAL_TOOL_KEY
curl -H "Authorization: Bearer $API_KEY" \
     https://internal-tool.company.com/api/$1
 
# Uso:
./internal-tool.sh users/list
./internal-tool.sh projects/123
 
# Claude puede usar este script directamente vía Bash tool

Caso 3: Restricciones corporativas

Situación: Tu empresa tiene políticas estrictas de seguridad.

Problemas comunes con MCPs

1. Firewall bloquea conexiones externas:

❌ GitHub MCP (HTTP) → Bloqueado
✅ gh CLI (HTTPS directo) → Permitido

Solución:

  • Usa CLI para servicios externos
  • MCPs solo para servicios internos

2. No se permiten procesos background:

❌ MCP servers (stdio con npx) → Bloqueado
✅ CLI directo → Permitido

Solución:

  • CLI directo únicamente
  • O solicitar excepción para MCP específico

3. Credenciales deben estar en vault corporativo:

❌ Variables de entorno en .env → No permitido
✅ Integración con Vault → Requerido

Solución:

# Fetch de Vault antes de ejecutar
vault kv get -field=token secret/github > /tmp/gh_token
export GITHUB_TOKEN=$(cat /tmp/gh_token)
claude

Guía de migración CLI → MCP

Si ya usas CLI y estás considerando MCP, sigue estos pasos:

Paso 1: Identificar puntos de dolor

Audita tu workflow actual:

# Revisa tu historial de comandos
history | grep -E "(gh|curl|psql|aws)" | sort | uniq -c | sort -nr
 
# Identifica patrones repetitivos
# ¿Ejecutas los mismos 3-5 comandos en secuencia frecuentemente?

Preguntas clave:

  • ¿Qué tareas repites >5 veces por semana?
  • ¿Qué operaciones requieren múltiples comandos?
  • ¿Dónde pierdes más tiempo parseando salidas?
  • ¿Qué autenticaciones son más dolorosas?

Paso 2: Evaluar MCPs disponibles

Busca MCPs que resuelvan tus puntos de dolor:

# Directorios de MCPs
# https://mcpservers.org
# https://mcp.so
# https://www.pulsemcp.com/servers

Criterios de selección:

  • Mantenido activamente (commits recientes)
  • Documentación clara
  • Ejemplos de uso
  • Issues resueltas rápidamente
  • Usado por la comunidad (stars, downloads)

Paso 3: Migración incremental

No migres todo de golpe. Empieza pequeño:

Semana 1: Setup básico

# Instala 1 MCP que resuelva tu mayor punto de dolor
claude mcp add --transport http github https://api.githubcopilot.com/mcp/
 
# Familiarízate con su uso
# Compara con tu workflow CLI anterior

Semana 2-3: Uso diario

# Usa el MCP para tareas reales
# Mide si realmente ahorra tiempo
# Identifica limitaciones

Semana 4: Evaluación

¿Ahorra tiempo? → Mantener, agregar otro MCP
¿No agrega valor? → Remover, seguir con CLI

Paso 4: Métricas de éxito

Define métricas antes de migrar:

MétricaAntes (CLI)Después (MCP)Mejora
Tiempo para listar PRs con conflictos5 min30 seg✅ 10x
Pasos para crear issue desde PR81✅ 8x
Debugging de problemasFácilDifícil❌ Peor
Setup de nuevo dev5 min20 min❌ Peor

Decisión basada en datos:

  • Si >70% de métricas mejoran → Adoptar MCP
  • Si <50% mejoran → Mantener CLI

Checklist de decisión

Usa esta checklist para cada caso:

Evaluación rápida

Estado:

  • ¿Necesito mantener sesión/conexión entre operaciones? → MCP
  • ¿Cada operación es independiente? → CLI

Complejidad:

  • ¿Son 1-2 comandos simples? → CLI
  • ¿Son 3+ comandos interdependientes? → MCP

Autenticación:

  • ¿Usa OAuth/MFA/SAML? → MCP
  • ¿Es API key simple? → CLI está bien

Frecuencia:

  • ¿Lo usaré >10 veces? → MCP justificado
  • ¿Uso único/raro? → CLI directo

Contexto:

  • ¿Necesito parsear/transformar datos complejos? → MCP
  • ¿La salida es texto simple? → CLI está bien

Ecosistema:

  • ¿Ya existe MCP maduro? → Considerar MCP
  • ¿El CLI es robusto y conocido? → Mantener CLI

Equipo:

  • ¿Mi equipo lo usará frecuentemente? → MCP
  • ¿Solo yo lo necesito? → CLI

Setup:

  • ¿El beneficio justifica 30 min de configuración? → MCP
  • ¿Necesito resultado ya? → CLI

Ejemplos completos

Ejemplo 1: Análisis de PRs en GitHub

Contexto: Eres tech lead y necesitas revisar PRs para el sprint actual.

Solución con CLI (gh)

# 1. Listar PRs del milestone
gh pr list --milestone "Sprint Q1-2026" --json number,title,author > prs.json
 
# 2. Para cada PR, verificar conflictos
for pr in $(jq -r '.[].number' prs.json); do
  gh pr view $pr --json mergeable
done > mergeable.json
 
# 3. Filtrar PRs con conflictos
jq 'select(.mergeable == "CONFLICTING")' mergeable.json > conflicts.json
 
# 4. Para PRs con conflictos, ver archivos afectados
# ... más bash scripting ...
 
# 5. Parsear y generar reporte
# ... aún más bash scripting ...

Pros:

  • ✅ Control total
  • ✅ Scriptable
  • ✅ Funciona en CI

Cons:

  • ❌ Requiere múltiples comandos
  • ❌ Parsing manual de JSON
  • ❌ Lógica compleja en bash
  • ❌ Frágil ante cambios en formato
  • ❌ Difícil de mantener

Tiempo: ~15-20 minutos

Solución con GitHub MCP

Prompt a Claude:
"Analiza todos los PRs del milestone 'Sprint Q1-2026'.
 Para cada PR:
 - Verifica si tiene conflictos
 - Si tiene conflictos, lista los archivos afectados
 - Revisa la complejidad de los cambios
 Genera un reporte priorizando los PRs sin conflictos
 que estén listos para merge"

Pros:

  • ✅ Un solo prompt natural
  • ✅ Claude orquesta todo
  • ✅ Análisis contextual incluido
  • ✅ Reporte estructurado automático

Cons:

  • ❌ Requiere MCP configurado
  • ❌ Menos control granular
  • ❌ Debugging menos transparente

Tiempo: ~30 segundos

Decisión final

Para este caso: GitHub MCP gana

Razón:

  • Workflow complejo multi-paso
  • Requiere análisis contextual
  • Se repite frecuentemente (cada sprint)
  • Ahorro de tiempo significativo (20 min → 30 seg)

Ejemplo 2: Testing de UI con navegador

Contexto: Necesitas verificar que el flujo de login funciona correctamente después de un cambio.

Solución con curl (Limitada)

# 1. Intentar obtener página de login
curl https://myapp.com/login > login.html
 
# 2. Intentar extraer CSRF token (frágil)
CSRF=$(grep -oP 'csrf-token.*?content="\K[^"]+' login.html)
 
# 3. Intentar hacer POST (sin JavaScript)
curl -X POST https://myapp.com/api/login \
  -H "Content-Type: application/json" \
  -H "X-CSRF-Token: $CSRF" \
  -d '{"username":"test","password":"test123"}' \
  -c cookies.txt
 
# 4. Verificar dashboard (sin sesión real)
curl -b cookies.txt https://myapp.com/dashboard

Pros:

  • ✅ Simple
  • ✅ Rápido

Cons:

  • ❌ No ejecuta JavaScript
  • ❌ No renderiza React/Vue/Angular
  • ❌ No puede interactuar con elementos
  • ❌ No mantiene sesión real de navegador
  • ❌ CSRF tokens en SPAs no funcionan así
  • No funciona para aplicaciones modernas

Resultado: ❌ Falla en 90% de apps modernas

Solución con Playwright MCP

Prompt a Claude:
"Navega a https://myapp.com/login en un navegador.
 Ingresa username: test, password: test123.
 Haz clic en el botón de login.
 Verifica que llegues al dashboard.
 Confirma que se muestre el nombre del usuario en el header.
 Toma un screenshot del dashboard para evidencia."

Pros:

  • ✅ Navegador real (Chromium)
  • ✅ JavaScript ejecutado
  • ✅ Interacciones reales (click, type)
  • ✅ Sesión y cookies gestionadas
  • ✅ Screenshot automático
  • ✅ Funciona con cualquier SPA

Cons:

  • ❌ Más lento que curl
  • ❌ Requiere Playwright instalado

Resultado: ✅ Funciona perfectamente

Decisión final

Para este caso: Playwright MCP es obligatorio

Razón:

  • Apps modernas requieren JavaScript
  • Necesitas interacciones reales
  • curl simplemente no puede hacer esto
  • No hay alternativa CLI viable

Ejemplo 3: Consultas a base de datos

Contexto: Análisis exploratorio de datos de usuarios.

Solución con psql CLI

# Query 1: Usuarios registrados este mes
psql -d analytics -c "
  SELECT COUNT(*) as total_users
  FROM users
  WHERE created_at >= '2026-01-01'
"
 
# Query 2: Usuarios sin compras
psql -d analytics -c "
  SELECT u.id, u.email, u.created_at
  FROM users u
  LEFT JOIN orders o ON u.id = o.user_id
  WHERE o.id IS NULL
  LIMIT 10
" -t -A > users_no_orders.txt
 
# Query 3: Analizar por país
psql -d analytics -c "
  SELECT country, COUNT(*) as count
  FROM users u
  LEFT JOIN orders o ON u.id = o.user_id
  WHERE o.id IS NULL
  GROUP BY country
  ORDER BY count DESC
"
 
# Query 4: Calcular estadísticas
# ... más queries ...

Pros:

  • ✅ Control directo
  • ✅ Respuesta inmediata
  • ✅ Export a archivos

Cons:

  • ❌ Cada query abre nueva conexión
  • ❌ Análisis iterativo tedioso
  • ❌ Requiere conocimiento SQL avanzado
  • ❌ Difícil explorar relaciones entre tablas

Tiempo: ~30 minutos de queries iterativas

Solución con PostgreSQL MCP

Prompt a Claude:
"Analiza la tabla users de la base de datos.
 Muéstrame usuarios que se registraron en enero de 2026
 pero no han hecho ninguna compra.
 Agrupa por país y muéstrame:
 - Cantidad por país
 - Promedio de días desde registro
 - Patrones comunes
 Sugiere acciones para convertirlos en clientes"

Pros:

  • ✅ Conexión persistente
  • ✅ Claude genera SQL optimizado
  • ✅ Análisis contextual automático
  • ✅ Explora relaciones entre tablas
  • ✅ Insights adicionales sugeridos
  • ✅ No requieres ser experto SQL

Cons:

  • ❌ Menos control granular
  • ❌ Queries generadas pueden no ser óptimas
  • ❌ Requiere confianza en el análisis de Claude

Tiempo: ~2 minutos

Decisión final

Depende del contexto:

Usa psql CLI si:

  • Eres DBA experto
  • Sabes exactamente qué query necesitas
  • Quieres control total del SQL
  • Una sola query simple

Usa PostgreSQL MCP si:

  • Exploración de datos
  • No estás seguro qué buscar
  • Análisis iterativo
  • Quieres insights sugeridos
  • No eres experto SQL

Ejemplo 4: Monitoreo y alertas

Contexto: Investigar errores en producción.

Solución con CLI (Sentry CLI + jq)

# 1. Listar errores recientes
sentry-cli issues list --project myapp > issues.json
 
# 2. Filtrar errores de las últimas 24h
jq '.[] | select(.lastSeen > "'$(date -u -d '1 day ago' +%Y-%m-%dT%H:%M:%S)')'' issues.json > recent.json
 
# 3. Buscar errores relacionados con "auth"
jq '.[] | select(.title | contains("auth"))' recent.json
 
# 4. Ver detalles de un error específico
sentry-cli issues show ISSUE_ID
 
# 5. Analizar stack trace
# ... parsing manual ...

Pros:

  • ✅ Directo
  • ✅ Scriptable

Cons:

  • ❌ Múltiples comandos
  • ❌ Parsing de JSON manualmente
  • ❌ Análisis de stack traces manual
  • ❌ Difícil correlacionar con código

Tiempo: ~10 minutos

Solución con Sentry MCP

Prompt a Claude:
"Revisa Sentry para errores en las últimas 24 horas.
 Enfócate en errores relacionados con autenticación.
 Para cada error:
 - Muestra el stack trace
 - Identifica el archivo y línea de código
 - Sugiere posible causa
 - Indica si es un error conocido (ya reportado)
 Prioriza por frecuencia y impacto"

Pros:

  • ✅ Análisis contextual automático
  • ✅ Correlación con código
  • ✅ Sugerencias de solución
  • ✅ Priorización inteligente

Cons:

  • ❌ Requiere MCP configurado
  • ❌ Dependencia de calidad del análisis de Claude

Tiempo: ~1 minuto

Decisión final

Para este caso: Sentry MCP gana

Razón:

  • Análisis de errores se beneficia de contexto
  • Correlación con código es valiosa
  • Priorización automática ahorra tiempo
  • Se hace frecuentemente (diario)

Ejemplo 5: Integración con Slack

Contexto: Buscar menciones de un feature en canales de ingeniería.

Solución con Slack CLI

# 1. Buscar mensajes en un canal
slack conversations history \
  --channel C0123456789 \
  --oldest $(date -d '7 days ago' +%s) > messages.json
 
# 2. Filtrar mensajes que contengan "deployment"
jq '.messages[] | select(.text | contains("deployment"))' messages.json
 
# 3. Para cada mensaje, obtener contexto (replies)
# ... más comandos ...
 
# 4. Analizar y resumir manualmente

Pros:

  • ✅ Simple para búsquedas básicas

Cons:

  • ❌ No busca en threads automáticamente
  • ❌ Búsqueda literal (no semántica)
  • ❌ Parsing manual
  • ❌ No analiza sentimiento
  • ❌ Difícil resumir threads largos

Tiempo: ~15 minutos

Solución con Slack MCP

Prompt a Claude:
"Busca en #engineering todas las menciones de 'deployment issue'
 en los últimos 7 días. Para cada mención:
 - Incluye el contexto del thread completo
 - Resume el problema reportado
 - Indica si se resolvió (busca mensajes posteriores)
 - Detecta si hay urgencia/frustración
 Agrupa por tipo de problema y dame un resumen ejecutivo"

Pros:

  • ✅ Búsqueda semántica
  • ✅ Threads incluidos automáticamente
  • ✅ Análisis de sentimiento
  • ✅ Resumen estructurado
  • ✅ Detección de patrones

Cons:

  • ❌ Requiere bot token de Slack
  • ❌ Setup inicial necesario

Tiempo: ~30 segundos

Decisión final

Para este caso: Slack MCP gana

Razón:

  • Búsqueda semántica superior
  • Análisis contextual valioso
  • Threads son esenciales en Slack
  • Resumen automático ahorra mucho tiempo

Conclusión

Decidir entre MCP y CLI no es una cuestión de "uno u otro", sino de elegir la herramienta correcta para cada tarea.

Reglas de oro

  1. "Estado es la frontera"

    • Sin estado → CLI
    • Con estado → MCP
  2. "CLI first, MCP when it hurts"

    • Empieza con CLI
    • Migra a MCP cuando el dolor justifique el setup
  3. "MCP para servicios, CLI para sistema"

    • Servicios externos → MCP
    • Operaciones locales → CLI
  4. "Simplicidad sobre sofisticación"

    • No uses MCP por usar MCP
    • CLI es perfectamente válido para muchos casos
  5. "Mide el valor"

    • ¿Ahorra tiempo? ¿Reduce errores? ¿Mejora DX?
    • Si no hay valor medible, mantén CLI

Toma de decisión rápida

┌─────────────────────────────────────────┐
│ ¿El CLI hace el trabajo bien?           │
└──────────────┬──────────────────────────┘

       ┌───────┴────────┐
       │ SÍ             │ NO
       ▼                ▼
   ┌────────┐      ┌──────────────┐
   │ USA    │      │ Evalúa MCP:  │
   │ CLI    │      │ - ¿Existe?   │
   └────────┘      │ - ¿Agrega    │
                   │   valor?     │
                   │ - ¿Justifica │
                   │   setup?     │
                   └──────┬───────┘

                  ┌───────┴────────┐
                  │ SÍ             │ NO
                  ▼                ▼
              ┌────────┐      ┌──────────┐
              │ USA    │      │ Mantén   │
              │ MCP    │      │ CLI +    │
              └────────┘      │ scripts  │
                              └──────────┘

Últimas recomendaciones

Para desarrolladores individuales:

  • Empieza con CLI
  • Agrega 1-2 MCPs para tus mayores puntos de dolor
  • Evalúa después de 1 mes

Para equipos:

  • Define estándares de cuándo usar qué
  • Documenta MCPs necesarios en README
  • MCPs en project scope, credenciales en local scope

Para empresas:

  • Políticas claras de seguridad para MCPs
  • Audita MCPs permitidos
  • Considera crear MCPs internos para herramientas críticas

Próximos pasos

En el siguiente punto (6.5 Filosofía recomendada) profundizaremos en las mejores prácticas y patrones para usar MCPs efectivamente en tu workflow diario.

Recursos adicionales:


Fuentes


6.5 Filosofía recomendada para usar MCP

Introducción

Hasta ahora hemos visto qué es MCP, cuáles son los servidores disponibles, cómo instalarlos y cuándo usar MCP vs CLI. Pero hay algo más importante: la mentalidad correcta para usar MCPs de manera efectiva.

MCP es una tecnología poderosa, pero como toda herramienta poderosa, puede usarse mal. Algunos equipos caen en la trampa de "MCP para todo", llenando su configuración con decenas de servidores que nunca usan. Otros van al extremo opuesto, evitando MCPs cuando realmente agregarían valor.

Este punto trata sobre la filosofía — los principios, patrones mentales y mejores prácticas que te ayudarán a usar MCPs de forma efectiva, sostenible y escalable.


Los 5 principios fundamentales

1. Minimalismo: menos es más

Principio: Instala solo los MCPs que realmente usas frecuentemente.

✅ Correcto: 3-5 MCPs bien seleccionados, usados diariamente
❌ Incorrecto: 15+ MCPs "por si acaso"

Por qué importa:

  • Cada MCP añade overhead de contexto (aunque Tool Search lo mitiga)
  • Más MCPs = más configuración que mantener
  • Más MCPs = más superficie de fallos
  • Más MCPs = debugging más complejo

Regla práctica: Si no has usado un MCP en las últimas 2 semanas, probablemente no lo necesites.

Ejemplo real:

// ❌ Configuración problemática
{
  "mcpServers": {
    "github": {...},
    "gitlab": {...},        // ¿Usas ambos?
    "postgres": {...},
    "mysql": {...},         // ¿Usas ambos?
    "mongodb": {...},       // ¿Usas ambos?
    "playwright": {...},
    "puppeteer": {...},     // Duplicado con Playwright
    "slack": {...},
    "discord": {...},       // ¿Usas ambos?
    "notion": {...},
    "google-drive": {...},
    "aws-s3": {...},
    "stripe": {...},
    "sendgrid": {...},
    "twilio": {...}
  }
}
// Total: 15 MCPs, probablemente solo usas 4-5 regularmente
 
// ✅ Configuración limpia
{
  "mcpServers": {
    "github": {...},       // Usado diariamente
    "postgres": {...},     // Usado diariamente
    "playwright": {...},   // Testing E2E regular
    "slack": {...}         // Comunicación frecuente
  }
}
// Total: 4 MCPs, todos usados activamente

Acción: Audita tus MCPs mensualmente. Elimina los que no has usado.


2. Progresividad: empieza pequeño, crece gradualmente

Principio: No instales todos los MCPs que puedan ser útiles de golpe. Empieza con uno y agrega según necesidad.

Estrategia de adopción recomendada:

Semana 1: Instalación de primer MCP
  └─ Identifica tu mayor punto de dolor
  └─ Instala 1 MCP que lo resuelva
  └─ Úsalo intensivamente
  └─ Mide si realmente ayuda
 
Semana 2-3: Periodo de evaluación
  └─ ¿Ahorra tiempo real?
  └─ ¿Es fácil de usar?
  └─ ¿Causa problemas/friction?
 
Semana 4: Decisión
  ├─ Si agrega valor → Mantener + considerar segundo MCP
  └─ Si no agrega valor → Remover, volver a CLI
 
Repetir el ciclo...

Ejemplo de adopción progresiva:

Mes 1: GitHub MCP
  - Motivo: Analizas PRs diariamente
  - Resultado: ✅ Ahorra 15 min/día
 
Mes 2: PostgreSQL MCP
  - Motivo: Análisis de datos frecuente
  - Resultado: ✅ Ahorra 20 min/día
 
Mes 3: Playwright MCP (intento)
  - Motivo: Testing ocasional
  - Resultado: ❌ Solo lo usas 1 vez/semana
  - Acción: Removido
 
Mes 4: Slack MCP
  - Motivo: Búsqueda en canales diaria
  - Resultado: ✅ Ahorra 10 min/día
 
Final: 3 MCPs estables, alto valor, bajo mantenimiento

Error común a evitar: Instalar 10 MCPs el primer día "para probar" → confusión, overhead, abandono.


3. Estado como guía: el mejor indicador

Principio: Deja que la necesidad de estado dicte tu elección, no las tendencias o la novedad.

Pregunta clave antes de instalar un MCP: "¿Necesito mantener estado/contexto entre múltiples operaciones?"

Sin estado necesario     →  CLI directo
Con estado necesario     →  MCP ideal

Ejemplos claros:

Operación¿Estado?RecomendaciónRazón
git statusNoCLIComando independiente
npm installNoCLIUna ejecución
Navegar web + interactuarPlaywright MCPMantiene sesión del navegador
Múltiples queries SQL relacionadasPostgreSQL MCPConexión persistente
OAuth a GitHub APIGitHub MCPGestión de tokens
Listar archivos S3NoAWS CLIComando simple

Test rápido: "Si hago esta operación, ¿la siguiente depende del resultado de la anterior?"

  • NO → CLI es suficiente
  • → Considera MCP

4. Valor sobre tecnología: no uses MCP por usar MCP

Principio: MCP es un medio, no un fin. Solo úsalo si agrega valor medible.

Métricas de valor:

  • ⏱️ Tiempo ahorrado: ¿Reduce el tiempo de la tarea significativamente?
  • 🎯 Precisión: ¿Reduce errores comparado con CLI?
  • 🧠 Carga cognitiva: ¿Hace la tarea más simple o más compleja?
  • 🔄 Frecuencia: ¿Se repite lo suficiente para justificar el setup?

Framework de decisión:

Valor de MCP = (Ahorro por uso × Frecuencia) - Costo de setup
 
Donde:
  Ahorro por uso = Tiempo CLI - Tiempo MCP
  Frecuencia = Usos por semana
  Costo de setup = ~30 minutos (instalación + configuración)
 
Ejemplo 1: GitHub MCP
  Ahorro por uso: 15 min
  Frecuencia: 10 veces/semana
  Valor = (15 min × 10) - 30 min = 150 min - 30 min = 120 min/semana
  → ✅ MUY ALTO VALOR
 
Ejemplo 2: Stripe MCP (hipotético)
  Ahorro por uso: 5 min
  Frecuencia: 1 vez/mes
  Valor = (5 min × 0.25) - 30 min = 1.25 min - 30 min = -28.75 min
  → ❌ VALOR NEGATIVO, no justificado

Regla de oro: Si el break-even (punto donde el valor supera el costo) es mayor a 1 mes, probablemente no vale la pena.

Anti-ejemplo real:

# Situación: Necesitas ejecutar un script interno 1 vez/semana
 
# ❌ Sobre-ingeniería
- Crear MCP server personalizado: 2 semanas de desarrollo
- Configurar OAuth: 1 día
- Dockerizar: 1 día
- Deploy: 1 día
- Documentar: 1 día
- Total: 3 semanas de trabajo
 
# ✅ Solución pragmática
./scripts/internal-tool.sh --param value
# Total: 0 minutos de setup, funciona perfectamente

Pregunta antes de instalar: "¿Qué problema concreto resuelve este MCP que el CLI no puede resolver bien?"

Si no tienes una respuesta clara, no lo instales.


5. Visibilidad y observabilidad: monitorea, no adivines

Principio: Mide el impacto real de tus MCPs. No asumas que están ayudando.

Herramientas de observabilidad:

  1. Monitoreo de contexto:
# Ver consumo de contexto actual
/context
 
# Salida típica:
# Context usage:
#   GitHub MCP: 46,000 tokens
#   Playwright MCP: 9,700 tokens
#   PostgreSQL MCP: 4,200 tokens
#   Your conversation: 12,000 tokens
# Total: 71,900 / 200,000 tokens (36%)
  1. Auditoría de uso:
# Revisa tu historial de Claude Code
# Busca cuántas veces realmente usaste cada MCP
 
history | grep -i "mcp" | grep -i "github" | wc -l
# ¿Coincide con tus expectativas?
  1. Debugging de MCPs:
# Lanza Claude con debug activado
claude --mcp-debug
 
# Ver logs detallados de interacciones MCP
tail -f ~/.claude/logs/mcp.log

Métricas clave a monitorear:

MétricaCómo medirlaUmbral saludable
Contexto consumido/context<40% del total
Frecuencia de usoHistorial de comandos>2 veces/semana
Tiempo de respuestaPercepción subjetiva<2 segundos
Tasa de erroresLogs de debug<5% de llamadas

Acción mensual recomendada:

# 1. Revisar consumo de contexto
/context
 
# 2. Identificar MCPs poco usados
# Pregúntate: "¿Cuándo fue la última vez que usé X MCP?"
 
# 3. Tomar acción
# - MCPs no usados en 2+ semanas → Considerar remover
# - MCPs con alto consumo + bajo uso → Remover
# - MCPs frecuentes → Mantener

Señales de alerta:

🚨 Remover MCP si:

  • Consumo de contexto >20% pero uso <1 vez/semana
  • Causa errores frecuentes (>10% de llamadas fallan)
  • Latencia >5 segundos consistentemente
  • No lo has usado en 1 mes

Mantener MCP si:

  • Uso diario o semanal consistente
  • Ahorro de tiempo documentado
  • Baja tasa de errores (<5%)
  • Respuesta rápida (<2 seg)

Organización de MCPs: jerarquía y patrones

Jerarquía de configuración: dónde poner cada MCP

Claude Code soporta configuración de MCPs en tres niveles:

~/.claude/mcp.json           → Global (todos los proyectos)
/proyecto/.claude/mcp.json   → Project (solo este proyecto)
~/.claude.json               → Local (usuario, alternativa)

Regla de organización:

Tipo de MCPDónde configurarRazón
Herramientas generalesGlobal (~/.claude/mcp.json)Útiles en cualquier proyecto
Específicas del proyectoProject (/proyecto/.claude/mcp.json)Solo relevantes aquí
Configuración de desarrolloLocal (~/.claude.json)Preferencias personales

Ejemplos:

// ~/.claude/mcp.json (Global)
// Herramientas que usas en TODOS tus proyectos
{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    },
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp-server"]
    }
  }
}
 
// /proyecto-web/.claude/mcp.json (Project)
// Específico para este proyecto web
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "postgresql://localhost/myapp"
      }
    },
    "stripe": {
      "command": "npx",
      "args": ["-y", "mcp-server-stripe"],
      "env": {
        "STRIPE_API_KEY": "${STRIPE_API_KEY}"
      }
    }
  }
}
 
// /proyecto-ml/.claude/mcp.json (Project)
// Específico para este proyecto de ML
{
  "mcpServers": {
    "jupyter": {
      "command": "npx",
      "args": ["-y", "@joshuarileydev/jupyter-mcp"]
    }
  }
}

Ventajas de esta organización:

Claridad: Sabes exactamente qué MCPs están disponibles en cada contexto ✅ Portabilidad: El archivo project puede versionarse en git ✅ Seguridad: Credenciales sensibles quedan en local, no en project ✅ Escalabilidad: Nuevos miembros del equipo obtienen la configuración correcta


Patrones de organización por tipo de proyecto

Patrón 1: Proyecto web full-stack

{
  "mcpServers": {
    // Base de datos del proyecto
    "postgres": {...},
 
    // Testing E2E
    "playwright": {...},
 
    // Gestión de issues y PRs
    "github": {...},
 
    // Opcional: Monitoreo
    "sentry": {...}
  }
}

Patrón 2: Proyecto de ciencia de datos

{
  "mcpServers": {
    // Notebooks
    "jupyter": {...},
 
    // Bases de datos de análisis
    "postgres": {...},
 
    // File system para datasets
    "filesystem": {...}
  }
}

Patrón 3: Proyecto de infraestructura

{
  "mcpServers": {
    // Gestión de cloud
    "aws": {...},
 
    // Monitoreo
    "datadog": {...},
 
    // Comunicación
    "slack": {...}
  }
}

Patrón 4: Setup personal minimalista

{
  "mcpServers": {
    // Solo lo esencial
    "github": {...}
  }
}

Gestión de credenciales: seguridad primero

Principio: Las credenciales NUNCA deben estar en archivos versionados.

Antipatrón peligroso:

// ❌ NUNCA hagas esto
// /proyecto/.claude/mcp.json (versionado en git)
{
  "mcpServers": {
    "github": {
      "env": {
        "GITHUB_TOKEN": "ghp_x1y2z3..." // ⚠️ Token expuesto en git!
      }
    }
  }
}

Patrón correcto: Variables de entorno

// ✅ /proyecto/.claude/mcp.json (versionado en git)
{
  "mcpServers": {
    "github": {
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}" // Lee de variable de entorno
      }
    },
    "postgres": {
      "env": {
        "POSTGRES_CONNECTION_STRING": "${DB_URL}"
      }
    }
  }
}
# .env (NO versionado, en .gitignore)
GITHUB_TOKEN=ghp_x1y2z3...
DB_URL=postgresql://localhost/myapp
STRIPE_API_KEY=sk_test_...

Patrón aún mejor: Archivo de secretos separado

// /proyecto/.claude/mcp.json (versionado)
{
  "mcpServers": {
    "github": {
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}
# ~/.claude/secrets.env (NO versionado, global)
# Contiene TODAS las credenciales de TODOS los proyectos
 
# GitHub
export GITHUB_TOKEN="ghp_..."
 
# Bases de datos
export DB_PROYECTO_A="postgresql://..."
export DB_PROYECTO_B="postgresql://..."
 
# APIs
export STRIPE_API_KEY="sk_test_..."
export SLACK_BOT_TOKEN="xoxb-..."
# ~/.bashrc o ~/.zshrc
source ~/.claude/secrets.env

Patrón empresarial: Vault de secretos

# Para empresas con Vault, 1Password, AWS Secrets Manager, etc.
 
# Fetch de secretos antes de lanzar Claude
#!/bin/bash
# fetch-secrets.sh
 
# Ejemplo con AWS Secrets Manager
export GITHUB_TOKEN=$(aws secretsmanager get-secret-value \
  --secret-id prod/github/token \
  --query SecretString \
  --output text)
 
export DB_URL=$(aws secretsmanager get-secret-value \
  --secret-id prod/postgres/connection \
  --query SecretString \
  --output text)
 
# Lanzar Claude con secretos
claude

Reglas de oro para credenciales:

  1. ✅ Usa variables de entorno (${VAR_NAME})
  2. ✅ Mantén secretos en archivos NO versionados (.env, .gitignore)
  3. ✅ Para equipos: usa vault de secretos centralizado
  4. ✅ Rota credenciales regularmente (cada 90 días)
  5. ❌ NUNCA versiones archivos con credenciales directas
  6. ❌ NUNCA uses tokens personales en configuración de proyecto compartido

Optimización de contexto: Tool Search y más

El problema del contexto

Cada MCP que instalas consume parte de tu ventana de contexto:

Sin MCPs:
  200,000 tokens disponibles para tu código y conversación ✅
 
Con 5 MCPs (sin Tool Search):
  ~67,000 tokens consumidos por definiciones de herramientas
  133,000 tokens disponibles para trabajo ⚠️
  → 33% del contexto perdido antes de empezar
 
Con 10 MCPs (sin Tool Search):
  ~120,000 tokens consumidos
  80,000 tokens disponibles ❌
  → 60% del contexto perdido

Tool Search: la solución

¿Qué es Tool Search?

Tool Search es una funcionalidad de Claude Code (desde enero 2026) que carga herramientas de MCPs dinámicamente, solo cuando se necesitan, en lugar de cargar todas al inicio.

Impacto:

ANTES (sin Tool Search):
  - 50 herramientas MCP → ~77,000 tokens consumidos
  - Contexto disponible: 123,000 tokens
 
DESPUÉS (con Tool Search):
  - 50 herramientas MCP → ~8,700 tokens consumidos
  - Contexto disponible: 191,300 tokens
  - Reducción: 85% menos overhead
  - Mejora: 95% de contexto preservado

Cómo funciona:

  1. Al iniciar Claude, Tool Search crea un registro ligero de herramientas (nombres + descripciones breves)
  2. Cuando Claude necesita una herramienta, la busca y carga dinámicamente
  3. Solo las herramientas usadas consumen contexto completo

Configuración:

// Tool Search está ACTIVADO por defecto desde enero 2026
// No necesitas hacer nada
 
// Si quieres desactivarlo (no recomendado):
{
  "enable_tool_search": false
}

Cuándo se activa automáticamente:

Tool Search se activa cuando las definiciones de herramientas MCP consumirían >10% de tu contexto.

Escenario 1: Solo 2 MCPs pequeños
  - Herramientas: ~8,000 tokens (4% del contexto)
  - Tool Search: NO se activa (no es necesario)
  - Comportamiento: Carga tradicional (todas las tools al inicio)
 
Escenario 2: 5+ MCPs
  - Herramientas: ~50,000 tokens (25% del contexto)
  - Tool Search: SÍ se activa automáticamente
  - Comportamiento: Carga dinámica

Beneficios adicionales:

Además de ahorrar contexto, Tool Search mejora la precisión de Claude:

Benchmark interno de Anthropic (MCP evaluations):
  Opus 4 sin Tool Search: 49% precisión
  Opus 4 con Tool Search: 74% precisión → +51% mejora
 
  Opus 4.5 sin Tool Search: 79.5% precisión
  Opus 4.5 con Tool Search: 88.1% precisión → +11% mejora

Razón: Con menos ruido en el contexto inicial, Claude elige las herramientas correctas más frecuentemente.


Monitoreo del uso de contexto

Comando esencial:

# Dentro de una sesión de Claude Code
/context

Salida típica:

Context usage:
  System prompt: 3,200 tokens
  GitHub MCP: 8,500 tokens (Tool Search: ON)
  Playwright MCP: 2,100 tokens (Tool Search: ON)
  PostgreSQL MCP: 1,800 tokens (Tool Search: ON)
  Conversation history: 15,000 tokens
  Code files read: 22,000 tokens
  ────────────────────────────────────
  Total: 52,600 / 200,000 tokens (26%)
  Available: 147,400 tokens ✅

Interpretación:

Uso totalEstadoAcción
<40%✅ SaludableEspacio suficiente
40-60%⚠️ ModeradoMonitorear
60-80%❌ AltoReducir MCPs o archivos
>80%🚨 CríticoClaude puede fallar

Estrategias de optimización:

  1. Reducir MCPs:
# Desactiva temporalmente MCPs no necesarios
# Edita ~/.claude/mcp.json y comenta los que no usas ahora
  1. Usar Tool Search:
{
  "enable_tool_search": true // Asegúrate que esté activado
}
  1. Limpiar historial de conversación:
# Si la conversación es muy larga, empieza una nueva sesión
/clear
  1. Leer menos archivos simultáneamente:
En lugar de:
  "Lee todos los archivos de /src y analiza..."
 
Mejor:
  "Lee src/auth/login.ts y analiza..."
  Luego: "Ahora lee src/auth/register.ts..."

Escalabilidad: de individual a empresa

Para desarrolladores individuales

Filosofía:

  • Mantén tu setup simple
  • Solo MCPs que usas regularmente
  • Configuración mayormente global

Setup recomendado:

// ~/.claude/mcp.json
{
  "mcpServers": {
    "github": {...},      // Si usas GitHub diariamente
    "playwright": {...}   // Si haces testing E2E
  }
}

Mantenimiento:

  • Auditoría mensual de MCPs
  • Limpieza de credenciales cada 3 meses
  • Actualizar MCPs cuando fallen

Para equipos pequeños (2-10 personas)

Filosofía:

  • Estandariza MCPs del proyecto
  • Credenciales personales
  • Documentación básica

Setup recomendado:

/proyecto/
├── .claude/
│   ├── mcp.json              # MCPs del proyecto (versionado)
│   └── mcp.example.json      # Template para nuevos miembros
├── .env.example              # Variables requeridas (sin valores)
└── README.md                 # Incluye sección "Claude Code Setup"
// /proyecto/.claude/mcp.json (versionado)
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "${DB_URL}"
      }
    }
  }
}
# .env.example (versionado)
# Copy to .env and fill with your credentials
DB_URL=postgresql://localhost/myapp
GITHUB_TOKEN=your_token_here
# README.md
 
## Claude Code Setup
 
1. Install Claude Code: `brew install anthropics/tap/claude`
2. Copy `.env.example` to `.env` and fill your credentials
3. Start Claude: `claude`
4. MCPs will be configured automatically from `.claude/mcp.json`

Comunicación del equipo:

  • Canal de Slack #claude-code para compartir tips
  • Documento compartido de "MCPs recomendados"
  • Revisar configuración en code reviews

Para empresas (10+ personas, múltiples equipos)

Filosofía:

  • Control centralizado
  • Seguridad estricta
  • Gobernanza clara

Arquitectura recomendada:

Nivel 1: Organización
  └─ managed-mcp.json (controlado por IT/Security)
     ├─ MCPs aprobados
     ├─ Credenciales vía Vault
     └─ No modificable por usuarios
 
Nivel 2: Equipos
  └─ Cada equipo tiene MCPs específicos
     ├─ Engineering: GitHub, PostgreSQL
     ├─ Data: Jupyter, PostgreSQL
     └─ DevOps: AWS, Datadog
 
Nivel 3: Individual
  └─ Configuración personal mínima
     └─ Solo MCPs no sensibles

Configuración de managed-mcp.json:

// managed-mcp.json (desplegado por IT)
{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://internal-mcp-gateway.company.com/github"
      }
    },
    "postgres-prod": {
      "command": "/usr/local/bin/mcp-postgres",
      "env": {
        "DB_URL": "${VAULT_POSTGRES_URL}" // Fetched from Vault
      }
    }
  }
}

Allowlist/Denylist para control:

{
  "allowedMcpServers": [
    "github",
    "postgres",
    "slack",
    "datadog"
  ],
  "deniedMcpServers": [
    "*" // Denegar cualquier otro no explícitamente permitido
  ]
}

MCP Gateway centralizado:

┌─────────────────┐         ┌──────────────────┐        ┌─────────────┐
│  Claude Code    │ ◄─MCP─► │  MCP Gateway     │ ◄────► │  GitHub     │
│  (Cliente)      │         │  (Proxy interno) │        │  API        │
│                 │         │                  │        └─────────────┘
│                 │         │  - Auth          │        ┌─────────────┐
│                 │         │  - Rate limiting │ ◄────► │  PostgreSQL │
│                 │         │  - Audit logs    │        │  (prod)     │
│                 │         │  - Monitoring    │        └─────────────┘
└─────────────────┘         └──────────────────┘

Ventajas del Gateway:

  • ✅ Autenticación unificada (SSO/OAuth)
  • ✅ Auditoría completa de uso
  • ✅ Rate limiting centralizado
  • ✅ No expone credenciales en clientes
  • ✅ Actualizaciones sin reconfigurar clientes

Políticas de seguridad empresarial:

  1. Credenciales:

    • Vault obligatorio (Hashicorp Vault, AWS Secrets Manager)
    • Rotación automática cada 90 días
    • Nunca en variables de entorno locales
  2. Auditoría:

    • Logs centralizados de todas las llamadas MCP
    • Alertas en operaciones sensibles
    • Revisión trimestral de uso
  3. Aprobación:

    • Nuevos MCPs requieren aprobación de Security
    • Whitelist de MCPs permitidos
    • Documentación obligatoria

Onboarding de nuevos empleados:

# Script de setup automático
#!/bin/bash
# setup-claude.sh
 
# 1. Instalar Claude Code
brew install anthropics/tap/claude
 
# 2. Descargar configuración corporativa
curl https://internal.company.com/claude/managed-mcp.json \
  -o ~/.claude/managed-mcp.json
 
# 3. Configurar Vault
vault login -method=oidc
 
# 4. Lanzar Claude
claude

Antipatrones: qué NO hacer

❌ Antipatrón 1: "Coleccionista de MCPs"

Síntoma: Instalar todos los MCPs que suenan interesantes "por si acaso".

{
  "mcpServers": {
    "github": {...},
    "gitlab": {...},
    "bitbucket": {...},
    "postgres": {...},
    "mysql": {...},
    "mongodb": {...},
    "redis": {...},
    "playwright": {...},
    "puppeteer": {...},
    "selenium": {...},
    "slack": {...},
    "discord": {...},
    "teams": {...},
    ...
    // 20+ MCPs, usas 3
  }
}

Consecuencias:

  • Consumo masivo de contexto
  • Confusión sobre qué herramienta usar
  • Mantenimiento complejo
  • Claude elige herramientas incorrectas

Solución: Minimalismo radical. Solo lo que usas semanalmente.


❌ Antipatrón 2: "MCP cuando CLI es suficiente"

Síntoma: Usar MCP para operaciones simples que el CLI hace perfectamente.

Usuario: "Lista los archivos modificados en git"
 
Con MCP de Git (innecesario):
  - Claude llama a Git MCP
  - MCP ejecuta git status
  - Devuelve resultado a Claude
  - Claude presenta resultado
  - Overhead: 2-3 segundos
 
Con CLI directo (mejor):
  - Claude ejecuta: git status
  - Presenta resultado
  - Overhead: 0.1 segundos

Solución: Sigue la regla "Estado es la frontera". Sin estado → CLI.


❌ Antipatrón 3: "Credenciales en git"

Síntoma: Versionar archivos con tokens, API keys o contraseñas.

// ❌ /proyecto/.claude/mcp.json (versionado)
{
  "mcpServers": {
    "stripe": {
      "env": {
        "STRIPE_API_KEY": "sk_live_4eC39HqLyjWDarjtT1zdp7dc"
      }
    }
  }
}

Consecuencias:

  • 🚨 Exposición de secretos
  • 🚨 Riesgo de seguridad
  • 🚨 Tokens comprometidos

Solución: Variables de entorno + .gitignore + Vault.


❌ Antipatrón 4: "Sin monitoreo de contexto"

Síntoma: Nunca revisar cuánto contexto consumen tus MCPs.

Consecuencia típica:

> Claude, analiza este error complejo...
 
Claude: "Lo siento, no tengo suficiente contexto disponible.
        He alcanzado el límite de mi ventana de contexto."
 
Usuario: 😤 "¿Por qué?"
 
/context
  Total: 180,000 / 200,000 tokens (90%)
  MCPs: 120,000 tokens
  Conversation: 60,000 tokens
 
  → 60% del contexto consumido por MCPs que no usaste hoy

Solución: /context al menos 1 vez/semana. Limpia MCPs no usados.


❌ Antipatrón 5: "MCP personalizado para casos simples"

Síntoma: Desarrollar un MCP server completo para algo que un script bash hace en 10 líneas.

Ejemplo real:

Necesidad: Ejecutar script de validación de configs
 
❌ Solución sobre-ingenierizada:
  - Crear MCP server en TypeScript: 5 días
  - Tests: 2 días
  - Dockerizar: 1 día
  - CI/CD: 1 día
  - Documentación: 1 día
  - Total: 10 días de trabajo
 
✅ Solución pragmática:
  ./scripts/validate.sh
  Total: Ya existe, 0 minutos

Regla: Solo crea MCPs personalizados si:

  • Será usado por múltiples personas/proyectos
  • Requiere estado complejo
  • Tiene valor estratégico para la empresa

❌ Antipatrón 6: "Configuración por proyecto cuando debería ser global"

Síntoma: Duplicar la misma configuración de GitHub MCP en 20 proyectos diferentes.

/proyecto-1/.claude/mcp.json → github MCP
/proyecto-2/.claude/mcp.json → github MCP
/proyecto-3/.claude/mcp.json → github MCP
...
/proyecto-20/.claude/mcp.json → github MCP
 
→ 20 lugares para mantener la misma config

Consecuencia:

  • Inconsistencia entre proyectos
  • Mantenimiento tedioso
  • Actualizaciones se pierden

Solución: GitHub es general → ~/.claude/mcp.json (global)

Solo específico del proyecto → /proyecto/.claude/mcp.json


Checklist de mejores prácticas

Al instalar un nuevo MCP

  • ¿Lo usaré al menos 2 veces por semana?
  • ¿El CLI no es suficiente para este caso?
  • ¿Ahorra más de 5 minutos por uso?
  • ¿Existe un MCP oficial o bien mantenido?
  • ¿He leído la documentación del MCP?
  • ¿Sé dónde configurarlo (global vs project)?
  • ¿Las credenciales están en variables de entorno?
  • ¿He agregado el MCP al README si es project-level?

Mantenimiento mensual

  • Ejecutar /context y revisar uso
  • Identificar MCPs no usados en 2+ semanas
  • Remover MCPs de bajo valor
  • Actualizar MCPs que tengan nuevas versiones
  • Rotar credenciales si es necesario
  • Verificar que Tool Search esté activado
  • Revisar logs de errores (--mcp-debug)

Configuración de proyecto nuevo

  • Crear .claude/mcp.json si necesitas MCPs específicos
  • Crear .env.example con variables requeridas
  • Agregar .env a .gitignore
  • Documentar setup en README
  • Usar variables de entorno, no valores directos
  • Probar que funcione en máquina limpia

Seguridad

  • Credenciales en variables de entorno
  • .env está en .gitignore
  • No hay tokens en archivos versionados
  • MCPs tienen permisos mínimos necesarios
  • Auditoría de accesos cada trimestre
  • Rotación de tokens cada 90 días

Conclusión: Los 3 pilares de la filosofía MCP

1. Minimalismo

"Menos, pero mejor."

No se trata de cuántos MCPs tienes, sino de cuánto valor agregan.

3 MCPs bien elegidos > 15 MCPs "por si acaso"

2. Progresividad

"Empieza pequeño, crece con propósito."

No instales 10 MCPs el primer día. Empieza con 1, valida el valor, luego agrega el siguiente.

Mes 1: 1 MCP → evaluar
Mes 2: +1 MCP si el primero funciona
Mes 3: +1 MCP si hay necesidad clara

3. Pragmatismo

"El mejor MCP es el que no necesitas."

CLI directo es perfectamente válido. MCP no es intrínsecamente superior.

Si CLI funciona bien → Usa CLI
Si CLI es doloroso → Considera MCP

Principios para recordar

  1. Estado es la frontera → Sin estado = CLI, Con estado = MCP
  2. Valor sobre tecnología → Solo si agrega valor medible
  3. Visibilidad constante/context regularmente
  4. Seguridad primero → Variables de entorno, nunca credenciales directas
  5. Simplicidad radical → Menos MCPs = menos problemas
  6. Documentación mínima → README actualizado para el equipo
  7. Tool Search activado → Optimización de contexto automática
  8. Auditoría regular → Limpia MCPs no usados mensualmente

Próximos pasos

Has completado la filosofía recomendada para usar MCPs. Ahora sabes:

  • ✅ Los principios fundamentales de uso efectivo
  • ✅ Cómo organizar MCPs según jerarquía
  • ✅ Patrones de seguridad para credenciales
  • ✅ Optimización de contexto con Tool Search
  • ✅ Escalabilidad de individual a empresa
  • ✅ Antipatrones a evitar

En el siguiente punto (6.6 Configuración de MCP) veremos en detalle:

  • Sintaxis completa de archivos de configuración
  • Parámetros avanzados
  • Debugging y troubleshooting
  • Ejemplos prácticos paso a paso

Recursos adicionales


Fuentes

Este documento se basa en:

  • Documentación oficial de Anthropic y Model Context Protocol
  • Mejores prácticas publicadas por la comunidad
  • Experiencias reales de equipos usando Claude Code en producción
  • Guías de seguridad y gobernanza empresarial
  • Análisis de patrones de uso efectivos vs antipatrones comunes

6.6 Configuración de MCP

Introducción

Has aprendido qué es MCP, cuáles son los servidores disponibles, cuándo usarlos y la filosofía recomendada. Ahora es momento de la parte técnica: cómo configurar MCPs paso a paso.

Este punto es una guía práctica y detallada que cubre:

  • Anatomía de archivos de configuración
  • Ubicaciones y jerarquía
  • Parámetros clave y su sintaxis
  • Tipos de transporte (stdio, HTTP)
  • Ejemplos paso a paso para MCPs populares
  • Variables de entorno y seguridad
  • Debugging y troubleshooting

Al final de este punto, sabrás configurar cualquier MCP server de forma correcta y segura.


Anatomía de la configuración MCP

Estructura básica

Todos los MCPs se configuran en un archivo JSON con esta estructura:

{
  "mcpServers": {
    "nombre-del-servidor": {
      "command": "comando-a-ejecutar",
      "args": ["argumento1", "argumento2"],
      "env": {
        "VARIABLE": "valor"
      }
    }
  }
}

Elementos clave:

ElementoDescripciónObligatorio
mcpServersObjeto raíz que contiene todos los servidores✅ Sí
nombre-del-servidorIdentificador único del servidor✅ Sí
commandEjecutable que inicia el servidor✅ Sí
argsArray de argumentos para el comando⚠️ Depende
envVariables de entorno para el servidor❌ Opcional

Ubicaciones de configuración

Jerarquía de archivos

Claude Code busca configuración de MCPs en este orden:

1. ~/.claude/mcp.json              → Global (todos los proyectos)
2. /proyecto/.mcp.json             → Project (específico del proyecto)
3. ~/.claude/settings.local.json   → Local (alternativa, no recomendada)

Regla de precedencia: Los archivos más específicos (project) sobrescriben a los más generales (global).

Cuándo usar cada ubicación

Global (~/.claude/mcp.json)

Usar para:

  • MCPs que usas en todos los proyectos
  • Herramientas generales (GitHub, Playwright)
  • Configuración personal

Ejemplo:

{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    },
    "playwright": {
      "command": "npx",
      "args": ["-y", "@executeautomation/playwright-mcp-server"]
    }
  }
}

Project (.mcp.json)

Usar para:

  • MCPs específicos del proyecto
  • Bases de datos del proyecto
  • Servicios particulares

Ejemplo:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    }
  }
}

⚠️ Importante: Este archivo puede versionarse en git, PERO las credenciales deben estar en variables de entorno, no directamente.


Parámetros de configuración

1. command — El ejecutable

El comando que inicia el servidor MCP.

Opciones comunes:

// Node.js con npx (más común)
{
  "command": "npx"
}
 
// Node.js directo
{
  "command": "node"
}
 
// Python
{
  "command": "python"
}
 
// Script ejecutable
{
  "command": "/usr/local/bin/mi-mcp-server"
}

Recomendación: Usa npx para MCPs de npm porque:

  • No requiere instalación previa
  • Siempre usa la última versión
  • -y evita prompts de instalación

2. args — Argumentos del comando

Array de argumentos pasados al comando.

Ejemplos:

// NPX con paquete
{
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-github"]
}
 
// Node con script local
{
  "command": "node",
  "args": ["/path/to/server.js", "--port", "3000"]
}
 
// Python con módulo
{
  "command": "python",
  "args": ["-m", "mcp_server_postgres"]
}

Sintaxis importante:

// ✅ Correcto: Cada argumento separado
{
  "args": ["-y", "@modelcontextprotocol/server-github"]
}
 
// ❌ Incorrecto: Argumentos juntos
{
  "args": ["-y @modelcontextprotocol/server-github"]
}

3. env — Variables de entorno

Objeto con variables de entorno para el servidor.

Sintaxis:

{
  "env": {
    "API_KEY": "valor_directo",           // ❌ NO recomendado
    "API_KEY": "${API_KEY}",              // ✅ Recomendado (lee de env)
    "DATABASE_URL": "${DB_URL}",          // ✅ Recomendado
    "DEBUG": "true",                      // ✅ OK para valores no sensibles
    "TIMEOUT": "30000"                    // ✅ OK para configuración
  }
}

Reglas de seguridad:

Tipo de valorDónde ponerloEjemplo
CredencialesVariable de entorno"${GITHUB_TOKEN}"
API keysVariable de entorno"${API_KEY}"
PasswordsVariable de entorno"${DB_PASSWORD}"
ConfiguraciónDirecto en JSON"DEBUG": "true"
URLs públicasDirecto en JSON"BASE_URL": "https://api.example.com"

4. transport — Tipo de transporte (avanzado)

Define cómo Claude se comunica con el servidor MCP.

Tipos disponibles:

Stdio (por defecto)

Comunicación vía entrada/salida estándar. Para servidores locales.

{
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-postgres"]
  // No necesitas especificar transport, stdio es el default
}

HTTP

Comunicación vía HTTP. Para servidores remotos.

{
  "transport": {
    "type": "http",
    "url": "https://api.githubcopilot.com/mcp/"
  }
}

Cuándo usar cada uno:

TransportUsoVentajasDesventajas
stdioServidores locales (npx, node)Simple, sin configuración de redSolo local
httpServidores remotosAcceso remoto, escalableRequiere servidor HTTP

Ejemplos paso a paso: MCPs populares

Ejemplo 1: GitHub MCP (HTTP Transport)

El GitHub MCP permite interactuar con repositorios, issues, PRs, etc.

Paso 1: Obtener token de GitHub

# Ir a: https://github.com/settings/tokens
# Crear token con permisos:
#   - repo (todos los sub-permisos)
#   - read:org
#   - user:email
 
# Guardar el token en variable de entorno
echo 'export GITHUB_TOKEN="ghp_tu_token_aqui"' >> ~/.bashrc
source ~/.bashrc

Paso 2: Configurar en ~/.claude/mcp.json

{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    }
  }
}

Paso 3: Verificar

# Reiniciar Claude
claude
 
# En Claude:
> Lista los PRs abiertos en mi repositorio

Nota: El GitHub MCP via Copilot usa OAuth, no necesitas configurar credenciales manualmente.


Ejemplo 2: PostgreSQL MCP

Permite ejecutar queries SQL en bases de datos PostgreSQL.

Paso 1: Preparar credenciales

# Opción A: Variable de entorno directa
export DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
 
# Opción B: Archivo .env (recomendado)
# Crear archivo ~/.claude/secrets.env
cat > ~/.claude/secrets.env << 'EOF'
export DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
EOF
 
# Cargar en tu shell
echo 'source ~/.claude/secrets.env' >> ~/.bashrc
source ~/.bashrc

Paso 2: Configurar en /proyecto/.mcp.json

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    }
  }
}

Paso 3: Crear .gitignore para seguridad

# Asegurar que .env no se versione
echo ".env" >> .gitignore
echo ".mcp.json" >> .gitignore  # Si contiene info sensible

Paso 4: Probar

cd /proyecto
claude
 
# En Claude:
> Conéctate a la base de datos y muéstrame las tablas disponibles
> Ejecuta: SELECT COUNT(*) FROM users

Ejemplo 3: Playwright MCP

Automatización de navegadores para testing E2E y scraping.

Paso 1: No requiere credenciales

Playwright no necesita API keys, funciona localmente.

Paso 2: Configurar en ~/.claude/mcp.json

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@executeautomation/playwright-mcp-server"]
    }
  }
}

Paso 3: Probar

claude
 
# En Claude:
> Navega a https://example.com y toma un screenshot
> Haz clic en el botón "Learn More" y extrae el texto del primer párrafo

Configuración avanzada con opciones:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "-y",
        "@executeautomation/playwright-mcp-server",
        "--headless=false",    // Ver el navegador
        "--browser=chromium"   // Usar Chromium (default)
      ]
    }
  }
}

Ejemplo 4: Slack MCP

Enviar mensajes, leer canales, buscar conversaciones.

Paso 1: Crear Slack App y obtener token

  1. Ir a https://api.slack.com/apps
  2. Crear nueva app → "From scratch"
  3. Permisos necesarios (OAuth Scopes):
    • channels:read
    • chat:write
    • users:read
    • search:read
  4. Instalar app en workspace
  5. Copiar "Bot User OAuth Token" (empieza con xoxb-)

Paso 2: Guardar credenciales

# En ~/.claude/secrets.env
export SLACK_BOT_TOKEN="xoxb-tu-token-aqui"

Paso 3: Configurar en /proyecto/.mcp.json

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "mcp-server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}"
      }
    }
  }
}

Paso 4: Probar

claude
 
# En Claude:
> Envía un mensaje al canal #general diciendo "Hello from Claude Code!"
> Busca mensajes en #engineering que mencionen "deployment"

Ejemplo 5: Filesystem MCP (acceso extendido)

Permite acceso a archivos fuera del directorio de trabajo.

Paso 1: Configurar rutas permitidas

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/tu-usuario/Documents",
        "/Users/tu-usuario/Projects"
      ]
    }
  }
}

Nota: Solo las rutas especificadas serán accesibles.

Paso 2: Usar

claude
 
# En Claude:
> Lista los archivos en ~/Documents
> Lee el contenido de ~/Projects/mi-proyecto/README.md

Configuración avanzada

Múltiples MCPs en un proyecto

Puedes combinar MCPs globales y de proyecto:

// ~/.claude/mcp.json (Global)
{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    },
    "playwright": {
      "command": "npx",
      "args": ["-y", "@executeautomation/playwright-mcp-server"]
    }
  }
}
 
// /proyecto/.mcp.json (Project)
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "stripe": {
      "command": "npx",
      "args": ["-y", "mcp-server-stripe"],
      "env": {
        "STRIPE_API_KEY": "${STRIPE_API_KEY}"
      }
    }
  }
}

Resultado: Claude tendrá acceso a los 4 MCPs (GitHub, Playwright, PostgreSQL, Stripe).


Configuración condicional por entorno

Problema: Quieres usar diferentes bases de datos en dev vs producción.

Solución: Variables de entorno con nombres específicos.

// .mcp.json
{
  "mcpServers": {
    "postgres-dev": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DEV_DATABASE_URL}"
      }
    },
    "postgres-prod": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${PROD_DATABASE_URL}"
      }
    }
  }
}
# ~/.claude/secrets.env
export DEV_DATABASE_URL="postgresql://localhost/myapp_dev"
export PROD_DATABASE_URL="postgresql://prod-server/myapp_prod"

Uso:

claude
 
# En Claude:
> Usando postgres-dev, cuenta los usuarios
> Usando postgres-prod, revisa el estado del servidor

MCPs con configuración compleja

Algunos MCPs requieren archivos de configuración adicionales.

Ejemplo: MCP personalizado con config file

{
  "mcpServers": {
    "mi-servicio": {
      "command": "node",
      "args": ["/path/to/server.js", "--config", "/path/to/config.json"],
      "env": {
        "NODE_ENV": "production",
        "API_KEY": "${MI_SERVICIO_API_KEY}",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Gestión de credenciales

Patrón recomendado completo

Estructura de archivos:
  ~/.claude/
    ├── mcp.json              → MCPs globales (versionable)
    └── secrets.env           → Credenciales (NO versionar)
 
  /proyecto/
    ├── .mcp.json             → MCPs del proyecto (versionable)
    ├── .env.example          → Template de variables (versionable)
    ├── .env                  → Credenciales locales (NO versionar)
    └── .gitignore            → Incluye .env

Archivo: ~/.claude/secrets.env

# GitHub
export GITHUB_TOKEN="ghp_xxxx"
 
# Bases de datos
export DEV_DATABASE_URL="postgresql://localhost/myapp_dev"
export PROD_DATABASE_URL="postgresql://prod.example.com/myapp"
 
# APIs externas
export STRIPE_API_KEY="sk_test_xxxx"
export SLACK_BOT_TOKEN="xoxb-xxxx"
export OPENAI_API_KEY="sk-xxxx"
 
# Servicios
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."

Archivo: /proyecto/.env.example

# PostgreSQL
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
 
# Stripe
STRIPE_API_KEY=sk_test_your_key_here
 
# Slack
SLACK_BOT_TOKEN=xoxb-your-token-here

Archivo: /proyecto/.gitignore

# Credenciales
.env
.env.local
.env.*.local
 
# Archivos de configuración sensibles (si contienen secretos)
# .mcp.json  # Solo si tiene valores sensibles

Cargar credenciales automáticamente:

# En ~/.bashrc o ~/.zshrc
source ~/.claude/secrets.env

Debugging y troubleshooting

Habilitar modo debug

# Lanzar Claude con debug de MCP
claude --mcp-debug
 
# Salida detallada:
# [MCP] Connecting to server: github
# [MCP] Server github started successfully
# [MCP] Loading tools from github: 91 tools
# [MCP] Connecting to server: postgres
# [MCP] Error: Connection failed to postgres

Logs de MCP

Ubicación de logs:

# macOS
~/Library/Application Support/Claude/logs/
 
# Linux
~/.claude/logs/
 
# Windows
%APPDATA%\Claude\logs\

Ver logs en tiempo real:

# macOS/Linux
tail -f ~/Library/Application\ Support/Claude/logs/mcp-server-github.log
 
# Windows
Get-Content $env:APPDATA\Claude\logs\mcp-server-github.log -Wait

Errores comunes y soluciones

Error 1: "MCP server failed to start"

Síntoma:

Error: MCP server 'postgres' failed to start

Causas comunes:

  1. Comando incorrecto
// ❌ Incorrecto
{
  "command": "npm",
  "args": ["exec", "@modelcontextprotocol/server-postgres"]
}
 
// ✅ Correcto
{
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-postgres"]
}
  1. Paquete no existe
# Verificar que el paquete existe en npm
npm view @modelcontextprotocol/server-postgres
  1. Variable de entorno no definida
# Verificar
echo $DATABASE_URL
 
# Si está vacía, definirla
export DATABASE_URL="postgresql://localhost/mydb"

Error 2: "Permission denied"

Síntoma:

Error: EACCES: permission denied, open '/usr/local/bin/mcp-server'

Solución:

# Dar permisos de ejecución
chmod +x /usr/local/bin/mcp-server
 
# O usar comando con permisos
{
  "command": "sudo",
  "args": ["/usr/local/bin/mcp-server"]
}

Error 3: "Connection timed out"

Síntoma:

Error: Connection to MCP server timed out after 30s

Causas:

  1. Servidor HTTP no responde
// Verificar que la URL es correcta
{
  "transport": {
    "type": "http",
    "url": "https://api.example.com/mcp/"  // ¿Está activa?
  }
}
  1. Firewall bloqueando
# Verificar conexión
curl https://api.example.com/mcp/

Error 4: "Tool not found"

Síntoma:

Claude: "I don't have access to that tool"

Diagnóstico:

# Ver qué MCPs están conectados
claude
 
# En Claude:
> /mcp
 
# Salida muestra MCPs activos y sus herramientas

Soluciones:

  1. MCP no configurado
# Verificar que el MCP está en tu configuración
cat ~/.claude/mcp.json
cat .mcp.json
  1. MCP falló al cargar
# Revisar logs
claude --mcp-debug
  1. Tool Search activado pero herramienta no encontrada
// Desactivar Tool Search temporalmente para debug
{
  "enable_tool_search": false
}

Error 5: "Invalid JSON in configuration"

Síntoma:

Error: Failed to parse .mcp.json: Unexpected token } in JSON

Solución:

# Validar JSON
cat .mcp.json | jq .
 
# Si hay error, jq mostrará la línea exacta
 
# Errores comunes:
# - Coma al final del último elemento
# - Comillas simples en lugar de dobles
# - Comentarios (JSON no permite comentarios)

Ejemplo de JSON inválido:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],  // ❌ Coma extra
    }  // ❌ Coma antes de cerrar
  }
}

Corrección:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"]
    }
  }
}

Herramientas de debugging

1. MCP Inspector

Herramienta oficial para testear servidores MCP.

# Instalar
npm install -g @modelcontextprotocol/inspector
 
# Testear un servidor
mcp-inspector npx -y @modelcontextprotocol/server-postgres

Funcionalidad:

  • Interfaz web para interactuar con el MCP
  • Ver herramientas disponibles
  • Ejecutar tools y ver resultados
  • Debug de configuración

2. Comando /context

Ver qué MCPs están cargados y cuánto contexto consumen.

claude
 
# En Claude:
> /context
 
# Salida:
# Context usage:
#   System prompt: 3,200 tokens
#   GitHub MCP: 8,500 tokens (Tool Search: ON)
#   Playwright MCP: 2,100 tokens
#   PostgreSQL MCP: 1,800 tokens
#   ...

3. Verificar conexión manualmente

# Test 1: Verificar que el comando funciona
npx -y @modelcontextprotocol/server-postgres --version
 
# Test 2: Verificar variables de entorno
echo $DATABASE_URL
echo $GITHUB_TOKEN
 
# Test 3: Verificar permisos
ls -la ~/.claude/mcp.json

Comandos CLI para gestión de MCPs

Ver MCPs configurados

claude mcp list
 
# Salida:
# Configured MCP Servers:
#   ✓ github (http)
#   ✓ postgres (stdio)
#   ✗ slack (stdio) - Failed to connect

Agregar MCP desde CLI

# Sintaxis general
claude mcp add <nombre> --scope <user|project>
 
# Ejemplos:
claude mcp add github --scope user
claude mcp add postgres --scope project
 
# Con configuración inline (avanzado)
claude mcp add postgres \
  --command npx \
  --args "-y @modelcontextprotocol/server-postgres" \
  --env DATABASE_URL=${DATABASE_URL}

Remover MCP

# Remover de configuración global
claude mcp remove github --scope user
 
# Remover de proyecto
claude mcp remove postgres --scope project

Habilitar/Deshabilitar MCP temporalmente

# Deshabilitar sin eliminar configuración
claude mcp disable postgres
 
# Habilitar nuevamente
claude mcp enable postgres

Checklist de configuración

Antes de configurar un MCP

  • ¿He leído la documentación del MCP?
  • ¿Sé qué credenciales necesito?
  • ¿Tengo las credenciales preparadas?
  • ¿Sé si es para uso global o de proyecto?
  • ¿He verificado que el paquete existe en npm?

Al configurar

  • JSON es válido (sin errores de sintaxis)
  • command y args están correctos
  • Variables de entorno usan sintaxis ${VAR}
  • Credenciales NO están en el archivo JSON directamente
  • Si es project-scoped, .env está en .gitignore
  • He creado .env.example para el equipo

Después de configurar

  • Probar con claude --mcp-debug
  • Verificar conexión exitosa en logs
  • Probar una operación simple con el MCP
  • Documentar en README si es project-scoped
  • Verificar que Tool Search está activo (/context)

Plantillas reutilizables

Plantilla: MCP con npm package (stdio)

{
  "mcpServers": {
    "NOMBRE_DEL_SERVIDOR": {
      "command": "npx",
      "args": ["-y", "PAQUETE_NPM"],
      "env": {
        "VARIABLE_REQUERIDA": "${VARIABLE_REQUERIDA}"
      }
    }
  }
}

Plantilla: MCP con HTTP transport

{
  "mcpServers": {
    "NOMBRE_DEL_SERVIDOR": {
      "transport": {
        "type": "http",
        "url": "https://api.example.com/mcp/"
      }
    }
  }
}

Plantilla: MCP con script local

{
  "mcpServers": {
    "NOMBRE_DEL_SERVIDOR": {
      "command": "node",
      "args": ["/absolute/path/to/server.js"],
      "env": {
        "NODE_ENV": "production",
        "CONFIG_PATH": "/path/to/config.json"
      }
    }
  }
}

Plantilla: MCP con Python

{
  "mcpServers": {
    "NOMBRE_DEL_SERVIDOR": {
      "command": "python",
      "args": ["-m", "nombre_del_modulo"],
      "env": {
        "PYTHONPATH": "/path/to/modules",
        "API_KEY": "${API_KEY}"
      }
    }
  }
}

Buenas prácticas de configuración

1. Documentación

Siempre documenta tus MCPs en el README del proyecto.

## Claude Code Setup
 
### MCPs configurados
 
#### PostgreSQL MCP
- **Propósito:** Consultas a la base de datos del proyecto
- **Credenciales necesarias:** `DATABASE_URL`
- **Configuración:**
  1. Copiar `.env.example` a `.env`
  2. Llenar `DATABASE_URL` con tu conexión local
  3. `source .env`
  4. `claude`
 
#### GitHub MCP
- **Propósito:** Gestión de issues y PRs
- **Credenciales:** Usa OAuth via Copilot (automático)
- **Configuración:** Ya está en `~/.claude/mcp.json`

2. Validación de configuración

Crea un script para validar la configuración:

#!/bin/bash
# scripts/validate-claude-config.sh
 
echo "Validando configuración de Claude Code..."
 
# 1. Verificar JSON válido
if ! jq empty .mcp.json 2>/dev/null; then
  echo "❌ .mcp.json tiene errores de sintaxis"
  exit 1
fi
 
# 2. Verificar variables de entorno
missing_vars=()
for var in DATABASE_URL GITHUB_TOKEN STRIPE_API_KEY; do
  if [ -z "${!var}" ]; then
    missing_vars+=($var)
  fi
done
 
if [ ${#missing_vars[@]} -gt 0 ]; then
  echo "❌ Variables de entorno faltantes: ${missing_vars[@]}"
  exit 1
fi
 
# 3. Verificar que .env está en .gitignore
if ! grep -q "^\.env$" .gitignore; then
  echo "⚠️  Advertencia: .env no está en .gitignore"
fi
 
echo "✅ Configuración válida"

3. Setup automatizado para equipos

#!/bin/bash
# scripts/setup-claude.sh
 
echo "Configurando Claude Code para el proyecto..."
 
# 1. Copiar template de env
if [ ! -f .env ]; then
  cp .env.example .env
  echo "✅ Archivo .env creado. Por favor llena las credenciales."
fi
 
# 2. Verificar Claude Code instalado
if ! command -v claude &> /dev/null; then
  echo "Claude Code no está instalado. Instalando..."
  npm install -g @anthropic-ai/claude-code
fi
 
# 3. Validar configuración
./scripts/validate-claude-config.sh
 
echo "Setup completo. Ejecuta 'claude' para empezar."

Conclusión

Ahora sabes:

  • ✅ La anatomía completa de archivos de configuración MCP
  • ✅ Dónde ubicar cada tipo de configuración
  • ✅ Todos los parámetros disponibles (command, args, env, transport)
  • ✅ Cómo configurar MCPs populares paso a paso
  • ✅ Gestión segura de credenciales
  • ✅ Debugging y troubleshooting completo
  • ✅ Errores comunes y sus soluciones
  • ✅ Herramientas CLI para gestionar MCPs

Próximo paso: En la Práctica del Módulo aplicarás todo esto configurando MCPs reales en tu proyecto.


Recursos adicionales


Fuentes

  • Documentación oficial de Model Context Protocol
  • Claude Code official documentation
  • Guías de configuración de la comunidad (Scott Spence, MCPcat)
  • Repositorios oficiales de MCP servers
  • Experiencias de debugging reportadas por la comunidad

Práctica del Módulo 6: MCP (Model Context Protocol)

Objetivo

Aplicar todo lo aprendido sobre MCP configurando servidores reales y utilizándolos en proyectos prácticos. Al finalizar esta práctica tendrás experiencia configurando, usando y eligiendo entre MCP y CLI según el caso de uso.


Descripción

En esta práctica configurarás varios servidores MCP populares y los usarás en escenarios reales de desarrollo. Aprenderás a:

  • Configurar MCPs globales y de proyecto
  • Integrar servicios externos con Claude Code
  • Aplicar la filosofía recomendada (MCP vs CLI)
  • Troubleshooting de problemas comunes
  • Optimizar configuraciones para tu flujo de trabajo

Prerequisitos

  • Claude Code instalado y configurado
  • Node.js 18+ y npm
  • Git configurado
  • Cuenta de GitHub (para MCP de GitHub)
  • Opcional: Docker (para PostgreSQL MCP)

Ejercicio 1: Configuración inicial (Básico)

Objetivo: Configurar la estructura básica de archivos MCP y validar que Claude Code los reconoce.

Paso 1.1: Crear archivo global de configuración

# Crear archivo mcp.json global
touch ~/.claude/mcp.json

Paso 1.2: Estructura básica

Edita ~/.claude/mcp.json con una configuración vacía válida:

{
  "mcpServers": {}
}

Paso 1.3: Verificar que Claude Code reconoce la configuración

Inicia Claude Code y pregunta:

¿Qué servidores MCP tengo configurados?

Verificación: Claude debería responder que no hay servidores MCP configurados actualmente, confirmando que lee el archivo correctamente.


Ejercicio 2: Configurar MCP de GitHub (Intermedio)

Objetivo: Configurar el servidor MCP oficial de GitHub para gestionar repositorios.

Paso 2.1: Añadir configuración de GitHub

Edita ~/.claude/mcp.json:

{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    }
  }
}

Paso 2.2: Reiniciar Claude Code

# Sal de la sesión actual (si está abierta)
/exit
 
# Inicia nueva sesión
claude

Paso 2.3: Verificar conexión

Pregunta a Claude:

Lista los servidores MCP disponibles

Luego prueba una operación básica:

Busca en mi repositorio curso-claude-code los archivos que contienen
la palabra "hooks"

Criterio de éxito:

  • Claude reconoce el servidor MCP de GitHub
  • Puede buscar en repositorios
  • Muestra resultados estructurados

Paso 2.4: Operaciones avanzadas

Prueba estas operaciones:

Muéstrame los últimos 5 issues cerrados en el repositorio
Busca todos los PRs que mencionan "MCP" en su descripción
Troubleshooting

Error: "GitHub MCP not connected"

  • Verifica que tengas sesión activa de GitHub Copilot
  • Ejecuta gh auth status para verificar autenticación
  • Si no tienes GitHub Copilot, usa la versión CLI del MCP (requiere instalar paquete npm)

Error: "Rate limit exceeded"

  • La API de GitHub tiene límites de requests
  • Espera unos minutos antes de reintentar
  • Considera usar un token personal con límites más altos

Ejercicio 3: Configurar Playwright MCP (Intermedio)

Objetivo: Configurar Playwright para automatización de navegadores.

Paso 3.1: Instalar Playwright MCP globalmente

npm install -g @executeautomation/playwright-mcp-server

Paso 3.2: Añadir a configuración global

Edita ~/.claude/mcp.json:

{
  "mcpServers": {
    "github": {
      "transport": {
        "type": "http",
        "url": "https://api.githubcopilot.com/mcp/"
      }
    },
    "playwright": {
      "command": "npx",
      "args": ["-y", "@executeautomation/playwright-mcp-server"]
    }
  }
}

Paso 3.3: Instalar dependencias de Playwright

npx playwright install chromium

Paso 3.4: Reiniciar y probar

claude

Prueba con un prompt simple:

Navega a https://example.com y dime qué título tiene la página

Paso 3.5: Operaciones más complejas

Ve a https://github.com/anthropics/claude-code, navega a la sección
de Issues y dime cuántos issues abiertos hay actualmente

Criterio de éxito:

  • Playwright se conecta correctamente
  • Puede navegar a URLs
  • Extrae información de páginas web
  • No hay errores de timeout
Troubleshooting

Error: "Browser not found"

# Instalar browsers de Playwright
npx playwright install

Error: "Timeout waiting for page"

  • Aumenta el timeout en la configuración
  • Verifica tu conexión a internet
  • Algunas páginas pueden tener protección anti-bot

El navegador se abre pero no hace nada

  • Verifica que no haya pop-ups bloqueando
  • Algunos sitios requieren cookies/autenticación

Ejercicio 4: Configuración específica de proyecto (Intermedio)

Objetivo: Configurar MCPs solo para un proyecto específico.

Paso 4.1: Crear proyecto de práctica

mkdir ~/claude-mcp-practice
cd ~/claude-mcp-practice
git init

Paso 4.2: Crear configuración de proyecto

Crea .mcp.json en el directorio del proyecto:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
    }
  }
}

Paso 4.3: Iniciar Claude Code en el proyecto

cd ~/claude-mcp-practice
claude

Paso 4.4: Verificar jerarquía

Pregunta a Claude:

¿Qué servidores MCP están activos en esta sesión?

Verificación: Deberías ver tanto los servidores globales (GitHub, Playwright) como el de proyecto (filesystem).

Paso 4.5: Usar el MCP de proyecto

Lista todos los archivos en /tmp que terminan en .log

Criterio de éxito:

  • Claude puede acceder al filesystem vía MCP
  • Los MCPs globales siguen funcionando
  • La configuración de proyecto tiene prioridad cuando hay conflictos

Ejercicio 5: MCP vs CLI - Aplicar filosofía (Avanzado)

Objetivo: Identificar cuándo usar MCP y cuándo usar CLI directo aplicando los principios del módulo.

Escenario 1: Operaciones Git

Tarea: Pide a Claude que ejecute git status y git log --oneline -5

Pregunta de reflexión: ¿Usa MCP o CLI directo? ¿Por qué?

Respuesta esperada

Claude debería usar CLI directo porque:

  • Son comandos stateless
  • No requieren mantener conexión
  • Ejecución única y simple
  • No hay beneficio en usar MCP
git status
git log --oneline -5

Escenario 2: Búsqueda en GitHub

Tarea: Pide a Claude:

Busca en todos mis repositorios públicos los archivos que contienen
"async function" y dame un resumen de los más relevantes

Pregunta de reflexión: ¿Debería usar MCP o CLI? ¿Por qué?

Respuesta esperada

Claude debería usar MCP de GitHub porque:

  • Requiere múltiples llamadas a la API
  • Necesita procesar y filtrar resultados
  • Búsqueda estructurada con contexto
  • CLI con gh requeriría múltiples comandos encadenados

El MCP maneja autenticación, paginación y formato automáticamente.


Escenario 3: Navegación web compleja

Tarea: Pide a Claude:

Ve a https://news.ycombinator.com, busca el post más votado de hoy,
entra al post, y dame un resumen de los primeros 5 comentarios

Pregunta de reflexión: ¿MCP o CLI? ¿Por qué?

Respuesta esperada

Claude debería usar MCP de Playwright porque:

  • Requiere mantener estado del navegador
  • Múltiples navegaciones secuenciales
  • Necesita ejecutar JavaScript en la página
  • CLI con curl/wget no puede manejar páginas dinámicas

Escenario 4: Instalación de paquetes

Tarea: Pide a Claude:

Instala las dependencias del proyecto con npm install

Pregunta de reflexión: ¿MCP o CLI?

Respuesta esperada

Claude debería usar CLI directo porque:

  • Comando simple de una sola ejecución
  • No requiere estado persistente
  • npm install es un comando estándar
  • No hay ventaja en abstraer con MCP
npm install

Ejercicio 6: Sistema completo integrado (Avanzado)

Objetivo: Crear un workflow completo que use múltiples MCPs y CLI de forma inteligente.

Escenario: Análisis de proyecto y reporte

Tarea completa:

1. Analiza el repositorio curso-claude-code usando el MCP de GitHub
2. Lista todos los archivos .md del proyecto usando CLI
3. Genera un reporte HTML con la estructura del proyecto
4. Abre el reporte en el navegador con Playwright y valida que se ve bien
5. Crea un commit con el reporte y haz push

Implementación esperada:

  1. Análisis del repositorio → MCP GitHub

    • Búsqueda de estructura
    • Metadata del repo
  2. Listar archivos .md → CLI directo

    find . -name "*.md" -type f
  3. Generar HTML → Write tool (nativo de Claude)

    • Crear archivo report.html
  4. Validar en navegador → MCP Playwright

    • Abrir archivo local
    • Verificar renderizado
  5. Git operations → CLI directo

    git add report.html
    git commit -m "Add project structure report"
    git push

Criterio de éxito:

  • Claude usa la herramienta adecuada para cada paso
  • No usa MCP donde CLI es suficiente
  • No usa CLI donde MCP es necesario
  • El workflow se completa sin errores

Ejercicio 7: Configuración con variables de entorno (Avanzado)

Objetivo: Configurar un MCP que requiere autenticación segura.

Paso 7.1: Crear archivo de variables de entorno

# Crear .env en el proyecto
cat > ~/claude-mcp-practice/.env << 'EOF'
SLACK_BOT_TOKEN=xoxb-tu-token-aqui
SLACK_APP_TOKEN=xapp-tu-token-aqui
EOF

Paso 7.2: Configurar MCP de Slack

Añade a .mcp.json del proyecto:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
    },
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}",
        "SLACK_APP_TOKEN": "${SLACK_APP_TOKEN}"
      }
    }
  }
}

Paso 7.3: Configurar Claude Code para cargar .env

Añade a .claude/settings.json del proyecto:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "set -a && source .env && set +a",
            "timeout": 5
          }
        ]
      }
    ]
  }
}

Nota de seguridad:

  • NUNCA commitees .env a git
  • Añade .env a .gitignore
  • Usa tokens con permisos mínimos necesarios

Criterio de éxito:

  • Variables de entorno se cargan correctamente
  • El MCP puede autenticarse con el servicio
  • Los secretos no aparecen en logs

Ejercicio 8: Debugging de MCPs (Avanzado)

Objetivo: Diagnosticar y resolver problemas comunes con MCPs.

Paso 8.1: Modo verbose

Inicia Claude Code en modo verbose:

claude --verbose

Paso 8.2: Observar logs de conexión

Al iniciar, observa los mensajes de conexión de MCP:

[MCP] Connecting to github...
[MCP] Connected to github successfully
[MCP] Connecting to playwright...
[MCP] Connected to playwright successfully

Paso 8.3: Provocar un error intencional

Edita ~/.claude/mcp.json con una configuración inválida:

{
  "mcpServers": {
    "broken": {
      "command": "comando-que-no-existe",
      "args": ["--invalid"]
    }
  }
}

Paso 8.4: Observar mensaje de error

Inicia Claude Code nuevamente y observa el error:

[MCP] Error connecting to broken: Command not found

Paso 8.5: Corregir el error

Elimina la configuración inválida y verifica que todo vuelve a funcionar.

Comandos útiles para debugging

# Ver procesos MCP activos
ps aux | grep mcp
 
# Ver logs del sistema (Linux)
journalctl -f | grep claude
 
# Verificar que el comando MCP existe
which npx
npx -y @executeautomation/playwright-mcp-server --help

Criterio de éxito:

  • Puedes identificar errores de conexión
  • Entiendes los logs de MCP
  • Sabes usar --verbose para diagnosticar

Verificación

Checklist final

Verifica que cumples con todos estos puntos:

  • Tienes ~/.claude/mcp.json con configuración global válida
  • Has configurado al menos 2 MCPs diferentes (ej: GitHub, Playwright)
  • Puedes crear configuraciones específicas de proyecto con .mcp.json
  • Entiendes la jerarquía: global → project
  • Sabes cuándo usar MCP vs CLI directo
  • Has usado MCP de GitHub para búsquedas complejas
  • Has usado Playwright para navegación web
  • Sabes configurar variables de entorno seguras
  • Puedes debuggear problemas de conexión con --verbose
  • Has aplicado la filosofía recomendada en casos prácticos

Comandos de verificación

# Ver configuración global
cat ~/.claude/mcp.json | jq
 
# Ver configuración de proyecto actual
cat .mcp.json | jq
 
# Listar MCPs activos (desde Claude)
claude
> Lista los servidores MCP activos

Rúbrica de evaluación

AspectoBásicoIntermedioAvanzado
ConfiguraciónConfigura 1 MCP básicoConfigura 2+ MCPs con opcionesUsa global + project + env vars
Uso prácticoEjecuta comandos simplesResuelve tareas complejasIntegra múltiples MCPs en workflows
Filosofía MCP vs CLISigue ejemplosIdentifica casos correctamenteExplica razonamiento y trade-offs
TroubleshootingIdentifica errores obviosUsa logs para diagnosticarResuelve problemas complejos

Desafíos extra

Si quieres ir más allá:

1. MCP personalizado

Crea tu propio servidor MCP simple siguiendo la especificación oficial.

2. Workflow de CI/CD

Configura un hook que use MCP de GitHub para crear un issue automáticamente cuando los tests fallen.

3. Dashboard personalizado

Usa Playwright MCP para monitorear múltiples servicios y generar un reporte HTML con el estado de cada uno.

4. Integración con bases de datos

Configura el MCP de PostgreSQL o MySQL y permite a Claude consultar tu base de datos.

5. Optimización de performance

Mide el tiempo de respuesta de MCPs vs CLI para diferentes operaciones y documenta cuál es más rápido en cada caso.


Recursos


Troubleshooting común

"MCP server not found"

Causa: El comando especificado no existe o no está en el PATH.

Solución:

# Verificar que el paquete está instalado
npm list -g | grep mcp
 
# Reinstalar si es necesario
npm install -g @executeautomation/playwright-mcp-server

"Connection timeout"

Causa: El servidor MCP tarda demasiado en responder.

Solución:

  • Verifica tu conexión a internet
  • Aumenta el timeout en la configuración
  • Revisa logs con --verbose

"Invalid JSON configuration"

Causa: Error de sintaxis en mcp.json.

Solución:

# Validar JSON
jq empty ~/.claude/mcp.json
 
# Ver errores específicos
jq . ~/.claude/mcp.json

"Permission denied"

Causa: El script MCP no tiene permisos de ejecución.

Solución:

chmod +x /path/to/mcp-server

Variables de entorno no se cargan

Causa: El hook SessionStart no está configurado o .env no existe.

Solución:

  • Verifica que .env existe
  • Revisa la configuración del hook en settings.json
  • Usa source .env manualmente para probar

¡Felicidades! Has completado la práctica del Módulo 6. Ahora dominas la configuración y uso de MCPs, y sabes aplicar la filosofía correcta para elegir entre MCP y CLI según el contexto.

Siguiente módulo: Workflow Patterns — Patrones y best practices para proyectos reales