Skip to main content
Glama
MSPbotsAIFramework

mspbots-fleet-mcp

Official

mspbots-fleet-mcp

MSPbots Fleet Platform API용 MCP 서버 — fleetdm을 기반으로 하는 멀티 테넌트 콘솔로, 호스트 인벤토리, 온디맨드 스크립트, 저장된 osquery 쿼리를 MCP 클라이언트에 노출합니다.

형제 서비스인 mspbots-agent-mcp와 동일한 설계를 따릅니다: 무상태(stateless), 저장된 자격 증명 없음, Model Context Protocol(Streamable HTTP/SSE 전송)을 통한 요청별 헤더 인증.

언제 사용하나요

이 MCP는 내부 MSPbots 제품(디바이스 플릿 관리)을 래핑하며, 타사 통합이 아닙니다. 일반적인 사용 사례:

  • "이 테넌트에는 어떤 호스트가 있고, 어떤 것이 오프라인인가요?" → mspbotsfleet_list_hosts

  • "이 노트북을 Production으로 태그" → mspbotsfleet_set_host_labels

  • "이 머신이 오래된 것 같으니 새로 고침" → mspbotsfleet_refetch_host

  • "그 서버에서 로그 수집 스크립트 실행" → mspbotsfleet_run_script

  • "지금 모든 Windows 호스트의 디스크 사용량은?" → mspbotsfleet_create_query로 저장된 쿼리를 만든 다음 mspbotsfleet_run_query 실행

  • "새 노트북 배치가 등록되었으니 선언한 호스트를 클레임" → mspbotsfleet_claim_hosts

  • "이 디바이스는 오프보딩하므로 우리 것으로 추적 중지(Fleet에는 남김)" → mspbotsfleet_release_host

Related MCP server: OpsLevel MCP

도구

모든 도구의 자격 증명은 요청 헤더(X-MSP-Token / X-MSP-Tenant-Id / X-MSP-Host)에서 가져오며, 도구 매개변수에 토큰을 전달할 필요가 없습니다.

호스트

호스트는 API로 생성할 수 없습니다. 머신에 fleetd를 설치하고 등록하면 자동으로 나타나며, 이 테넌트에서 선언한 식별자(호스트 이름/시리얼/UUID)로 소유권을 클레임합니다. mspbotsfleet_claim_hosts를 참고하세요.

도구

설명

매개변수

mspbotsfleet_list_hosts

현재 테넌트의 호스트 나열 (퍼지 검색+상태 필터+페이지네이션)

search, status(online/offline/new/missing), page(기본 0), per_page(기본 25, 최대 200)

mspbotsfleet_get_host

호스트 상세 정보+수동 라벨 조회

host_id(필수)

mspbotsfleet_list_host_scripts

해당 호스트에서 실행 가능한 스크립트 나열

host_id(필수)

mspbotsfleet_set_host_labels

호스트의 수동 라벨 전체 교체

host_id(필수), labels(필수, 전체 교체)

mspbotsfleet_refetch_host

호스트가 다음 체크인 시 속성을 새로 고치도록 요청 (비동기)

host_id(필수)

mspbotsfleet_delete_host

Fleet에서 호스트를 제거하고 소유권 정리 (fleetd를 제거하지 않으면 다시 등록됨)

host_id(필수)

mspbotsfleet_claim_hosts

식별자를 선언하고 일치하는 무소유 호스트 인수 (멱등, 일치하지 않은 항목 재시도 가능)

identifiers(선택, 호스트 이름/시리얼/UUID 목록, 최대 500개, 생략/빈 배열=이전에 선언한 항목만 재시도)

mspbotsfleet_release_host

이 테넌트의 호스트 소유권 포기, 호스트 자체는 삭제하지 않음 (멱등)

host_id(필수)

호스트 목록은 전체를 가져온 뒤 메모리에서 필터/정렬/페이지네이션합니다. Fleet 쪽 데이터는 15초 캐시되며, 소유권 정보는 캐시하지 않고 실시간으로 DB를 조회합니다. claim_hosts는 {claimed, waiting, rejected}를 반환합니다. waiting은 선언은 되었지만 아직 Fleet에 나타나지 않은 호스트이고, rejected는 식별자가 다른 테넌트에 의해 이미 선언된 경우입니다.

스크립트

도구

설명

매개변수

mspbotsfleet_list_scripts

이 테넌트의 스크립트 나열

page, per_page

mspbotsfleet_get_script

스크립트 상세 정보 조회 (본문 포함)

script_id(필수)

mspbotsfleet_create_script

새 스크립트 생성 (파일 이름은 .sh/.ps1로 끝나야 함). 비멱등 — 반복 호출 시 여러 개 생성됨

name(필수), contents(필수, ≤500KB)

mspbotsfleet_update_script

