MCP, conectores y plugins: qué instalas y dónde funciona

Encontraste una herramienta que promete conectar tu asistente con documentos, un calendario o un sistema de trabajo. Antes de instalarla, identifica qué recibiste, qué aplicación hará la conexión y dónde se ejecutará el servidor. Que dos asistentes usen el mismo modelo no significa que compartan sus integraciones.
Esta guía permite tomar esa decisión sin programar. Al final incluye una consulta reproducible con Python: dos programas propios intercambian mensajes y recuperan una ficha ficticia. Esa prueba enseña qué evidencia buscar; no demuestra una integración en Codex, Claude Code o Copilot.
Qué recibiste: una URL, un comando o un paquete
Primera decisión antes de añadir una integración
| Lo que recibiste | Qué representa | Qué comprobar primero |
|---|---|---|
| Una URL de servidor MCP | Un destino al que se conectará la aplicación | Transporte admitido, autenticación y acceso desde el lugar donde corre el cliente |
| Un comando para iniciar un servidor | Un programa que el cliente puede ejecutar como subproceso con stdio | Ejecutable, dependencias, ruta y datos que necesita leer |
| Un plugin o paquete instalable | Un conjunto de piezas para un producto compatible | Qué contiene y en qué aplicación o modo funciona cada pieza |
MCP es el protocolo, no el instalador universal. Conector es el nombre que un producto da a una integración: por ejemplo, los conectores personalizados de Claude pueden enlazar servidores MCP remotos. No conviene deducir que cualquier producto que diga «conector» usa ese mismo mecanismo. Documentación de conectores personalizados de Claude.
Plugin describe un paquete o extensión cuyo contenido depende del ecosistema. En la documentación actual de OpenAI, puede incluir skills, un servidor MCP o ambos. Por eso instalar un plugin no equivale siempre a instalar un servidor, y encontrarlo en un directorio no prueba que todas sus piezas funcionen en cualquier superficie. Guía oficial de plugins de OpenAI.
Anota antes de seguir: «Quiero que esta aplicación, en este proyecto o cuenta, use esta herramienta para obtener este dato». Si no puedes completar esa frase, aún falta concretar la conexión.
El cliente importa más que el nombre del modelo
En una integración MCP intervienen tres responsabilidades: el host es la aplicación que coordina el trabajo; su cliente MCP mantiene la comunicación; el servidor expone herramientas o datos. Una consulta puede recorrer esta ruta:
Aplicación → cliente MCP → servidor → dato
El modelo no aparece como sustituto de esas piezas. MCP define el intercambio, pero no decide cómo una aplicación utiliza un modelo o incorpora el contexto recibido. Por tanto, una respuesta que diga «he consultado el calendario» necesita la evidencia de la llamada si quieres verificarla. Arquitectura oficial de MCP.
Con stdio, el cliente inicia un subproceso y se comunica por su entrada y salida estándar. El servidor debe reservar stdout para los mensajes; los registros de diagnóstico pueden ir a stderr. Conocer esto ayuda a entender por qué un print de bienvenida puede romper una conexión. Especificación de stdio.
Con una conexión remota, revisa desde dónde sale la petición. Anthropic documenta que sus conectores personalizados remotos se conectan desde su infraestructura, incluso cuando se usan desde Claude Desktop. Una dirección localhost de tu ordenador no identifica ese mismo equipo desde la nube. No expongas un servicio local solo para resolver una confusión de rutas: elige el mecanismo que corresponda. Requisitos de red de los conectores de Claude.
Dónde buscar la configuración en cada aplicación
Las siguientes rutas son documentación contrastada el 4 de octubre de 2026, no instalaciones que hayamos probado en los tres productos. Aquí «Copilot» se refiere a GitHub Copilot en VS Code.
Ruta, formato y alcance documentados; no prueba de integración
| Aplicación | Configuración que debes identificar | Distinción que evita errores |
|---|---|---|
| Codex | ~/.codex/config.toml por usuario; .codex/config.toml en un proyecto de confianza. Entradas [mcp_servers.nombre] | CLI y extensión comparten esas capas de configuración; no significa que cualquier cuenta o entorno remoto comparta tus archivos |
| Claude Code | Alcance local privado en ~/.claude.json, asociado al proyecto; alcance de proyecto en .mcp.json; también existe alcance de usuario | «Local» describe aquí quién ve la configuración y en qué proyecto; el servidor puede ser remoto |
| GitHub Copilot en VS Code | .mcp.json portable, con mcpServers; .vscode/mcp.json, con servers, sigue disponible por compatibilidad | La guía prefiere destinos portables para nuevas conexiones. Agent Host no lee directamente .vscode/mcp.json; VS Code puede reenviarle su configuración con limitaciones |
Fuentes de la tabla: MCP en Codex, alcances de Claude Code y configuración MCP en VS Code.
Para reconocer los formatos, este es un ejemplo documental con el servidor público de documentación de OpenAI. No forma parte del ensayo local ni requiere que lo conectes para leer esta guía. Si lo usas, incorpora la entrada al archivo adecuado sin reemplazar otras configuraciones.
En el TOML de Codex:
[mcp_servers.openaiDeveloperDocs]
url = "https://developers.openai.com/mcp"
En .mcp.json, el objeto superior es mcpServers:
{
"mcpServers": {
"openaiDeveloperDocs": {
"type": "http",
"url": "https://developers.openai.com/mcp"
}
}
}
En el formato propio de .vscode/mcp.json, esa entrada va bajo servers. Cambiar solo el nombre del archivo sin revisar el objeto superior puede dejarla en el formato incorrecto. El destino de este ejemplo es un servidor de documentación de solo lectura; su descripción oficial distingue ese acceso de una llamada a la API de modelos. Docs MCP de OpenAI.
La configuración tampoco sustituye el acceso al servicio: comprueba la cuenta autorizada, los permisos necesarios y qué herramientas están habilitadas en la sesión. Evita copiar credenciales entre proyectos para resolver una conexión que aún no has diagnosticado.
Qué comprobar antes de decir «funciona»
Separa estos cinco estados. La evidencia de uno no demuestra los siguientes:
- Configurado: la aplicación reconoce la entrada en el proyecto y alcance previstos.
- Disponible: puede iniciar el proceso o alcanzar el servicio y completar su autenticación.
- Descubierto: aparece la herramienta concreta, con un nombre y unos argumentos definidos.
- Invocado: existe una llamada con argumentos visibles y su respuesta correspondiente.
- Contrastado: la respuesta contiene el dato correcto al compararlo con una referencia conocida.
Para una primera consulta, elige un dato que puedas verificar fuera del asistente. Si preguntas por un taller, no basta que responda «hay plazas»: comprueba qué taller, qué fecha y cuántas. Después prueba un identificador inexistente para observar cómo comunica la ausencia del dato.
Si más adelante conectas contenido externo a un agente que puede actuar, revisa también cómo los documentos pueden introducir instrucciones ajenas a la tarea. Un dato devuelto por una herramienta no se convierte por ello en una instrucción autorizada.
Una consulta local con un resultado conocido
Preparamos un cliente y un servidor Python propios para comprobar esos pasos sin cuentas ni llamadas a modelos. El servidor ofrece una única herramienta de lectura, consultar_taller. Su ficha es ficticia: Taller de documentación, 5 de noviembre de 2026, de 10:00 a 11:30, con 12 plazas.
Alcance de la prueba: intercambio local entre dos programas propios. No es una prueba de integración en Codex, Claude Code o Copilot, ni de selección automática de una herramienta por un modelo, ni de conformidad completa con MCP.
Requisitos y descarga
Para reproducirla necesitas Python 3.11 o posterior, una terminal y permiso para crear una carpeta de resultados y archivos temporales. La ejecución registrada usó Python 3.11.4 en Windows; no comprobamos otros sistemas. Puedes entender el resultado sin ejecutar nada.
Descarga el ejemplo completo en ZIP o revisa primero el README. Incluye ambos programas, la ficha ficticia, el registro de mensajes, el resultado editorial y un manifiesto de hashes. No incluye claves ni configuraciones de asistentes.
Extrae el ZIP en una carpeta nueva, revisa las fuentes y abre allí la terminal. Ejecuta:
python client.py --output mi-resultado
Usa el comando de Python de tu instalación si es distinto. El cliente crea mi-resultado y se niega a sobrescribir una carpeta existente. Inicia el servidor en un directorio temporal y lo cierra al terminar; no requiere una instalación permanente ni paquetes adicionales.
Resultado observado
La ejecución del 4 de octubre de 2026 en Santiago completó ocho peticiones y nueve comprobaciones. La consulta devolvió este objeto dentro de structuredContent; es un extracto del resultado real, no la respuesta JSON-RPC completa:
{
"id": "taller-documentacion",
"actividad": "Taller de documentación",
"fecha": "2026-11-05",
"inicio": "10:00",
"fin": "11:30",
"plazas": 12,
"ficticio": true
}
Comprobaciones realizadas entre el cliente y el servidor propios
| Caso | Resultado observado | Qué permite concluir |
|---|---|---|
| Descubrir servidor y listar herramientas | Versión 2026-07-28 y una herramienta con su esquema de entrada | El cliente recibió las capacidades y reconoció la herramienta esperada |
Consultar taller-documentacion | Coincidencia exacta con la ficha esperada, en texto y datos estructurados | Esta consulta recuperó correctamente el dato ficticio |
Llamar a reservar_taller, que no existe | Error JSON-RPC -32602 | El servidor no aceptó una herramienta no expuesta |
Consultar no-existe | Resultado con isError: true | La herramienta informó que ese taller no está en la ficha |
Enviar id como número | Resultado con isError: true | Se rechazó el argumento de tipo incorrecto |
| Omitir capacidades del cliente | Error JSON-RPC -32602 | Se rechazaron metadatos incompletos |
Solicitar versión 1900-01-01 | Error JSON-RPC -32022 | Se informó de la versión admitida |
| Cerrar stdin y comprobar la ficha | Proceso terminado con código 0; SHA-256 sin cambios | El servidor acabó y conservó los bytes de entrada |
Los errores son controles deliberados del ejemplo, no fallos de autenticación simulados. Puedes inspeccionar el registro completo de mensajes y el informe de ejecución. Una consulta correcta con datos conocidos demuestra más que un indicador de «conectado», pero sigue sin demostrar cómo actuará un asistente comercial.
Cómo fijamos la prueba
Antes de ejecutar, congelamos el JSON y su SHA-256. El cliente contrasta la salida con valores esperados explícitos, correlaciona los identificadores de cada petición y respuesta, verifica el esquema fijo y vuelve a comprobar el hash. El manifiesto permite identificar los archivos exactos; no es un certificado de seguridad.
Usamos MCP 2026-07-28, con server/discover, tools/list y tools/call. Las peticiones válidas llevan versión, identidad y capacidades del cliente en params._meta; las respuestas incluyen resultType y los campos de caché exigidos para descubrimiento y listado. Este ejercicio no utiliza el handshake initialize de revisiones anteriores. Metadatos, esquemas y compatibilidad entre versiones.
El servidor valida únicamente el esquema de entrada que publica este ejemplo. No implementa todas las capacidades o variantes del protocolo. El README documenta el entorno, los límites y la preparación del ensayo.
Si aparece en una sesión y en otra no
Empieza por el primer estado que no puedas acreditar:
- No aparece la configuración: compara aplicación, proyecto, perfil y alcance. En Claude Code, una entrada privada de un proyecto no tiene por qué aparecer en otro.
- Aparece, pero no inicia: revisa ejecutable, argumentos y ruta desde el entorno que lanza el proceso. Separa sus mensajes de diagnóstico de los mensajes de protocolo.
- No alcanza la URL: identifica dónde corre el cliente. Poder abrirla desde tu navegador no prueba acceso desde un servicio remoto.
- Conecta, pero falta la herramienta: revisa el listado disponible, las herramientas habilitadas y los permisos de esa cuenta.
- Devuelve un error: lee si afecta a la petición, al acceso o al dato solicitado. Un taller inexistente no se soluciona ampliando permisos.
- Responde sin una llamada visible: no des por comprobado que utilizó la integración. Pide una consulta verificable y revisa la evidencia que ofrezca el cliente.
Cambiar de modelo antes de comprobar estas capas puede dejar intacta la causa del problema. Conserva una ficha de prueba pequeña para repetir la consulta cuando cambies de entorno.
Qué puede costar esta conexión
El ensayo descargable usa la biblioteca estándar de Python, archivos ficticios y stdio. No llama un modelo, una API de pago ni un servicio remoto. Eso describe este ejercicio, no el coste de cualquier integración MCP.
En una integración real, identifica por separado el acceso al asistente y las condiciones del servicio conectado. Si los resultados entran en el contexto de un modelo, su tamaño también importa: la guía de tokens y ventana de contexto explica qué debes medir. No presupuestes una consulta solo por el número de herramientas instaladas.
Tu comprobación final debe poder escribirse de forma concreta: «En esta aplicación y este alcance, se llamó a esta herramienta con estos argumentos y devolvió este dato contrastado». Esa es la evidencia que conviene conservar al mover o actualizar una conexión.