MCP-Native Enterprise Integration Hub
MCP-Native Enterprise Integration Hub
Обзор
Управляемая платформа AI-агентов, которая предоставляет GitHub Issues, Jira и Slack в виде MCP-серверов (Model Context Protocol). Оркестрационный агент на LangGraph маршрутизирует запросы на естественном языке через Pydantic-валидируемые схемы инструментов с обязательной точкой контроля HITL (human-in-the-loop), блокирующей все операции записи до их выполнения. Каждое решение агента, вызов инструмента и результат действия сохраняются в PostgreSQL для полного аудита, а семантический поиск PGVector выводит релевантные исторические действия перед планированием каждого нового действия.
Related MCP server: GitHub Flow MCP
Архитектура
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Требуемые OAuth-области
Slack: channels:read, channels:history, chat:write
GitHub: repo (для приватных репозиториев) или public_repo
Jira: read:jira-work, write:jira-work
Настройка
# 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/Примечание о конфликте портов: если у вас уже запущен локальный экземпляр Postgres на порту 5432 (часто встречается на macOS через Homebrew или Postgres.app), проброс порта Docker может молча проиграть гонку за этот порт —
docker compose up -dсообщит, что контейнер здоров, ноlocalhost:5432на самом деле будет маршрутизироваться к вашему нативному Postgres, в котором нет роли/базы данныхmcp_enterprise_hub, и завершится ошибкойFATAL: role "postgres" does not existили подобной. Либо остановите локальный сервис Postgres, либо переназначьте контейнер на свободный порт с помощьюdocker-compose.override.yml:services: postgres: ports: - "5433:5432"и обновите
DATABASE_URL/TEST_DATABASE_URLв.env, указав порт5433.
Примеры вызовов API
1. Операция чтения (список GitHub issues) — выполняется немедленно:
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. Операция записи (создание тикета Jira) — возвращает 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. Одобрение записи — выполняется и возвращает результат:
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"
}Результаты тестирования
$ 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.92sДоля блокировок HITL (измерено по сохранённой тестовой базе данных после полного прогона набора тестов, до усечения по каждому тесту):
Метрика | Количество |
Запуски с намерением записи, достигшие | 9 |
Запуски, где | 9 / 9 (100%) |
Реальные выполнения MCP-инструментов, записанные в | 4 |
Из них выполнено без предварительного одобрения | 0 |
Записи отклонены и не выполнены | 2 |
Каждый тестовый запуск операции записи был перехвачен шлюзом HITL до того, как
мог сработать любой вызов MCP-инструмента; ни одно выполнение не попало в
AuditLog без соответствующей строки APPROVED в HITLApproval.
Сводные метрики (для справки)
19 запусков агента сохранено в PostgreSQL во время тестирования
Покрытие тестами 85%+ на уровнях MCP-серверов, агента и API
HITL заблокировал 100% операций записи в тестовом наборе (0 нерассмотренных записей выполнено)
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