Skip to main content
Glama

MCP Hub — 올인원 MCP 서버 및 커넥터 생태계

AI 클라이언트를 위한 단일 엔드포인트로 MCP(Model Context Protocol) 커넥터를 통합하는 자체 호스팅 허브입니다. 앱 스토어 스타일의 웹 UI, 원클릭 설치, 실시간 로그 및 상태 모니터링을 제공합니다.

Claude Desktop / Cursor ──Bearer key──▶  ┌─────────────────────┐
                                        │   MCP Hub (:3000)    │──▶ github (npx)
                                        │  /mcp   /api  Web UI │──▶ postgres (npx)
Web browser ──session cookie──▶         └─────────┬───────────┘──▶ slack (npx) …
                                                  ▼
                                            PostgreSQL 16

빠른 시작

A. 로컬 / 일반 Docker

cp .env.example .env
# edit .env — set POSTGRES_PASSWORD (and optionally MASTER_ENCRYPTION_KEY / SESSION_SECRET)
docker compose up -d --build

B. Portainer(웹 편집기)

  1. Stacks → Add stack → Web editor로 이동하여 portainer-stack.yml을 붙여넣습니다.

  2. 배포 전에 환경 변수 POSTGRES_PASSWORD를 추가합니다(Environment variables 아래).

  3. 배포합니다 — 이미지는 Docker Hub(xeniak10/mcp-hub:latest)에서 가져오므로 빌드가 필요 없습니다.

http://:3000을 엽니다 — 첫 방문 시 관리자 계정을 생성하라는 메시지가 표시됩니다(부트스트랩). 그런 다음:

  1. Marketplace로 이동하여 예: GitHub을 설치하고 토큰을 붙여넣으면 커넥터의 하위 프로세스가 백그라운드에서 시작됩니다.

  2. Settings로 이동하여 API 키를 생성합니다.

  3. AI 클라이언트를 허브에 연결합니다:

{
  "mcpServers": {
    "hub": {
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer mcp_YOUR_KEY" }
    }
  }
}

모든 커넥터 도구는 github__create_issue, postgres__query, …와 같이 네임스페이스로 구분되어 표시됩니다.

Related MCP server: open-connector-pro

