Skip to main content
Glama
ProxiBlue

pb-hypernode-mcp

by ProxiBlue

pb-hypernode-mcp

Client-seitiges Claude Code Plugin für Hypernode Brancher — Erstellen von wegwerfbaren, produktionsidentischen Vorschauumgebungen, Durchführen KI-gestützter Änderungen per SSH, Anzeigen über Ihr vorhandenes Browser-MCP.

Warum

Brancher gibt Ihnen eine veränderbare, temporäre Kopie Ihres Produktions-Hypernode (≤24h alte Daten, vollständige Toolchain, echte Infrastruktur — keine Docker-Annäherung). Der Haken: Es klont die Produktion vollständig, was bedeutet, dass live Kundendaten (PII) und echte Zahlungs-/API-Zugangsdaten standardmäßig mitkommen, und der Knoten erhält eine öffentliche URL. Dieses Plugin schließt diese Lücke — jeder Knoten, den es erstellt, wird automatisch anonymisiert und in einer Sandbox ausgeführt, bevor er als bereit gemeldet wird, sodass „lass die KI des Kunden an einem echten Produktionsklon herumstochern“ nicht auch bedeutet, „echte Kundendaten im Internet preiszugeben“.

Related MCP server: live-preview-mcp

Einrichtung

Drei Schritte: Plugin installieren, Hypernode-Token mitteilen, Claude Code neu starten.

1. Plugin installieren

Geben Sie dies direkt in Claude Code ein (kein Terminal erforderlich):

/plugin marketplace add ProxiBlue/pb-hypernode-mcp
/plugin install pb-hypernode-mcp@pb-hypernode-mcp

Claude Code lädt alles direkt von GitHub herunter – kein Herunterladen, kein separater Server zum Ausführen, nichts, was von Hand geklont werden muss.

(Wenn Sie es stattdessen lieber über ein Terminal ausführen möchten, funktionieren die gleichen Befehle als claude plugin marketplace add ... / claude plugin install ....)

2. Hypernode-API-Token hinzufügen

Dieses Plugin benötigt Ihr Hypernode-API-Token, um in Ihrem Namen mit Ihrem Hypernode-Konto zu kommunizieren. Es wird nirgendwo vom Plugin gespeichert – Sie setzen es als Umgebungsvariable, genau wie Sie einen passwortähnlichen Wert setzen würden.

Finden Sie Ihren Token im Hypernode-Control-Panel und geben Sie ihn dann in Ihrem Terminal ein (bevor Sie Claude Code öffnen):

export HYPERNODE_API_TOKEN="your-token-here"

Optional, aber empfohlen – schränken Sie ein, auf welche Hypernode-Apps dieses Plugin zugreifen darf, damit ein Tippfehler niemals die falsche Website trifft:

export HYPERNODE_APP_ALLOWLIST="myapp"

(Komma-getrennte mehrere App-Namen, z.B. "myapp,myapp2", wenn Sie mehr als eine verwalten.)

Tipp: Fügen Sie beide Zeilen zu Ihrer Shell-Startdatei (~/.zshrc oder ~/.bashrc) hinzu, damit Sie sie nicht jedes Mal neu eingeben müssen.

3. Claude Code neu starten

Schließen und öffnen Sie Claude Code erneut, damit es den Token erkennt und eine Verbindung zum Plugin herstellt. Sie sind startbereit.

Schnellstart

Fragen Sie einfach, in einfachem Englisch:

"Spin up a Brancher preview for myapp so I can show the client the new category page layout."

Claude erstellt den Knoten, wartet darauf, dass er online kommt, bereinigt ihn (siehe Sicherheitsvorkehrungen) und meldet sich zurück:

node_name:     myapp-eph482913
access_url:    https://myapp-eph482913.hypernode.io/
minutes_remaining: 387

Von dort aus können Sie bitten, eine Änderung vorzunehmen und das Ergebnis anzuzeigen, oder einfach „Bereinige alle übrig gebliebenen Vorschauknoten“ sagen, wenn Sie fertig sind – Brancher berechnet pro Minute, unabhängig davon, ob jemand darauf schaut.

