Ein Commerce-MCP-Server: Was dein Agent in cmssy erledigen kann
Anleitungen

Ein Commerce-MCP-Server: Was dein Agent in cmssy erledigen kann

Jedes CMS liefert heute einen MCP-Server. Entscheidend ist, was der Agent erreicht - hier eine Großhandelsbestellung, von der Preisliste bis zur Rechnung, in einer Unterhaltung abgewickelt, samt den Leitplanken drumherum.

C
Cmssy Team
7 min read

Ein Commerce-MCP-Server: Was dein Agent in cmssy erledigen kann

Jedes CMS liefert heute einen MCP-Server. Hier, was der von cmssy erreicht - eine Großhandelsbestellung von der Preisliste bis zur Rechnung, in einer Unterhaltung abgewickelt, samt den Leitplanken drumherum.

Ein MCP-Server ist für ein CMS heute Standard. Contentful, Sanity, Storyblok und Payload liefern alle einen mit, und ein Agent kann auf jedem davon Inhalte schreiben und veröffentlichen. Die Frage hat sich verschoben: Was kann der Agent erreichen, sobald er verbunden ist? Bei einem Shop entscheidet die Antwort darüber, ob ein Agent Texter oder Betreiber ist.

Dieser Beitrag zeigt, was der MCP-Server von cmssy bereitstellt, wie du dich verbindest, wie eine Großhandelsbestellung in einer Unterhaltung von Anfang bis Ende abgewickelt wird und was noch Arbeit braucht.

Zwei Wege, einen Agenten mit cmssy zu verbinden: der gehostete Server unter api.cmssy.io/mcp mit OAuth-Anmeldung oder das npm-Paket über stdio mit einem API-Token. Beide werden gegen deine Rolle im Workspace geprüft.
Zwei Wege hinein. Beide enden bei derselben Prüfung: deiner Rolle im Workspace.

Was MCP ändert und was nicht

MCP standardisiert, wie ein Agent Tools entdeckt und aufruft. Deine Daten macht es nicht sauberer. Ein Agent, der mit einem Shop verbunden ist, dessen Bestellungen in einem System liegen, die Preise in einer Tabelle und die Texte in einem CMS, verbringt seine Durchläufe damit, drei APIs zusammenzunähen, und an den Nähten macht er Fehler.

cmssy hält die Teile in einem Workspace: Seiten und Blöcke, eigene Datenmodelle, Produkte und Bestand, Preislisten und Verkaufskanäle, Kunden und ihre Firmen, Warenkörbe, Bestellungen, Retouren, Pakete und Rechnungen. Ein Server stellt all das bereit, unter einem Satz von Rollen. Das ist das ganze Argument dieses Beitrags, und alles Weitere zeigt, wie es in der Praxis aussieht.

Verbinden

Es gibt zwei Wege hinein.

  • Gehostet, für Claude. Claude im Web, Claude Desktop und Claude Code verbinden sich mit https://api.cmssy.io/mcp. Du meldest dich bei cmssy an (OAuth 2.1 mit PKCE), hakst die Workspaces an, die Claude nutzen darf, und wählst Nur lesen oder Lesen und schreiben. Es gibt kein Token zu kopieren und nichts zu installieren. In Claude Code ist es ein Befehl: claude mcp add --transport http cmssy https://api.cmssy.io/mcp, danach /mcp zum Anmelden.
  • stdio, für alles andere. CI-Jobs, Skripte und jeder MCP-Client starten npx @cmssy/mcp-server mit einem API-Token (cs_…) und einer Workspace-ID. Dieselben Tools, dieselben Berechtigungen.

So oder so handelt der Agent als die Person, die ihn verbunden hat, mit deren Rolle in jedem Workspace, und jede Änderung landet unter ihrem Namen im Audit-Log des Workspace. Eine Verbindung kann mehrere Workspaces umfassen: Jedes Tool nimmt ein Argument workspace, und list_workspaces liefert die, für die du Zugriff erteilt hast.

Was der Server bereitstellt

