Wenn dein Agent eine Shell hat, gib ihm eine Kommandozeile

MCP für KI-Agenten ist der neue Standard, um Werkzeuge anzubinden. Für Agenten mit Shell ist eine gut gebaute Kommandozeile (CLI) trotzdem oft die bessere Schnittstelle: Sie lädt nur, was der Agent braucht, lässt sich mit allem anderen in der Shell verbinden, und du kannst jeden Befehl selbst ausführen. Ohne Shell, etwa in einer Chat-App, führt dagegen kein Weg an MCP vorbei. Für Time Momentum haben wir uns gegen einen MCP-Server entschieden und die Kommandozeile tm gebaut. Hier steht, warum, und wo diese Entscheidung falsch wäre.

Stand 10.10.26

Was ein MCP-Server ist

Das Model Context Protocol beschreibt sich selbst als offenen Standard, der KI-Anwendungen mit externen Systemen verbindet (modelcontextprotocol.io, englisch). Das Projekt vergleicht es mit einem USB-C-Anschluss: ein Stecker für viele Geräte.

Die aktuelle Spezifikation trägt die Version 2026-07-28. Sie unterscheidet Hosts (die KI-Anwendung), Clients (die Verbindungen darin) und Server (die Dienste mit Daten und Werkzeugen), die per JSON-RPC miteinander sprechen. Ein MCP-Server kann Ressourcen, Prompts und Tools anbieten. Für Agenten zählen vor allem die Tools: Der Client fragt mit tools/list die Liste ab, jedes Tool kommt mit Namen, Beschreibung und einem JSON-Schema für die Eingaben.

Woran man eine Kommandozeile für KI-Agenten erkennt

Nicht jede CLI taugt für Agenten. Sie braucht Eigenschaften, nach denen Menschen selten fragen:

  • Sie beschreibt sich selbst als Daten: --help und ein vollständiger Befehlskatalog als JSON. Der Agent muss keine Flags raten.
  • Die Ausgabe ist ein Vertrag: Mit --json steht genau ein JSON-Dokument auf stdout, Fehler kommen als JSON auf stderr.
  • Exit-Codes haben eine Bedeutung: Aufruf korrigieren, den Menschen fragen, warten, wiederholen.
  • Sie wartet nie auf Eingaben, die der Agent nicht geben kann. Ohne Terminal fragt sie nichts. Destruktive Schritte brauchen ein ausdrückliches Flag wie --yes.
  • Sie kann zeigen statt handeln: --dry-run gibt die genaue Anfrage aus, ohne sie zu senden.
  • Geheimnisse bleiben aus der Ausgabe heraus, auch mit --verbose und --dry-run. Was der Agent sieht, landet in seinem Kontext.
  • Sie lässt sich überall installieren, wo ein Agent läuft, am besten ohne Abhängigkeiten.

MCP-Server und CLI im Vergleich

FrageMCP-ServerAgenten-CLI
Kontext vor dem ersten AufrufteilweiseOft alle DefinitionenErst auf Anfrage
Ergebnisse verbinden, ohne das Modell–Über das ModellPipes, jq, Skripte
Du kannst nachvollziehen, was der Agent tatteilweiseInspectorDerselbe Befehl
Version festschreibenteilweiseServer entscheidet
Läuft in Agenten mit ShellteilweiseWenn der Client es kann
Läuft in Chat-Apps ohne Shell–
Einheitliche Entdeckung und Anmeldungtools/list, OAuth–Eigene Konvention

Stand: 10.10.26

Kontext: alles vorab oder nur bei Bedarf

Anthropics Engineering-Team hat das Problem im November 2025 beschrieben: Die meisten MCP-Clients laden alle Tool-Definitionen vorab in den Kontext, und die Beschreibungen kosten Antwortzeit und Geld (Code execution with MCP, englisch). Die Empfehlung dort: Definitionen erst lesen, wenn sie gebraucht werden.