제공 기능

  • Marketplace — 개발자용 내장 커넥터 71개(GitHub, GitLab, Postgres, Kubernetes, Sentry…) 및 비즈니스 팀용 커넥터 — CRM(Salesforce, HubSpot, Pipedrive), ERP/회계(Odoo, QuickBooks, Xero), 헬프데스크(Zendesk, Freshdesk, ServiceNow), 커뮤니케이션(Microsoft 365, Email IMAP/SMTP, Twilio, Slack, Teams files), 생산성(Google Sheets, Notion, Airtable) 및 관찰 가능성(Dynatrace). 원클릭 설치, 스키마 기반 구성 양식, 허브 컨테이너 내부의 npx/uvx를 통한 백그라운드 종속성 시작. 검색, 카테고리 필터 및 정렬(공식 우선 / 가장 많이 설치된 순 / 이름순).

  • 커뮤니티 커넥터 저장소 — Marketplace("Community repos" 섹션)에 공개 GitHub 저장소 URL을 붙여넣으면 해당 저장소의 모든 유효한 커넥터 매니페스트가 가져와지고 검증되어 카탈로그에 병합됩니다(community:owner/repo/<id> 네임스페이스, 데이터 볼륨에 오프라인 캐시). 저장소 루트의 index.json은 파일을 명시적으로 나열하며, 그렇지 않으면 루트 수준의 *.json 파일이 탐색됩니다. 새 항목은 허브를 다시 시작한 후 나타납니다.

  • 사용자 정의 커넥터 — JSON 매니페스트를 ./connectors/(또는 connectors 볼륨)에 넣으면 다시 시작 후 마켓플레이스에 나타납니다. connectors/example.json.example을 참조하세요.

  • 대시보드 — 실시간 상태 배지(실행 중 / 시작 중 / 오류 / 중지됨), 통계 타일, 인스턴스 검색, 확인을 통한 일괄 모두 다시 시작 / 모두 중지.

  • 커넥터 상세 — 인라인 인스턴스 이름 변경, 시각적 구성 편집기, 실행 중인 프로세스를 통한 실시간 도구 미리보기(tools/list) 및 클릭하여 복사하는 도구 이름, 실시간 로그 뷰어(WebSocket tail)와 레벨/텍스트 필터, 팔로우 모드 및 로그 다운로드.

  • 라이트 & 다크 테마 — 사이드바에서 전환, 브라우저별로 유지.

  • 키보드 단축키 — / 검색 포커스 · g d 대시보드 · g m 마켓플레이스 · g s 설정 · Esc 대화상자 닫기/검색 흐림.

  • PWA 지원 — 설치 가능한 매니페스트 + SVG 파비콘.

  • 백업 및 복원 — 설치된 모든 커넥터와 구성을 JSON 파일로 원클릭 내보내기, 가져오기를 통해 새 인스턴스에서 복원(설정 페이지).

  • 계정 관리 — 비밀번호 변경(다른 모든 기기 로그아웃), IP/사용자 에이전트가 포함된 활성 세션 목록, 모든 세션 해지.

  • 오류 알림 — ERROR_WEBHOOK_URL을 설정하면 커넥터가 오류 상태에 들어갈 때마다 허브가 JSON 알림을 POST합니다(Slack, Discord, Teams, 일반 수신기와 호환, 커넥터당 5분 쿨다운).

  • Watchdog — 충돌한 프로세스는 지수 백오프로 다시 시작되고, 30초마다 상태 핑, 부팅 복구는 재시작 전에 활성화된 모든 것을 복원합니다.

  • 업데이트 — 설정에서 현재 버전을 표시하고 6시간마다(또는 지금 확인 시) GitHub 릴리스 / Docker Hub 태그를 확인합니다. 새 버전이 게시되면 배포 유형에 맞는 정확한 업그레이드 명령을 원클릭으로 복사할 수 있습니다.

  • 선택적 자동 업데이트 — docker compose --profile autoupdate up -d로 Watchtower 사이드카를 활성화하면 매시간 최신 xeniak10/mcp-hub 이미지를 가져와 앱 컨테이너만 다시 생성합니다(레이블 범위가 지정되어 데이터베이스에는 절대 영향을 주지 않습니다).

  • 모니터링 및 운영 — 가동 시간 프로브를 위한 인증 없는 GET /healthz, GET /api/meta는 버전 + git 커밋을 보고합니다(설정 바닥글에 표시). /mcp의 API 키 트래픽은 키당 분당 120회로 제한됩니다.

  • 보안 — 저장 시 AES-256-GCM 암호화 구성, argon2id 비밀번호, 쿠키 세션, 해시된 API 키, 로그인 속도 제한, 감사 로그.

구성

변수

필수

설명

POSTGRES_PASSWORD

✅

번들된 PostgreSQL의 비밀번호

MASTER_ENCRYPTION_KEY

–

openssl rand -hex 32. 비어 있으면 /app/data/master.key에 자동 생성

SESSION_SECRET

–

비어 있으면 부팅마다 무작위(재시작 시 사용자 로그아웃)

APP_PORT

–

호스트 포트(기본값 3000)

LOG_RETENTION_LINES

–

커넥터당 링 버퍼 크기(기본값 5000)

LOG_RETENTION_DAYS

–

로그 보존 기간(기본값 7)

ERROR_WEBHOOK_URL

–

커넥터가 오류 상태에 들어갈 때 JSON 알림을 POST할 URL

볼륨: pgdata(데이터베이스), app-data(마스터 키 + 상태), npx-cache(커넥터 종속성 캐시 — 재시작 속도 유지).

업데이트

허브는 자체 컨테이너를 교체할 수 없으므로 업데이트는 호스트에서 한 줄로 수행됩니다:

docker compose pull app && docker compose up -d --no-deps --force-recreate app

(설정 → 업데이트에서 새 버전이 있을 때 이 명령을 복사해 줍니다. Portainer에서는 Stack → Pull and redeploy를 사용하세요.) 완전히 자동으로 하고 싶으신가요?

docker compose --profile autoupdate up -d

그러면 허브 옆에 Watchtower가 시작됩니다. 매시간 Docker Hub를 확인하고 최신 이미지가 있으면 앱 컨테이너를 다시 생성합니다(--cleanup은 이전 이미지를 제거). 데이터는 볼륨에 있으므로 업데이트는 무손실입니다.

