Skip to main content
Glama

gpu-broker-mcp

AI 에이전트를 위한 GPU 컴퓨팅 액세스를 중개하는 상태 비저장(stateless) MCP 서버입니다. 에이전트는 SSH 키, 노드 IP, 공급자 API를 직접 관리하지 않고도 네 가지 MCP 도구를 통해 노드를 발견하고, 용량을 예약하고, 추론을 디스패치하고, 결과를 폴링합니다.

SDK: mcp==2.0.0 (Python SDK v2, mcp.server.MCPServer) 대상 사양: MCP 사양 개정판 2026-07-28 전송: 스트리밍 가능한 HTTP, 상태 비저장 모드(stateless_http=True, json_response=True). 세션 없음, Mcp-Session-Id 없음, 고정 라우팅 없음.

아키텍처

┌─────────────────────────────────────────────────────────────┐
│  Agent (MCP client)                                         │
│  Calls: list_nodes → reserve_node → dispatch_inference      │
│         → get_result (poll)                                 │
└────────────────────────┬────────────────────────────────────┘
                         │ JSON-RPC over Streamable HTTP
                         │ (stateless, any replica)
┌────────────────────────▼────────────────────────────────────┐
│  gpu-broker-mcp server                                      │
│                                                             │
│  ┌──────────────────┐  ┌──────────────────┐                 │
│  │ HMAC-SHA256       │  │ NodePool ABC     │                 │
│  │ Handle signing    │  │  ├ FakeNodePool   │                │
│  │ & validation      │  │  └ VastNodePool   │                │
│  └──────────────────┘  └──────────────────┘                 │
│                                                             │
│  ┌──────────────────┐  ┌──────────────────┐                 │
│  │ Error taxonomy    │  │ JobStore ABC     │                 │
│  │ (single enum,     │  │  └ InMemoryStore  │                │
│  │  structured JSON) │  │    (per-replica)  │                │
│  └──────────────────┘  └──────────────────┘                 │
└────────────────────────┬────────────────────────────────────┘
                         │ SSH (VastNodePool only)
┌────────────────────────▼────────────────────────────────────┐
│  GPU node (e.g. Vast.ai RTX 3090)                           │
│  Runs inference workload, returns stdout                    │
└─────────────────────────────────────────────────────────────┘

브로커는 로컬에서 실행됩니다. 브로커는 GPU 노드의 클라이언트이지 노드에 상주하지 않습니다. CPU 바운드 HMAC 서명과 JSON 직렬화를 수행하며 GPU의 이점을 얻을 수 있는 작업은 없습니다.

Related MCP server: clausius

서명된 핸들 대신 세션이 아닌 이유

예약 상태는 핸들 자체에 포함됩니다. base64로 인코딩된 JSON 페이로드(노드 ID, 만료 시간, 범위)와 HMAC-SHA256 서명이 연결된 형태입니다. 비밀은 GPU_BROKER_SECRET에서 가져오며 설정되지 않으면 서버가 부팅을 거부합니다.

즉, 비밀을 공유하는 모든 복제본은 자체적으로 발급하지 않은 핸들도 검증할 수 있습니다. 세션 테이블, Mcp-Session-Id 헤더, 고정 라우팅 요구 사항이 없습니다. 로드 밸런서는 모든 요청을 모든 복제본으로 라우팅할 수 있습니다. 핸들에는 범위(reservetask)가 있으므로 예약 핸들을 작업 ID로 재생할 수 없으며 그 반대의 경우도 마찬가지입니다. 잘못 사용하면 HANDLE_SCOPE_INVALID가 반환됩니다.

메모리 내 JobStore가 복제본 간에 손실하는 것은 작업 상태 조회입니다. 복제본 B는 복제본 A에 디스패치된 작업의 상태를 알려줄 수 없습니다. 이는 상태 비저장 설계의 결함이 아니라 공유 백엔드(Redis, Postgres) 요구 사항입니다. 보안에 중요한 서명 검증은 완전히 이식 가능합니다.

