MCP-Native Enterprise Integration Hub
MCP-Native Enterprise Integration Hub
Resumen
Una plataforma de agentes de IA gobernada que expone GitHub Issues, Jira y Slack como servidores MCP (Model Context Protocol). Un agente de orquestación LangGraph enruta solicitudes en lenguaje natural a través de esquemas de herramientas validados con Pydantic, con un punto de control de aprobación HITL obligatorio que bloquea todas las operaciones de escritura antes de su ejecución. Cada decisión del agente, llamada a herramienta y resultado de acción se persiste en PostgreSQL para un registro de auditoría completo, con búsqueda semántica PGVector que muestra acciones históricas relevantes antes de planificar cada nueva acción.
Related MCP server: GitHub Flow MCP
Arquitectura
graph TD
User -->|POST /agent/run| FastAPI
FastAPI --> LangGraph
LangGraph --> ParseIntent
ParseIntent --> RetrieveSimilar
RetrieveSimilar -->|PGVector| PostgreSQL
RetrieveSimilar --> PlanAction
PlanAction --> HITLGate
HITLGate -->|Write op| HITLApproval[(PostgreSQL HITLApproval)]
HITLGate -->|Read op| ExecuteAction
ExecuteAction --> GitHubMCP
ExecuteAction --> JiraMCP
ExecuteAction --> SlackMCP
ExecuteAction --> LogRun
LogRun --> PostgreSQLÁmbitos OAuth requeridos
Slack: channels:read, channels:history, chat:write
GitHub: repo (para repositorios privados) o public_repo
Jira: read:jira-work, write:jira-work
Configuración
# 1. Clone and enter the project
git clone <repo-url> mcp-enterprise-hub
cd mcp-enterprise-hub
# 2. Create and activate a virtual environment
python3 -m venv venv
source venv/bin/activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Configure environment variables
cp .env.example .env
# Edit .env and fill in: ANTHROPIC_API_KEY, OPENAI_API_KEY, GITHUB_TOKEN,
# JIRA_API_TOKEN, JIRA_EMAIL, JIRA_BASE_URL, SLACK_BOT_TOKEN
# 5. Start PostgreSQL (with pgvector)
docker compose up -d postgres
# 6. Initialize the database schema
python src/db/init_db.py
# 7. Run the API server
uvicorn src.api.main:app --reload
# 8. (Optional) Run the test suite
docker compose up -d postgres # test DB is created automatically on first run
pytest --cov=src --cov-report=term-missing tests/Nota sobre conflictos de puerto: si ya tienes una instancia local de Postgres ejecutándose en el puerto 5432 (común en macOS mediante Homebrew o Postgres.app), la asignación de puertos de Docker puede perder silenciosamente la carrera por ese puerto —
docker compose up -dinformará que el contenedor está sano, perolocalhost:5432en realidad enrutará a tu Postgres nativo, que no tiene el rol/base de datosmcp_enterprise_huby fallará conFATAL: role "postgres" does not existo algo similar. O detén el servicio local de Postgres, o reasigna el contenedor a un puerto libre con undocker-compose.override.yml:
services:
postgres:
ports:
- "5433:5432"y actualiza DATABASE_URL / TEST_DATABASE_URL en .env para usar el puerto 5433.
Ejemplos de llamadas a la API
1. Operación de lectura (listar issues de GitHub) — se completa inmediatamente:
curl -X POST http://localhost:8000/agent/run \
-H "Content-Type: application/json" \
-d '{"message": "list open issues in octo/hello"}'{
"status": "completed",
"result": {
"issues": [
{"id": 1, "number": 42, "title": "Login button unresponsive", "state": "open", "url": "https://github.com/octo/hello/issues/42"}
],
"metadata": {"is_write": false, "connector": "github", "tool_name": "list_issues"}
},
"run_id": "6a9b1a2e-4c9b-4c1e-9c0e-7a1f2b3c4d5e",
"session_id": "d1e2f3a4-5b6c-7d8e-9f0a-1b2c3d4e5f6a"
}2. Operación de escritura (crear un ticket de Jira) — devuelve pending_approval:
curl -X POST http://localhost:8000/agent/run \
-H "Content-Type: application/json" \
-d '{"message": "create a Jira ticket in project ABC titled '\''Login button unresponsive on mobile'\''"}'{
"status": "pending_approval",
"approval_id": "9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6",
"action_plan": {
"connector": "jira",
"tool_name": "create_issue",
"validated_params": {
"project_key": "ABC",
"summary": "Login button unresponsive on mobile",
"description": "Login button unresponsive on mobile",
"issue_type": "Bug"
},
"is_write_operation": true,
"risk_level": "medium"
},
"session_id": "d1e2f3a4-5b6c-7d8e-9f0a-1b2c3d4e5f6a"
}3. Aprobar la escritura — ejecuta y devuelve el resultado:
curl -X POST http://localhost:8000/agent/approve/9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6 \
-H "Content-Type: application/json" \
-d '{"reviewer_notes": "Looks good, approved"}'{
"status": "approved",
"result": {
"key": "ABC-123",
"url": "https://your-domain.atlassian.net/browse/ABC-123",
"metadata": {"is_write": true, "connector": "jira", "tool_name": "create_issue"}
},
"run_id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
}Resultados de las pruebas
$ pytest --cov=src --cov-report=term-missing tests/
collected 52 items
tests/test_agent.py ............. [ 25%]
tests/test_api.py .................. [ 59%]
tests/test_mcp_servers.py ..................... [100%]
================================ tests coverage ================================
Name Stmts Miss Cover Missing
----------------------------------------------------------------
src/__init__.py 0 0 100%
src/agent/__init__.py 0 0 100%
src/agent/hitl.py 29 1 97% 33
src/agent/state.py 13 0 100%
src/agent/workflow.py 189 5 97% 108, 263-266
src/api/__init__.py 0 0 100%
src/api/main.py 209 3 99% 150-152
src/db/__init__.py 0 0 100%
src/db/database.py 16 0 100%
src/db/init_db.py 16 16 0% 1-24
src/db/models.py 60 0 100%
src/db/vector_search.py 7 0 100%
src/mcp_servers/__init__.py 0 0 100%
src/mcp_servers/common.py 11 0 100%
src/mcp_servers/github_server.py 95 3 97% 7, 175-177
src/mcp_servers/jira_server.py 81 3 96% 7, 168-170
src/mcp_servers/slack_server.py 86 4 95% 7, 144, 161-163
----------------------------------------------------------------
TOTAL 812 35 96%
52 passed in 2.92sTasa de bloqueo HITL (medida contra la base de datos de pruebas persistida tras una ejecución completa de la suite, antes de la truncación por prueba):
Métrica | Recuento |
Ejecuciones con intención de escritura que llegaron a | 9 |
Ejecuciones donde | 9 / 9 (100%) |
Ejecuciones reales de herramientas MCP registradas en | 4 |
De ellas, ejecutadas sin una aprobación | 0 |
Escrituras rechazadas y nunca ejecutadas | 2 |
Toda ejecución de prueba de operación de escritura fue interceptada por la puerta HITL antes de que pudiera dispararse ninguna llamada a herramienta MCP; ninguna ejecución llegó a AuditLog sin una fila HITLApproval APPROVED correspondiente.
Métricas de resumen (para referencia)
19 ejecuciones de agente persistidas en PostgreSQL durante las pruebas
Cobertura de pruebas del 85%+ en las capas de servidores MCP, agente y API
HITL bloqueó el 100% de las operaciones de escritura en la suite de pruebas (0 escrituras sin revisar ejecutadas)
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that equips AI agents with dev workflow tools including GitHub project management, conventional commits, visual regression testing, Jira/Confluence integration, and a persistent memory knowledge graph.8 npmMIT
- AlicenseCqualityBmaintenanceA policy-aware MCP server for GitHub and GitHub Actions that enables safe AI-assisted infrastructure workflows—inspecting repositories, preparing branches and pull requests, and constrained remote mutations behind explicit preview-bound approval tokens.18MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP-native agentic platform orchestrating planner/executor/critic agents over hybrid RAG with three-tier memory, budget enforcement, safety guardrails, and full observability. It exposes all capabilities as MCP tools, enabling natural-language control of document ingestion, retrieval-augmented generation, and multi-step AI workflows.MIT
- AlicenseBqualityBmaintenanceA security-first MCP gateway that enables AI assistants to safely inspect and interact with GitHub repositories through a controlled, auditable tool layer with policy enforcement and human approval for mutations.27MIT