Was das Plugin enthält

skills/
├── brancher-spinup/      create a sanitized preview node, report access details
├── brancher-preview/     full loop: spin up -> change -> build -> screenshot
└── brancher-cleanup/     list/flag/delete leftover nodes
src/pb_hypernode_mcp/     the MCP server (6 tools) — see MCP tools below
tests/                    automated test suite

Voraussetzungen

  • Ein Hypernode-Konto mit einem Falcons-Plan, mit einem API-Token aus dem Control Panel (Brancher ist eine reine Falcons-Funktion).

  • Der SSH-Schlüssel, den Sie bereits verwenden, um auf Ihren Hypernode zuzugreifen – nichts zusätzlich einzurichten, Brancher-Vorschauknoten erben den Zugriff automatisch.

  • Python 3.11+ und uv auf dem Rechner installiert, auf dem Claude Code läuft (Claude Code-Plugins sind nur Code – das ist die Laufzeitumgebung, die sie benötigen).

MCP-Tools

Alle 6 Tools sind auf dem pb-hypernode-mcp-Server (src/pb_hypernode_mcp/server.py) registriert. brancher_exec und brancher_put greifen auf die systemeigenen ssh/rsync-Binärdateien zu, wobei sie Ihren bereits konfigurierten lokalen SSH-Agent/Schlüssel verwenden – dieses Plugin speichert selbst kein Schlüsselmaterial.

Tool

Zweck

Wichtige Argumente

brancher_create

Das alleinige Tool zur Knotenerstellung: Erzwingt eine obligatorische Bezeichnung, die App-Whitelist und die Falcons-Plan-Berechtigung, wickelt dann Erstellen -> Warten, bis SSH erreichbar -> obligatorische Bereinigung ausführen -> als bereit melden als einen nicht umgehbaren Aufruf ab. Es gibt kein separates „Raw-Create“-Tool – es ist strukturell unmöglich, einen Brancher-Knoten über dieses Plugin zu erstellen, ohne dass zuerst die Bereinigung läuft. Gibt niemals eine access_url für einen Knoten zurück, der noch nicht fertig bereinigt ist. Löst NodeUnreachableTimeoutError aus, wenn der Knoten nicht innerhalb von 300s SSH-erreichbar wird, oder SanitizationFailedError (Zugriffs-URL zurückgehalten), wenn ein Bereinigungsbefehl während der Ausführung fehlschlägt.

appname (str), labels (list[str], erforderlich, mindestens eines), clear_services (list[str], optional, Standardwert ["cron"])

brancher_list

Listet aktive Brancher-Knoten für appname auf. Gibt für jeden Knoten name, host und minutes zurück (Echtzeit-Betriebszeit seit Erstellung, nicht untätigkeitsbewusst). Lehnt jedes appname ab, das nicht auf der Whitelist steht.

appname (str)

brancher_delete

Löscht einen Brancher-Knoten. Geschützt durch einen erneuten Aufruf mit confirm=True: Der erste Aufruf (Standard confirm=False) sucht die Details des Zielknotens und gibt sie zusammen mit einer Bestätigungsaufforderung zurück, ohne etwas zu löschen; erst ein zweiter Aufruf mit confirm=True führt das eigentliche DELETE aus. Validiert zuerst den Knotennamen anhand des -eph<id>-Musters.

node_name (str, <appname>-eph<id>), confirm (bool, Standard False)

brancher_ssh_info

Gibt SSH-Verbindungsdetails (host, user, port) für einen Knoten zurück, ohne selbst eine Verbindung zu öffnen. Löst NodeNotReadyError aus, wenn dem Knoten noch keine IP zugewiesen wurde.

node_name (str)

brancher_exec

Führt einen Shell-Befehl auf einem Brancher-Knoten über SSH aus (greift auf die systemeigene ssh-Binärdatei zu). Der einzige sicherheitskritische Engpass der „Änderungs“-Schicht: Verweigert jeden node_name, der nicht dem -eph<id>-Muster entspricht, bevor ein Unterprozess gestartet wird – strukturell unmöglich, dieses Tool auf einen Produktionshost zu richten. Gibt stdout/stderr/exit_code zurück; löst SshConnectionError bei ssh's eigenem Exit-Code 255 aus, SshCommandTimeoutError bei Zeitüberschreitung.

node_name (str), command (str), timeout (float, Standard 30s)

brancher_put

Synchronisiert eine lokale Datei/ein lokales Verzeichnis auf einen Brancher-Knoten über rsync -az --protect-args per SSH. Gleicher -eph-only-Schutz und lokales SSH-Agent-Verbindungsmodell wie brancher_exec. Löst SyncError bei einem rsync-Exit-Code ungleich Null aus.

node_name (str), local_path (str), remote_path (str), port (int, Standard 22)

Fähigkeiten

  • brancher-spinup — Erstellt einen wegwerfbaren Brancher-Vorschauknoten, der aus der Produktion geklont wurde, mit obligatorischer automatischer Bereinigung und meldet seine Zugriffs-URL. Verwenden Sie dies, wenn ein Kunde darum bittet, eine Änderung in einer echten Produktionsklon-Umgebung vor dem Ausliefern zu prüfen. Kapselt den einzelnen brancher_create-Toolaufruf – reproduziert niemals die Erstellungs-/Warte-/Bereinigungssequenz von Hand.

  • brancher-preview — Der vollständige Kreislauf: Erstellen eines Knotens (über die brancher-spinup-Fähigkeit), Anwenden einer Codeänderung (einen lokalen Diff mit brancher_put übertragen oder direkt mit brancher_exec bearbeiten), Ausführen nur der Magento-Build-Befehle, die die Änderung tatsächlich benötigt (decide_build_commands() in src/pb_hypernode_mcp/preview_logic.py), Anzeigen des Ergebnisses über das im Browser bereits vorhandene MCP-Tool, dann explizites Erinnern des Benutzers, dass der Knoten immer noch Brancher-Minuten verbraucht. Verwenden Sie dies, wenn ein Kunde eine durchgängige Ansicht einer Änderung in einer wegwerfbaren Umgebung wünscht. Löscht den Knoten selbst nie.

  • brancher-cleanup — Listet aktive Knoten mit brancher_list auf, markiert alle, die einen Altersschwellenwert erreicht oder überschritten haben (minutes >= threshold_minutes, Standard 240 Minuten / 4 Stunden, über flag_stale_nodes() in src/pb_hypernode_mcp/cleanup_logic.py), und löscht markierte Knoten (einzeln oder in großen Mengen) nur nach expliziter Benutzerbestätigung. Verwenden Sie dies, wenn ein Kunde übrig gebliebene Brancher-Knoten überprüfen oder entfernen möchte, um die Minutenakkumulation zu stoppen. Brancher berechnet Echtzeit-Minuten ab der Erstellung, unabhängig davon, ob jemand den Knoten aktiv nutzt.

