la-caja-mcp
Sistema MCP de acceso y debate sobre La Caja (memoria contextual). Repo B: consumidor de La Caja (repo A). Este repo no toca el nucleo de memoria; habla con el por API y expone la Caja a agentes.
Que hay aca
src/la_caja_mcp/protocolo.py— protocolo de debate agente-agente-humano. Claims, solicitud de interferencia, rondas con deadline en turnos, escalada y adjudicacion humana. Determinista y replayable (event-sourcing, misma disciplina que La Caja). La maquina de estados es un contrato: endisputedel autor solo puede responder o escalar;unresolved(deadlock) es el UNICO terminal que el humano puede adjudicar.src/la_caja_mcp/mcp_server.py— servidor MCP: tools del debate + tools de memoria de La Caja (repo A, consumido por API), un solo juego de tools y dos transportes (stdio local / streamable HTTP remoto).tests/— falsacion de la maquina de estados + integracion con cliente MCP real por stdio (debate y memoria) + push SSE multiagente (31 tests).experiments/uso_real.py— caso de uso real: dos agentes LLM como clientes MCP (memoria compartida, debate, replay, push).experiments/interrupcion_etapas.py— la base del protocolo: un agente al medio del razonamiento acepta ser interrumpido y cede dentro de la ronda.worker/— host ASGI portable (uvicorn + Dockerfile) para el MCP remoto.
Validado con LLM reales (OpenRouter, gpt-4o-mini, por streamable HTTP)
| Validación | Resultado |
|---|---|
| Caso de uso real (2 agentes MCP, memoria compartida) | OK — consensus, replay, push |
| Solicitud de interferencia completa (deadline → escalar → humano) | OK |
| Interrupción al medio del razonamiento | OK — proponer → manifestar → interferir → responder → aceptar |
La base del protocolo funciona: el autor expone su razonamiento por
etapas con manifestar (el medio de interrupción), consulta el estado
entre etapas, el interferente solicita interferir al medio, y el
interrumpido cede respondiendo dentro de la ronda (vence_en_turnos
intacto). Detalle del diseño y sus límites en el writeup de La Caja
(experiments/writeup.md, repo A).
Instalación
Paquete de Python estándar (la-caja-mcp), igual que su dependencia
la-caja (repo A):
# Directo del repositorio (funciona hoy)
pip install git+https://github.com/deviceargent/la-caja-mcp.git
# Publicado (PyPI): una vez publicado
pip install la-caja-mcp
# Desarrollo local
pip install .
Instala el ejecutable la-caja-mcp y las dependencias (fastmcp,
la-caja). El worker remoto necesita el extra de hosting:
pip install "la-caja-mcp[host]" # o pip install .[host] en el repo
Servidor MCP
Un juego de tools, dos transportes:
# local (stdio): lo lanza el agente como subproceso
la-caja-mcp --transport stdio
# remoto (streamable HTTP): unico standard para MCP sobre red
la-caja-mcp --transport streamable-http --host 127.0.0.1 --port 8000
Debate: crear_sesion, mover (payload JSON), estado,
ultimos_eventos, reproducir_sesion.
Memoria (requiere pip install la-caja; repo A): procesar_consulta,
declarar_relacion, consultar, contexto_primado, historial
(traza dormida, capa inerte), stats.
La memoria es persistente con --caja-db <ruta> (SQLite, event-sourcing
de La Caja) o LA_CAJA_DB; sin eso, en memoria pura.
Discusion en vivo (push)
En streamable HTTP el server expone ademas un endpoint SSE:
GET /caja/push?sesion_id=<id>
Emite un evento estado (snapshot: ultimo_seq + estado) al conectar
y luego un sesion_actualizada por cada mover() exitoso. Un agente se
suscribe con una conexion HTTP aparte (cualquier stack) y usa
ultimos_eventos para traer el detalle. Requiere server compartido: en
stdio cada agente tiene su propio proceso, ahi la vivacidad es por
sondeo con ultimos_eventos.
Transportes MCP (decision de arquitectura)
- Local =
stdio(el agente lanza el server como subproceso). - Remoto = streamable HTTP (unico standard para MCP remoto, + OAuth).
worker/es ejemplo de host desplegable (VPS/Docker); no hay MCP publico hosteado.
Probar
$env:PYTHONPATH="src"; python -m pytest tests -q
python experiments/uso_real.py # requiere OPENAI_API_KEY
python experiments/interrupcion_etapas.py # requiere OPENAI_API_KEY
Licencia
MIT — ver LICENSE.
Release files for la-caja-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| la_caja_mcp-0.1.0.tar.gz | 17.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| la_caja_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.0 kB
Release files / la_caja_mcp-0.1.0.tar.gz
| Download URL | la_caja_mcp-0.1.0.tar.gz |
|---|---|
| Size | 17.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4b5e77e01f79dad6a3ab0f6d812f7000416c4f61897bdd299a5c3c7a5b432b00
|
|
BLAKE2b-256 checksum How to use checksums |
d63ada3cdc393f51e7f4a83e9c6dbe08650fb02e3cd6fee3f529acff74d1742b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency logRelease files / la_caja_mcp-0.1.0-py3-none-any.whl
| Download URL | la_caja_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cae1952630c02835bbd899f3005ce2924a6a3ed7382652cf715e159a7136cb0a
|
|
BLAKE2b-256 checksum How to use checksums |
08f87d0b48ae1bd4eb9ef8ff34a4cd8f4ac37ab6cb10a2023f36a41b03184074
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency log