Skip to main content
Glama
varunk61

MCP-Native Enterprise Integration Hub

by varunk61

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 (измерено по сохранённой тестовой базе данных после полного прогона набора тестов, до усечения по каждому тесту):

Метрика

Количество

Запуски с намерением записи, достигшие hitl_gate

9

Запуски, где hitl_gate корректно создал запись HITLApproval

9 / 9 (100%)

Реальные выполнения MCP-инструментов, записанные в AuditLog

4

Из них выполнено без предварительного одобрения APPROVED

0

Записи отклонены и не выполнены

2

Каждый тестовый запуск операции записи был перехвачен шлюзом HITL до того, как мог сработать любой вызов MCP-инструмента; ни одно выполнение не попало в AuditLog без соответствующей строки APPROVED в HITLApproval.

Сводные метрики (для справки)

  • 19 запусков агента сохранено в PostgreSQL во время тестирования

  • Покрытие тестами 85%+ на уровнях MCP-серверов, агента и API

  • HITL заблокировал 100% операций записи в тестовом наборе (0 нерассмотренных записей выполнено)

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    A 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.
    18
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An 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
  • A
    license
    B
    quality
    B
    maintenance
    A 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.
    27
    MIT