Sicherheitsvorkehrungen

  • Erzwungene Bereinigung – kann nicht deaktiviert werden. Jeder brancher_create-Aufruf führt die vollständige Bereinigungssequenz (src/pb_hypernode_mcp/sanitization/) gegen den Node aus, bevor er jemals als "ready" gemeldet wird oder eine access_url zurückgibt. Es gibt kein Flag, keine Konfigurationsoption und keinen Umgehungspfad – brancher_create ist das EINZIGE Node-Erstellungs-MCP-Tool, das dieses Plugin registriert (es gibt kein separates, ungereinigtes Erstellungstool), und spinup_sanitized_brancher_node() in src/pb_hypernode_mcp/tools/brancher_spinup_flow.py (die dahinterstehende Funktion) kann strukturell keine Zugriffs-URL zurückgeben, ohne dass zuvor jeder Bereinigungsbefehl mit Exit-Code 0 beendet wurde. Wenn ein Bereinigungsbefehl zwischendurch fehlschlägt, löst das Tool SanitizationFailedError aus und enthält die Zugriffs-URL bewusst zurück – die Ausnahme trägt sie nicht einmal, sodass ein abfangender Aufrufer sie nicht versehentlich preisgeben kann.

    Die Sequenz (konfigurationsgesteuert, Magento-förmiger Standard in sanitization/config.py::DEFAULT_MAGENTO_SANITIZATION_CONFIG):

    1. PII-Anonymisierung – UPDATE-Anweisungen (via n98-magerun2 db:query) gegen customer_entity, customer_address_entity, sales_order, sales_order_address (Namen/E-Mails/Telefone/Straße durch anonymisierte Platzhalter ersetzt) und gespeicherte Kartendaten (quote_payment, sales_order_payment: cc_number_enc, cc_cid_enc, cc_owner, additional_data auf null gesetzt).

    2. Admin-Anmeldedaten zurücksetzen – admin_user Benutzername/E-Mail auf Platzhalterwerte zurückgesetzt und Passwort mit einem Hash überschrieben, der absichtlich für jedes echte Passwort ungültig ist (sperrt formularbasiertes Login, bis ein Betreiber ein echtes via bin/magento admin:user:create setzt).

    3. Payment-Gateway-Sandbox-Erzwingung – bin/magento config:set erzwingt z. B. payment/braintree/environment=sandbox, paypal/general/sandbox_flag=1.

    4. Third-Party-API-Key-Stubbing – bin/magento config:set ersetzt Live-Keys (z. B. ShipperHQ, AvaTax) durch Dummy-Sandbox-Werte, sodass kein Vorschau-Node eine echte Belastung oder einen echten Third-Party-API-Aufruf mit Produktionsanmeldedaten durchführen kann.

    Die genaue Tabellenstruktur und die installierten Integrationen einer echten Client-App sollten SanitizationConfig überschreiben/erweitern, nicht auf den ausgelieferten Standard in der Produktion vertrauen – er existiert als sicherer Standard-Ausgangspunkt, nicht als Versprechen, dass er jedes Schema abdeckt.

  • App-Allowlist (HYPERNODE_APP_ALLOWLIST) – wenn gesetzt, lehnen brancher_create, brancher_list und brancher_delete jeden appname ab, der nicht auf der Liste steht.

  • Falcons-Plan-Berechtigungsprüfung – brancher_create lehnt Apps ab, die sich nicht in einem Brancher-berechtigten Plan befinden, bevor etwas erstellt wird.

  • -eph-nur-Schutz – brancher_exec und brancher_put validieren node_name gegen das <appname>-eph<id>-Muster (tools/_guards.py::validate_eph_node_name, .fullmatch() – keine Teilübereinstimmungen oder nachgestellte Zeichenlücken), bevor eine SSH-Verbindung oder ein Unterprozess geöffnet wird. Es ist strukturell unmöglich, eines der Tools auf einen Produktions-Hostnamen zu richten.

  • Bestätigung-vor-Löschung – brancher_delete löscht nie beim ersten Aufruf. Es erfordert einen expliziten erneuten Aufruf mit confirm=True, nachdem die Details des Ziel-Nodes angezeigt wurden; eine konfigurierte Schwelle oder ein als veraltet markierter Node ist niemals selbst eine Bestätigung.

  • Erforderliches Label – brancher_create lehnt Aufrufe ohne labels ab, sodass jeder Node auf einen Grund/Ticket zurückverfolgbar ist.

  • Token-Handhabung – HYPERNODE_API_TOKEN wird nur aus der Umgebung gelesen und von diesem Plugin niemals auf die Festplatte oder in die Plugin-Konfiguration geschrieben.

  • brancher_put-Argumenthärtung – remote_path/local_path werden shell-quoted und rsync läuft mit --protect-args, sodass die Shell des entfernten Hosts ein Pfadargument nie neu parst, wodurch Metazeichen-Injektion über einen manipulierten Pfad unterbunden wird.

