Add .gitignore, remove __pycache__ from tracking, and update MCP/orchestrator modules
- Add .gitignore to exclude .env, __pycache__, node_modules, and IDE files - Remove all __pycache__ bytecode files from version control - Add MCP config files (mcp.json, mcp.json.example) - Add MCP manager, registry, and config modules - Update routes, orchestrator engine, and agent base with latest changes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
105
README.md
105
README.md
@@ -227,20 +227,93 @@ mensaje → planner → [step₁ → step₂ → ... → stepₙ] → reviewer
|
||||
|
||||
## MCP (Model Context Protocol)
|
||||
|
||||
Cliente stdio que se conecta a un servidor MCP al arrancar:
|
||||
Arquitectura **per-session**: el microservicio corre como un Docker único, y cada sesión arranca sus propios subprocesos MCP con las env vars del proyecto del usuario.
|
||||
|
||||
### Modelo de operación
|
||||
|
||||
```
|
||||
Docker (microservicio — uno solo corriendo)
|
||||
└── mcp.json ← template: QUÉ servers arrancar (global)
|
||||
└── mcp-server/ ← código MCP (baked-in)
|
||||
|
||||
POST /sessions { mcp_env: { ACAI_WEB_URL: "https://tienda.com", ... } }
|
||||
→ Arranca subprocesos MCP con esas env vars
|
||||
→ Session aislada con su propio MCPManager
|
||||
→ 33 tools descubiertas automáticamente
|
||||
|
||||
DELETE /sessions/{id}
|
||||
→ Mata los subprocesos MCP de esa sesión
|
||||
```
|
||||
|
||||
### Configuración
|
||||
|
||||
**1. Template global** (`mcp.json` en la raíz — define QUÉ servers existen):
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"acai-code": {
|
||||
"command": "node",
|
||||
"args": ["mcp-server/stdio.js"],
|
||||
"env": {},
|
||||
"timeout": 30,
|
||||
"startup_timeout": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
# En .env
|
||||
AGENTIC_MCP_SERVER_COMMAND=node
|
||||
AGENTIC_MCP_SERVER_ARGS=["mcp-server/stdio.js"]
|
||||
|
||||
# Variables del MCP server (se heredan al subproceso)
|
||||
ACAI_WEB_URL=http://localhost:8080
|
||||
ACAI_WEBSITE=mi-sitio
|
||||
ACAI_PROJECT_DIR=/ruta/al/proyecto
|
||||
AGENTIC_MCP_CONFIG_PATH=mcp.json
|
||||
```
|
||||
|
||||
El cliente descubre tools automáticamente vía `tools/list`, y los agentes las usan durante la ejecución. Los resultados de tools **nunca** entran al contexto como raw output — se resumen como artifacts.
|
||||
**2. Per-session env vars** (cada usuario/proyecto pasa las suyas al crear sesión):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8001/api/v1/sessions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"project_profile": {"name": "tienda-online"},
|
||||
"mcp_env": {
|
||||
"ACAI_WEB_URL": "https://superadmin_tienda.forge.acaisuite.com/",
|
||||
"ACAI_WEBSITE": "tienda.com",
|
||||
"ACAI_PROJECT_DIR": "/projects/tienda"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Las env vars de `mcp_env` se fusionan con las del template y se pasan al subproceso MCP. El MCP server lee el token desde el `.acai` del proyecto automáticamente.
|
||||
|
||||
**3. Legacy** (un solo server global, sin `mcp.json`):
|
||||
|
||||
```bash
|
||||
AGENTIC_MCP_SERVER_COMMAND=node
|
||||
AGENTIC_MCP_SERVER_ARGS=["mcp-server/stdio.js"]
|
||||
```
|
||||
|
||||
### Tool namespacing
|
||||
|
||||
En modo multi-server, los tools se namespean: `acai-code.compile_module`, `filesystem.read_file`. En modo single-server los tools mantienen su nombre original.
|
||||
|
||||
### API de gestión MCP
|
||||
|
||||
```bash
|
||||
# Ver estado de todos los MCP servers activos (por sesión)
|
||||
curl http://localhost:8001/api/v1/mcp/status
|
||||
|
||||
# Hot-reload del template (re-lee mcp.json, no afecta sesiones activas)
|
||||
curl -X POST http://localhost:8001/api/v1/mcp/reload
|
||||
```
|
||||
|
||||
### Ciclo de vida
|
||||
|
||||
1. `POST /sessions` con `mcp_env` → arranca subprocesos MCP para esa sesión
|
||||
2. `POST /sessions/{id}/messages` → el agente usa los tools del MCP de esa sesión
|
||||
3. Si el server se reinicia y la sesión sigue en Redis → el MCP se reconecta automáticamente al siguiente mensaje
|
||||
4. `DELETE /sessions/{id}` → mata subprocesos MCP de esa sesión
|
||||
|
||||
Los resultados de tools **nunca** entran al contexto como raw output — se resumen como artifacts.
|
||||
|
||||
## Configuración
|
||||
|
||||
@@ -261,8 +334,9 @@ Variables de entorno con prefijo `AGENTIC_`:
|
||||
| `AGENTIC_MAX_EXECUTION_STEPS` | `25` | Max steps por task |
|
||||
| `AGENTIC_MAX_EXECUTION_TIMEOUT_SECONDS` | `300` | Timeout global (5 min) |
|
||||
| `AGENTIC_SUBAGENT_MAX_STEPS` | `10` | Max iterations por subagent |
|
||||
| `AGENTIC_MCP_SERVER_COMMAND` | — | Comando del servidor MCP |
|
||||
| `AGENTIC_MCP_SERVER_ARGS` | `[]` | Argumentos del servidor MCP |
|
||||
| `AGENTIC_MCP_CONFIG_PATH` | — | Ruta a `mcp.json` (multi-MCP per-session) |
|
||||
| `AGENTIC_MCP_SERVER_COMMAND` | — | Legacy: comando del servidor MCP (single) |
|
||||
| `AGENTIC_MCP_SERVER_ARGS` | `[]` | Legacy: argumentos del servidor MCP |
|
||||
| `AGENTIC_MCP_TIMEOUT_SECONDS` | `30` | Timeout por tool call |
|
||||
| `AGENTIC_DEBUG` | `false` | Logging verbose |
|
||||
|
||||
@@ -302,8 +376,11 @@ agentic:memory:_type:{type} → Set de doc IDs por tipo
|
||||
│ │ ├── base.py # ModelAdapter interface
|
||||
│ │ ├── claude_adapter.py # Anthropic Claude (streaming)
|
||||
│ │ └── openai_adapter.py # OpenAI GPT (streaming)
|
||||
│ ├── mcp/ # MCP client
|
||||
│ │ └── client.py # stdio transport, tool registry
|
||||
│ ├── mcp/ # MCP (per-session, multi-server)
|
||||
│ │ ├── client.py # stdio transport, tool registry
|
||||
│ │ ├── config.py # mcp.json parser (Pydantic)
|
||||
│ │ ├── manager.py # MCPManager (aggregates tools, routes calls)
|
||||
│ │ └── registry.py # Per-session MCP lifecycle
|
||||
│ ├── orchestrator/ # Agent orchestration
|
||||
│ │ ├── engine.py # Pipeline + error recovery + timeout
|
||||
│ │ ├── router.py # Step-to-agent routing
|
||||
@@ -328,6 +405,8 @@ agentic:memory:_type:{type} → Set de doc IDs por tipo
|
||||
│ └── components/ # Sidebar, chat, event log, inspector, timeline
|
||||
├── mcp-server/ # Acai MCP server (Node.js, stdio)
|
||||
├── docs/ # Knowledge base documents (*.md)
|
||||
├── mcp.json # MCP server template (qué servers arrancar)
|
||||
├── mcp.json.example # Ejemplo con múltiples servers
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── requirements.txt
|
||||
|
||||
Reference in New Issue
Block a user