teammate-mcp
teammate-mcp
Deja que Claude Code y OpenAI Codex se hagan preguntas entre sí a través de tus paneles de iTerm. Sin demonios. Sin archivos
.configque tengas que editar manualmente por proyecto. Solo abre dos paneles y podrán hablar.
┌──────────── iTerm window ─────────────┐
│ claude (left) codex (right) │
│ ─────────────────── ─────────────── │
│ > implement quoter > [teammate-mcp │
│ I'll ask Codex... ASK ... what │
│ ⏺ Codex answered: is 2+2?] │
│ 4 • 4 │
└───────────────────────────────────────┘teammate-mcp es un pequeño servidor MCP que expone dos herramientas a cualquier
CLI que lo cargue:
mcp__teammate__ask_codex(question, timeout)— llamar desde Claudemcp__teammate__ask_claude(question, timeout)— llamar desde Codex
El servidor utiliza la API de Python de iTerm2 para enviar la pregunta al otro panel y leer la respuesta. El panel de destino es detectado automáticamente por el proceso en ejecución: no etiquetas pestañas, no preconfiguras nada por proyecto.
¿Por qué?
Los arneses multi-agente existentes caen en dos campos:
Pesados: un demonio, archivos de configuración por proyecto, estado de sesión opaco. Genial hasta que algo se rompe a las 2 a.m. y no puedes ver por qué.
Proceso único: un modelo que orquesta subagentes internamente, por lo que el usuario solo ve la respuesta final.
teammate-mcp apunta a una tercera opción: los dos agentes se ejecutan visiblemente
en tu terminal uno al lado del otro, puedes leer ambas
transcripciones en tiempo real, y la única "infraestructura" son unos pocos
cientos de líneas de Python que envían texto y leen pantallas.
Related MCP server: claude-mux-iterm
Viaje de ida y vuelta bidireccional verificado
Capturado en vivo durante el desarrollo en macOS 14, iTerm 3.6.8, Claude Code 2.1.119 + Opus 4.7, Codex 0.125.0:
{"event":"ask.enqueue","id":"…c5d085","from_":"claude","to":"codex","len":49}
{"event":"ask.send", "id":"…c5d085","to":"codex","session_id":"7E39032F-…"}
{"event":"ask.complete","id":"…c5d085","answer_len":3}El intervalo ask.send → ask.complete fue de 3.0 segundos para un
prompt de "¿Cuánto es dos más dos? Responde solo con el dígito" — la mayor
parte es tiempo de pensamiento de Codex, no del puente. Cinco ejecuciones consecutivas
cerraron el ciclo en 1.5 – 4.5 segundos.
Se incluyen seis informes de tiempo independientes capturados en tests/results/ en
el repositorio para que puedas auditar los números tú mismo.
Inicio rápido
1. Instalar
git clone https://github.com/jonghklee/teammate-mcp.git
cd teammate-mcp
uv venv
uv pip install -e .2. Registrar el servidor con ambas CLI
# Claude Code
claude mcp add teammate -s user -- $PWD/.venv/bin/teammate-mcp serve
# Codex
codex mcp add teammate -- $PWD/.venv/bin/teammate-mcp serve3. Abrir los paneles
Tienes dos opciones:
Opción A — deja que bin/team abra una ventana nueva de iTerm para ti:
./bin/teamOpción B — usa cualquier ventana de iTerm que ya tengas abierta. Solo ejecuta
claude en un panel y codex en otro. teammate-mcp los encuentra
por nombre de proceso; no se necesitan etiquetas.
4. (Una sola vez) Entrega a los agentes las reglas de operación
Coloca templates/AGENTS.md en la raíz de tu proyecto. Tanto Claude Code
como Codex lo detectarán automáticamente (es la convención que
ambos siguen). El archivo les indica cómo y cuándo llamarse entre sí.
5. Pruébalo
En el panel de Claude:
Ask Codex what timezone library it prefers in Python and tell me what
it said.Verás a Claude llamar a mcp__teammate__ask_codex, la pregunta
aparecer en el panel de la derecha, Codex responder, y Claude transmitir la
respuesta.
Cómo funciona
┌──────────────────────────────────────────────────────┐
│ Claude pane Codex pane │
│ ───────────── ───────────── │
│ user prompt [teammate-mcp ASK …] │
│ │ tool call ▲ │
│ ▼ │ async_send_text │
│ ┌──────────────┐ │ │
│ │ teammate-mcp │ ─────────────┘ │
│ │ (FastMCP) │ ◄────── async_get_screen_contents │
│ └──────────────┘ │
│ │ │
│ └─► returns extracted answer to Claude │
└──────────────────────────────────────────────────────┘Para cada llamada ask_codex (o ask_claude):
Generar un marcador único, encolar el mensaje en la cola del disco (
pending/→inflight/renombrado atómico).Localizar el panel de destino:
preferir la anulación de entorno
TEAMMATE_<UPPER>_SESSION_IDde lo contrario, enumerar todos los procesos activos (estilo
ps), encontrar cualquier procesoclaudeocodex, leer su variable de entornoTERM_SESSION_ID, y compararla con la lista de sesiones de iTerm. Esto funciona a través detmux, shells de inicio de sesión y wrappers de pyenv — donde sea que la variable de entorno sea heredada.recurrir a la coincidencia de
jobName/commandLinecon preferencia de cwd.
async_send_textel prompt + una solicitud para terminar la respuesta con el marcador.Sondear
async_get_screen_contentspara el marcador. Debido a que el prompt que escribimos contiene el texto del marcador (se hace eco en el panel), el servidor requiere que el marcador aparezca dos veces antes de tratar la respuesta como completa.Cortar la respuesta entre las dos apariciones del marcador, registrar
ask.complete, devolver la respuesta al llamador.
Qué significa realmente "sin configuración"
Hay exactamente una cosa que configurar (una vez): el registro MCP en el paso 2 anterior. Después de eso, cualquier ventana de iTerm con paneles claude+codex simplemente funciona, incluidas las ventanas que ya estaban abiertas antes de que instalaras teammate-mcp.
Nunca escribes un .teammate.toml, nunca haces teammate start, nunca tienes
que recordar qué id de sesión es cuál.
Pruebas
uv pip install -e ".[dev]"
pytest # 18 unit + integration tests
python scripts/auto_demo.py # full end-to-end demo (spawns iTerm)Las pruebas unitarias cubren la cola, el manejo de ANSI/marcador, la importación del módulo del servidor y la lógica de descubrimiento de sesiones de iTerm con mocks. La demostración de extremo a extremo abre una ventana real de iTerm y ejercita un viaje de ida y vuelta Claude → Codex → Claude; requiere que ambas CLI hayan iniciado sesión e incurrirá en sus cargos normales de API.
Los informes de tiempo por ejecución se escriben en tests/results/*.jsonl.
Los que ya están confirmados en el repositorio son reales, no sintéticos.
Solución de problemas
"iTerm Python API is not enabled" — Ajustes → General → Magic →
"Enable Python API" ✓. La primera vez que teammate-mcp se conecta, iTerm
también solicita permiso; haz clic en Allow.
"asyncio.run() cannot be called from a running event loop" — estás
en una versión de teammate-mcp anterior a la 0.1.0. Haz un pull de main; las herramientas ahora
se declaran async.
"Tool returned an answer that's just my own prompt echo" — el panel de destino del prompt está ejecutando la CLI incorrecta (por ejemplo, la búsqueda eligió un panel hermano que tenía el mismo proceso ejecutándose). Fija el panel explícitamente:
export TEAMMATE_CLAUDE_SESSION_ID=<unique id from iTerm>
export TEAMMATE_CODEX_SESSION_ID=<unique id from iTerm>(Puedes leer el unique id de cada panel desde
Window menu → Window Settings → Identifier, o a través de AppleScript.)
"Marker not detected within timeout" — el agente en el otro extremo
olvidó emitir <<DONE_…>>. Agrega un recordatorio explícito en tu
AGENTS.md. La plantilla incluida ya lo incluye.
Licencia
MIT — ver LICENSE.
Agradecimientos
Este proyecto se cristalizó a partir de conversaciones sobre investigaciones públicas sobre cómo se están ejecutando Claude Code y Codex en 2026:
Los documentos de arneses Plan-Generate-Verify e Initializer + Coding Agent de Anthropic (Rajasekaran 2026-03; Justin Young 2025-11).
claude-code-hooks-masteryde IndyDevDan para los patrones de observabilidad.planning-with-filesde OthmanAdi para la idea de "archivos estructurados que unen sesiones, no historial de chat".La regla del "bucle de verificación" de Boris Cherny de su hilo How I use Claude Code.
El bucle Ralph Wiggum de Geoffrey Huntley para la intuición de "contexto fresco por turno".
La implementación debe sus patrones de API de Python de iTerm a los documentos de iTerm2 en https://iterm2.com/python-api/.
Resumen en coreano
Es un pequeño servidor MCP que permite que claude / codex se hagan preguntas entre sí sin configuraciones previas como CCB.
Solo tienes que abrir
claudeycodexen dos paneles de iTerm. No hay etiquetas, ni configuración, ni demonios.Detecta automáticamente el panel opuesto con la API de Python de iTerm (proceso en ejecución + coincidencia de variable de entorno
TERM_SESSION_ID) — funciona incluso si se abre dentro detmux.Los mensajes se envían mediante push, las respuestas se reciben mediante polling, y todos los viajes de ida y vuelta se registran en
~/.teammate-mcp/logs/<fecha>.jsonl.Tiempo de ida y vuelta medido: 3.0 segundos para send → complete basado en la pregunta 2 + 2 = 4 (la mayor parte es el tiempo de pensamiento de Codex).
La instalación sigue los pasos 1~3 del inicio rápido en inglés, y para usarlo, simplemente pídele a Claude como siempre: "Pregúntale a Codex".
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceOrchestrates multiple Claude Code agents across iTerm2 sessions with process-level isolation, enabling collaborative AI development workflows on multiple codebases with task-based inter-agent communication and persistent state management.71MIT
- AlicenseAqualityCmaintenanceEnables communication between Claude Code sessions in iTerm2 panes, primarily for notifying other sessions when a PR is merged to main so they can pull latest changes.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Desktop to spawn new Claude Code instances in iTerm2 windows for interactive coding sessions.15MIT
- FlicenseNot gradedqualityCmaintenanceGives Claude Code terminal control and multi-agent coordination through tmux sessions.4
Related MCP Connectors
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Stop copy-pasting between Claude Chat and Claude Code.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jonghklee/teammate-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server