Dieses Design wurde vor der Veröffentlichung von einer 3-Spezialisten-Sicherheitsüberprüfung geprüft (statische Analyse, adversariales Testen, defensives Audit). Es deckte eine echte kritische Lücke in einem früheren Entwurf auf – der bereinigte Ablauf war als zweites Tool neben einem noch exponierten rohen, ungereinigten Erstellungspfad gebaut worden – weshalb „ein Erstellungstool, keine Ausnahmen“ oben so nachdrücklich betont wird. Ein Sicherheitsproblem gefunden? Eröffnen Sie ein Issue anstelle eines PRs mit den Exploit-Details.

Einschränkungen (v1)

  • Nur Magento/Mage-OS. Die Standardkonfiguration der Bereinigungsschicht (DEFAULT_MAGENTO_SANITIZATION_CONFIG) und die Build-Befehl-Entscheidungslogik des brancher-preview-Skills (decide_build_commands()) sind beide Magento-förmig. Dies ist kein generisches Multiplattform-Tool – WooCommerce, Shopware, Laravel und andere von Hypernode gehostete Plattformen sind für v1 nicht vorgesehen. Eine Nicht-Magento-App würde mindestens ein handgeschriebenes SanitizationConfig benötigen, und die Build-Sequenz des Preview-Skills würde nicht zutreffen.

  • Keine MCP-verwalteten SSH-Schlüssel. brancher_exec/brancher_put greifen auf die systemeigenen ssh/rsync-Binärdateien zurück und verlassen sich vollständig darauf, dass Ihr eigener lokaler SSH-Agent/Schlüssel bereits Zugriff auf Brancher-Nodes hat (die den Zugriff automatisch über Branchers vollständiges Dateisystem-Klon aus der Produktion erben). Dieses Plugin stellt niemals Schlüsselmaterial bereit, speichert es oder überträgt es.

  • Nur stdio-Transport. Kein Remote/HTTP-MCP-Transport in v1 – dies ist ein lokales Claude Code-Plugin, das pro Entwickler gegen seinen eigenen HYPERNODE_API_TOKEN ausgeführt wird. Es gibt keine gehostete/verwaltete Version dieses MCP. Token- und SSH-Zugriff liegen vollständig in der Hand des Clients.

  • Nur REST-API. Keine Hypernode Deploy (deploy.php)-Integration in v1.

  • Wanduhr-basierte, nicht leerlauferkennende Minutenabrechnung. Die Veralterungsprüfung von brancher-cleanup verwendet minutes, wie von der Hypernode-API gemeldet (Betriebszeit seit Erstellung) – sie kann einen inaktiven Node nicht von einem aktiv genutzten unterscheiden.

  • Nicht verifizierte API-Antwortstrukturen. Die erwartete Antwortstruktur von brancher_list ({"nodes": [{"name", "host", "minutes"}, ...]}) und die Feldnamen für Plan/Minuten von brancher_create (plan_type, brancher_minutes_remaining) sind dokumentierte Annahmen, die noch nicht gegen den Live-Hypernode-API-Vertrag bestätigt wurden – siehe die Modul-Docstrings in src/pb_hypernode_mcp/tools/brancher_list.py und src/pb_hypernode_mcp/tools/brancher_create.py, wenn API-Antworten zur Laufzeit nicht übereinstimmen. Führen Sie einen echten create -> brancher_exec whoami-Smoke-Test gegen ein Falcons-Plan-Konto durch, bevor Sie dies auf einen Client ausrichten.

  • Playwright-Test-Auslagerung noch nicht implementiert. Das Ausführen der funktionalen Testsuite gegen einen Brancher-Node anstatt lokal/CI wird separat verfolgt – siehe ProxiBlue/pb-hypernode-mcp#1 oder das ursprüngliche Design-Ticket.

