Skip to main content
Glama
juhyungrok4237-boop

Veeam VBR v13 MCP Server

Veeam VBR v13 MCP Server

Veeam MCP TypeScript Node.js

Veeam Backup & Replication v13의 공식 REST API(1.3-rev1)를 활용하여 AI 에이전트(Claude Desktop, Cursor 등)가 Veeam 인프라를 직접 제어하고 모니터링할 수 있도록 해주는 MCP(Model Context Protocol) 서버입니다.

swagger.json 기준 39개 태그, 404개 API Operations 중 의미 있는 328개의 MCP Tools를 완전 모듈화하여 구현하였습니다.


📋 목차


🌟 주요 기능

  • 328개 MCP Tools: Veeam REST API의 거의 모든 기능 포괄

  • 듀얼 전송 모드: stdio (Claude Desktop/Cursor) + streamable-http (Dify/원격 에이전트)

  • MCP 2025-03-26 최신 스펙 준수: Streamable HTTP 전송 방식 구현 (Dify 완전 호환)

  • 스마트 OAuth2 인증: 자동 토큰 발급, 만료 전 갱신, 401 시 자동 재인증

  • 완전 모듈화: 13개 파일로 기능별 분리 → 유지보수 및 확장 용이

  • Stateful/Stateless 선택: 세션 상태 유지(기본) 또는 상태 비저장 모드 선택 가능


📦 요구사항

항목

버전

비고

Node.js

v18 이상

node -v로 확인

npm

v9 이상

Node.js에 포함

Veeam B&R

v13

REST API 포트 9419 접근 필요

네트워크

-

Veeam 서버의 9419 포트에 TCP 접근 가능해야 함


📚 패키지 의존성

런타임 의존성 (dependencies)

패키지

버전

용도

@modelcontextprotocol/sdk

^1.29.0

MCP 서버 프레임워크 (stdio/SSE 전송 계층 포함)

axios

^1.15.1

Veeam REST API HTTP 클라이언트

express

^5.2.1

SSE(HTTP) 모드 웹서버

dotenv

^17.4.2

.env 파일에서 환경변수 로드

zod

^4.3.6

MCP Tool 파라미터 스키마 검증

body-parser

^2.2.2

Express 요청 본문 파싱

개발 의존성 (devDependencies)

패키지

버전

용도

typescript

^6.0.3

TypeScript 컴파일러

tsx

^4.21.0

TypeScript 직접 실행 (개발 모드)

@types/node

^25.6.0

Node.js 타입 정의

@types/express

^5.0.6

Express 타입 정의

@types/body-parser

^1.19.6

body-parser 타입 정의


🚀 설치 및 빌드

# 1. 리포지토리 클론
git clone https://github.com/<your-username>/veeam-mcp-13.git
cd veeam-mcp-13

# 2. 의존성 설치
npm install

# 3. TypeScript 빌드 (build/ 디렉토리에 JS 출력)
npm run build

개발 모드: 빌드 없이 TypeScript를 직접 실행하려면 npm run dev를 사용하세요.


⚙️ 환경 변수 설정

프로젝트 루트에 .env 파일을 생성합니다. .env.example을 복사하여 수정하세요.

cp .env.example .env
# ─── Veeam 서버 접속 정보 ─────────────────────────────────
VEEAM_SERVER=https://192.168.1.100
VEEAM_PORT=9419
VEEAM_USERNAME=Administrator
VEEAM_PASSWORD=YourPasswordHere

# ─── TLS 설정 ────────────────────────────────────────────
# Veeam 서버가 자체 서명 인증서를 사용하는 경우 0으로 설정
NODE_TLS_REJECT_UNAUTHORIZED=0

# ─── MCP 전송 모드 ───────────────────────────────────────
# stdio            : Claude Desktop, Cursor 등 로컬 AI 클라이언트용
# streamable-http  : Dify, 원격 AI 에이전트용 (MCP 2025-03-26 스펙)
MCP_TRANSPORT_MODE=stdio