도구

도구

매개변수

반환 값

list_nodes

사용 가능한 노드의 JSON 배열 (id, model, vram, price, load)

reserve_node

node_id, ttl_seconds

서명된 예약 핸들

dispatch_inference

handle, payload

{"task_id": "...", "status": "pending"}

get_result

task_id

{"status": "pending|completed|failed", "output": ..., "error": ...}

도구 서명은 백엔드에서 안정적입니다. FakeNodePoolVastNodePool로 교체해도 클라이언트에 표시되는 인터페이스는 변경되지 않습니다.

캐싱 참고 사항

list_nodes는 도구 결과에 meta.ttlMsmeta.cacheScope를 반환합니다. 이는 로컬 규칙입니다. SEP-2549는 개별 tools/call 결과가 아닌 tools/listresources/list 응답을 규율합니다. 이를 인식하는 클라이언트는 캐시할 수 있고, 그렇지 않은 클라이언트는 단순히 다시 호출합니다.

라우팅 헤더

서버는 게이트웨이 라우팅을 위해 Mcp-MethodMcp-Name 헤더를 내보내지만 서버 측에서 강제하지는 않습니다. 적용 지점은 브로커 자체가 아니라 에지(API 게이트웨이, 리버스 프록시)입니다.

오류 분류

모든 도구 오류는 code, message, retryable 및 선택적 retry_after_seconds가 포함된 구조화된 JSON을 반환합니다. 에이전트는 message가 아닌 code를 기준으로 분기해야 합니다. 메시지는 사람이 읽을 수 있는 진단 정보이며 변경될 수 있습니다.

코드

재시도 가능

발생 시점

NVML_VERSION_MISMATCH

아니요

NVIDIA 관리 라이브러리 버전이 GPU 호스트의 드라이버와 일치하지 않음

DRIVER_LIBRARY_MISMATCH

아니요

GPU 호스트의 CUDA 드라이버/라이브러리 버전 충돌

DPKG_LOCK_CONTENTION

GPU 호스트의 다른 프로세스(예: unattended-upgrades)가 패키지 관리자 잠금을 보유함

DOCKER_SOCKET_PERMISSION_DENIED

아니요

GPU 호스트에서 컨테이너 런타임 소켓에 액세스할 수 없음

INSUFFICIENT_VRAM

아니요

요청된 워크로드에 대한 GPU 메모리가 충분하지 않음

NODE_UNREACHABLE

GPU 노드에 연결할 수 없음(SSH 시간 초과, 연결 거부, DNS 오류)

RESERVATION_EXPIRED

아니요

서명된 핸들의 TTL이 경과함

HANDLE_SIGNATURE_INVALID

아니요

HMAC 서명이 일치하지 않음 — 변조, 잘못된 비밀번호 또는 잘못된 핸들

HANDLE_SCOPE_INVALID

아니요

핸들 범위 불일치 (예: 예약 핸들이 필요한 곳에 작업 핸들을 전달)

TLS_PROXY_FAILURE

브로커와 노드 간 TLS 종료 또는 프록시 계층 오류

JOB_NOT_FOUND

아니요

서명은 유효하지만 이 복제본의 저장소에 작업이 없음 (복제본 간 메모리 내 저장소에서 예상됨)

호스트 수준 오류(NVML_VERSION_MISMATCH ~ DOCKER_SOCKET_PERMISSION_DENIED)는 vast.py:_raise_from_stderr의 SSH stderr 문자열에서 매핑됩니다. 패턴은 Vast.ai GPU 호스트의 알려진 오류 모드를 기반으로 하지만 아직 캡처된 프로덕션 문자열에 대해 검증되지는 않았습니다. 작업 3에서는 축어적 오류 출력을 캡처하고 일치 패턴을 구체화합니다.