Entwicklung

git clone https://github.com/ProxiBlue/pb-hypernode-mcp
cd pb-hypernode-mcp
uv sync --extra dev

uv run pytest -v                     # 84 tests, mocked HTTP/SSH — no real Hypernode account touched
uv run ruff check src tests          # lint
uv run ruff format --check src tests # format check
uv run pyright src tests             # type check

Es werden keine Integrationstests automatisch gegen ein echtes Hypernode-Konto ausgeführt. Wenn Sie tools/brancher_exec.py oder die Erreichbarkeits-Polling-Logik in tools/brancher_spinup_flow.py ändern, führen Sie vor dem Mergen einen manuellen Smoke-Test gegen einen echten Falcons-Plan-Node durch – Mocks können eine falsche SSH-Benutzerannahme oder eine Strukturinkonsistenz in der echten API-Antwort nicht abfangen.

Um Ihren eigenen Klon für die lokale Entwicklung anstelle der veröffentlichten Version zu installieren, richten Sie Claude Code direkt auf den Ordner:

claude plugin marketplace add pb-hypernode-mcp /path/to/your/clone
claude plugin install pb-hypernode-mcp@pb-hypernode-mcp

Nachdem Sie Skills oder Servercode bearbeitet haben, führen Sie claude plugin update pb-hypernode-mcp@pb-hypernode-mcp aus, um die Änderung zu übernehmen, ohne den Marktplatz erneut hinzuzufügen.

Wenn das Plugin nach der Installation nicht angezeigt wird, überprüfen Sie: claude plugin list zeigt pb-hypernode-mcp als aktiviert; eine neue Claude Code-Sitzung listet die brancher_*-Tools und die drei brancher-*-Skills auf; HYPERNODE_API_TOKEN ist in derselben Shell gesetzt, von der aus Sie Claude Code gestartet haben.

Lizenz

Apache-2.0. Siehe LICENSE und NOTICE für die Zuschreibung von Drittanbieter-Abhängigkeiten/Diensten (Hypernode Brancher API, system ssh/rsync, MCP Python SDK).

Available Tools

7 tools
brancher_appsA

List every Hypernode <appname> with a configured API token.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It clearly indicates this is a read-only listing operation, but it does not disclose any potential edge cases (e.g., output size, pagination, or error behavior). The mention of 'every' suggests comprehensiveness, but no additional behavioral traits are described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that precisely conveys the tool's purpose without any redundant information. It is perfectly front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with no parameters and an output schema available, the description is complete. It specifies exactly what is listed (Hypernode app names) and the filtering condition (with a configured API token). No further details are necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to clarify. The baseline score of 4 applies, and the description correctly avoids any unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List), the resource (Hypernode appname), and a specific condition (with a configured API token). It effectively distinguishes from sibling tools like brancher_list by specifying the token requirement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool—when you need to list Hypernode apps that have API tokens. It does not explicitly mention alternatives or exclusions, but the purpose is self-evident enough for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_createC

Create a Brancher node, wait for it, sanitize it, and report it ready.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsYes
appnameYes
clear_servicesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavioral traits. It mentions waiting, sanitizing, and reporting, hinting at a non-instant operation, but fails to explain what 'sanitize' means, whether it's destructive, what permissions are needed, or what 'report it ready' entails. The description is too vague to make the tool's behavior predictable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise in length, but it packs multiple actions without clear separation or explanation. It is not well-structured for quick comprehension of the tool's purpose and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters (2 required), no schema descriptions, and an output schema (content unknown), the description is severely incomplete. It does not explain the parameters, the return value, or the actual behavior beyond vague steps. The agent cannot reliably invoke this tool based on the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention any of the three parameters (appname, labels, clear_services). The description adds no meaning beyond the schema, leaving the agent without any guidance on how to populate the inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'Brancher node', distinguishing it from sibling tools like list, delete, exec, put, and ssh_info. It adds procedural steps (wait, sanitize, report ready) which, while vague, still clarify the tool's multi-step nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites, exclusions, or context. The description only states what it does, not when it should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_deleteA