Stand Oktober 2026 umfasst der Server 132 Tools. Sie folgen einem Namensschema - list_* und get_* zum Lesen, create_*, update_* und delete_* zum Schreiben, dazu Verben für Statuswechsel - und fallen in eine Handvoll Gruppen:

  • Content - Seiten, Blöcke, Layout-Bereiche, Page Types, Veröffentlichung, Medien, Formulare und ihre Einsendungen, eigene Modelle und Records. list_block_types liefert die Block-Typen, die deine Website tatsächlich registriert, sodass der Agent die Felder füllt, die deine Komponenten rendern, statt zu raten.
  • Katalog - Produkte, Varianten, Staffelpreise, Preise je Währung, Massenänderungen.
  • B2B-Preise - Preislisten mit prozentualem Rabatt oder Festpreisen je Produkt und Variante, datierte Zeitfenster, Verkaufskanäle und die Zuordnung zu einer Firma oder einem Kunden.
  • Kunden und Firmen - die Konten, die sich auf deiner Website anmelden, ihre Firmen, EU-USt-IdNrn. und deren Prüfung, Steuerbefreiungen, Sperrungen und Passwort-Resets.
  • Bestellungen - manuelle Bestellungen, Änderungen, erfasste Zahlungen, Erstattungen, Stornierungen, die Order-Pipeline, Pakete und Tracking, Retouren, Rechnungen und Korrekturrechnungen, Anonymisierung.
  • Webhooks - Endpunkte, Zustellprotokolle, erneute Zustellung und Secret-Rotation.

Die vollständige Liste mit der jeweils nötigen Berechtigung pro Tool wird bei jedem Release aus dem Server generiert und als MCP-Tool-Katalog veröffentlicht.

Zwei Dinge fehlen bewusst. Kein Tool fasst deinen Code an: Nichts schreibt eine Datei, bearbeitet eine Komponente oder öffnet einen Pull Request, denn Block-Schemas leben in deinem Repository und gehen durch Reviews. Und kein Tool bewegt Geld: cmssy erfasst Zahlungen und Erstattungen, die dein Anbieter ausgeführt hat, es belastet nie eine Karte.

Eine Großhandelsbestellung, vom Angebot bis zur Rechnung

Hier ein B2B-Fall, der sich normalerweise über ein ERP, eine Preistabelle und zwei Admin-Panels erstreckt. Ein Eisenwaren-Großhändler gewinnt einen neuen Gewerbekunden, vereinbart Vertragspreise für drei Produkte, nimmt die erste Bestellung per E-Mail an und versendet sie. Jeder Schritt unten ist ein Prompt an Claude und die Tools, die es aufruft.

Sechs Schritte einer Großhandelsbestellung in einer Unterhaltung: Preisliste, Firma, Bestellung, Zahlung, Paket, Rechnung, jeweils mit den MCP-Tools, die er nutzt.
Sechs Schritte, eine Unterhaltung, ein Workspace.

1. Eine Preisliste für den Kunden

Erstelle eine Preisliste "Trade - Nordbau" mit 12% Rabatt auf den Katalog
und Festpreisen für die drei Kupplungen aus der angehängten Tabelle.

create_price_list mit percentOff: 12, dann set_price_list_entries mit den Festpreisen in kleinsten Einheiten. Ein Festpreis überschreibt den Prozentsatz für sein Produkt oder seine Variante; alles andere bekommt den Katalogpreis minus 12%. Der Aufruf gilt ganz oder gar nicht: Eine fehlerhafte Zeile lehnt den gesamten Import ab und nennt die Zeile.

2. Die Firma

Die USt-IdNr. der Nordbau GmbH ist DE123456789 - ich habe sie in VIES geprüft.
Setz sie auf die neue Liste.

set_company_vat_id normalisiert die Nummer und prüft ihr Format, set_company_vat_verified hält fest, dass jemand sie geprüft hat, und set_company_price_list hängt die Liste an. Jedes Mitglied der Firma zahlt jetzt danach. Eine geprüfte USt-IdNr. aus einem anderen Mitgliedstaat als dem des Verkäufers stellt ihre Bestellungen im Reverse-Charge-Verfahren steuerfrei, es sei denn, die Bestellung geht ins Land des Verkäufers.

Beachte die Trennung: Die Prüfung einer USt-IdNr. ändert, wie Bestellungen besteuert werden, deshalb braucht sie ein stärkeres Berechtigungspaar als das Setzen der Nummer. Ein Agent, den jemand ohne diese Berechtigung verbunden hat, bekommt einen Fehler.

3. Die Bestellung

Nordbau hat per E-Mail bestellt: 40 x Kupplung NW7.2, 25 x NW10,
Lieferung an ihr Lager in Hamburg. Leg sie an.

create_manual_order mit dem Kunden und den Positionen. Weil der Käufer zu Nordbau gehört, werden die Positionen aus der Liste der Firma bepreist, und die Lieferadresse entscheidet über die steuerliche Behandlung, die die Bestellung festschreibt. get_order zeigt genau, was angewendet wurde: die Liste, die jede Position bepreist hat, die USt-Behandlung und den rechtlichen Hinweis für den Ausdruck.

4. Die Zahlung

Die Überweisung für diese Bestellung ist eingegangen, Verwendungszweck NB-2026-118.

