Skip to main content
Glama
diogoferacruz-dev

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

heyharper_list_stores

Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt).

heyharper_pull_store_orders

Ruft unerfüllte Bestellungen für einen Shop ab (store, since_days).

heyharper_pull_all_stores

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):

  1. Einstellungen → Apps und Vertriebskanäle → Apps entwickelnApp erstellen (z. B. mit dem Namen cowork-unfulfilled-reader).

  2. Admin-API-Berechtigungen konfigurieren und aktivieren (Leseberechtigung reicht):

    • read_orders

    • read_all_orders (ermöglicht die Abfrage von Bestellungen, die älter als 60 Tage sind)

    • read_products

    • read_inventory

    • read_fulfillments

    • read_merchant_managed_fulfillment_orders

  3. App installieren und anschließend unter API-Zugangsdaten das Admin-API-Zugriffstoken (shpat_…) anzeigen lassen. Kopieren Sie es.

  4. 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>/mcp

  • Auth: Geben Sie das Bearer-Token (MCP_AUTH_TOKEN) an, sodass die Requests Authorization: Bearer <token> senden.

Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anfügen kann, können Sie alternativ MCP_PATH auf 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 (.env ist in .gitignore).

  • MCP_AUTH_TOKEN muss 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

MCP_AUTH_TOKEN

empfohlen.

Bearer-Token für den Endpunkt. Nicht gesetzt, der Endpunkt ist offen.

MCP_PATH

nein

/mdcp

Pfad des Endpunkts.

PORT

nein

3000

Wird normalerweise vom Host gesetzt.

SHOPIFY_API_VERSION

nein

2024-10

Version der Admin-API.

HH_<KEY>_DOMAIN

bez.

KEY use US , EU, UK, BR, MX.

HH_<KEY>_TOKEN

bez.

shpat_… Admin-API-Zugriffstoken.

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-Server contains "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

heyharper_list_stores

Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt).

heyharper_pull_store_orders

Ruft unerfüllte Bestellungen für einen Shop ab (store, since_days).

heyharper_pull_all_stores

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):

  1. Einstellungen → Apps und Vertriebskanäle → Apps entwickelnApp erstellen (z. B. mit dem Namen cowork-unfulfilled-reader).

  2. Admin-API-Berechtigungen konfigurieren und aktivieren (nur Lesen reicht aus):

    • read_orders

    • read_all_orders (ermöglicht das Abfragen von Bestellungen, die älter als 60 Tage sind)

    • read_products

    • read_inventory

    • read_fulfillments

    • read_merchant_managed_fulfillment_orders

  3. App installieren und anschließend under API-Zugangsdaten das Admin-API-Zugriffstoken (shpat_…) anzeigen lassen. Kopieren Sie es.

  4. 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 Dockerfile automatisch. 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>/mcp

  • Auth: Geben Sie das Bearer-Token (MCP_AUTH_TOKEN) an, damit Requests Authorization: Bearer <token> senden.

Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anfügen kann, können Sie alternativ MCP_PATH auf 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 excluded

Posten Sie die Zusammenfassung anschließend in #daily-unfulfilled.

Sicherheitshinweise

  • Tokens liegen ausschließlich in den Umgebungsvariablen/Secrets des Hosts – niemals im Repository (.env ist in .gitignore).

  • MCP_AUTH_TOKEN muss 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

MCP_AUTH_TOKEN

empfohlen

Bearer-Token für den Endpunkt. Wenn nicht gesetzt, ist der Endpunkt offen.

MCP_PATH

nein

/mcp

Endpunkts-Pfad.

PORT

nein

3000

Wird normalerweise vom Host gesetzt.

SHOPIFY_API_VERSION

nein

2024-10

Version der Admin-API.

HH_<KEY>_DOMAIN

pro Shop

KEY ∈ US, EU, UK, BR, MX.

HH_<KEY>_TOKEN

pro Shop

shpat_… Admin-API-Zugriffstoken.

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

heyharper_list_stores

Listet die aktuell konfigurierten Shops auf (Domain und Token sind jeweils gesetzt).

heyharper_pull_store_orders

Ruft unerfüllte Bestellungen für einen Shop ab (store, since_days).

heyharper_pull_all_stores

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):

  1. Einstellungen → Apps und Vertriebskanäle → Apps entwickelnApp erstellen (z. B. mit dem Namen cowork-unfulfilled-reader).

  2. Admin-API-Berechtigungen konfigurieren und aktivieren (nur Lesen ist ausreichend):

    • read_orders

    • read_all_orders (ermöglicht das Abfragen von Bestellungen, die älter als 60 Tage sind)

    • read_products

    • read_inventory

    • read_fulfillments

    • read_merchant_managed_fulfillment_orders

  3. App installieren und anschließend unter API-Zugangsdaten das Admin-API-Zugriffstoken (shpat_…) anzeigen lassen. Kopieren Sie es.

  4. 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 Dockerfile automatisch. 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/health

3. 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>/mcp

  • Auth: Geben Sie das Bearer-Token (MCP_AUTH_TOKEN) an, sodass Requests Authorization: Bearer <token> senden.

Falls die Connector-Oberfläche in Ihrem Plan keinen statischen Header anbinden kann, können Sie alternativ MCP_PATH auf 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 excluded

Posten Sie die Zusammenfassung dann in #daily-unfulfilled.

Sicherheitshinweise

  • Tokens liegen ausschließlich in den Umgebungsvariablen/Secrets des Hosts – niemals im Repository (.env ist in .gitignore).

  • MCP_AUTH_TOKEN muss 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

MCP_AUTH_TOKEN

empfohlen

Bearer-Token für den Endpunkt. Wenn nicht gesetzt, ist der Endpunkt offen.

MCP_PATH

nein

/mcp

Pfad des Endpunkts.

PORT

nein

3000

In der Regel vom Host gesetzt.

SHOPIFY_API_VERSION

nein

2024-10

Version der Admin-API.

HH_<KEY>_DOMAIN

pro Shop

KEY ∈ US, EU, UK, BR, MX.

HH_<KEY>_TOKEN

pro Shop

shpat_… Admin-API-Zugriffstoken.

F
license - not found
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
    Not graded
    quality
    B
    maintenance
    A 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Shopify Admin API. Enables product, order, customer, and inventory management via natural language.
    8
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Hosted 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.

View all related MCP servers

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.

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/diogoferacruz-dev/heyharper-shopify-mcp-server'

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