Delete a Brancher node, gated behind a confirm=True re-call.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
node_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral disclosure. It reveals that deletion is not immediate but requires a second call with confirm=True, which is a critical behavioral trait. However, it does not elaborate on what happens on the first call (e.g., no-op or preview) or whether deletion is reversible, which keeps it from being a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action ('Delete a Brancher node') and immediately follows with the critical behavioral constraint. Every word earns its place; there is no redundancy or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 parameters, no nested objects) and the presence of an output schema, the description is nearly adequate but lacks clarity on what the first call (without confirm=True) does. This omission could confuse an agent about the tool's behavior. The description is otherwise sufficient for the basic delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only partially addresses the confirm parameter by explaining its role in the gating mechanism. The node_name parameter is not described at all. This leaves a significant gap for the required parameter, limiting the agent's ability to correctly invoke the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a Brancher node') with a specific verb and resource. It also distinguishes from sibling tools (brancher_create, brancher_list, etc.) by implying deletion rather than creation, listing, or execution. The mention of the confirmation gating adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when a node needs to be deleted, but it does not provide explicit guidance on when to use it versus alternatives (e.g., when not to delete, or that brancher_create might be needed to recreate). No exclusions or alternative tools are mentioned, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_execA

Execute command on a Brancher node over SSH; return stdout/stderr/exit_code.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
timeoutNo
node_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description effectively discloses the tool's behavior: it executes a command via SSH on a specific node and returns standard output, error, and exit code. It implicitly informs the agent that this is a potentially impactful action (remote command execution) and that it requires SSH access, which is transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, just one sentence with 11 words. It front-loads the main action and return value, leaving no wasted words. Every element (execute, command, SSH node, return) is necessary and adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple tool with a clear action and an output schema (implied return of stdout/stderr/exit_code), the description covers the essential purpose and behavior. It does not specify failure modes or SSH configuration requirements, but given the context (no nested objects, few parameters) and the presence of an output schema, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 0%, the description briefly adds context by naming the two required parameters (command, node_name) within its purpose. However, it does not explain the optional timeout parameter (default 30 seconds) or provide details on valid formats or constraints for the parameters beyond what is in the schema. Given low coverage, the description compensates somewhat.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Execute over SSH), the target (Brancher node), and the return values (stdout/stderr/exit_code). It effectively distinguishes from sibling tools like brancher_list, brancher_put, etc., which are about managing files or listing, not executing commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when or when not to use this tool versus alternatives. Since there are siblings like brancher_ssh_info which might provide connection info, but no instructions on when to prefer one over the other or any prerequisites (e.g., SSH setup) are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_listB

List active Brancher nodes for appname.

ParametersJSON Schema
NameRequiredDescriptionDefault
appnameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. 'List active Brancher nodes' suggests a read-only operation, but does not clarify if the list is paginated, limited, or includes metadata (e.g., status, uptime). The description minimally conveys safety (read-only) but omits specifics like authentication needs or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just one line with no wasted words. It appropriately front-loads the action and target resource, making it easy for an AI agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is only one parameter and an output schema exists, the description is somewhat complete for a simple listing tool. However, it lacks details on what the list contains (e.g., node IDs, IPs, status) and does not clarify if the tool returns only active nodes or all nodes filtered by activity. With no annotations, more context on behavior would be valuable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes only one parameter (`appname`) with 0% schema description coverage, meaning the description must add meaning. However, the description only mentions `appname` in context without elaborating on its format, acceptable values, or examples. It merely restates that `appname` is needed, adding little beyond the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and the resource (active Brancher nodes), and it specifies the required parameter `appname`. However, it does not differentiate from sibling tools like `brancher_ssh_info` or `brancher_create` in terms of what makes this specific listing distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by requiring `appname`, but provides no explicit guidance on when to use this tool versus alternatives (e.g., `brancher_ssh_info` for SSH info or `brancher_delete` for deletion). There is no mention of prerequisites or conditions for using the list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_putB

