Ir al contenido

Arquitectura

┌─────────────────────────────────────────────────┐
│ Host MCP (cualquier cliente) │
│ Claude Code, Codex CLI, Cursor, ... │
└──────────────────────┬──────────────────────────┘
│ MCP (stdio)
┌──────────────────────▼──────────────────────────┐
│ Servidor MCP Hive │
│ │
│ server.py (registro + recursos + prompts) │
│ _context.py (estado compartido ServerContext) │
│ │
│ ┌─────────────┐ ┌────────────┐ ┌──────────┐ │
│ │ Vault+Session│ │Worker Tools│ │Recursos │ │
│ │ _vault_read │ │ _workers │ │(5 URIs) │ │
│ │ _vault_write │ │ (2 tools) │ └──────────┘ │
│ │ _vault_health│ └─────┬──────┘ │
│ │ (8 tools) │ │ │
│ └──────┬──────┘ ┌─────▼──────┐ │
│ │ │ clients │ │
│ ┌──────▼──────┐ │ budget │ │
│ │ _helpers │ │ config │ │
│ │ frontmatter │ └────────────┘ │
│ │ usage │ │
│ └─────────────┘ │
└──────────────────────────────────────────────────┘
│ │
┌────▼────┐ ┌─────────▼──────────┐
│ Obsidian │ │ Ollama (local) │
│ Vault │ │ OpenRouter (cloud)│
└─────────┘ └────────────────────┘
MóduloRol
server.pyCapa fina de registro — recursos, prompts, create_server()
_context.pyDataclass ServerContext — estado compartido para todos los handlers
_helpers.pyFunciones puras — resolución de rutas, formateo, ops git, tracking
_vault_read.pyHerramientas de lectura — vault_list, vault_query, vault_search, session_briefing
_vault_write.pyHerramientas de escritura — vault_write, vault_patch
_vault_health.pyHerramientas de salud — vault_health, constructor de reportes de salud
_workers.pyHerramientas de worker — capture_lesson, delegate_task, worker_status
config.pyConfiguración pydantic-settings con prefijo HIVE_
frontmatter.pyParsing, validación y generación de frontmatter YAML
clients.pyClientes HTTP async para Ollama y OpenRouter
budget.pyTracker de presupuesto SQLite con modo WAL (tope $1/mes por defecto)
relevance.pyPuntuación de relevancia basada en EMA para contexto adaptativo
usage.pyAnalíticas de llamadas a herramientas y estimación de tokens

La funcionalidad de vault y worker se sirve desde una única instancia FastMCP. Internamente, las herramientas están organizadas en módulos de dominio (_vault_read, _vault_write, _vault_health, _workers) que se registran vía funciones register_*(mcp, ctx). El estado compartido vive en un dataclass ServerContext (_context.py), y las funciones utilitarias puras viven en _helpers.py.

create_server() acepta overrides opcionales para la ruta del vault, clientes y trackers. Esto permite testear sin infraestructura real.

Todas las escrituras al vault hacen auto-commit a git. Esto proporciona historial completo y permite que vault_search(since_days=N) detecte cambios vía git log.

La delegación de workers usa una base de datos SQLite con modo WAL y threading.Lock explícito para acceso concurrente thread-safe. Los topes mensuales y límites por petición previenen sobrecostes.