record_order_payment mit dem Betrag und dem Verwendungszweck. Teilzahlungen sind kein Problem; der Betrag ist auf den offenen Saldo begrenzt, und die Bestellung wechselt auf bezahlt, sobald er gedeckt ist.

5. Das Paket

Ist mit DHL raus, Sendungsnummer 00340434...

create_shipment mit Versanddienstleister und Sendungsnummer. Lässt man die Positionen weg, wird jede noch nicht versandte Einheit verschickt, und die Bestellung wird als erfüllt markiert.

6. Die Rechnung

Unsere Buchhaltung hat dafür FV/2026/1042 ausgestellt - hier der PDF-Link.

record_order_invoice speichert Nummer, Link und Anbieter an der Bestellung und löst order.invoiced aus. Dieselbe Nummer noch einmal zu erfassen ändert nichts, ein Agent, der es erneut versucht, richtet also keinen Schaden an. Eine spätere Erstattung bekommt mit record_order_invoice_correction eine Korrekturrechnung; der Beitrag zur Rechnungsstellung behandelt die automatisierte Version dieses Schritts.

Nichts davon ist ein Benchmark. Es ist die Form der Arbeit: Jeder Schritt ist ein Tool mit schmaler Eingabe, jeder Schritt wird gegen die Rolle der Person geprüft, die verbunden hat, und der Agent braucht nie die API eines zweiten Anbieters, um die Aufgabe abzuschließen.

Leitplanken

Ein Agent, der eine USt-IdNr. prüfen oder eine Bestellung erstatten kann, verdient mehr Sorgfalt als einer, der eine Überschrift bearbeitet. Vier Schichten begrenzen ihn, von außen nach innen.

Vier Ringe um einen Tool-Aufruf: Freigabe im Client, Nur-Lese-Zugriff, deine Rolle, Audit-Log.
Was den Agenten tatsächlich begrenzt.
  • Freigabe im Client. Jedes Tool trägt MCP-Annotationen: readOnlyHint bei Tools, die nur lesen, destructiveHint bei Tools, die Daten ändern oder entfernen. Claude Code fragt vor jedem Tool nach, das nicht auf deiner Allowlist steht. Halte also refund_order, cancel_order, publish_page und die Lösch-Tools davon fern und gib jedes einzeln frei.
  • Nur-Lese-Zugriff. Eine gehostete Verbindung mit reinem Lesezugriff lehnt jeden Schreibvorgang auf dem Server ab, egal was der Client freigibt.
  • Deine Rolle. Der Agent hat genau die Berechtigungen, die du in diesem Workspace hast. Trennen unter Konto → Verbundene Apps schneidet ihn überall auf einmal ab; ein Workspace-Admin kann einen Workspace aus der Verbindung eines Mitglieds entfernen.
  • Das Audit-Log. Jede Änderung wird unter dem Namen der Person erfasst, die den Agenten verbunden hat, wie eine Änderung im Admin.

Ein ehrlicher Hinweis: Der MCP-Server selbst hat keinen Bestätigungsschritt. Ein destruktives Tool läuft beim ersten Aufruf, und die Prüfung ist die Freigabe in deinem Client. Die Ausnahme ist der eingebaute Assistent im Admin - dort hält der Server ein destruktives Tool zurück, bis du es per Button freigibst.

Was noch Arbeit braucht

  • Andere App-Builder. Der gehostete Server registriert Clients über Client ID Metadata Documents, die Claude unterstützt. Builder, die nur Dynamic Client Registration oder ein statisches Bearer-Token beherrschen, etwa v0, Lovable und Bolt, können sich noch nicht mit dem gehosteten Endpunkt verbinden, und als gehostete Tools können sie auch das stdio-Paket nicht ausführen. Ihre generierten Apps lesen Inhalte problemlos über das SDK; die Agenten-Verbindung zur Build-Zeit ist die nächste Lücke, die es zu schließen gilt.
  • Suche. Volltextsuche über Inhalte gibt es im Assistenten des Admins, sie ist aber nicht im MCP-Server angebunden.
  • Neue Workspaces. Ein Workspace, dem du nach dem Verbinden beitrittst, wird nicht zur Verbindung hinzugefügt. Verbinde dich neu, um ihn einzuschließen.

Ausprobieren

Füge den gehosteten Server zu Claude hinzu, melde dich an und lass dir deine Bestellungen auflisten. Die MCP-Server-Docs behandeln beide Verbindungswege, das Claude-Code-Tutorial baut damit eine Seite, und der Supportfall-Walkthrough erledigt eine Erstattung, einen Rabatt und ein Banner in einer Unterhaltung. Content funktioniert in jedem Plan; Warenkorb und Checkout brauchen Pro.