스크립트 본문 교체 (파일 이름은 변경 불가)

script_id(필수), contents(필수)

mspbotsfleet_delete_script

스크립트 삭제 (모든 호스트에 적용)

script_id(필수)

mspbotsfleet_run_script

호스트에서 스크립트 실행

script_id(필수), host_id(필수), sync(기본 false, true면 ≤60초 대기 후 결과 반환)

mspbotsfleet_get_script_result

실행 결과 조회 (exit_code가 null이면 아직 회신되지 않음)

execution_id(필수)

create_script/update_script는 {id, name}만 반환하므로, 타임스탬프 등 나머지 필드는 mspbotsfleet_get_script/mspbotsfleet_list_scripts로 다시 조회해야 합니다.

저장된 쿼리

도구

설명

매개변수

mspbotsfleet_list_queries

이 테넌트의 쿼리 나열

page, per_page

mspbotsfleet_get_query

쿼리 상세 조회 (SQL 포함)

query_id(필수)

mspbotsfleet_create_query

새 저장 쿼리 생성 (단일 SELECT / WITH…SELECT만 허용). 비멱등 — 반복 호출 시 여러 개 생성됨

name(필수), sql(필수), description, platform(darwin/windows/linux)

mspbotsfleet_update_query

쿼리 업데이트 (부분 업데이트, 변경할 필드만 전달)

query_id(필수), name, sql, description, platform

mspbotsfleet_delete_query

쿼리 및 해당 리포트 데이터 삭제

query_id(필수)

mspbotsfleet_run_query

호스트에서 쿼리를 실시간 실행하고 결과 대기 (≤45초)

query_id(필수), host_ids(선택, ≤50대, 생략 시 이 테넌트의 상위 50대 기본 선택)

SQL 검증 규칙: 단일 SELECT 또는 WITH … SELECT만 허용하며, 끝의 세미콜론은 자동 제거되고 본문에 ;가 있으면 거부됩니다. 이 검증은 백엔드에서 수행되며, 이 서비스는 중복 검증하지 않습니다.

빠른 시작

Docker (권장)

docker compose up --build

서버는 http://localhost:8080에서 시작됩니다.

로컬 (uv)

uv sync
python -m mspbots_fleet_mcp

헬스 체크

curl http://localhost:8080/health
# {"status": "ok"}

헬스 엔드포인트에는 자격 증명이 필요하지 않습니다.

인증 매개변수 (Authentication)

/mcp에 대한 모든 요청에는 다음 HTTP 헤더가 포함되어야 합니다 (MCP 호출자가 제공 — mspbots-agent-mcp / ticketqa-mcp와 일관성 유지):

Header

유형

필수 여부

설명

예시

X-MSP-Token

string

필수

Fleet Platform에서 발급한 액세스 자격 증명 (JWT bearer token). 이 서비스는 그대로 다운스트림 요청의 Authorization: Bearer <token>으로 전달합니다.

X-MSP-Token: <jwt-bearer-token>

X-MSP-Tenant-Id

string

필수

테넌트 식별자. 다운스트림 API로 전달할 때 X_Tenant_ID 헤더로 이름이 바뀝니다 (테넌트는 JWT에도 포함됨).

X-MSP-Tenant-Id: <tenant-id>

X-MSP-Host

string

필수

Fleet API가 있는 호스트.

X-MSP-Host: https://agent.mspbots.ai

세 헤더 중 하나라도 없으면 401 Unauthorized를 반환합니다.

다운스트림 Fleet API는 인증 실패(토큰 누락/서명 오류/역할 부족) 시 403을 반환합니다. 401이 아닙니다. 401은 이 서비스 계층(게이트웨이 헤더 누락)에서만 발생합니다.

환경 변수

변수

기본값

설명

MCP_HTTP_PORT

8080

수신 포트

MCP_HTTP_HOST

0.0.0.0

수신 호스트

MCP 엔드포인트

POST http://localhost:8080/mcp

다음으로 MCP 클라이언트를 연결하세요:

  • 전송: http (Streamable HTTP / SSE)

  • 헤더: X-MSP-Token, X-MSP-Tenant-Id, X-MSP-Host (모두 필수)

테스트 예시 (Test Example)

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-MSP-Token: <token>" \
  -H "X-MSP-Tenant-Id: <tenant-id>" \
  -H "X-MSP-Host: https://agent.mspbots.ai" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "mspbotsfleet_list_hosts", "arguments": { "status": "online", "per_page": 10 } }
  }'

⚠️ 이 저장소는 공개 저장소이므로 실제 token / tenant id 등 민감한 정보를 커밋된 파일에 넣지 마세요. 위의 <token> / <tenant-id>는 단지 자리 표시자입니다.

Related MCP Connectors

Related MCP Servers