Fairerweise: Die Clients ziehen nach. Claude Code stellt MCP-Tools inzwischen standardmäßig zurück. Beim Start laden nur Tool-Namen und Server-Anweisungen, die vollständige Definition erst, wenn Claude nach dem Tool sucht (MCP tool search, englisch). Andere Clients laden womöglich weiterhin alles.

Eine Kommandozeile lädt von sich aus nur bei Bedarf: Bis der Agent einen Befehl ausführt, steht nichts im Kontext. Wie viel es bei tm 0.3.0 zu laden gäbe, haben wir gemessen. Der Gesamtkatalog (tm schema --json) hat 377.203 Zeichen, die Übersicht aller Befehlsgruppen (tm --json) 32.110, die Gruppe Rechnungen 104.009. Ein einzelner Befehl hat im Median 934 Zeichen, bei 157 Befehlen. Methode: npx -y @time-momentum/cli@0.3.0 schema --json | wc -c und ebenso für die anderen Aufrufe, am 10.10.2026.

Klein ist der Katalog nicht. Genau darum geht es: Der Agent entscheidet, was er lädt, meist eine Gruppe oder einen Befehl.

Zusammensetzen: Pipes, jq und Skripte

Bei MCP läuft jedes Zwischenergebnis durch das Modell, so steht es im selben Anthropic-Beitrag. Eine Liste mit 500 Rechnungen, die der Agent nur zählen soll, landet trotzdem vollständig in seinem Kontext.

In der Shell filtert der Agent, bevor er liest. tm payments outstanding --json | jq '[.data[].summary.outstanding_micros] | add / 1000000' liefert eine Zahl: die offene Summe in Euro. tm invoices list --all --json | jq '[.data[] | select(.status == "draft")] | length' zählt die Entwürfe über alle Seiten. Dieselben Zeilen laufen auch als Cronjob oder Shellskript, ganz ohne Agent.

Anmeldung: OAuth oder API-Key

In MCP ist die Autorisierung optional. Remote-Server über HTTP sollen dem OAuth-2.1-Ablauf der Spezifikation folgen, lokale Server über stdio holen ihre Zugangsdaten aus der Umgebung. Für eine Chat-App, in der sich jeder mit seinem eigenen Konto anmeldet, ist OAuth der bequemere Weg.

Eine CLI arbeitet meist mit einem API-Key. Das ist einfach, verlangt aber Sorgfalt, denn der Key darf nie in dem auftauchen, was der Agent liest. tm hält ihn in einer lokalen Datei mit den Rechten 600 oder in einer Umgebungsvariable, tauscht einen Schreib-Key gegen ein Token, das eine Stunde gilt, und gibt den Key nie aus, auch nicht mit --verbose oder --dry-run. Ein Token aus diesem Tausch kann keine neuen Keys anlegen und das Konto nicht löschen.

Prüfen: Probelauf und derselbe Befehl für dich

Jeder Aufruf eines Agenten über eine CLI ist eine Zeile, die du kopieren, lesen und selbst ausführen kannst. --dry-run geht einen Schritt weiter und zeigt Methode, URL und Body, ohne etwas zu senden. So lässt sich die Arbeit des Agenten prüfen, bevor sie passiert. Bei Rechnungen zählt das besonders.

Auch für MCP gibt es Werkzeuge dafür, etwa den MCP Inspector für Entwickler. Einen Tool-Aufruf tippst du aber nicht einfach in dein eigenes Terminal, um zu sehen, was er tut.

Versionen: festschreiben oder mitlaufen lassen

Eine CLI ist ein Paket mit Versionsnummer. Du kannst sie festschreiben (npx -y @time-momentum/cli@0.3.0), zurückgehen (tm update --to <version>) und dich darauf verlassen, dass ein Skript von gestern heute noch läuft. Ändert sich die API so, dass eine alte Version falsch arbeiten würde, lehnt der Server diese Version mit einer klaren Meldung samt Update-Befehl ab.

MCP versioniert das Protokoll nach Datum, und Server können Änderungen an ihrer Tool-Liste zur Laufzeit melden. Welche Tools du heute bekommst, entscheidet ein Remote-Server selbst. Das ist bequem, solange nichts bricht.