# ─── HTTP 포트 (streamable-http 모드 전용) ───────────────
MCP_HTTP_PORT=3000

# ─── Stateless 모드 (streamable-http 전용) ───────────────
# true: 세션 없이 요청마다 독립 처리 (Dify 무상태 연동에 유리)
# false(기본): 세션 ID로 상태 유지
MCP_STATELESS=false

변수

필수

기본값

설명

VEEAM_SERVER

https://localhost

Veeam 서버 주소 (https 필수)

VEEAM_PORT

-

9419

REST API 포트

VEEAM_USERNAME

-

Veeam 관리자 계정

VEEAM_PASSWORD

-

Veeam 관리자 비밀번호

NODE_TLS_REJECT_UNAUTHORIZED

-

1

0=자체 서명 인증서 허용

MCP_TRANSPORT_MODE

-

stdio

stdio 또는 streamable-http

MCP_HTTP_PORT

-

3000

HTTP 모드 포트

MCP_STATELESS

-

false

true=Stateless 모드 (세션 없음)


🖥️ 실행 방법 - stdio 모드

stdio 모드는 AI 클라이언트(Claude Desktop, Cursor 등)가 MCP 서버 프로세스를 직접 자식 프로세스로 실행하고, **표준 입출력(stdin/stdout)**을 통해 JSON-RPC 메시지를 주고받는 방식입니다.

Claude Desktop 연동

claude_desktop_config.json 파일 위치:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "veeam-vbr": {
      "command": "node",
      "args": ["E:\\veeam-mcp-self\\build\\index.js"],
      "env": {
        "VEEAM_SERVER": "https://192.168.1.100",
        "VEEAM_PORT": "9419",
        "VEEAM_USERNAME": "Administrator",
        "VEEAM_PASSWORD": "YourPassword",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  }
}

⚠️ args의 경로는 빌드된 build/index.js절대 경로로 지정해야 합니다.

Cursor 에디터 연동

.cursor/mcp.json 파일:

{
  "mcpServers": {
    "veeam-vbr": {
      "command": "node",
      "args": ["E:\\veeam-mcp-self\\build\\index.js"],
      "env": {
        "VEEAM_SERVER": "https://192.168.1.100",
        "VEEAM_PORT": "9419",
        "VEEAM_USERNAME": "Administrator",
        "VEEAM_PASSWORD": "YourPassword",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  }
}

수동 테스트 (터미널)

stdio 모드에서는 프로세스가 대화형으로 stdin을 읽기 때문에 직접 테스트하기 어렵습니다. MCP Inspector를 사용하세요:

# MCP Inspector 설치 및 실행
npx @modelcontextprotocol/inspector node build/index.js

브라우저에서 http://localhost:5173으로 접속하면 등록된 328개의 도구를 확인하고 직접 호출할 수 있습니다.


🌐 실행 방법 - Streamable HTTP 모드 (Dify 연동)

⚠️ 중요: 기존 구버전 HTTP+SSE 방식(/sse, /messages 분리 엔드포인트)은 MCP 2024-11-05 기준 Deprecated되었습니다.
Dify 및 최신 MCP 클라이언트는 MCP 2025-03-26 Streamable HTTP 스펙을 사용합니다.
이 서버는 최신 스펙을 완전히 구현한 단일 /mcp 엔드포인트를 제공합니다.

서버 실행

# 방법 1: .env 파일에 MCP_TRANSPORT_MODE=streamable-http 설정 후
npm start

# 방법 2: 환경변수 인라인 지정 (Linux/Mac)
MCP_TRANSPORT_MODE=streamable-http MCP_HTTP_PORT=3000 npm start

# 방법 3: PowerShell (Windows)
$env:MCP_TRANSPORT_MODE="streamable-http"; $env:MCP_HTTP_PORT="3000"; npm start

# 방법 4: Stateless 모드로 실행 (Dify 권장)
$env:MCP_TRANSPORT_MODE="streamable-http"; $env:MCP_STATELESS="true"; npm start

# 방법 5: 개발 모드 (빌드 없이 직접 실행)
$env:MCP_TRANSPORT_MODE="streamable-http"; npm run dev

서버 실행 시 출력 예시

[MCP] Loaded 328 tools from 328 unique names.
[MCP] Starting Streamable HTTP mode on port 3000 (stateless=false)...
[MCP] Streamable HTTP server listening on http://0.0.0.0:3000
[MCP]   MCP endpoint : POST http://localhost:3000/mcp
[MCP]   SSE stream   : GET  http://localhost:3000/mcp  (with Mcp-Session-Id)
[MCP]   Session end  : DELETE http://localhost:3000/mcp (with Mcp-Session-Id)
[MCP]   Health       : GET  http://localhost:3000/health
[MCP] → Configure Dify with URL: http://<your-host>:3000/mcp

HTTP 엔드포인트

Method

Path

헤더

설명

POST

/mcp

Content-Type: application/json

메인 JSON-RPC 채널 (초기화 + 도구 호출)

GET

/mcp

Mcp-Session-Id: <id>

서버 → 클라이언트 SSE 알림 스트림

DELETE

/mcp

Mcp-Session-Id: <id>

세션 명시적 종료

GET

/health

-

서버 상태 및 활성 세션 수 확인

Dify에서 연동하기

  1. Dify 도구 관리MCP 서버 추가 클릭

  2. MCP 서버 URL 입력:

    http://<your-server-ip>:3000/mcp
  3. 저장 후 도구 목록에서 Veeam 도구 확인

Docker 환경 주의사항: Dify와 이 서버가 모두 Docker로 실행 중이라면,
localhost 대신 Docker 네트워크 내 호스트 IP 또는 컨테이너 이름을 사용하세요.

Claude Desktop에서 Streamable HTTP 모드 연동

{
  "mcpServers": {
    "veeam-vbr-remote": {
      "url": "http://192.168.1.200:3000/mcp"
    }
  }
}

서버 상태 확인

curl http://localhost:3000/health

응답:

{
  "status": "ok",
  "transport": "streamable-http",
  "stateless": false,
  "activeSessions": 1,
  "server": "veeam-vbr-mcp v2.0.0",
  "mcpEndpoint": "http://localhost:3000/mcp"
}

🔧 stdio vs Streamable HTTP 비교

항목

stdio 모드

Streamable HTTP 모드

실행 주체

AI 클라이언트가 자식 프로세스로 실행

독립 서버로 미리 실행

통신 방식

stdin/stdout (표준 입출력)

HTTP POST/GET/DELETE /mcp

MCP 스펙

최신 (stdio는 스펙 무관)

MCP 2025-03-26 Streamable HTTP

네트워크

로컬 전용

원격 접속 가능

다중 클라이언트

1:1 (한 클라이언트만)

N:M (여러 클라이언트 동시)

Dify 연동

❌ 불가

✅ 가능 (/mcp URL 입력)

설정 난이도

쉬움 (JSON 설정만)

서버 실행 + URL 지정

적합한 상황

개인 PC Claude Desktop/Cursor

Dify, 팀 공유, 원격 배포

환경변수

MCP_TRANSPORT_MODE=stdio (기본값)

MCP_TRANSPORT_MODE=streamable-http


🛠️ 지원되는 도구 카테고리 (총 328 Tools)

#

모듈 파일

주요 기능

도구 수

1

service.ts

서버 시간, 인증서, 서버 정보, 서비스 조회

5

2

license.ts

라이선스 설치/갱신, 소켓/인스턴스/용량 관리

16

3

credentials.ts

표준 계정 + 클라우드(AWS/Azure/GCP) 계정 CRUD

23

4

encryption.ts

암호화 비밀번호, KMS 서버 관리

13

5

generalOptions.ts

이메일/알림 설정, 트래픽 규칙, 구성 백업, 배포

22

6

security.ts

보안 분석기, 멀웨어 감지, 사용자/역할, 전역 제외

35

7

inventory.ts

VMware/HyperV 인벤토리, 클라우드/Entra ID 브라우저

23

8

infrastructure.ts

관리 서버, 저장소, SOBR, 프록시, 마운트 서버, WAN

46

9

jobs.ts

백업/복제/복사 작업 CRUD, Start/Stop/Retry

15

10

backups.ts

백업 데이터셋, 백업 개체, 복원 포인트

17

11

sessions.ts

세션/태스크 세션 조회, 로그, 중지

8

12

restore.ts

IR(VMware/HyperV/Azure), VM 복원, FLR, Entra ID

46

13

operations.ts

장애조치/원복, 복제본, 에이전트, 자동화 Import/Export

59


📁 프로젝트 구조

veeam-mcp-self/
├── src/
│   ├── index.ts              # 진입점 (stdio / Streamable HTTP 모드 분기)
│   ├── server.ts             # McpServer 인스턴스 + 동적 Tool 등록
│   ├── veeamClient.ts        # Axios 클라이언트 + OAuth2 자동 갱신
│   ├── types/
│   │   └── index.ts          # 공통 타입 (ToolDefinition, ok/err 헬퍼)
│   └── tools/
│       ├── index.ts          # 모든 모듈 통합 (328개 도구 배열)
│       ├── service.ts        # Service & Services
│       ├── license.ts        # License
│       ├── credentials.ts    # Credentials & Cloud Credentials
│       ├── encryption.ts     # Encryption & KMS
│       ├── generalOptions.ts # General Options, Traffic, Config Backup
│       ├── security.ts       # Security, Malware, Users, Exclusions
│       ├── inventory.ts      # Inventory Browser, Cloud Browser
│       ├── infrastructure.ts # Servers, Repos, Proxies, Mount, WAN
│       ├── jobs.ts           # Jobs
│       ├── backups.ts        # Backups, Objects, Restore Points
│       ├── sessions.ts       # Sessions, Task Sessions
│       ├── restore.ts        # All Restore Operations
│       └── operations.ts     # Failover, Failback, Agents, Automation
├── build/                    # TypeScript 컴파일 출력 (git 제외)
├── .env.example              # 환경변수 템플릿
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md

💬 프롬프트 활용 예시

이 MCP를 연결한 AI 비서에게 자연어로 명령할 수 있습니다:

모니터링

"최근 24시간 내 실패한 백업 작업이 있는지 알려줘"
"저장소의 남은 용량을 확인해줘"
"현재 실행 중인 작업 상태를 알려줘"

작업 제어

"DailyBackup 작업을 지금 즉시 실행해줘"
"Job ID xxxx-xxxx 를 비활성화해줘"

복원

"VM 'WebServer01'의 최신 복원 포인트를 찾아줘"
"해당 복원 포인트로 Instant Recovery를 시작해줘"

보안

"보안 준수 분석기를 실행해줘"
"멀웨어 감지 이벤트가 있는지 확인해줘"

인프라 관리

"등록된 모든 관리 서버와 프록시 상태를 알려줘"
"새로운 VMware vCenter 서버를 추가해줘"

📄 라이선스

이 프로젝트는 Apache License 2.0를 따릅니다

https://www.apache.org/licenses/LICENSE-2.0.txt

Veeam® 및 Veeam Backup & Replication®은 Veeam Software Group GmbH의 등록 상표입니다. 이 프로젝트는 Veeam과 공식적으로 제휴되거나 보증되지 않습니다.

Install Server
A
security – no known vulnerabilities
F
license - not found
C
quality - C tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/juhyungrok4237-boop/veeam-mcp-13'

If you have feedback or need assistance with the MCP directory API, please join our Discord server