Sync local_path to remote_path on a Brancher node via rsync.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo
node_nameYes
local_pathYes
remote_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It only mentions 'via rsync', but does not disclose overwrite behavior, directory creation, error handling, or any side effects. The agent is left guessing about important safety-relevant behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff or repetition. It is front-loaded and efficient, containing exactly the core information without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (content unknown), the description fails to address many aspects relevant to a file sync tool: return values, error conditions, whether directories are created, handling of existing files, permission requirements, or rsync flags. The brevity leaves significant gaps for practical usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% — none of the parameters have descriptions in the schema. The tool description merely restates the role of local_path and remote_path ('sync local_path to remote_path') but does not clarify their format, constraints, or the purpose of node_name and port. The linking of path parameters is the only semantic addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('sync'), the source ('local_path'), destination ('remote_path'), the mechanism ('via rsync'), and the target ('on a Brancher node'). This distinguishes it from sibling tools like brancher_list, brancher_delete, and brancher_exec, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. For example, it doesn't mention when to use brancher_put instead of brancher_exec for file transfer, or if there are size or permission limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brancher_ssh_infoC

Return SSH connection details (host, user, port) for a Brancher node.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It only states the return value, omitting whether the operation is read-only, requires authentication, what happens if the node does not exist, or any error conditions. This is insufficient for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. However, it is too brief to cover necessary details, making it merely adequate rather than excellent. It earns its place but misses opportunities to add value without much extra length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple info retrieval tool with an existing output schema, the description covers the essential return fields (host, user, port). However, it does not address error scenarios, preconditions (node existence), or side effects. Annotations are absent, leaving behavioral gaps. Completeness is acceptable but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage for the required node_name parameter. The description adds only 'for a Brancher node', implying node_name identifies a node but failing to explain valid values, case sensitivity, or where to obtain the name. It does not compensate for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns SSH connection details (host, user, port) for a Brancher node, which is a specific verb and resource. It differentiates well from siblings like brancher_list (listing) or brancher_exec (executing commands), leaving no ambiguity about this tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., use it after listing nodes to get connection info, or before executing SSH commands). No when-not-to-use or exclusion criteria are mentioned, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Addedbrancher_apps
  2. 6 tool updatesv0.1.0
    • First observedbrancher_create
    • First observedbrancher_delete
    • First observedbrancher_exec
    • First observedbrancher_list
    • First observedbrancher_put
    • First observedbrancher_ssh_info

TDQS

B3.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool serves a unique purpose: ssh_info retrieves connection details, list enumerates nodes, delete removes a node, exec runs commands, put syncs files, create provisions a node, and apps lists configured apps. There is no functional overlap or ambiguity.

Naming Consistency3/5

All tools share the 'brancher_' prefix, but the naming pattern is inconsistent: most use verb-noun (list, delete, exec, put, create) while two are noun-only (ssh_info, apps). This creates minor inconsistency in verb usage and clarity.

Tool Count5/5

Seven tools is a reasonable number for managing Brancher nodes—covering core CRUD operations plus execution, file sync, and SSH info. It is neither sparse nor overwhelming for the domain.

Completeness5/5

The tool surface covers the full lifecycle of a node: create, list, delete, execute commands, sync files, retrieve SSH details, and list apps. No essential operation appears missing for the stated purpose of managing Brancher nodes.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to start, manage, and embed live application previews in iframes, with support for multiple frameworks, Docker, tunnels, and authentication.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Connects AI assistants to GitHub repositories, pull requests, issues, commits, and code search while enabling repository visibility controls, CI/CD monitoring, sandboxed local filesystem access, and code quality/security analysis.
    13
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI coding agents to safely execute commands, run tests, and modify project files inside disposable, policy-enforced Docker sandboxes that are isolated from the host machine and its credentials.
    15
    MIT