Verbreitung: jeder Agent mit Shell

Claude Code, Codex, Cursor und die meisten Coding-Agenten können Shell-Befehle ausführen. Eine CLI funktioniert in allen, ohne dass der Client noch etwas unterstützen muss, auch in Sandboxen und in der CI.

Wo ein MCP-Server besser ist

  • Clients ohne Shell. claude.ai, Claude Desktop und die mobilen Claude-Apps erreichen externe Werkzeuge über Connectors, und das sind MCP-Server (Claude-Doku, englisch). Dort hilft keine CLI.
  • Einheitliche Entdeckung. Jeder MCP-Server beantwortet tools/list gleich, und die offizielle MCP Registry listet Server. Jede CLI beschreibt sich auf ihre eigene Art.
  • Anmeldung je Person. Mit OAuth verbindet jeder sein eigenes Konto, ohne mit einem Key zu hantieren.
  • Nutzer ohne Technikhintergrund. Einen Connector in einer Chat-App hinzuzufügen ist einfacher, als eine Kommandozeile zu installieren.

So macht es Time Momentum

Die Agenten unserer Nutzer arbeiten ohnehin in der Shell, an Kundenprojekten. Deshalb gibt es für Time Momentum keinen MCP-Server, sondern tm: eine Kommandozeile, die das ganze Produkt bedient, von Aufwand, Kunden, Aufträgen und Projekten über Rechnungen und E-Rechnungen bis zu Zahlungen, Leistungsnachweisen und Rentabilität.

tm hat keine Laufzeitabhängigkeiten. Jede Operation der REST-API, die für die Kommandozeile gedacht ist, hat genau einen Befehl, in Version 0.3.0 sind das 143 Operationen, und ein Test erzwingt das bei jeder Änderung der API. tm skill gibt die Anleitung aus, die zur installierten Version passt. In Claude Code legt tm skill --install einen kurzen Skill an, der darauf verweist, und Time Momentum gibt es auch als Claude-Code-Plugin.

Eine Rechnung stellen oder stornieren und Löschen gehen nur mit ausdrücklichem --yes. Ohne Terminal bricht tm sonst ab.

Mehr zum Thema

  • Für KI-Agenten

    Was dein Agent über tm in Time Momentum erledigt, das Sicherheitsmodell und die Einrichtung.

    Für KI-Agenten
  • Geschäftssoftware für KI-Agenten

    Woran du erkennst, ob eine Software deinen Agenten sicher mit Kunden, Rechnungen und Zahlungen arbeiten lässt.

    Ratgeber lesen

Lass deinen Agenten aus der Shell abrechnen

  • 30 Tage Pro testen
  • Ohne Kreditkarte
  • Danach weiter mit Free

Häufige Fragen

Was ist ein MCP-Server?

Ein Dienst, der KI-Anwendungen über das Model Context Protocol Daten und Werkzeuge anbietet. Der Client fragt die verfügbaren Tools ab und ruft sie mit Eingaben nach einem JSON-Schema auf.

Ist für KI-Agenten ein MCP-Server oder eine CLI besser?

Für Agenten mit Shell wie Claude Code, Codex oder Cursor meist eine gut gebaute CLI: Sie lädt nur, was der Agent abfragt, Ergebnisse lassen sich filtern, bevor das Modell sie liest, und du kannst jeden Aufruf selbst wiederholen. In Chat-Apps ohne Shell geht es nur mit MCP.

Verbrauchen MCP-Tools Kontext?

In vielen Clients ja: Laut Anthropic laden die meisten MCP-Clients alle Tool-Definitionen vorab. Claude Code stellt sie inzwischen standardmäßig zurück und lädt beim Start nur die Namen.

Gibt es für Time Momentum einen MCP-Server?

Nein. Agenten nutzen die Kommandozeile tm, die jede dafür gedachte API-Operation abdeckt. Für Claude Code gibt es zusätzlich einen Skill und ein Plugin.