Skip to main content
Glama
crashzero9
by crashzero9

OHMS - Order Hub Management System

Flauraly Flowers and Plants - Python FastMCP-Server, gehostet auf einer Replit Reserved VM.

Zweck

OHMS stellt eine kleine, gehärtete Auswahl an Tools für Bestellungen und Bestandsverwaltung für Violet (und jeden anderen autorisierten MCP-Client) über das Model Context Protocol bereit. Es zentralisiert den Zugriff auf die Shopify Admin REST-API hinter einer Bearer-Authentifizierung, sodass Agenten niemals mit rohen Shopify-Anmeldedaten in Berührung kommen.

Architektur

+-----------------+      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      |
                                      +------------------------------+

Sowohl /mcp (Streamable HTTP) als auch /sse (Server-Sent Events Fallback) sind gleichzeitig eingebunden, sodass jedes MCP-Client-Transportprofil funktioniert.

Umgebungsvariablen

OHMS authentifiziert sich bei Shopify über den OAuth 2.0 client_credentials-Grant. Der Server speichert niemals ein langlebiges SHOPIFY_ACCESS_TOKEN; stattdessen hält er ein SHOPIFY_CLIENT_ID + SHOPIFY_CLIENT_SECRET-Paar und erstellt bei Bedarf ein kurzlebiges Zugriffstoken über https://{shop}.myshopify.com/admin/oauth/access_token. Das erstellte Token wird im Arbeitsspeicher mit einem 5-Minuten-Puffer für die Uhrzeit-Abweichung zwischengespeichert und automatisch (oder bei einem 401/403-Fehler eines nachfolgenden Aufrufs) neu erstellt. Alle Werte werden über os.environ.get(...) gelesen. Nichts ist fest codiert.

Variable

Zweck

PORT

TCP-Port für die Bindung (wird von Replit injiziert; Standard ist 8080).

OHMS_API_TOKEN

Statisches Bearer-Token, das bei jeder Anfrage außer /health erforderlich ist (Client-zu-OHMS-Authentifizierung – getrennt von Shopify).

SHOPIFY_STORE_URL

Shop-Domain, z. B. flauraly.myshopify.com.

SHOPIFY_CLIENT_ID

Shopify App Client ID (verwendet für OAuth client_credentials Grant).

SHOPIFY_CLIENT_SECRET

Shopify App Client Secret (verwendet für OAuth client_credentials Grant). Rotation gemäß Zeitplan in Secrets_Registry.md.

SHOPIFY_API_VERSION

Fixierte Shopify API-Version, z. B. 2025-01.

PRINTER_IP

Lokale Netzwerk-IP des Bondruckers (wird vom Stub verwendet).

Siehe .env.example für die Platzhalter-Vorlage.

Lokale Entwicklung (Windows)

OHMS liest .env nur bei lokaler Ausführung (über python-dotenv). Bootstrappen Sie Ihre .env aus dem Windows DPAPI-geschützten Secrets-Speicher, anstatt Geheimnisse im Klartext einzugeben:

# 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

Der Server lauscht standardmäßig auf http://0.0.0.0:8080. Testen mit:

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

Replit-Bereitstellung

  1. Erstellen Sie ein Replit-Projekt und importieren Sie diesen Ordner.

  2. Setzen Sie im Bereich „Secrets“ jede Variable aus .env.example (unter Verwendung der echten Werte – fügen Sie diese niemals in eine committete Datei ein).

  3. Bestätigen Sie, dass .replit deploymentTarget = "reserved_vm" und Port 8080 -> 80 anzeigt.

  4. Bereitstellen. Die öffentliche URL lautet https://ohms-server.crashzero9.replit.app.

  5. Überprüfen Sie beide Transporte:

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

Tool-Registrierung

Tool

Quelle

Hinweise

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 (setzt Tags)

get_inventory_snapshot()

Shopify Admin REST

GET /inventory_levels.json?limit=50

get_doordash_orders_via_browser()

Stub

Gibt Routing-Dict für Browser-Automatisierungsübergabe zurück.

print_order_ticket(order_id)

Stub

Liest PRINTER_IP; gibt Warteschlangenstatus zurück. Treiber ausstehend.

Phasenstatus

  • Phase 1 (aktuell): MVP-Gerüst, Bearer-Authentifizierung, sechs Tools (4 live + 2 Stubs), Replit Reserved VM-Bereitstellung, grundlegende pytest-Suite.

  • Phase 2 (geplant): OAuth 2.1 als Ersatz für statische Bearer-Token, vollständiger DoorDash-Treiber, echter Netzwerkdruckertreiber, strukturierte Protokollierung mit Schwärzung von Geheimnissen, Ratenbegrenzung.

Sicherheitshinweise

  • In keiner committeten Datei erscheinen geheime Werte.

  • Authorization-Header und vollständige Shopify-Antwortkörper werden niemals protokolliert.

  • /health gibt nur die Zeichenfolge OHMS OK zurück – keine Versions-, Umgebungs- oder Pfadinformationen.

  • Alle httpx-Aufrufe haben ein explizites Timeout von 30 Sekunden.

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