verbatra mcp
Starte den stdio-MCP-Server, der die Tools von verbatra für jeden MCP-Client bereitstellt.
Maschinell übersetzte Seite
Starte einen Model-Context-Protocol-Server über stdio: den Standard-Transport für lokale Prozesse, mit dem MCP-Clients (Claude Desktop, Claude Code, Cursor und andere) einen Tool-Server starten und mit ihm sprechen. Er gibt einem Agenten im Terminal oder ohne Oberfläche dieselben Fähigkeiten für Übersetzungsstatus, Glossar und Bearbeitung, die die Browser-Agent-Tools von Studio bereitstellen, ganz ohne Browser, Port oder ausgelieferte Single-Page-App.
Verfügbar ab @verbatra/mcp 0.2.0
Synopsis
verbatra mcp [flags]@verbatra/mcp liefert außerdem sein eigenes Binary, sodass ein MCP-Client es direkt starten kann, ganz ohne die verbatra-CLI:
verbatra-mcp [flags]Beide Formen nehmen dieselben drei Flags und starten denselben Server, aber die Hüllen darum unterscheiden sich:
verbatra mcplädt vor dem Start.env.localund danach.envaus dem Arbeitsverzeichnis;verbatra-mcplädt keine der beiden, übergib einen API-Key also in der Umgebung, mit der der MCP-Client es startet.verbatra mcplehnt ein unbekanntes Flag als Verwendungsfehler ab und endet mit2;verbatra-mcpignoriert unbekannte Flags.- Ein Start- oder Konfigurationsfehler endet bei
verbatra mcpmit2und beiverbatra-mcpmit1. verbatra mcpwird bei einem zweiten Interrupt während des Herunterfahrens mit Exit-Code130zwangsbeendet;verbatra-mcphat keinen solchen Pfad.
Flags
| Flag | Argument | Standard | Wirkung |
|---|---|---|---|
--cwd | <path> | aktuelles Verzeichnis | Konfiguration und Locale-Dateien von diesem Verzeichnis aus auflösen |
--config | <path> | wird gesucht | diese Konfigurationsdatei laden, statt eine zu suchen |
--allow-spend | keins | aus | die beiden Tools bereitstellen, die einen Übersetzungs-Provider aufrufen |
Fehlt --allow-spend, liest der Server stattdessen die Umgebungsvariable VERBATRA_MCP_ALLOW_SPEND: 1, true, yes oder on (Groß-/Kleinschreibung egal) zählt als an. Das CLI-Flag gewinnt immer gegenüber der Umgebungsvariable. Ohne beides werden translation.retranslateEntry und translation.translatePending überhaupt nicht bereitgestellt: Ein MCP-Client, der die Tools auflistet, sieht sie nie, und der Aufruf eines der beiden Namen schlägt als unbekanntes Tool fehl. Das ist eine Garantie pro Prozess, keine Prüfung pro Aufruf: Ein Tool hinter dem Spend-Gate ist strukturell nicht aufrufbar, statt beim Aufruf nur abgelehnt zu werden.
Einen MCP-Client konfigurieren
Richte deinen MCP-Client auf das verbatra-mcp-Binary aus. Für Claude Desktop fügst du das zu deiner claude_desktop_config.json hinzu:
{
"mcpServers": {
"verbatra": {
"command": "npx",
"args": ["-y", "@verbatra/mcp", "--cwd", "/path/to/your/project"],
"env": {
"ANTHROPIC_API_KEY": "your-api-key-here"
}
}
}
}Lass den env-Block und sein --allow-spend ganz weg für einen Server, der nur liest und nur lokal bearbeitet: project.snapshot, die Status- und Glossar-Tools sowie translation.editEntry rufen nie einen Provider auf und brauchen keinen Key. Füge --allow-spend zum args-Array hinzu, sobald du auch translation.retranslateEntry und translation.translatePending verfügbar haben willst, und setze die Umgebungsvariable für den API-Key, die dein konfigurierter Provider liest (siehe Provider).
Rufst du bereits alles über die verbatra-CLI auf, starte es stattdessen als Unterbefehl:
{
"mcpServers": {
"verbatra": {
"command": "npx",
"args": ["-y", "@verbatra/cli", "mcp", "--cwd", "/path/to/your/project"]
}
}
}Tools
| Tool | Was es tut | Nur lesend | Ruft einen Provider auf |
|---|---|---|---|
project.snapshot | aufgelöste Konfiguration: Quell-Locale, Ziel-Locales, Format, Dateimuster (files.pattern), Provider-ID, Konfigurationsquelle, Glossar-Indikator | ja | nein |
status.check | Anzahl fehlender, veralteter und aktueller Keys pro Locale | ja | nein |
status.diff | Liste der Keys pro Locale, die hinzugefügt, neu übersetzt oder als verwaist gemeldet würden | ja | nein |
glossary.get | jeder Glossar-Begriff und seine Übersetzung, mit geschwärzten Secrets | ja | nein |
glossary.write | einen Glossar-Begriff hinzufügen, ersetzen oder entfernen | nein | nein |
lock.state | Version der Lock-Datei und, pro Ziel-Locale, die Anzahl verzeichneter Keys sowie die Zahlen für fehlend, veraltet und aktuell | ja | nein |
key.integrity | Platzhalter-, Inline-Markup- und ICU-Drift eines Keys gegenüber der Lock-Baseline, pro Locale (prüft nur Keys, deren Quelltext sich seit der Baseline geändert hat; ein leeres entries-Array bedeutet: geprüft und unverändert) | ja | nein |
key.value | aktueller Quell- und Zieltext eines Keys | ja | nein |
translation.editEntry | eine manuelle Übersetzung für einen Key in einer Locale schreiben, abgesichert durch das Integritäts-Gate für Platzhalter, Inline-Markup und ICU | nein | nein |
translation.retranslateEntry | den konfigurierten Provider bitten, einen Key in einer Locale neu zu übersetzen | nein | ja |
translation.translatePending | jeden fehlenden oder veralteten Key über alle Ziel-Locales übersetzen | nein | ja |
review.queue | Keys, die der letzte Lauf zur menschlichen Prüfung markiert hat, und warum | ja | nein |
usage.summary | Token-Verbrauch und Budgetstatus des letzten Laufs, einschließlich budget.standing und budget.supported | ja | nein |
translation.retranslateEntry und translation.translatePending werden nur bereitgestellt, wenn der Server mit --allow-spend gestartet wurde. Der Input jedes Tools und, wo die Ergebnisform klein und geschlossen ist, auch der Output sind ein JSON-Schema, abgeleitet aus demselben zod-Schema, gegen das der Server den Aufruf validiert. Der Aufruf eines unbekannten Tool-Namens ist ein Fehler auf Protokollebene; der Aufruf eines bekannten Tools mit Input, der die Validierung nicht besteht, liefert ein Ergebnis, das das betroffene Feld nennt, sodass ein Agent den Fehler lesen und selbst korrigieren kann.
Die beiden Eintrags-Schreiber, translation.editEntry und translation.retranslateEntry, sind zusätzlich pro Tool, Locale und Key abgesichert: Während ein Aufruf für einen Eintrag noch läuft, wird ein zweiter Aufruf desselben Tools mit demselben locale und key weder eingereiht noch parallel ausgeführt. Er bekommt ein isError-Ergebnis, dessen Text sagt, dass bereits ein passender Aufruf läuft, damit zwei Agenten (oder ein Agent, der es erneut versucht) nicht über dasselbe Tool in ein Wettrennen um denselben Eintrag geraten. Aufrufe für andere Keys oder andere Locales laufen weiterhin parallel. translation.translatePending hat keine solche Sperre.
Inputs und Ergebnisse
status.check,status.diffundkey.integritynehmen ein optionaleslocales-Array (mindestens ein Eintrag), das das Ergebnis auf diese Locales eingrenzt;key.integritynimmt außerdem den zu prüfendenkey.translation.editEntrynimmtlocale,keyundvalue, wobeivalueauf 20.000 Zeichen begrenzt ist.glossary.writenimmt{ term, translation }, wobeitermauf 200 Zeichen undtranslationauf 2.000 begrenzt ist;translation: nullentfernt den Begriff. Es braucht ein dateibasiertes Glossar (dasglossaryder Konfiguration zeigt auf eine JSON-Datei); ein Inline-Glossar oder gar keines schlägt mitGLOSSARY_NOT_FILE_BACKEDfehl.translation.editEntryundtranslation.retranslateEntryliefern{ accepted, value, reason?, details? }. Ein abgelehnter Wert trägtreason, einen vonplaceholder,markup,icu,degenerateoderempty, unddetails, das benennt, was fehlgeschlagen ist;translation.retranslateEntryergänzt ein akzeptiertes Ergebnis umreviewReasons: die Flags der Review-Heuristiken für den neuen Wert, leer, wenn keine angeschlagen hat.lock.stateliefertexistsund, wenn die Lock-Datei existiert, ihreversionsowie pro Locale die ZahlenkeyCount,missing,staleundupToDate.usage.summaryliefert dieusagedes letzten Laufs und, wenn ein Token-Budget konfiguriert war, einbudget, dessenstandingwithin,stopped-before-ceilingoderreachedist und dessensupportedangibt, ob die gezählte Zahl vollständig aus dem vom Provider selbst gemeldeten Verbrauch stammt.
Verfügbar ab @verbatra/mcp 0.2.1
Die Inline-Markup-Prüfungen in key.integrity (markupMatches, markupDetails) und in translation.editEntry (der Grund markup), eine custom:-Format-ID in project.snapshot und budget.standing in usage.summary kamen mit diesem Release.
Secrets werden geschwärzt
Jedes Tool-Ergebnis und jede Log-Zeile durchläuft dasselbe Schwärzen von Secrets, das auch Studio verwendet: Ein Wert, der wie ein Provider-API-Key aussieht, oder der exakte aktuelle Wert einer konfigurierten Provider-Umgebungsvariable, wird durch [REDACTED] ersetzt, bevor er den Client oder stderr überhaupt erreicht. glossary.get und glossary.write melden zudem, welche Begriffe geschwärzt wurden, sodass du einen geschwärzten Platzhalter vom echten Text unterscheiden kannst und ihn nicht versehentlich zurückschreibst.
stdout ist der Protokollkanal
Der stdio-Transport von MCP nutzt stdout ausschließlich für Protokollnachrichten. verbatra mcp und verbatra-mcp geben niemals ein Banner, eine Log-Zeile oder irgendetwas anderes auf stdout aus; jedes Log und jede Diagnose geht stattdessen auf stderr. Der Server lädt die Konfiguration, bevor er den Transport verbindet; ein Konfigurationsfehler wird also sofort auf stderr geschrieben, und der Prozess endet, ohne je das Protokoll zu sprechen. Sobald er läuft, gehen auch die Diagnosen pro Aufruf (ein fehlgeschlagener Aufruf, ein abgelehnter Aufruf, weil bereits ein passender läuft, ein unbekanntes Tool) auf stderr.
Installation
@verbatra/mcp ist ein eigenes Paket, das über einen dynamischen Import erreicht wird, damit der Rest der CLI auch ohne es funktioniert. Ist es nicht installiert, beendet sich verbatra mcp mit 2 und gibt aus:
Verbatra's MCP server requires @verbatra/mcp. Install it with: pnpm add -D @verbatra/mcpverbatra-mcp direkt aufzurufen, braucht überhaupt keine CLI: Installiere @verbatra/mcp allein, oder lass npx es wie oben gezeigt bei Bedarf holen.
Beispiele
# start the MCP server with only local, non-spending tools
verbatra mcp
# also advertise the provider-calling tools
verbatra mcp --allow-spend
# resolve a project outside the current directory
verbatra mcp --cwd /path/to/project --config verbatra.config.tsExit-Codes
Das sind die Exit-Codes von verbatra mcp; das eigenständige verbatra-mcp weicht davon ab, wie oben in der Übersicht beschrieben.
| Code | Bedeutung |
|---|---|
0 | sauber gestoppt durch einen einzelnen Interrupt (Ctrl-C oder SIGTERM) |
1 | Stoppen fehlgeschlagen: das Schließen des Servers warf beim Herunterfahren einen Fehler |
2 | konnte nicht starten: ein Konfigurationsfehler, @verbatra/mcp nicht installiert, oder ein Verwendungsfehler |
130 | zwangsbeendet durch einen zweiten Interrupt, während das Herunterfahren noch lief |
Siehe auch
verbatra studiound Studio mit einem Browser-Agenten bedienen behandeln die Browser-basierte Agent-Oberfläche, die dieser Server ergänzt.- Provider dokumentiert, aus welcher Umgebungsvariable jeder Provider seinen API-Key liest.
verbatra checkundverbatra diffsind dieselben Berechnungen, diestatus.checkundstatus.diffbereitstellen.