개발

npm install
npm run dev        # server (watch) + web (vite dev server on :5173, proxied /api + /mcp)
npm run typecheck  # all workspaces
npm run build      # shared → server → web

스택: npm workspaces · Fastify 5 · @modelcontextprotocol/sdk · PostgreSQL 16 · Vite + React 18 + Tailwind CSS v4 + TanStack Query.

레이아웃

packages/
  shared/   types shared by server & web (manifests, API DTOs, WS events)
  server/   Fastify app: auth, registry (connector manifests), ConnectorManager,
            unified /mcp proxy, log pipeline, SQL migrations
  web/      React SPA served statically by the server in production

커넥터 추가

재빌드 없이(권장): connectors/example.json.example을 connectors/<your-id>.json으로 복사하고 매니페스트를 작성한 후({env.NAME} 자리 표시자 + JSON 스키마 구성 양식이 있는 명령 argv) 허브를 다시 시작합니다. 잘못된 파일은 로그에 경고와 함께 건너뛰어지며, 내장 커넥터와 충돌하는 사용자 정의 ID는 무시됩니다.

GitHub 저장소에서: Marketplace → Community repos → owner/repo(또는 전체 github.com URL)를 붙여넣습니다. 허브는 저장소 루트에서 index.json(파일 경로 배열)을 가져오거나 루트 수준의 *.json 파일로 대체하고, 각각을 볼륨 매니페스트와 동일한 스키마로 검증한 후 community:owner/repo/<id> ID로 캐시합니다. 따라서 내장 커넥터를 가릴 수 없으며 첫 번째 가져오기 후에도 오프라인에서 계속 작동합니다. 같은 섹션에서 저장소를 관리/제거할 수 있으며, 변경 사항은 다음 재시작 시 적용됩니다.

내장: packages/server/src/registry/connectors/<id>.ts를 만들고 ConnectorManifest를 내보낸 다음 src/registry/index.ts에 등록합니다. 재빌드 후 즉시 마켓플레이스에 나타납니다.

REST API 요약

엔드포인트

인증

설명

GET /healthz

–

활성 프로브(DB 핑만, 세부 정보 없음)

POST /api/auth/bootstrap · login · logout

–/세션

최초 실행 계정, 로그인/로그아웃

GET /api/meta

세션

실행 중인 빌드의 {version, commit}

POST /api/auth/change-password

세션

비밀번호 변경, 다른 모든 세션 해지

GET /api/auth/sessions · DELETE /:id

세션

활성 세션 목록/해지

GET /api/marketplace

세션

설치 횟수가 포함된 카탈로그 항목

GET/POST /api/community/repos · DELETE /:repo

세션

커뮤니티 커넥터 저장소 관리

POST /api/connectors · PUT/DELETE /:id

세션

설치 / 이름 변경 / 제거

PUT /api/connectors/:id/config

세션

암호화된 구성 저장

POST /api/connectors/:id/enable·disable·restart

세션

수명 주기

POST /api/connectors/restart-all · stop-all

세션

일괄 작업

GET /api/connectors/:id/tools

세션

실행 중인 프로세스의 실시간 도구 목록

GET /api/logs/:id?after= + WS 스트림

세션

로그 테일

GET/POST /api/keys · DELETE /:id

세션

API 키 관리

GET /api/backup · POST /api/backup/restore

세션

구성 내보내기/가져오기

POST /mcp

Bearer 키 또는 세션

통합 MCP 엔드포인트(키당 분당 120회)

모든 변경 엔드포인트는 감사 로그에 기록됩니다.

참고 사항

  • 커넥터는 허브 컨테이너 내부의 하위 프로세스로 실행됩니다(npx -y pkg@version 또는 uvx). Docker 소켓은 마운트되지 않습니다. Python 기반 커넥터는 uvx가 필요하며 런타임 이미지에 설치되어 있습니다.

  • MCP 엔드포인트는 상태 비저장 Streamable HTTP(/mcp)입니다 — 모든 HTTP MCP 클라이언트가 작동합니다.

  • 리소스는 connector://<slug>/<original-uri>로 노출됩니다.

Related MCP Connectors

Related MCP Servers