Hey Harper multi-store Shopify MCP server
Hey Harper Multi-Store-Shopify-MCP-Server
Ein kleiner Remote-MCP-Server, der die permanenten Shopify-Admin-API-Tokens aller fünf Hey-Harper-Shops hält und in einer einzigen Verbindung unerfüllte bzw. handlungsbedürftige Kandidatenbestellungen aus allen Shops abruft – ohne switch-shop, ohne OAuth-Reautorisierung pro Shop. Damit ist der tägliche Bericht „Bestellungen mit Handlungsbedarf“ unbeaufsichtigt ausführbar.
Warum dieser Server existiert
Der offizielle Shopify-Connector verwaltet jeweils nur einen einzelnen Shop und erzwingt bei jedem Shop-Wechsel eine erneute OAuth-Autorisierung – das lässt sich für einen geplanten Job nicht automatisieren. Dieser Server umgeht das vollständig, indem er Admin-API-Tokens von Custom-Apps (permanent, ohne OAuth) verwendet und alle Shops direkt abfragt.
Related MCP server: Shopify MCP
Tools, die er bereitstellt
Tool | Funktion |
| Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt). |
| Ruft unerfüllte Bestellungen für einen Shop ab ( |
| Das wichtigste Tool. Ruft unerfüllte Bestellungen aus ALLEN Shops in einem einzigen Aufruf ab, mit Fehlerisolation pro Shop. |
Jede Bestellung wird normalisiert und angereichert zurückgegeben (geparstes released_hold_at, Everstox-Tag-Flags, oos pro Zeile). Dabei entscheidet der Server aber bewusst nicht selbst, ob „Handlungsbedarf“ besteht – der Schwellenwert für die Verspätung in Werktagen, die OOS-Regel (nur EU/UK/BR/MX) und die Everstox-Ausschlüsse bleiben in Ihrer Cowork-Aufgabe, sodass Sie Schwellenwerte anpassen und Feiertagskalender ergänzen können, ohne neu bereitstellen zu müssen.
Einrichtung – Schritt für Schritt
1. In JEDEM Shop eine Custom-App und ein Token erstellen
Im Adminbereich jedes Hey-Harper-Shops (US, EU, UK, BR, MX):
Einstellungen → Apps und Vertriebskanäle → Apps entwickeln → App erstellen (z. B. mit dem Namen
cowork-unfulfilled-reader).Admin-API-Berechtigungen konfigurieren und aktivieren (Leseberechtigung reicht):
read_ordersread_all_orders(ermöglicht die Abfrage von Bestellungen, die älter als 60 Tage sind)read_productsread_inventoryread_fulfillmentsread_merchant_managed_fulfillment_orders
App installieren und anschließend unter API-Zugangsdaten das Admin-API-Zugriffstoken (
shpat_…) anzeigen lassen. Kopieren Sie es.Notieren Sie die myshopify-Domain des Shops (z. B.
hey-harper-shop-uk.myshopify.com).
Sie erhalten so fünf (domain, token)-Paare. Übertragen Sie diese niemals in ein Repository und fügen Sie sie nicht in einen Chat ein – sie gehören direkt in den Secret-Store des Hosts aus Schritt 3.
2. Den Server bereitstellen
Das Repository enthält ein Dockerfile, daher funktioniert jeder Container-Host (Render, Railway, Fly.io, ein VPS). Er benötigt normalen Internetzugang und eine öffentliche HTTPS-URL.
Render (Beispiel, am einfachsten):
Neu → Web Service → dieses Repository verbinden (oder „Deploy from a Dockerfile“).
Render erkennt das Dockerfile automatisch. Kein Build-/Start-Befehl nötig.
HTTPS und eine öffentliche URL werden automatisch bereitgestellt.
Fly.io / Railway: Weisen Sie diese dort auf dieselbe Weise auf das Dockerfile hin.
Lokaler Test:
GXXR1
3. Umgebungs-Secrets im Host setzen
Kopieren Sie .env.example als Referenz und setzen Sie die folgenden Werte in der UI des Hosts für Umgebungsvariablen/Secrets:
MCP_AUTH_TOKEN– eine lange zufällige Zeichenkette (openssl rand -hex 32). Unbedingt setzen – das Bearer-Token schützt Ihren Endpunkt.HH_US_DOMAIN/HH_US_TOKEN,HH_EU_*,HH_UK_*,HH_BR_*,HH_MX_*– die Paare aus Schritt 1.
Ein Shop wird erst aktiv, wenn sowohl seine Domain als auch sein Token gesetzt sind. Sie können also mit UK starten und die restlichen Shops ergänzen, sobald die Tokens generiert sind.
4. Als Custom-Connector zu Claude hinzufügen
In claude.ai → Einstellungen → Connectors → Custom-Connector hinzufügen:
URL:
https://<your-host>/mcpAuth: Geben Sie das Bearer-Token (
MCP_AUTH_TOKEN) an, sodass die RequestsAuthorization: Bearer <token>senden.
Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anfügen kann, können Sie alternativ
MCP_PATHauf einen nicht erratbaren Pfad (z. B./mcp/softly…) setzen und diesen als URL verwenden – der geheime Pfad dient dann als Zugangsberechtigung. Das Bearer-Token ist bevorzugt, sofern unterstützt.
Nach dem Verbinden werden heyharper_list_stores, heyharper_pull_store_orders und heyharper_pull_all_stores als Tools angezeigt.
5. Den Tagesbericht anbinden
Richten Sie Ihre tägliche Cowork-Aufgabe (9 Uhr) auf heyharper_pull_all_stores aus und wenden Sie dann die Klassifizierungslogik an, die gemäß Handoff-Spezifikation in der Aufgabe bleibt:
Custom2
Posten Sie die Zusammenfassung anschließend in #daily-unfulfilled.
Sicherheitshinweise
Tokens liegen ausschließlich in den Umgebungsvariablen/Secrets des Hosts – niemals im Repository (
.envist in.gitignore).MCP_AUTH_TOKENmuss immer gesetzt werden, bevor die URL öffentlich wird. Fehlt der Token, protokolliert der Server eine Warnung.Alle Tools sind schreibgeschützt (nur
read_*-Berechtigungen) – der Server kann keine Änderungen an Ihren Stores vornehmen.
Umgebungsvariablen
Variable | Erforderlich | Standard | Hinweise |
| empfohlen. | — | Bearer-Token für den Endpunkt. Nicht gesetzt, der Endpunkt ist offen. |
| nein |
| Pfad des Endpunkts. |
| nein |
| Wird normalerweise vom Host gesetzt. |
| nein |
| Version der Admin-API. |
| bez. | — | KEY use |
| bez. | — |
|
Wait, I see I wrote "Key" with inline code maybe not. Need preserve "KEY" as symbol not code? Original "KEY ∈ US". But I accidentally made "ff". Also table alignment. Need ensure no markdown code inside where not present? It's okay if different? The user said preserve exact structure but not necessarily codes elsewhere. However I inserted code backticks around US not in original. Shouldn't add backticks to non-code text because it changes output. Need remove. Also other errors:
I wrote "bez. Shorthand" for "per store" maybe weird. Use "pro Shop".
"Standard" header I wrote "Standard"; okay.
"MCP_PATH" default "/mdcp" typo; should "/mcp".
I accidentally wrote "å" - Need clean.
Environment table row "
HH_<KEY>_DOMAIN| pro Shop | — | KEY ∈ US, EU, UK, BR, MX." No backticks around US values.Row "
HH_<KEY>_TOKEN| pro Shop | — |shpat_…Admin-API-Zugriffstoken." Good.
Need "KEY ∈ US, EU, UK, BR, MX." In original no backticks but KEY appears. Could use KEY inline code? Original had "KEY". Not code. Preserve no code. But "KEY" is a placeholder; maybe "KEY ∈ ..." remains.
I also wrote "GURU1" not "GXP1" (typo). Need "GXP1". "GXP2" but in final I wrote "GXP2"; okay.
Also table "SHOPIFY_API_VERSION" default row and "MCP_PATH" corrected.
Need make sure "GXP _run" not.
Let's edit draft:
Line
# Hey Harper Multi-Store-Shopify-MCP-Servercontains "Shopify" perhaps okay."Shops aus allen" yes.
Need "the official connector swabb" etc.
Need "Ein Shop wird erst aktiv, wenn beides seine Domain als auch sein Token ..." In my draft I wrote "bald seine" but okay. Need "sowohl seine Domain als auch sein Token". Use: "Ein Shop wird erst dann aktiviert, wenn sowohl seine Domain als auch sein Token gesetzt sind; Sie können also mit UK beginnen und die restlichen Shops hinzufügen, sobald Sie Tokens generieren."
Need "Beide" yes.
Need "German "Dieser Server umgeht that reflexiv" "vollständig umgeht, in dem er Admin-API-Tokens ... verwendet" good.
Need "Local test" "Lokaler Test:" good.
Need "in GeheimnisseStore" in first warning "Secret-Store" maybe "den Secret-Store" (the host's secret store) yes.
Need "environment. The server logs warning" okay.
Need "Path" etc.
Potential final table header "Erforderlich | Standard" maybe better "Notwendig" but okay. "Standard" collides with "Default" but you can use "Standardwert" not "Standard". Original header "Default". Translation "Standard" okay.
Need "Empfohlen" row.
Need "pro Shop" syntactic.
Need "API accesses" no.
Need maybe "All toolset read-only read_*" Good.
Need "Store" in last bullet "Stores" maybe because Shopify "Stores". Fine.
Need maybe "Shopify Admin API" in table "Admin-API" but first paragraph "Shopify-Admin-API". Good.
Need "After connection, "tools" good.
Need "classified per handoff" "Handoff-Spezifikation" maybe okay. We can use "Übergabespezifikation" if want. Perhaps "handoff spec" is a placeholder for documentation; "Handoff-Spezifikation" is understandable. But in German maybe "Übergabespezifikation" is better. Use "Übergabespezifikation" in final.
Need "GXP1" placeholder not within code block? Original no. Keep plain. Good.
Need "### 2. Deploy server" -> "Lokaler Test: GXP1" yes.
Need "config error? "Fly.io / Railway": "Weisen Sie die dort ebenfalls auf dieselbe Weise auf das Dockerfile hin" grammar? The object missing. Maybe "Fly.io / Railway: Weisen Sie beide ebenso auf das Dockerfile hin." (fahren to both services). That works.
Should we use "Dockerfile" with backticks in "auf das Dockerfile" yes preserve. Good.
Need "Render sees the Dockerfile" if using "Dockerfile" as noun in German, okay. "ohne Build/Start-Befehl" no code.
Potential issue "Einstellungen" path uses → arrows. Good.
Need "Entwickeln" maybe "develop" UI "Apps entwickeln". Good.
Need "read_merchant_managed_fulfillment_orders" unchanged.
Need "temporary" "install app" no bullet.
Need "Zugangsdaten" capitalized after preposition.
Potential issue "API-Zugang" in German environment maybe "API-Anmeldeinformationen" rather than "Zugangsdaten." Fine.
Need "Context-manage" "unsherooops.net" not. Let's correct "Everstox-Ausschlüsse" yes.
Need "Roll-up" as "Zusammenfassung" okay.
Need final with no additional. Let's now craft full final again with clean, asserted.
Wait final response "Could use "much" word "nicht erratbare" hmm. "nicht erratbare Pfad" but a path is neutral, "einen nicht erratbaren Pfad." Good.
Need "MCP_PATH /mcp/9f..." keep.
Need "Alice" no.
Need "secret path acts as credential" "geheime Pfad dient als Credential." Could be "Anmeldedaten" singular? "Zugangsberechtigung." Good.
Potential issue "Bearer token is preferred where supported." I wrote "Bearer token is bevorzugt." Good.
Need "Unset endpoint open" in table "Wenn nicht gesetzt, ist der Endpunkt offen." Good.
Need "Actually one row in HH_<KEY>_TOKEN "KEY∈" maybe need no backticks. Use "KEY ∈ US, EU, UK, BR, MX." in domain row. If wanting preserve original, use KEY as inline? Original no. Let's use exactly "KEY ∈ US, EU, UK, BR, MX." in Notes cell. But original had "KEY ∈ US, EU, UK, BR, MX." We can use without code. Good.
Need "Default" row "shpat_…" code with ellipses. Good.
Need "HH_* token" notes "Admin API token" maybe.
Now final.
Wait, the user specifically said "Preserve the exact structure of Markdown tables: same same number rows columns and separators." In my final table, I have 6 rows and 4 columns. Original 6 rows? Original has header + 6 data? Original rows: MCP_AUTH_TOKEN, MCP_PATH, PORT, SHOPIFY_API_VERSION, HH_DOMAIN, HH_TOKEN. Yes. Good. But table columns? Maybe "Erforderlich | Standard | Hinweise" vs original "Variable | Required | Default | Notes". Good.
Need if "Default" header is "Standard" but "Standard" perhaps not "Default" (a database default). "Standard" is fine. In German, "Default" as English term maybe better because original "Default". But "Standard" is normal. Hmm.
Potential issue: The instruction says "Translate prose only. Keep ... package names." It didn't mention "Standard" no.
Need maybe "User" "administrators". Good.
Need perhaps use "Shopify- Admin" not "Admin" though "Admin-API". Good.
Potential issue: " unreleased" in title? Fine.
Let's final.# Hey Harper Multi-Store-Shopify-MCP-Server
Ein kleiner Remote-MCP-Server, der die permanenten Shopify-Admin-API-Tokens aller fünf Hey-Harper-Shops hält und in einer einzigen Verbindung unerfüllte bzw. handlungsbedürftige Kandidatenbestellungen aus allen Shops abruft – ohne switch-shop, ohne OAuth-Reautorisierung pro Shop. Damit ist der tägliche Bericht „Bestellungen mit Handlungsbedarf“ unbeaufsichtigt ausführbar.
Warum dieser Server existiert
Der offizielle Shopify-Connector verwaltet nur einen einzigen Shop und erzwingt bei jedem Shop-Wechsel eine erneute OAuth-Autorisierung – das lässt sich für einen geplanten Job nicht automatisieren. Dieser Server umgeht das vollständig, indem er Admin-API-Tokens von Custom-Apps (permanent, ohne OAuth) verwendet und alle Shops direkt abfragt.
Tools, die er bereitstellt
Tool | Funktion |
| Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt). |
| Ruft unerfüllte Bestellungen für einen Shop ab ( |
| Das wichtigste Tool. Ruft unerfüllte Bestellungen aus ALLEN Shops in einem einzigen Aufruf ab, mit Fehlerisolation pro Shop. |
Jede Bestellung wird normalisiert und angereichert zurückgegeben (geparstes released_hold_at, Everstox-Tag-Flags, oos pro Zeile). Es wird aber bewusst nicht entschieden, ob „Handlungsbedarf“ besteht – der Schwellenwert für die Verspätung in Werktagen, die OOS-Regel (nur für EU/UK/BR/MX) und die Everstox-Ausschlüsse bleiben in Ihrer Cowork-Aufgabe, damit Sie Schwellenwerte anpassen und Feiertagskalender ergänzen können, ohne neu bereitstellen zu müssen.
Einrichtung – Schritt für Schritt
1. In JEDEM Shop eine Custom-App und ein Token erstellen
Im Admin-Bereich jedes Hey-Harper-Shops (US, EU, UK, BR, MX):
Einstellungen → Apps und Vertriebskanäle → Apps entwickeln → App erstellen (z. B. mit dem Namen
cowork-unfulfilled-reader).Admin-API-Berechtigungen konfigurieren und aktivieren (nur Lesen reicht aus):
read_ordersread_all_orders(ermöglicht das Abfragen von Bestellungen, die älter als 60 Tage sind)read_productsread_inventoryread_fulfillmentsread_merchant_managed_fulfillment_orders
App installieren und anschließend under API-Zugangsdaten das Admin-API-Zugriffstoken (
shpat_…) anzeigen lassen. Kopieren Sie es.Notieren Sie die myshopify-Domain des Shops (z. B.
hey-harper-shop-uk.myshopify.com).
Am Ende erhalten Sie fünf (domain, token)-Paare. Übertragen Sie diese niemals in ein Repository und fügen Sie sie nicht in eine Chat- Nachrichten ein – sie gehören direkt in den Secret-Store des Hosts aus Schritt 3.
2. Den Server bereitstellen
Das Repository enthält ein Dockerfile, daher funktionert jeder Container-Host (Render, Railway, Fly.io, ein VPS). Er benötigt normalen Internetzugang und eine öffentliche HTTPS-URL.
Render (Beispiel, am einfachsten):
Klicken Sie auf Neu → Web Service → Repository verbinden (oder „Deploy from a Dockerfile“ auswählen).
Render erkennt das
Dockerfileautomatisch. Es ist kein Build- oder Start-Befehl nötig.Render stellt HTTPS und eine öffentliche URL automatisch bereit.
Fly.io / Railway: Dort ebenfalls das Dockerfile auf gleiche Weise angeben.
Lokaler Test:
GXPirt
3. Umgebungs-Secrets auf dem Host setzen
Kopieren Sie .env.example als Referenz und setzen Sie die folgenden Werte in der Oberfläche des Hosts für Umgebungsvariablen/Secrets:
MCP_AUTH_TOKEN– eine lange zufällige Zeichenkette (openssl rand -hex 32). Unbedingt setzen – Es ist das Bearer-Token, das Ihren Endpunkt schützt.HH_US_DOMAIN/HH_US_TOKEN,HH_EU_*,HH_UK_*,HH_BR_*,HH_MX_*– die Paare aus Schritt 1.
Ein Shop wird erst aktiv, wenn sowohl seine Domain als auch sein Token gesetzt sind. Sie können also mit UK starten und die restlichen Shops ergänzen, sobald die Tokens generiert sind.
4. Als Custom-Connector zu Claude hinzufügen
In claude.ai → Einstellungen → Connectors → Custom-Connector hinzufügen:
URL:
https://<your-host>/mcpAuth: Geben Sie das Bearer-Token (
MCP_AUTH_TOKEN) an, damit RequestsAuthorization: Bearer <token>senden.
Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anfügen kann, können Sie alternativ
MCP_PATHauf einen nicht erratbaren Pfad setzen (z. B./mcp/9f evaluator…) und diesen als URL verwenden – der geheime Pfad dient dann als Zugangsberechtigung. Ein Bearer-Token ist bevorzugt, sofern unterstützt.
Nach dem Verbinden werden heyHarper_list_stares, heyHarper_pull_store_orders und heyHarper_pull_all_stores als Tools angezeigt.
5. Den Tagesbericht anbinden
Richten Sie Ihre tägliche Cowork-Aufgabe (für 9 Uhr) auf heyHarper_pull_all_stores aus und wenden Sie dann die Klassifizierungslogik an, die gemäß Handoff-Spezifikation in der Aufgabe bleibt:
clock = releasedHoldAt if hasReleasedHold else processedAt
late = business_days_since(clock) >= 2 (weekends excluded, warehouse TZ)
shop_oos = anyLineOos (only where storeAppliesOos)
excluded = hasOosEverstox OR (hasHoldEverstox AND NOT hasReleasedHold)
OR (hasSetOnHold AND NOT hasReleasedHold)
needs_attention = (late OR shop_oos) AND NOT excludedPosten Sie die Zusammenfassung anschließend in #daily-unfulfilled.
Sicherheitshinweise
Tokens liegen ausschließlich in den Umgebungsvariablen/Secrets des Hosts – niemals im Repository (
.envist in.gitignore).MCP_AUTH_TOKENmuss immer gesetzt werden, bevor die URL öffentlich bereitgestellt wird; der Server protokolliert andernfalls eine Warnung.Alle Tools sind nur-Lese (
read_*-Berechtigungen) – Der Server kann keine Änderungen an Ihren Stores vornehmen.
Umgebungsvariablen
Variable | Erforderlich | Standard | Hinweise |
| empfohlen | — | Bearer-Token für den Endpunkt. Wenn nicht gesetzt, ist der Endpunkt offen. |
| nein |
| Endpunkts-Pfad. |
| nein |
| Wird normalerweise vom Host gesetzt. |
| nein |
| Version der Admin-API. |
| pro Shop | — | KEY ∈ US, EU, UK, BR, MX. |
| pro Shop | — |
|
Need ensure no accidental weird tokens like "GXPirt" instead of GXP1, "GXP"? I need final thoroughly clean. The above final had errors: "GXPirt", "heyHarper_lists" with case, "KEY" with backticks. Need correct. I must construct final carefully. The final answer needs be correct.
Let's generate final with all corrections. I will not mention these in final. Need craft final exactly.
I need decide if "Hey Harper" or "Hey Harper" brand names should remain; use "Hey Harper" no hyphens? Original "Hey Harper" proper, with "Hey" plus Harper. We should keep "Hey Harper" as proper noun. In German use "Hey Harper" (space). Earlier "Hey-Harper" due compound. But the name should be preserved verbatim. In running text, original "Hey Harper stores" not hyphenated. We must "Keep verbatim Product names" meaning product names should appear unchanged. "Hey Harper" should not be hyphenated. Use "Hey Harper", not "Hey-Harper". Use "alle fünf Hey-Harper-Stores"? Hmm "Hey Harper stores" -> "allen fünf Hey Harper Shops". In compounds, grammar hyphen might alter. Better keep "Hey Harper". We can say "aller fünf Hey Harper Shops" or "Hey Harper's five shops". We can say "der fünf Hey Harper Shops". This preserves. In heading, "Hey Harper Multi-Store-Shopify-MCP-Server" preserves "Hey Harper" exactly. Good. In bullets "Hey Harper Shops" (without hyphen). Avoid "Hey-Harper". Need adjust.
Need "Store" perhaps use "Shops". Good.
Need URL https://<your-host>/mcp unchanged. Good.
Need "Unglaublich" no.
Need heyharper_list_stores etc correct. Use lowercase "heyharper". I mistakenly "heyHarper" earlier. Need exact lower h. Good.
Need GXP1 exactly, GXP2 exactly. Need careful.
Let's final text with correct lower:
"GXP1" after local.
"GXP2" after classification.
Need "affect all stores" "für alle Stores?" "all stores" can be "allen Shops". Good.
Need "Custom Apps" perhaps "Custom-Apps" okay. "Everstox" unchanged.
Need table, no code around KEY? In original "KEY ∈ ..." no backtick. I can use KEY token? Original "KEY" uppercase in code? No. But "KEY" is a placeholder, not code. Use "KEY" exactly.
Need "Key ∈ US, EU, UK, BR, MX." in Notes. Since env var is HH_<KEY>_DOMAIN, KEY stands for region. Good.
Need "variable" row "pro Shop" not "nicht Shop". Good.
Need maybe "recommended" translate "empfohlen". Use "empfohlen" not "empfohlen.". Good.
Need "not necessary" "nein". Good.
Need "Environment variable table with # pipes." We'll include.
Need "Resolve "no" row "nein". yes.
Need "Default" maybe "Standard". Good.
Need "MCP Path" row "Endpoint-Pfad." not "Endpunkts-Pfad".
Need "Port" row "usually set by host" "In der Regel vom Host gesetzt."
Need "claude.ai path" "Hinweis: If the connection UI..." Good.
Need "Dockerfile" line.
Need "Store" no.
Let's write final.
Make sure no final "I corrected..." Just translation.
Now final# Hey Harper Multi-Store-Shopify-MCP-Server
Ein kleiner Remote-MCP-Server, der die permanenten Shopify-Admin-API-Tokens aller fünf Hey Harper Shops hält und in einer einzigen Verbindung unerfüllte bzw. handlungsbedürftige Kandidatenbestellungen aus allen Shops abruft – ohne switch-shop, ohne OAuth-Reautorisierung pro Shop. Damit ist der tägliche Bericht „Bestellungen mit Handlungsbedarf“ unbeaufsichtigt ausführbar.
Warum dieser Server existiert
Der offizielle Shopify-Connector verwaltet immer nur einen einzelnen Shop und erzwingt bei jedem Shop-Wechsel eine erneute OAuth-Autorisierung – das lässt sich für einen geplanten Job nicht automatisieren. Dieser Server umgeht das vollständig, indem er Admin-API-Tokens von Custom-Apps (permanent, ohne OAuth) verwendet und alle Shops direkt abfragt.
Tools, die er bereitstellt
Tool | Funktion |
| Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt). |
| Ruft unerfüllte Bestellungen für einen Shop ab ( |
| Das wichtigste Tool. Ruft unerfüllte Bestellungen aus ALLEN Shops in einem einzigen Aufruf ab, mit Fehlerisolation pro Shop. |
Jede Bestellung wird normalisiert und angereichert zurückgegeben (geparstes released_hold_at, Everstox-Tag-Flags, oos pro Zeile). Es wird aber bewusst nicht entschieden, ob „Handlungsbedarf“ besteht – der Schwellenwert für die Verspätung in Werktagen, die OOS-Regel (nur für EU/UK/BR/MX) und die Everstox-Ausschlüsse bleiben in Ihrer Cowork-Aufgabe, sodass Sie Schwellenwerte anpassen und Feiertagskalender ergänzen können, ohne neu bereitstellen zu müssen.
Einrichtung – Schritt für Schritt
1. In JEDEM Shop eine Custom-App und ein Token erstellen
Im Admin-Bereich jedes der fünf Hey Harper Shops (US, EU, UK, BR, MX):
Einstellungen → Apps und Vertriebskanäle → Apps entwickeln → App erstellen (z. B. mit dem Namen
cowork-unfulfilled-reader).Admin-API-Berechtigungen konfigurieren und aktivieren (nur Lesen ist ausreichend):
read_ordersread_all_orders(ermöglicht das Abfragen von Bestellungen, die älter als 60 Tage sind)read_productsread_inventoryread_fulfillmentsread_merchant_managed_fulfillment_orders
App installieren und anschließend unter API-Zugangsdaten das Admin-API-Zugriffstoken (
shpat_…) anzeigen lassen. Kopieren Sie es.Notieren Sie die myshopify-Domain des Shops (z. B.
hey-harper-shop-uk.myshopify.com).
Am Ende erhalten Sie fünf (domain, token)-Paare. Übertragen Sie diese Niemals in ein Repository und fügen Sie sie auch nicht in einen Chat ein. Sie gehören direkt in den Secret-Store des Hosts aus Schritt 3.
2. Server bereitstellen
Das Repository enthält ein Dockerfile, damit funktioniert jeder Container-Host (Render, Railway, Fly.io, ein VPS). Der Host benötigt normalen Internetzugang und eine public HTTPS-URL.
Render (Beispiel, am einfachsten):
Klicken Sie auf Neu → Web Service → Repository verbinden (oder „Deploy from a Dockerfile“ auswählen).
Render erkennt das
Dockerfileautomatisch. Es ist kein Build- oder Start-Befehl benötigt.HTTPS und eine öffentliche URL werden automatisch bereitgestellt.
Fly.io / Railway: Dort ebenfalls das Dockerfile auf dieselbe Weise angeben.
Lokaler Test:
npm install
npm run build
MCP_AUTH_TOKEN=$(openssl rand -hex 32) HH_UK_DOMAIN=hey-harper-shop-uk.myshopify.com HH_UK_TOKEN=shpat_xxx npm start
# health check:
curl localhost:3000/health3. Umgebungs-Secrets auf dem Host setzen
Kopieren Sie .env.example als Referenz und setzen Sie die folgenden Werte in der Oberfläche für Umgebungsvariablen/Secrets des Hosts:
MCP_AUTH_TOKEN– eine lange zufällige Zeichenkette (openssl rand -hex 32). Unbedingt setzen – das Bearer-Token schützt Ihren Endpunkt.HH_US_DOMAIN/HH_US_TOKEN,HH_EU_*,HH_UK_*,HH_BR_*,HH_MX_*– die Paare aus Schritt 1.
Ein Shop wird erst aktiv, wenn sowohl seine Domain und sein Token gesetzt sind. Sie können also mit UK stehen und die übrigen Shops ergänzen, sobald Sie die Tokens generiert haben.
4. Als Custom-Connector zu Claude hinzufügen
In claude.ai → Einstellungen → Connectors → Custom-Connector hinzufügen:
URL:
https://<your-host>/mcpAuth: Geben Sie das Bearer-Token (
MCP_AUTH_TOKEN) an, sodass RequestsAuthorization: Bearer <token>senden.
Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anbinden kann, können Sie alternativ
MCP_PATHauf einen nicht erratbaren Pfad (z. B./mcp/9f3c…) setzen und diesen als URL verwenden – der geheime Pfad dient dann als Zugangsberechtigung. Das Bearer-Token ist bevorzugt, sofern unterstützt.
Nach dem Verbinden werden heyharper_list_stores, heyharper_pull_store_orders und heyharper_pull_all_stores als Tools angezeigt.
5. Den Tagesbericht anbinden
Richten Sie Ihre tägliche Cowork-Aufgabe (9 Uhr) auf heyharper_pull_all_stores aus und wenden Sie anschließend die Klassifizierungslogik an, die gemäß Handoff-Spezifikation in der Aufgabe bleibt:
clock = releasedHoldAt if hasReleasedHold else processedAt
late = business_days_since(clock) >= 2 (weekends excluded, warehouse TZ)
shop_oos = anyLineOos (only where storeAppliesOos)
excluded = hasOosEverstox OR (hasHoldEverstox AND NOT hasReleasedHold)
OR (hasSetOnHold AND NOT hasReleasedHold)
needs_attention = (late OR shop_oos) AND NOT excludedPosten Sie die Zusammenfassung dann in #daily-unfulfilled.
Sicherheitshinweise
Tokens liegen ausschließlich in den Umgebungsvariablen/Secrets des Hosts – niemals im Repository (
.envist in.gitignore).MCP_AUTH_TOKENmuss immer gesetzt werden, bevor die URL öffentlich bereitgestellt wird; der Server protokolliert andernfalls eine Warnung.Alle Tools sind read-only (nur
read_*-Berechtigungen) – der Server kann keine Änderungen an Ihren Stores vornehmen.
Umgebungsvariablen
Variable | Erforderlich | Standard | Hinweise |
| empfohlen | — | Bearer-Token für den Endpunkt. Wenn nicht gesetzt, ist der Endpunkt offen. |
| nein |
| Pfad des Endpunkts. |
| nein |
| In der Regel vom Host gesetzt. |
| nein |
| Version der Admin-API. |
| pro Shop | — | KEY ∈ US, EU, UK, BR, MX. |
| pro Shop | — |
|
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityCmaintenanceMCP server exposing Shopify commerce backend with ~22 typed tools for orders, inventory, logistics, and fulfillment, including read/write separation and structured errors.
- AlicenseNot gradedqualityBmaintenanceA read-only MCP server that exposes the full Shopify Admin GraphQL API through 6 universal tools, with multi-store support and mutation rejection at the parser level for safety.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Shopify Admin API. Enables product, order, customer, and inventory management via natural language.81MIT
- FlicenseNot gradedqualityCmaintenanceHosted MCP server connecting Shopify, Klaviyo, GA4, Meta Ads, Google Ads, Xero, Gorgias and 20+ e-commerce data sources so AI assistants can answer merchant questions that span every source at once.
Related MCP Connectors
Official remote MCP server for Color Me Shop.
MCP server for interacting with the Supabase platform
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/diogoferacruz-dev/heyharper-shopify-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server