Skip to main content
Glama
crashzero9
by crashzero9

OHMS - 주문 허브 관리 시스템 (Order Hub Management System)

Flauraly Flowers and Plants - Replit Reserved VM에서 호스팅되는 Python FastMCP 서버.

목적

OHMS는 주문 및 재고 관련 도구의 작고 강화된 세트를 Model Context Protocol을 통해 Violet(및 기타 승인된 MCP 클라이언트)에 노출합니다. 이 시스템은 Shopify Admin REST 액세스를 Bearer 인증 게이트 뒤에 중앙 집중화하여 에이전트가 원시 Shopify 자격 증명에 직접 접근하지 못하도록 합니다.

아키텍처

+-----------------+      Bearer       +------------------------------+
|  MCP Client     |  ---------------> |  OHMS (Replit Reserved VM)   |
|  (Violet, etc.) |   /mcp or /sse    |                              |
+-----------------+                   |  Starlette parent app        |
                                      |  +-- /health (open)          |
                                      |  +-- /mcp   (Streamable HTTP)|
                                      |  +-- /sse   (SSE fallback)   |
                                      |  +-- BearerAuthMiddleware    |
                                      +--------------+---------------+
                                                     |
                                                     v
                                      +------------------------------+
                                      |  Shopify Admin REST API      |
                                      +------------------------------+

/mcp(Streamable HTTP)와 /sse(Server-Sent Events 폴백)가 동시에 마운트되어 모든 MCP 클라이언트 전송 프로필이 작동합니다.

환경 변수

OHMS는 OAuth 2.0 client_credentials 권한 부여를 통해 Shopify에 인증합니다. 서버는 장기 지속되는 SHOPIFY_ACCESS_TOKEN을 보유하지 않으며, 대신 SHOPIFY_CLIENT_ID + SHOPIFY_CLIENT_SECRET 쌍을 보유하고 https://{shop}.myshopify.com/admin/oauth/access_token에 요청하여 단기 액세스 토큰을 즉시 생성합니다. 생성된 토큰은 5분 클록 스큐 버퍼와 함께 메모리에 캐시되며, 자동으로(또는 이후 호출에서 401/403 오류 발생 시) 재생성됩니다. 모든 값은 os.environ.get(...)을 통해 읽어오며, 하드코딩된 값은 없습니다.

변수

목적

PORT

바인딩할 TCP 포트 (Replit이 이를 주입하며, 기본값은 8080입니다).

OHMS_API_TOKEN

/health를 제외한 모든 요청에 필요한 정적 Bearer 토큰 (클라이언트와 OHMS 간 인증 - Shopify와는 별개).

SHOPIFY_STORE_URL

상점 도메인 (예: flauraly.myshopify.com).

SHOPIFY_CLIENT_ID

Shopify 앱 클라이언트 ID (OAuth client_credentials 권한 부여에 사용).

SHOPIFY_CLIENT_SECRET

Shopify 앱 클라이언트 시크릿 (OAuth client_credentials 권한 부여에 사용). Secrets_Registry.md 일정에 따라 교체하십시오.

SHOPIFY_API_VERSION

고정된 Shopify API 버전 (예: 2025-01).

PRINTER_IP

영수증 프린터의 로컬 네트워크 IP (스텁에서 사용).

플레이스홀더 템플릿은 .env.example을 참조하십시오.

로컬 개발 (Windows)

OHMS는 로컬에서 실행될 때만( python-dotenv를 통해) .env를 읽습니다. 비밀 정보를 일반 텍스트로 입력하는 대신 Windows DPAPI 보호 비밀 저장소에서 .env를 부트스트랩하십시오:

# 1. Pull each secret from DPAPI into the local .env (PowerShell pseudocode)
$secrets = @("OHMS_API_TOKEN","SHOPIFY_STORE_URL","SHOPIFY_CLIENT_ID","SHOPIFY_CLIENT_SECRET","SHOPIFY_API_VERSION","PRINTER_IP")
foreach ($k in $secrets) {
    $v = Unprotect-DpapiSecret -Name $k    # your local helper
    Add-Content .env "$k=$v"
}

# 2. Run the server
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python main.py

서버는 기본적으로 http://0.0.0.0:8080에서 수신 대기합니다. 다음으로 테스트하십시오:

curl http://localhost:8080/health
# => OHMS OK

Replit 배포

  1. Replit 프로젝트를 생성하고 이 폴더를 가져옵니다.

  2. Secrets 창에서 .env.example의 모든 변수를 설정합니다 (실제 값을 사용하며, 커밋된 파일에 붙여넣지 마십시오).

  3. .replit 파일에 deploymentTarget = "reserved_vm" 및 포트 8080 -> 80이 설정되어 있는지 확인합니다.

  4. 배포합니다. 공개 URL은 https://ohms-server.crashzero9.replit.app입니다.

  5. 두 전송 방식을 모두 확인합니다:

curl https://ohms-server.crashzero9.replit.app/health
curl -H "Authorization: Bearer $OHMS_API_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \
     https://ohms-server.crashzero9.replit.app/mcp

도구 레지스트리

도구

소스

참고

get_order(order_id)

Shopify Admin REST

GET /orders/{id}.json

list_pending_orders()

Shopify Admin REST

GET /orders.json?status=open&limit=50

update_order_status(order_id, status)

Shopify Admin REST

PUT /orders/{id}.json (태그 설정)

get_inventory_snapshot()

Shopify Admin REST

GET /inventory_levels.json?limit=50

get_doordash_orders_via_browser()

스텁

브라우저 자동화 핸드오프를 위한 라우팅 딕셔너리 반환.

print_order_ticket(order_id)

스텁

PRINTER_IP를 읽고 대기 상태를 반환. 드라이버 대기 중.

단계 상태

  • 1단계 (현재): MVP 스캐폴드, Bearer 인증, 6개 도구(4개 라이브 + 2개 스텁), Replit Reserved VM 배포, 기본 pytest 스위트.

  • 2단계 (계획): 정적 Bearer를 대체하는 OAuth 2.1, 전체 DoorDash 드라이버, 실제 네트워크 프린터 드라이버, 비밀 정보가 마스킹된 구조화된 로깅, 속도 제한.

보안 참고 사항

  • 커밋된 파일에는 비밀 값이 나타나지 않습니다.

  • Authorization 헤더와 전체 Shopify 응답 본문은 기록되지 않습니다.

  • /health는 버전, 환경, 경로 정보 없이 문자열 OHMS OK만 반환합니다.

  • 모든 httpx 호출에는 30초의 명시적 타임아웃이 설정되어 있습니다.

F
license - not found
-
quality - not tested
C
maintenance

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/crashzero9/ohms-mcp'

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