빠른 시작

페이크 모드 (GPU, API 키 불필요)

export GPU_BROKER_SECRET="any-secret-string"
python src/gpu_broker/server.py
# Server at http://127.0.0.1:8000/mcp

Vast.ai 모드 (실제 GPU)

export GPU_BROKER_SECRET="any-secret-string"
export VASTAI_API_KEY="your-vast-api-key"

# Find and rent a node
python vast_manage.py search --gpu "RTX 3090" --max-price 0.30
python vast_manage.py rent <offer_id>
python vast_manage.py wait <instance_id>

# Start the broker (auto-detects VASTAI_API_KEY)
python src/gpu_broker/server.py

# When done
python vast_manage.py destroy <instance_id>

테스트 실행

uv run pytest tests/ -v

테스트에는 다음이 포함됩니다.

  • 핸들 왕복 (예약 → 디스패치 → get_result)

  • 변조된 서명 거부

  • 만료된 핸들 거부

  • 범위 불일치 거부

  • 교차 복제본 조회에 대한 JOB_NOT_FOUND

  • 하위 프로세스 상태 비저장 테스트: 세 개의 실제 HTTP 서버(A와 B는 비밀을 공유하고 C는 다른 비밀을 가짐)를 부팅하고, A에서 작업을 발행하고, A가 pending을 반환하고 B가 JOB_NOT_FOUND를 반환하고 C가 HANDLE_SIGNATURE_INVALID를 반환하는지 확인

  • 비밀 미설정 부팅 거부

  • 모든 오류 변형에 대한 직렬화 왕복

현재 범위 및 제한 사항

이것은 프로덕션 시스템이 아닌 작동하는 프로토타입입니다.

  • FakeNodePool은 세 노드의 정적 목록을 반환하며 실제 추론을 디스패치하지 않습니다. 도구 상호 작용 및 핸들 메커니즘을 테스트하는 데 유용합니다.

  • VastNodePool은 Vast.ai API를 쿼리하여 실행 중인 인스턴스를 찾고 SSH를 통해 추론을 디스패치합니다. 실제 작업을 수행하지만 연결 풀링, 재시도 논리 또는 시스템 기본값 이상의 SSH 키 관리는 없습니다.

  • InMemoryJobStore는 다시 시작하면 모든 상태를 잃고 복제본 간에 작업 상태를 공유할 수 없습니다. 프로덕션 배포에는 공유 백엔드(Redis, Postgres)가 필요합니다.

  • 호스트 수준 오류에 대한 오류 분류 패턴은 알려진 오류 모드를 기반으로 한 추측입니다. GPU 호스트에서 캡처된 실제 stderr에 대한 검증이 필요합니다.

  • MCP 엔드포인트 자체에는 인증이 없습니다. HTTP 포트에 도달할 수 있는 모든 클라이언트가 도구를 호출할 수 있습니다. 프로덕션에서는 앞에 인증 계층이 필요합니다.

  • 속도 제한, 요청 크기 제한, 감사 로깅이 없습니다.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Jungle Grid MCP Server lets AI agents submit, estimate, monitor, and retrieve logs for GPU workloads through Jungle Grid. It enables agentic execution for inference, training, fine-tuning, and batch jobs without manually choosing GPU providers or infrastructure.
    8
    26
    4
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    An MCP server for monitoring and managing multi-cluster Slurm GPU jobs, enabling AI agents to execute commands, check allocations, and explore logs across HPC clusters.
    1

View all related MCP servers

Related MCP Connectors

  • HiveCompute MCP Server — decentralized inference router for AI agents

  • Coordinate multiple AI agents over MCP: atomic claims, leases, shared ledger, handoffs, tasks.

  • Massed Compute MCP — GPU inventory, VM lifecycle, billing, SSH keys, and setup recipes.

View all MCP Connectors

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/Arifuzzamanjoy/gpu-broker-mcp'

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