MCP-Server
Verbinde KI-Assistenten (Claude, Cursor, Continue, Zed, ChatGPT, Windsurf) über das Model Context Protocol mit deinem Rekomi-Konto.
Rekomi betreibt einen gehosteten MCP-Server unter https://mcp.rekomi.com/api/mcp. Wähle unten deinen KI-Client, füge zwei Werte ein, starte neu. Fertig.
Claude Desktop
Zwei Zeilen in claude_desktop_config.json einfügen. Neu starten.
Claude Code
Ein Befehl claude mcp add. Die CLI speichert die Konfiguration.
ChatGPT
Settings → Connectors → Add custom connector. Nur über die Oberfläche.
Cursor
In ~/.cursor/mcp.json eintragen. Gleiche JSON-Struktur wie bei Claude.
Windsurf
Cascade-Panel → MCP servers → Add. Streamable-HTTP.

Continue
In ~/.continue/config.json eintragen. Die Erweiterung neu starten.
Zed
In ~/.config/zed/settings.json unter context_servers eintragen.
Ein Verbindungstoken erzeugen
Jede Verbindung braucht ein rk_mcp_*-Token. Es ist der einzige Schlüssel, den dein KI-Client verwendet.
- Melde dich bei app.rekomi.com an.
- Öffne Einstellungen → KI-Assistent.
- Klicke auf Verbindungstoken erzeugen, gib ihm einen Namen (z. B. Claude Desktop Laptop) und kopiere den
rk_mcp_*-Wert. Er wird genau einmal angezeigt.
Nur der Owner kann Tokens erstellen. Bis zu 10 aktive pro Organisation. Du kannst sie jederzeit widerrufen; die Änderung greift innerhalb von etwa 10 Sekunden. Verfügbar in jedem Plan, auch während der Testphase.
Claude Desktop verbinden
Bearbeite deine claude_desktop_config.json:
{
"mcpServers": {
"rekomi": {
"url": "https://mcp.rekomi.com/api/mcp",
"headers": {
"Authorization": "Bearer rk_mcp_YOUR_TOKEN_HERE"
}
}
}
}Starte Claude Desktop neu. Frag zur Kontrolle „Was ist in meinem Rekomi-Konto?“.
Claude Code verbinden
claude mcp add --transport http rekomi https://mcp.rekomi.com/api/mcp \
--header "Authorization: Bearer rk_mcp_YOUR_TOKEN_HERE"Die URL muss vor --header stehen. Das Flag --header ist variadisch, jedes Positionsargument dahinter wird also als weiterer Header geschluckt. Siehst du error: missing required argument 'commandOrUrl', liegt es daran.
Die CLI speichert die Konfiguration in ~/.claude.json, und spätere Sitzungen verbinden sich automatisch.
ChatGPT verbinden
ChatGPT bindet MCP-Server über die Connectors-Oberfläche auf chatgpt.com ein (Plus, Pro, Team, Enterprise, Rollout des Apps SDK 2026). Es gibt keine JSON-Konfiguration zum Einfügen; die Einrichtung läuft über die Oberfläche.
- Öffne chatgpt.com → Profilmenü (unten links) → Settings → Connectors → Add custom connector.
- Name:
Rekomi. - MCP server URL:
https://mcp.rekomi.com/api/mcp - Authentication: Custom header.
- Header name:
Authorization - Header value:
Bearer rk_mcp_YOUR_TOKEN_HERE
- Header name:
- Speichere. Starte einen neuen Chat, aktiviere den Rekomi-Connector und frag „Liste meine ausstehenden Rekomi-Affiliates auf“.
Cursor verbinden
Trage es in ~/.cursor/mcp.json (global) oder in .cursor/mcp.json im Stammverzeichnis deines Projekts ein:
{
"mcpServers": {
"rekomi": {
"url": "https://mcp.rekomi.com/api/mcp",
"headers": {
"Authorization": "Bearer rk_mcp_YOUR_TOKEN_HERE"
}
}
}
}Windsurf verbinden
Öffne das Cascade-Panel und klicke auf das Hammer- oder Stecker-Symbol → MCP servers → Add server. Wähle den Transport Streamable-HTTP und füge ein:
{
"mcpServers": {
"rekomi": {
"serverUrl": "https://mcp.rekomi.com/api/mcp",
"headers": {
"Authorization": "Bearer rk_mcp_YOUR_TOKEN_HERE"
}
}
}
}Starte Windsurf neu. Die Rekomi-Tools erscheinen im Cascade-Panel unter Available tools.
Continue verbinden
Trage es in ~/.continue/config.json unter experimental.modelContextProtocolServers ein und starte dann die Continue-Erweiterung neu:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "streamable-http",
"url": "https://mcp.rekomi.com/api/mcp"
},
"headers": {
"Authorization": "Bearer rk_mcp_YOUR_TOKEN_HERE"
}
}
]
}
}Zed verbinden
Trage es in ~/.config/zed/settings.json unter context_servers ein:
{
"context_servers": {
"rekomi": {
"source": "custom",
"command": null,
"settings": {
"url": "https://mcp.rekomi.com/api/mcp",
"headers": {
"Authorization": "Bearer rk_mcp_YOUR_TOKEN_HERE"
}
}
}
}
}So funktioniert es
KI-Assistenten sprechen MCP, um dein Affiliate-Programm zu lesen, Bewerbungen freizugeben, Ansprachen zu entwerfen, Embed-Tokens auszustellen und mehr, immer im Auftrag des Menschen, der fragt. Jeder Tool-Aufruf landet mit actor_type = mcp in deinem Audit-Log. MCP funktioniert in jedem Plan, auch während der Testphase; Plangrenzen nach Funktionsstufe (z. B. gibt es Embed-Tokens erst ab Growth) gelten trotzdem, egal wie der Aufruf ankommt.
Maschinenlesbare Dokumentation für KI-gesteuerte IDEs und Agents: diese Seite als reines Markdown unter https://rekomi.com/docs/developers/mcp.md, bei jedem Release neu erzeugt.
AI client ──Bearer rk_mcp_xxx──► mcp.rekomi.com/api/mcp
│
│ Forwards + co-signs:
│ Authorization: Bearer rk_mcp_xxx
│ X-Rekomi-MCP-Identity: t=<unix>,v1=<hmac>
▼
api.rekomi.com/api/v1/*
│
│ Validates the HMAC, validates the token,
│ checks role + scope, runs the action,
│ logs to audit log with actor_type=mcp.
▼
Your dataDas Token allein ist nutzlos. Das Backend lehnt jeden direkten Aufruf an api.rekomi.com mit einem rk_mcp_*-Token mit einem allgemeinen 401 { "error": "unauthorized", "message": "Missing or invalid credentials." } ab. Das vertrauenswürdige Relay unter mcp.rekomi.com ist der einzige Weg, der den HMAC erzeugt, den das Backend verlangt.
Als Transport dient MCP Streamable-HTTP im zustandslosen Modus: Jeder Tool-Aufruf ist eine in sich geschlossene JSON-RPC-Anfrage mit Antwort über HTTPS. Keine langlebigen Sitzungen, kein Upgrade auf SSE. Ein GET https://mcp.rekomi.com/api/mcp liefert einen kleinen JSON-Block zur Identität, den du als Gesundheitscheck nutzen kannst.
Verfügbare Tools
Es gibt 61 Tools (35 lesende und 26 sichere schreibende). Jedes Tool entspricht genau einem Rekomi-API-Endpunkt (bei den Tools für Installationsanleitungen einem lokalen Inhaltsregister). Zusammengesetzte Aufgaben (z. B. „gib jeden ausstehenden Affiliate frei“) entstehen in der Denkschleife deines KI-Clients, nicht in einem Tool. So wird dir jede einzelne Aktion zur Freigabe vorgelegt und landet in einer eigenen Zeile im Audit-Log.
| Tool | Eingaben | Was es tut |
|---|---|---|
list_affiliates | cursor?, take? (1 bis 200, Standard 50), campaignId? | Listet die Affiliates in deinem ganzen Konto auf. Mit Cursor-Paginierung. Filter nach Kampagne. |
get_affiliate | id | Ruft alle Details zu einem Affiliate ab (Summen, letzte Conversions, Notizen). |
list_conversions | cursor?, take?, affiliateId?, campaignId?, status? (Pending/Approved/Paid/Refunded/Denied/Invalidated), kind? (sale/lead/click), since? (ISO8601), subId? (ein Kanal-Tag oder untagged) | Listet Conversions auf (Verkäufe, Leads und Klickvergütungen). Mit Cursor-Paginierung. Invalidated ist die Quarantäne-Warteschlange für Betrugsverdacht. |
record_lead | affiliateSlug, email, name?, campaignId?, subId? | Erfasst eine kostenlose Anmeldung als Lead (eine E-Mail-Adresse, die vor der Zahlung mit der Empfehlung verknüpft wird), damit ein späterer Verkauf auch dann gutgeschrieben wird, wenn das Klick-Cookie weg ist. Bei Stripe, Paddle, Chargebee, Recurly und Creem werden Leads automatisch erfasst; nutze dieses Tool für andere Zahlungsanbieter oder Anmeldungen zu kostenlosen Konten. Setzt voraus, dass Lead-Tracking für dein Konto aktiv ist. Siehe Leads und Anmeldungen tracken. |
list_campaigns | cursor?, take? | Listet Empfehlungskampagnen mit Provisions- und Auszahlungsregeln und der Zahl der Affiliates auf. |
get_campaign | id | Ruft eine Kampagne mit Provisions- und Auszahlungsregeln und aktuellen Zahlen ab. |
list_payouts | cursor?, take?, status? (Pending/Processing/Paid/Failed), affiliateId?, since? | Listet Auszahlungen auf, eine Zeile pro Affiliate und Lauf: amountCents + currency (USD bei zusammengefassten Läufen), method (StripeConnect, PayPal oder GlobalPayouts), Status und Zeitstempel sowie lineItems pro Conversion mit dem Betrag in Originalwährung, dem Wechselkurs als Haupteinheiten der Originalwährung pro 1 USD und dem Kursdatum. Keine Gesamtsumme pro Lauf und keine Zahl der Empfänger: Summiere die Zeilen, die du brauchst. |
get_payout | id | Ruft die Auszahlung eines Affiliates per ID mit ihren Positionen pro Conversion ab (Betrag in Originalwährung, Wechselkurs, Kursdatum und ein eventuell zurückgebuchter Betrag). |
dashboard_summary | range? (7d/30d/90d/ytd/all, Standard 30d) | Kennzahlen auf einen Blick (Umsatz, Conversions, Leads, aktive Affiliates, ausstehende Freigaben). |
dashboard_timeseries | metric (revenue/conversions/clicks/leads/commissions/payouts/refunds), range? (7d/30d/90d/ytd, Standard 30d) | Tägliche Zeitreihe für Diagramme. ≤ ~365 Punkte (längere Zeiträume werden monatlich gebündelt). Geldwerte können zusätzlich eine Map unconvertibleByCurrency tragen (kleinste Einheiten in Originalwährung pro Währung, die aus dem Zeitraum herausgehalten wurden, weil kein brauchbarer Kurs vorlag; null bei Zählmetriken). |
list_audit_log | page? (beginnt bei 1, Standard 1), pageSize? (max. 100, Standard 50), action?, entityType?, since?, until? | Einträge im Audit-Log. Mit Offset-Paginierung (nicht Cursor). Liefert actorType (user/api_key/mcp/system/admin), action, entityType, entityId, before, after, createdAt. |
approve_affiliate | id | Gibt eine ausstehende Bewerbung frei. Verschickt die Willkommens-E-Mail mit Magic Link. |
reject_affiliate | id, reason? (max. 1000 Zeichen), notify? (Standard true) | Lehnt eine ausstehende Bewerbung ab. Benachrichtigt die Person auf Wunsch. |
preview_payout | campaignId?, since?, affiliateId? | Berechnet, was ein Auszahlungslauf zahlen würde, ohne ihn auszuführen: Auszahlungsbereitschaft pro Affiliate (payoutReady, blockedReason) und Summen in Originalwährung pro Währung, eligibleByCurrency (alle Kandidaten) und nativeTotalsForRun (bereite Kandidaten, die Map, die ein Lauf bestätigt). Auszahlungen werden in USD abgerechnet: Ein Lauf erzeugt aus den bestätigten Währungen eine USD-Auszahlung pro Affiliate und rechnet jede Provision zum gespeicherten Referenzkurs des Laufdatums um; usdEstimateAtRunRateCents ist eine reine Anzeige-Schätzung in USD zu den heute gespeicherten Kursen, und die Währungen in fxUnavailableCurrencies haben keinen aktuellen Kurs, werden aus dem Lauf herausgehalten und laufen weiter auf. Kann bedenkenlos mehrfach aufgerufen werden. Eine Auszahlung tatsächlich auszuführen geht nur im Dashboard (nie über MCP oder API-Schlüssel). |
mint_embed_token | affiliateId, expiresInHours? (1 bis 720, Standard 24), allowedOrigins? (String oder Array von URLs), rotate? | Stellt ein kurzlebiges Embed-Token für das Affiliate-Dashboard aus. Nur ab Growth; Starter und Testphase bekommen plan_tier_required (402). |
get_home_currency | (keine Eingaben) | Liest die Einstellung HomeCurrency der Organisation, die Liste der unterstützten ISO-4217-Codes und ob der Plan des Aufrufers eine Änderung erlaubt. |
set_home_currency | homeCurrency (dreistelliger ISO-4217-Code) | Ändert die HomeCurrency der Organisation. Nur Pro; niedrigere Stufen bekommen plan_tier_required (402). Idempotent, wenn vorher und nachher gleich sind; wird im Audit-Log festgehalten. Bestehende Conversions behalten ihre Originalwährung. |
get_program_sub_affiliate_config | programId | Liest die Sub-Affiliate-Einstellungen einer Kampagne (Override-Provision über 2 Stufen, eine Rekrutierungsebene): { enabled, percent }. |
set_program_sub_affiliate_config | programId, enabled, percent (0 bis 100) | Schaltet Sub-Affiliate-Recruiting für eine Kampagne ein oder aus und legt den Prozentsatz der Override-Provision fest. In jedem Plan enthalten. Erfordert die Rolle Admin oder Owner und eine bestätigte E-Mail-Adresse. Wird im Audit-Log festgehalten. |
list_affiliate_sub_affiliates | affiliateId | Detailansicht für Marken: Listet die Sub-Affiliates auf, die ein bestimmter Affiliate geworben hat, mit Status, insgesamt erzeugter Provision und verdienter Override-Provision je Geworbenem. Flaches Array (keine Paginierung). |
list_campaign_coupons | programId | Listet alle Gutscheincodes auf, die auf Kampagnenebene vergeben sind. |
create_campaign_coupon | programId, name, discountType (PercentOff/AmountOff), discountValue, discountCurrency?, duration, durationInMonths?, maxRedemptionsPerCode?, expiresAt?, selfMintMode? (Disabled/AllAffiliates/SpecificAffiliates; alt allowAffiliateSelfMint?), grantedAffiliateIds?, maxCodesPerAffiliate?, productRefs? (Stripe-prod_-IDs, max. 100), overridesClickAttribution?, commissionOverrideType? + commissionOverrideValue? (fester Satz für Codes, die aus diesem Gutschein erstellt werden), choices? (2 bis 4 Aufteilungen zwischen Rabatt und Provision, aus denen der Affiliate beim Erstellen wählt) | Erstellt einen Gutschein auf Kampagnenebene. Provisions-Override und Auswahlmöglichkeiten schließen sich gegenseitig aus. |
list_affiliate_coupons | affiliateId | Listet die Gutscheincodes eines Affiliates auf. |
list_my_coupons | (keine Eingaben) | Für Affiliates: Listet die Kampagnen auf, in denen sich der aufrufende Affiliate selbst Codes erstellen kann, und seine vorhandenen Gutscheincodes. Erkennt den Aufrufer an der Nutzeridentität, die ein Verbindungstoken einer Marke nicht trägt; über eine normale MCP-Verbindung einer Marke liefert dieses Tool deshalb ein leeres Ergebnis. |
generate_affiliate_coupon | affiliateId, campaignCouponId, code?, choiceId? (Pflicht bei Gutscheinen mit Auswahl) | Erstellt einen Gutscheincode für einen Affiliate in einer Kampagne, in der Affiliates sich Codes selbst erstellen dürfen. |
revoke_affiliate_coupon | affiliateId, couponId | Widerruft (deaktiviert) den Gutscheincode eines Affiliates. |
get_org_profile | (keine Eingaben) | Liest das Profil der aufrufenden Organisation: Name, Slug, Markenfarbe, Logo, Beschreibung, Planstufe, Abo-Status, Ende der Testphase, Wartefrist für Auszahlungen in Tagen. Praktisch als „Wer bin ich?“-Check zu Beginn jedes Gesprächs mit dem Assistenten. |
get_billing_state | (keine Eingaben) | Liest den Abrechnungsstatus der Organisation. Liefert planTier, subscriptionStatus, trialEndsAt, stripeCustomerLinked, stripeConnectLinked sowie eine Momentaufnahme der Planlimits. Der Boolean stripeConnectLinked entscheidet über den Installationsweg (Stripe-Webhook, Pixel oder S2S). |
list_install_platforms | (keine Eingaben) | Listet jede Plattform mit einer Rekomi-Installationsanleitung auf (heute 41). Liefert platformKey, displayName, category, conversionFire (stripe-webhook, s2s, crm-lookup für Plattformen, deren CRM-Verbindung Verkäufe gutschreibt, oder das alte browser-pixel), requiresStripeConnect, requiresApiKey. Damit ordnest du ein „Ich nutze Webflow“ des Nutzers einem Plattform-Key zu. |
get_install_recipe | platformKey | Ruft die vollständige, strukturierte Installationsanleitung für eine Plattform ab: Schritte in Reihenfolge, typische Stolperfallen, den Weg der Conversion und die maßgebliche Dokumentations-URL. Unbekannte Keys liefern statt eines Fehlers eine allgemeine Fallback-Anleitung mit 4 Wegen (Webhook des Zahlungsanbieters, Gutscheincodes, S2S oder die Plattformverbindung). |
create_campaign | name, slug, description?, termsUrl?, defaultCommissionType? (Percentage/Fixed), defaultCommissionValue?, defaultCommissionModel? (Cps/Cpc/Cpl; die alten Werte Cpa/RevShare/Hybrid werden weiter akzeptiert), cookieWindowDays?, attributionModel?, autoApprove?, networkVisibility?, budgetCents? (Obergrenze für Ausgaben für Klicks und Leads bei jeder Kampagne, die pro Klick oder pro Lead zahlt, in kleinsten Einheiten der Heimatwährung der Organisation; dringend empfohlen, ohne sie sind die Ausgaben unbegrenzt; höchstens der Gegenwert von USD 100,000,000 zum gespeicherten Kurs, sonst 400 budget_out_of_range), referralDestinationUrl? (Weiterleitungsziel bei Cpc), minPayoutCents?, leadBountyCents? (Vergütung pro Lead bei jeder Hauptvergütungsart außer Cpl; in kleinsten Einheiten der Heimatwährung der Organisation, Gegenwert von USD 0.10 bis USD 1,000 zum gespeicherten Kurs, sonst 400 lead_bounty_out_of_range; wird nie gekappt), clickRewardCents? (Vergütung pro Klick bei jeder Hauptvergütungsart außer Cpc; in kleinsten Einheiten, Gegenwert von USD 0.01 bis USD 1,000, sonst 400 click_reward_out_of_range; macht die Kampagne zu einer Kampagne nur auf Einladung), saleCommissionType? + saleCommissionValue? (Vergütung pro Verkauf bei Hauptvergütungsart Cpc oder Cpl; Verlängerungen folgen recurringMonths), fraudStrictness? (Strict/Standard/Relaxed, nur bei Kampagnen mit Vergütung pro Klick oder pro Lead), applicantScreening? (Off/Low/Medium/High), requireReviewOnVpn?, adTrafficPolicy? (Allow/Review/Block), showLeaderboard?, allowedCountries? (Liste von ISO-alpha-2-Codes), recurringMonths?, recurringDelayInvoices? | Erstellt eine neue Kampagne (Empfehlungsprogramm). Das Backend erzwingt passende Kombinationen aus Provisionstyp und -modell (RevShare verlangt den Typ Percentage, Cpc und Cpl verlangen Fixed). Ein Fixed-defaultCommissionValue ist in USD-Gegenwert zum gespeicherten Kurs begrenzt: Gebühren pro Klick oder pro Lead höchstens USD 1,000 (400 unit_fee_out_of_range), feste Beträge pro Verkauf höchstens USD 1,000,000 (400 fixed_commission_out_of_range). Wird im Audit-Log festgehalten. |
get_budget_status | campaignId | Liest den Stand der Budgetobergrenze einer Kampagne für Klicks und Leads: Gesamtbudget, verbraucht und verbleibend (in kleinsten Einheiten der Heimatwährung der Organisation). Unbegrenzt, wenn kein Budget gesetzt ist. Ausgaben in einer Währung ohne brauchbaren gespeicherten Kurs werden aus spentCents herausgehalten und in fxUnconvertibleByCurrency aufgeführt (kleinste Einheiten in Originalwährung pro Code), dem maßgeblichen Wert; fxUnconvertibleCents ist eine Summe kleinster Einheiten über Währungen hinweg, ein Hinweis darauf, dass es solche Ausgaben gibt, kein Geldbetrag. Eingeschränkte Vorschau: gilt für Kampagnen pro Klick und pro Lead, die schrittweise ausgerollt werden. |
list_fraud_events | campaignId?, status? (open/all) | Listet Betrugssignale auf, die bei bezahlten Klicks und Leads markiert wurden (bereits verworfen, keine Auszahlung): IPs mit hohem Risiko, Bots, selbst eingereichte Leads, Wegwerf-E-Mail-Adressen, Treffer des Limits pro IP, missbräuchliche Affiliates. Die Prüf-Warteschlange. Gilt für Kampagnen pro Klick und pro Lead. |
review_fraud_event | id, action (resolve/dismiss) | Prüft ein Betrugssignal: als erledigt markieren oder als Fehlalarm verwerfen. Rolle Manager. Ein schreibendes Tool: vorher bestätigen. Eingeschränkte Vorschau: gilt für Kampagnen pro Klick und pro Lead, die schrittweise ausgerollt werden. |
ban_affiliate | affiliateId | Sperrt einen Affiliate: Keiner seiner künftigen Klicks, Leads und Conversions wird mehr vergütet. Rolle Manager. Destruktiv: vorher bestätigen. Eingeschränkte Vorschau: gilt für Kampagnen pro Klick und pro Lead, die schrittweise ausgerollt werden. |
validate_conversion | id | Gibt eine wegen Betrugsverdacht in Quarantäne gesetzte (Invalidated) Conversion wieder zur Auszahlung frei (hebt einen Fehlalarm auf). Rolle Manager. Ein schreibendes Tool: vorher bestätigen. Eingeschränkte Vorschau: gilt für Kampagnen pro Klick und pro Lead, die schrittweise ausgerollt werden. |
invalidate_conversion | id | Setzt eine Pending- oder Approved-Conversion, die du für Betrug hältst, in Quarantäne (setzt Invalidated, wird nicht ausgezahlt). Rolle Manager. Hält eine Zahlung zurück: vorher bestätigen. Eingeschränkte Vorschau: gilt für Kampagnen pro Klick und pro Lead, die schrittweise ausgerollt werden. |
create_affiliate_invite | campaignId, email, fullName?, slug?, personalNoteHtml?, customCommissionType?, customCommissionValue?, autoApprove? (Standard true) | Schickt einem Affiliate eine Einladungs-E-Mail im Design deiner Marke für eine Kampagne. In jedem Plan verfügbar, auch in der Testphase. Das HTML der persönlichen Nachricht wird serverseitig auf eine strenge Liste erlaubter Elemente bereinigt. MIGRATION: Übergib slug, damit der bestehende Slug des Affiliates von der bisherigen Plattform erhalten bleibt und seine öffentliche Empfehlungs-URL weiter funktioniert. Liefert bei einer Kollision 409 slug_already_taken. |
bulk_invite_affiliates | campaignId, recipients[]? (bevorzugt) ODER emails[]? (alt, 1 bis 50), personalNoteHtml?, autoApprove? | Lädt bis zu 50 Affiliates auf einmal ein. Erfordert Starter oder höher mit aktivem bezahltem Abonnement (in der Testphase gibt es paid_plan_required, HTTP 402). Die Form recipients trägt pro Zeile email, slug?, fullName?, sodass bei Migrationsimporten jeder bestehende Slug erhalten bleibt. Die Antwort enthält slugConflicts[] für Zeilen, deren gewünschter Slug abgelehnt wurde; diese bekommen trotzdem eine Einladung mit einem neuen, zufälligen Slug. |
import_affiliates | campaignId, affiliates[] (1 bis 1000; pro Zeile email, fullName?, status?, paypalEmail?, slug?), includeStatuses?, notifyAffiliates?, notificationMessageHtml? | Importiert eine Affiliate-Liste aus kanonischen JSON-Zeilen (plattformunabhängig; du ordnest jeden Export den Rekomi-Feldern zu). Entfernt Duplikate nach E-Mail-Adresse innerhalb der Kampagne und des Stapels (idempotent). status ist standardmäßig approved. Für direkte Aufrufe mit API-Schlüssel ab Starter (402 plan_tier_required); über MCP weitergeleitete Aufrufe umgehen die Plangrenze. notifyAffiliates braucht zusätzlich Growth oder höher mit aktivem Abonnement. Liefert eine jobId, mit der sich der Import rückgängig machen lässt, + { imported, skipped, errored, reasons }. Ein schreibendes Tool: vor dem Ausführen bestätigen. |
preview_conversion_import | campaignId, conversions[] (1 bis 1000; kanonische Zeilen) | Probelauf für einen Import historischer Conversions und Provisionen. Schreibt nichts. Liefert { rowsTotal, wouldImport, wouldSkip, wouldError, skipReasons, paidBalance, unpaidBalance }. Führe ihn immer vor import_conversions aus und zeig dem Nutzer unpaidBalance (wie viel auszahlbar würde). |
import_conversions | campaignId, conversions[] (1 bis 1000; pro Zeile affiliateEmail?/affiliateSlug? [eins davon Pflicht], customerEmail?, customerName?, amountCents, commissionCents, currency, occurredAt, paid, type?, stripeCustomerId?, stripeSubscriptionId?, externalId?), confirmUnpaidPayout? (Standard false), excludePaid? | Importiert historische Conversions und Provisionen. Idempotent (ein erneuter Lauf zahlt nie doppelt). Geldsicherheit: Bezahlte Zeilen werden als abgerechnete Historie gesperrt; unbezahlte Zeilen werden nur mit confirmUnpaidPayout=true auszahlbar (standardmäßig false). Für direkte Aufrufe mit API-Schlüssel ab Starter (402 plan_tier_required); über MCP weitergeleitete Aufrufe umgehen die Plangrenze. Ein schreibendes Tool, das auszahlbare Guthaben erzeugen kann: Immer zuerst die Vorschau ausführen, dann mit dem Nutzer bestätigen, bevor du confirmUnpaidPayout=true setzt. Liefert eine jobId, mit der sich der Import rückgängig machen lässt, plus unpaidConfirmed (auszahlbare Provision pro Währung als { currency, commissionCents, count }, leer ohne Bestätigung) und unpaidConfirmedCurrency (nur gesetzt, wenn genau eine Währung auszahlbar wurde); unpaidConfirmedCents ist eine reine Summe über Währungen hinweg, die für ältere Aufrufer bleibt, und nur dann ein Geldbetrag, wenn unpaidConfirmedCurrency gesetzt ist. |
get_attribution_params | (keine Eingaben) | Liest die eigenen Attributionsparameter der Organisation, die 21 kanonischen Standards und die tatsächliche Rangfolge, die der Loader verwendet. Praktisch, um zu prüfen, ob eine umziehende Marke eigene Parameter einrichten muss oder ob ihre bisherige Plattform schon von den Standards abgedeckt ist. |
update_attribution_params | custom? (kommagetrennter String, max. 10 Einträge) | Legt die eigenen Attributionsparameter der Marke fest. Jeder Eintrag [a-z0-9_-]{2,32}, max. 10 Einträge, max. 256 Zeichen insgesamt. Leer oder weggelassen löscht den Override. Schreibzugriff für Admin oder Owner (wird im Audit-Log festgehalten). |
update_campaign | campaignId + beliebige von: name?, description?, termsUrl?, isActive?, defaultCommissionType?, defaultCommissionValue?, defaultCommissionModel?, cookieWindowDays?, recurringMonths? (-1 setzt auf Kundenlaufzeit zurück), recurringDelayInvoices?, attributionModel?, autoApprove?, networkVisibility?, isPubliclyDiscoverable?, referralDestinationUrl? ("" löscht), budgetCents? (0 löscht; sonst dieselbe Obergrenze vom Gegenwert von USD 100,000,000 wie beim Erstellen), minPayoutCents? (0 löscht), leadBountyCents? (0 löscht; sonst dieselbe Spanne vom Gegenwert von USD 0.10 bis USD 1,000 wie beim Erstellen), saleCommissionType? + saleCommissionValue? (0 löscht das Paar), fraudStrictness?, applicantScreening?, requireReviewOnVpn?, adTrafficPolicy?, showLeaderboard?, allowedCountries? ([] löscht) | Aktualisiert eine bestehende Kampagne. Weggelassene Felder bleiben unverändert. Ein schreibendes Tool: vorher bestätigen. |
update_affiliate | id + beliebige von: fullName?, status? (Pending/Approved/Rejected/Paused/Banned), customCommissionType? + customCommissionValue?, clearCustomCommission?, notes?, tags? | Aktualisiert einen Affiliate: Status, individueller Provisionssatz, private Notizen, Tags. Ein schreibendes Tool: vorher bestätigen. |
list_affiliate_applications | campaignId?, take? (Standard 200, max. 500) | Die Warteschlange der ausstehenden Freigaben, mit den Antworten jeder Bewerbung (Website, Zielgruppe, Grund des Interesses). Flaches Array. Zusammen mit approve_affiliate / reject_affiliate nutzen. |
create_conversion | campaignId, affiliateId, kind? (sale/bonus), amountCents?, currency?, commissionCents?, customerEmail?, occurredAt? (≤ 5 Jahre zurück), note?, subId? | Erfasst von Hand einen Verkauf außerhalb der Plattform oder einen einmaligen Bonus für einen Affiliate. Obergrenzen auf dem Server: amountCents und commissionCents eines Bonus höchstens 1,000,000,000,000 kleinste Einheiten der Währung (eine Plausibilitätsgrenze unabhängig von der Währung, in jeder Währung gleich); commissionCents eines Verkaufs höchstens das 5-Fache von amountCents. Keine eingebaute Deduplizierung. Erzeugt ein auszahlbares Guthaben: immer vorher bestätigen. |
dashboard_leaderboard | metric (clicks/conversions/earnings/epc), limit? (max. 50), range?, campaignId? | Rangliste der Affiliates über einen Zeitraum. |
dashboard_traffic_sources | range?, campaignId?, affiliateId? | Woher die Klicks kommen, nach Kanal eingeordnet: Jede der 20 wichtigsten Quellen trägt einen channel (paid/search/social/email/ai/signin/onsite/portal/bot/referral/direct) sowie Anzahl und Prozentsatz. |
get_insights | module (overview/sale-origin/top-products/geography/devices/utm/time-patterns/time-to-convert/funnel/attribution/recurring/customers), range?, campaignId?, affiliateId?, dimension? (nur bei utm: source/medium/campaign/subid) | Tiefere Auswertungen, ein Modul pro Aufruf. Aggregate ohne personenbezogene Daten, auf die 20 wichtigsten Einträge begrenzt. Geldbeträge werden in die Heimatwährung umgerechnet; Zeilen ohne brauchbaren gespeicherten Kurs werden herausgehalten und bei overview pro Währung in kleinsten Einheiten der Originalwährung in fxUnconvertibleByCurrency (Umsatz) und fxUnconvertibleCommissionByCurrency (Provision) aufgeführt, den maßgeblichen Werten; fxUnconvertibleCents ist eine Summe kleinster Einheiten über Währungen hinweg, ein Hinweis darauf, dass es solche Zeilen gibt, kein Geldbetrag. |
get_fraud_summary | campaignId, days? (1 bis 365, Standard 30) | Gesammelte Betrugszahlen für eine Kampagne, die pro Klick oder pro Lead zahlt: blockierte Klicks nach Grund, zurückgehaltene Klicks, Leads in Quarantäne und geschätzte nicht berechnete Provision. |
list_uncredited_conversions | status? (open/dismissed/all), affiliateId? | Verkäufe, die einem Affiliate zugeordnet ankamen, der in diesem Moment nichts verdienen konnte (zum Zeitpunkt des Verkaufs ausstehend, pausiert, abgelehnt oder gesperrt), mit Beträgen und Gründen. Die Warteschlange für „Haben wir jemanden nicht bezahlt?“. |
dismiss_uncredited_conversion | id | Markiert eine Zeile einer nicht gutgeschriebenen Conversion als geprüft (zu Recht nicht gutgeschrieben). Bewegt kein Geld. |
get_tracking_status | campaignId | Prüfung der Installation: ob die Kampagne je einen Klick oder eine Conversion erfasst hat, Zeitstempel der letzten Erfassung und Summen über 30 Tage, einschließlich creditedByPlatform30d (Verkäufe, die über die Abfrage einer CRM-Verbindung gutgeschrieben wurden). Die Abfrage pro E-Mail-Adresse kann attributed_by_platform liefern. Rufe es nach einer Installationsanleitung auf, um zu bestätigen, dass das Tracking funktioniert. |
list_crm_integrations | (keine Eingaben) | Liest die verbundenen CRM-Plattformen der Marke mit beiden Schaltern: enabled (Affiliates synchronisieren), salesAttribution (none, native oder custom_field), salesAttributionEnabled (Verkäufe gutschreiben), Status und letzte Prüfung, die Zahl aller bisher über die Plattform gutgeschriebenen Verkäufe und ob der Webhook für Anmeldungen registriert ist. Nur lesend. Rufe es auf, bevor du bei beehiiv, Kit, MailerLite, Ontraport oder GoHighLevel einen Installationsweg empfiehlst. |
list_deals | keine | Deals mit Creatorn samt ihren Meilensteinplänen (Status, Beträge, Gebühren-Momentaufnahmen, Links zu Liefernachweisen, Konditionen, offene Streitfälle, Änderungsaufträge). Finanzieren und Freigeben bleibt im Dashboard. |
get_deal | id | Ein Deal mit vollständigem Plan, Streitfällen, Änderungsaufträgen und Konditionen. |
approve_milestone | dealId, milestoneId | Gibt einen gelieferten Meilenstein frei (von Funded oder Submitted zu Approved). Bewegt kein Geld; die Marke gibt die Zahlung im Dashboard frei, oder sie wird am Ende der Prüffrist automatisch freigegeben. |
request_milestone_changes | dealId, milestoneId, note? | Bittet den Creator um Änderungen an einem eingereichten Meilenstein; hält die Uhr für die automatische Freigabe an, bis er erneut einreicht (höchstens 5 Runden). |
get_install_snippet | campaignId?, withPixel?, emailCapture? | Holt das fertige Installations-Snippet der Marke mit bereits eingesetzter Programm-ID, eigenen Attributionsparametern und optionalem öffentlichem Pixel-Schlüssel. Die E-Mail-Erfassung ist standardmäßig an: Der Tag trägt data-rkmi-email-capture="auto", und das Tool gibt daneben aus, was damit erfasst wird (eine E-Mail-Adresse, die ein vermittelter Besucher auf den Seiten mit dem Tag in ein beliebiges E-Mail- oder Textfeld eintippt; ohne Empfehlung nichts) und wie es sich abschalten lässt; emailCapture=false liefert den Tag ohne das Attribut. Die einzige maßgebliche Quelle für Snippets; der Agent gibt die Antwort wörtlich an den Nutzer weiter. Standardmäßig die neueste aktive Kampagne, ohne Pixel. Liefert 409, wenn withPixel=true gesetzt ist und die Organisation noch keinen öffentlichen Pixel-Schlüssel angelegt hat. |
Listenantworten mit Cursor-Paginierung sehen immer so aus: { "items": [...], "nextCursor": "…", "hasMore": true }. list_audit_log liefert stattdessen { "page", "pageSize", "total", "items" }.
Der Assistent ruft jedes Tool einzeln auf und zeigt dir das Ergebnis im Chat. Destruktive Tools und Tools, die Geld betreffen (approve_affiliate, reject_affiliate, import_affiliates, import_conversions), sollte der Nutzer bestätigen, bevor der Assistent sie ausführt. Führe bei einem Conversion-Import immer zuerst preview_conversion_import aus und prüfe das unbezahlte Guthaben, bevor du die Auszahlung mit confirmUnpaidPayout freigibst.
Rekomi mit dem Assistenten installieren
Der häufigste Einsatz des MCP-Servers ist genau das, wonach es klingt: „Hilf mir, Rekomi auf meiner Website zu installieren.“ Eine typische Sitzung läuft so ab.
- Du startest einen Chat mit Claude (oder Cursor oder einem anderen Client, der MCP kann) und sagst „Hilf mir, Rekomi in meinem Shopify-Shop zu installieren.“
- Der Assistent ruft
get_org_profileauf, um zu prüfen, wer du bist und welchen Plan du hast. - Er ruft
get_billing_stateauf, um zu sehen, ob du Stripe schon verbunden hast. IststripeConnectLinkedtrue, empfiehlt er den Stripe-Webhook-Weg; ist es false, lenkt er dich zu einer nativen Integration deines Zahlungsanbieters, zu Gutscheincodes oder zu S2S. Bei beehiiv, Kit, MailerLite, Ontraport oder GoHighLevel ruft er zuerstlist_crm_integrationsauf, denn dort ist die Plattformverbindung mit aktivem „Verkäufe gutschreiben“ die Installation. - Er ruft
list_install_platformsauf und ordnet „Shopify“ dem Keyshopifyzu. - Er ruft
get_install_recipemitplatformKey: shopifyauf und führt dich im Chat durch die Schritte. Die Stolperfallen nennt er direkt mit (die native Rekomi-App für Shopify ist der Weg ohne Code; beim manuellen Fallback verbirgt Shopify Payments dein Stripe, und die Custom-Pixel-Sandbox kann keine externen Skripte laden; Shopify Collabs ist ein eigenes Produkt). - Hast du noch keine Kampagne angelegt, bietet der Assistent an,
create_campaignaufzurufen, und lässt dich vorher Name, Slug, Provisionstyp und Wert bestätigen. - Ziehst du von einer anderen Plattform um, nimm lieber die eigenen Importer unter Einstellungen > Umzug. Es gibt 22 (Rewardful, Affonso, Tapfiliate, FirstPromoter, PartnerStack, Dub Partners, Tolt, Lemon Squeezy, Gumroad, impact.com, PromoteKit, LeadDyno, Trackdesk, Partnero, UpPromote, GoAffPro, ReferralCandy, Refersion, BixGrow, Shopify Collabs, Everflow und Post Affiliate Pro) (die API-Abrufe für Rewardful, FirstPromoter und Tolt bringen auch Leads, Klickzahlen seit Beginn und die Provisionshistorie mit; bei Gumroad wird die Verkaufshistorie nach der CSV mit der Affiliate-Liste über die API abgerufen). Für einen Ablauf mit dem Assistenten füge die E-Mail-Adressen deiner bisherigen Affiliates in den Chat ein. Der Assistent schickt allen mit
bulk_invite_affiliatesauf einmal Onboarding-E-Mails im Design deiner Marke. (Erfordert Starter oder höher mit aktivem bezahltem Abonnement.)
Was der Assistent nicht kann (Sicherheit)
Damit die Installation sicher bleibt, stellt der MCP-Server bestimmte Vorgänge bewusst nicht als Tools bereit:
- Der Assistent kann keine API-Schlüssel erzeugen. Braucht deine Installation einen
rk_live_*-Bearer und einrks_*-Signing-Secret (Gumroad / Rails / Django / jeder S2S-Weg), schickt dich der Assistent per Deep Link zu Einstellungen → API-Schlüssel, damit du selbst einen erzeugst, und bittet dich dann, den Schlüssel in den Chat einzufügen. Das MCP-Token kann sich nicht zu einem langlebigen API-Schlüssel ausweiten, der das MCP-Token selbst überdauert. - Der Assistent kann keine neuen MCP-Tokens erstellen. Tokens erstellt nur der Owner, und nur über JWT.
- Der Assistent kann keine Auszahlungen ausführen, wiederholen oder zurückbuchen. Geldbewegungen verlangen eine interaktive Sitzung im Dashboard; MCP und API-Schlüssel bekommen beide 403
interactive_session_required. Der Assistent kann nurpreview_payoutaufrufen. - Der Assistent kann die Abrechnung nicht ändern und keine Stripe-Checkout-Sitzungen öffnen. Entscheidungen zur Abrechnung bleiben beim menschlichen Owner; der Assistent kann den Abrechnungsstatus nur über
get_billing_statelesen.
Wenn ein Tool zu fehlen scheint, ist das der Grund. Die Funktion ist bewusst nicht freigegeben.
Wie die Plangrenzen greifen
Im Rekomi-Backend gibt es zwei verschiedene Plangrenzen:
- Plangrenze der öffentlichen API: gilt pro Endpunkt für direkte Aufrufer mit API-Schlüssel (
rk_live_*). Der Großteil von/api/v1/*verlangt Starter oder höher, was jeder aktuelle Plan erfüllt; einige Endpunkte wie der Export des Audit-Logs verlangen Pro. Aufrufe, die über den MCP-Server weitergeleitet werden, umgehen diese Grenze vollständig, jedes MCP-Tool funktioniert also in jedem Plan. - Plangrenze nach Funktionsstufe: sperrt eine bestimmte Funktion für niedrigere Pläne, egal wie sie aufgerufen wird. MCP umgeht diese Grenze nicht. Heute betrifft das
mint_embed_token(ab Growth) und eine Handvoll anderer Bereiche; ein Nutzer mit Starter, dermint_embed_tokenüber MCP aufruft, bekommtplan_tier_required(HTTP 402).
Liefert ein Tool plan_tier_required, hilft ein Upgrade des Plans, kein anderes Token.
Sicherheitsmodell
- Aufbau des Tokens:
rk_mcp_*, zufälliger Teil mit 256 Bit, base64url-kodiert. Gespeichert als SHA-256-Hash; der Klartext wird nie gespeichert. - Einmalige Anzeige: Das vollständige Token wird nur beim Erstellen oder Rotieren angezeigt. Rotiere es, um den alten Wert ungültig zu machen.
- Erstellen nur durch den Owner: Nur der Owner einer Organisation kann MCP-Tokens erstellen, rotieren oder widerrufen.
- Obergrenze pro Organisation: 10 aktive Tokens pro Organisation.
- Scope Lesen und Schreiben: Jedes MCP-Token bekommt den Scope
read_write; die Zustimmungsschleife pro Tool in deinem KI-Client ist die Freigabestelle für den Nutzer. - Direkte Nutzung blockiert: Ein gestohlenes
rk_mcp_*ist ohne das vertrauenswürdige Relay nutzlos. Direkte Aufrufe anapi.rekomi.comwerden mit einem allgemeinen 401unauthorizedabgelehnt; nur Anfragen übermcp.rekomi.comtragen den signierten Relay-Header, den die API verlangt. - Bindung an das Relay: Der Relay-HMAC wird mit einem gemeinsamen Secret über
{t}.{METHOD}.{path}.{body_sha256_hex}berechnet. Zeitfenster von ±300 s, Vergleich in konstanter Zeit. Replays, manipulierte Anfrageinhalte und vertauschte Methoden oder Pfade scheitern alle an der Prüfung. - Wirkung eines Widerrufs: Widerrufene Tokens authentifizieren innerhalb von etwa 10 s auf allen Instanzen nicht mehr (begrenzt durch die TTL des Auth-Caches).
- Audit-Trail: Jeder Tool-Aufruf landet in deinem Audit-Log mit
actor_type = mcp, der ID des aufrufenden Tokens, Aktion, Objekt und Zeitstempeln. Filtere unter Einstellungen → Audit-Log nachactor_type = mcp. - Sperre bei Suspendierung: Bei einem gesperrten Konto stoppt jeder MCP-Aufruf innerhalb von Sekunden.
- Bereinigung personenbezogener Daten: Tokens und der Relay-Identitäts-Header werden aus den serverseitigen Fehlerberichten des MCP-Servers entfernt, bevor sie den Host verlassen.
Empfehlungen
- Nutze ein eigenes Token pro Gerät oder pro KI-Client. Geht ein Laptop verloren, widerrufst du nur dieses Token.
- Richte nur lesende Assistenten ein, indem du den Assistenten anweist, keine schreibenden Tools aufzurufen (die sechsundzwanzig schreibenden sind
approve_milestone,request_milestone_changes,approve_affiliate,reject_affiliate,preview_payout,mint_embed_token,set_home_currency,set_program_sub_affiliate_config,create_campaign_coupon,generate_affiliate_coupon,revoke_affiliate_coupon,create_campaign,update_campaign,update_affiliate,create_conversion,create_affiliate_invite,bulk_invite_affiliates,update_attribution_params,import_affiliates,import_conversions,record_lead,review_fraud_event,ban_affiliate,validate_conversion,invalidate_conversion,dismiss_uncredited_conversion). Das Audit-Log hält den Assistenten trotzdem als Akteur fest. - Behalte in den ersten Tagen dein Audit-Log unter Einstellungen → Audit-Log im Blick. Filtere nach
actor_type = mcp, um genau zu sehen, was der Assistent getan hat. - Füge dasselbe Token nicht in mehrere Clients ein, die du später nicht einzeln widerrufen kannst. Ein Token pro Oberfläche hält den möglichen Schaden klein.
Fehlerbehebung
- 401
unauthorizedbei einem direkten API-Aufruf: Dein KI-Client sprichtapi.rekomi.comdirekt mit einem MCP-Token an; direkte Aufrufe werden mit dem allgemeinen 401 abgelehnt. Richte ihn stattdessen aufhttps://mcp.rekomi.com/api/mcp. plan_tier_required(HTTP 402) bei einem bestimmten Tool: Das Tool ist an einen höheren Plan gebunden (z. B.mint_embed_tokenab Growth). Mach ein Upgrade des Plans oder nimm ein Tool, das in deiner Stufe verfügbar ist. Ein Wechsel des Tokens hilft nicht, die Plangrenzen nach Funktionsstufe gelten auch für MCP-Traffic.unauthorized(HTTP 401) bei jedem Aufruf: Das Token ist falsch, widerrufen oder rotiert. Erzeuge unter Einstellungen → KI-Assistent ein neues.- Die Tool-Liste lädt, aber jedes Tool liefert 401: Das Backend kann den Relay-Header nicht prüfen. Meist ist das Relay-Secret auf einer Seite veraltet; wende dich an den Support.
- Claude Code sendet nach dem Rotieren noch das alte Token: Claude Code speichert den Bearer-Header fest in
~/.claude.json. Das Rotieren des Tokens im Rekomi-Dashboard kommt dort nicht an. Führeclaude mcp remove rekomiaus und danach erneutclaude mcp add …mit dem neuen Token. - Claude Code protokolliert
SDK auth failed: JSON Parse error: harmlos. Manche MCP-Clients fragen/.well-known/oauth-protected-resourceab; der Server antwortet mit einem sauberen JSON-404 und macht mit der Bearer-Authentifizierung weiter. - „Re-authenticate“ unter
/mcptut nichts: Dieser Menüpunkt ist für Server mit OAuth-Ablauf gedacht; Rekomi nutzt einen festen Bearer-Header. Tausche die Zugangsdaten mitclaude mcp remove+claude mcp add.
Siehe auch
- Referenz der öffentlichen API
- Audit-Log
- Maschinenlesbares Manifest: rekomi.com/docs/developers/mcp.md