OHMS
OHMS - Order Hub Management System
Flauraly Flowers and Plants - Replit Reserved VM上でホストされるPython FastMCPサーバー。
目的
OHMSは、注文および在庫関連のツールを、Model Context Protocol(MCP)を介して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(ストリーミング可能な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(...) を介して読み取られます。ハードコードされているものはありません。
変数 | 目的 |
| バインドするTCPポート(Replitがこれを注入します。デフォルトは8080)。 |
|
|
| ショップのドメイン(例: |
| ShopifyアプリのクライアントID(OAuth client_credentials付与に使用)。 |
| Shopifyアプリのクライアントシークレット(OAuth client_credentials付与に使用)。 |
| 固定されたShopify APIバージョン(例: |
| レシートプリンターのローカルネットワーク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 OKReplitへのデプロイ
Replitプロジェクトを作成し、このフォルダをインポートします。
Secretsペインで、
.env.exampleのすべての変数を設定します(実際の値を使用してください。コミットされたファイルには絶対に貼り付けないでください)。.replitにdeploymentTarget = "reserved_vm"およびポート8080 -> 80が表示されていることを確認します。デプロイします。パブリックURLは
https://ohms-server.crashzero9.replit.appです。両方のトランスポートを確認します:
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ツールレジストリ
ツール | ソース | メモ |
| Shopify Admin REST |
|
| Shopify Admin REST |
|
| Shopify Admin REST |
|
| Shopify Admin REST |
|
| スタブ | ブラウザ自動化ハンドオフ用のルーティング辞書を返します。 |
| スタブ |
|
フェーズ状況
フェーズ1 (現在): MVP足場、Bearer認証、6つのツール(ライブ4つ + スタブ2つ)、Replit Reserved VMデプロイ、基本的なpytestスイート。
フェーズ2 (計画中): 静的Bearerを置き換えるOAuth 2.1、完全なDoorDashドライバー、実際のネットワークプリンタードライバー、シークレットを秘匿化した構造化ログ、レート制限。
セキュリティに関する注意
コミットされたファイルにはシークレット値は一切含まれません。
AuthorizationヘッダーおよびShopifyの完全なレスポンスボディはログに記録されません。/healthはリテラル文字列OHMS OKのみを返します(バージョン、環境、パス情報は含まれません)。すべての
httpx呼び出しには30秒の明示的なタイムアウトが設定されています。
Related MCP Connectors
Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.