Skip to main content
Glama
gpact
by gpact

Bruno MCP

Bruno MCP ist ein lokaler Model Context Protocol-Server zum Auffinden, Inspizieren und Ausführen von Bruno-API-Collections. Er bietet MCP-Clients eine semantische Schnittstelle zu Bruno-Collections und delegiert die Ausführung von Requests, Authentifizierung, Scripting, Assertions und die Auflösung von Umgebungen an die Bruno-CLI.

Die Such- und Inspektionswerkzeuge verändern keine Collection-Dateien. Die Ausführung von Requests wird an Bruno delegiert und kann Collection-Skripte mit Nebenwirkungen ausführen. Der Server kommuniziert mit einem MCP-Host über Standardeingabe und Standardausgabe (stdio).

Inoffizielles Projekt: Bruno MCP ist ein unabhängiger, inoffizieller MCP-Server. Dieses Projekt ist weder mit Bruno oder seinen Urhebern verbunden, noch wird es von ihnen befürwortet, gesponsert oder steht in anderer Weise mit ihnen in Verbindung. Bruno und zugehörige Namen, Logos und Marken sind Marken ihrer jeweiligen Inhaber. Verweise auf Bruno dienen ausschließlich dazu, die Kompatibilität mit der Bruno-Software zu beschreiben.

Requirements

  • Node.js 22 oder neuer

  • npm

  • Bruno CLI >= 4.0.0 && < 5.0.0

Bruno MCP prüft bru --version beim Start. Stabile Bruno-CLI-4.x-Versionen werden unterstützt; Vorabversionen und andere Hauptversionen werden abgelehnt.

Related MCP server: Bruno MCP Server

OpenCollection-Unterstützung

Bruno MCP unterstützt Bruno-v4-OpenCollection-Collections, die durch eine opencollection.yml-Datei gekennzeichnet sind. Es erkennt Requests und Umgebungen, die durch OpenCollection-YAML-Dateien repräsentiert werden.

Legacy-.bru-Collections werden nicht unterstützt. Die Request-Erkennung ignoriert .bru-Dateien, anstatt sie zu parsen oder zu konvertieren.

Installation

Bruno MCP global über npm installieren:

npm install --global @gpact/bruno-mcp

Installieren Sie eine unterstützte Bruno-CLI separat, falls sie nicht bereits verfügbar ist:

npm install --global @usebruno/cli@^4.0.0

Bestätigen Sie, dass beide Einstiegspunkte aufgelöst werden:

command -v bruno-mcp
bru --version

bruno-mcp hat keine Befehlszeilenoptionen. Ein Aufruf startet daher den Stdio-Server, anstatt Hilfe anzuzeigen. MCP-Hosts starten ihn normalerweise für Sie.

Um stattdessen aus einem Repository-Checkout zu installieren:

npm ci
npm run build
npm link

MCP-Host-Konfiguration

Der MCP-Stdio-Transport definiert, wie ein Host einen Server-Subprozess startet und Nachrichten über stdin und stdout austauscht. Er definiert keine universelle Host-Konfigurationsdatei.

Konfigurieren Sie Ihren Host so, dass er den bruno-mcp-Einstiegspunkt als lokalen Stdio-Server ausführt, und übergeben Sie BRUNO_MCP_ROOT in der Umgebung des Kindprozesses. Verwenden Sie einen absoluten Root-Pfad, da nicht alle Hosts dasselbe Arbeitsverzeichnis verwenden.

Hosts, die mcpServers verwenden

Die Projektkonfiguration von Claude Desktop und Claude Code verwendet ein mcpServers-Objekt:

{
  "mcpServers": {
    "bruno": {
      "command": "bruno-mcp",
      "env": {
        "BRUNO_MCP_ROOT": "/home/user/bruno"
      }
    }
  }
}

Informationen zu Konfigurationsorten und Bereichsoptionen finden Sie im offiziellen Leitfaden für lokale Server und in der Claude Code MCP-Dokumentation.

Visual Studio Code

VS Code verwendet ein servers-Objekt in seiner mcp.json-Konfiguration:

{
  "servers": {
    "bruno": {
      "type": "stdio",
      "command": "bruno-mcp",
      "env": {
        "BRUNO_MCP_ROOT": "/home/user/bruno"
      }
    }
  }
}

Informationen zu den Konfigurationsorten für Arbeitsbereich und Benutzer finden Sie in der VS Code MCP-Konfigurationsreferenz.

OpenCode

OpenCode verwendet einen lokalen MCP-Eintrag unter mcp, stellt den Befehl als Array dar und nennt das Umgebungsfeld environment:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "bruno": {
      "type": "local",
      "command": ["bruno-mcp"],
      "environment": {
        "BRUNO_MCP_ROOT": "/home/user/bruno"
      }
    }
  }
}

Informationen zur Konfigurationspriorität und zu weiteren lokalen Serveroptionen finden Sie in der OpenCode-MCP-Serverdokumentation.

Andere Hosts verwenden möglicherweise ein anderes Schema oder einen Einrichtungsablauf über die Befehlszeile. In jedem Fall sind die erforderlichen Konzepte dieselben: ein lokaler Stdio-Transport, der Befehl bruno-mcp und die unten beschriebenen Umgebungsvariablen. Wenn ein GUI-Host bruno-mcp oder bru nicht in seinem PATH finden kann, verwenden Sie den absoluten Pfad, den command -v bruno-mcp ausgibt, für den Serverbefehl und setzen Sie BRUNO_MCP_BRU auf einen absoluten Bruno-CLI-Pfad.

Sie können den Server auch direkt starten. Er wartet dann auf MCP-Nachrichten auf stdin und schreibt Protokollnachrichten auf stdout:

BRUNO_MCP_ROOT=/home/user/bruno bruno-mcp

Konfiguration

Die Konfiguration erfolgt über Umgebungsvariablen. Eine ungültige Konfiguration verhindert den Start des Servers.

Variable

Standard

Beschreibung

BRUNO_MCP_ROOT

Aktuelles Arbeitsverzeichnis

Vorhandenes Verzeichnis, das die zugänglichen Collections enthält. Der Pfad wird beim Start in seinen kanonischen Speicherort aufgelöst, und der Zugriff auf Collections ist auf dieses Verzeichnis beschränkt.

BRUNO_MCP_BRU

bru

Name oder Pfad der Bruno-CLI-ausführbaren Datei. Die ausführbare Datei wird direkt aufgerufen, niemals über eine Shell.

BRUNO_MCP_TIMEOUT_MS

120000

Timeout pro Ausführung in Millisekunden. Er muss eine positive Ganzzahl sein. Werte über 900000 werden bei 900000 (15 Minuten) gedeckelt.

BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX

false

Erlaubt Aufrufern, Brunos Entwickler-Sandbox anzufordern, wenn true. Es aktiviert den Entwicklermodus standardmäßig nicht.

BRUNO_MCP_ALLOW_INSECURE

false

Erlaubt Aufrufern, die normale TLS-Zertifikatsprüfung für eine Ausführung zu deaktivieren, wenn true. Es deaktiviert die Prüfung standardmäßig nicht.

BRUNO_MCP_MAX_REPORT_BYTES

5242880

Maximale akzeptierte Größe des Bruno-JSON-Reporters in UTF-8-Bytes (standardmäßig 5 MiB). Sie muss eine positive Ganzzahl sein.

BRUNO_MCP_LOG_LEVEL

info

Mindestprotokollstufe für stderr: error, warn, info oder debug.

Boolesche Einstellungen akzeptieren true, 1, yes oder on sowie false, 0, no oder off, ohne Berücksichtigung der Groß-/Kleinschreibung.

Beispiel mit expliziten Ausführungsrichtlinien:

BRUNO_MCP_ROOT=/home/user/bruno \
BRUNO_MCP_BRU=/usr/local/bin/bru \
BRUNO_MCP_TIMEOUT_MS=180000 \
BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=false \
BRUNO_MCP_ALLOW_INSECURE=false \
BRUNO_MCP_MAX_REPORT_BYTES=5242880 \
BRUNO_MCP_LOG_LEVEL=info \
bruno-mcp

MCP-Werkzeuge

Collection-Kennungen sind Pfade relativ zu BRUNO_MCP_ROOT. Request- und Umgebungspfade sind relativ zu ihrer Collection. Zurückgegebene URLs und YAML-Variablen werden nicht interpoliert.

bruno_list_collections

Listet die im konfigurierten Arbeitsbereich verfügbaren Bruno-OpenCollection-Collections auf. Sie benötigt keine Argumente und gibt Collection-Kennungen, Namen und OpenCollection-Versionen zurück.

bruno_list_requests

Listet Requests in einer Bruno-OpenCollection-Collection auf und durchsucht sie. Sie gibt Request-Pfade, Namen, Typen sowie HTTP-Methoden und URLs zurück, sofern verfügbar.

Erforderliche Eingabe:

  • collection: Collection-Kennung

Optionale Filter:

  • query: eine Teilzeichenfolge ohne Beachtung der Groß-/Kleinschreibung, die mit Name, Pfad und URL abgeglichen wird

  • method: exakte HTTP-Methode ohne Beachtung der Groß-/Kleinschreibung

  • type: exakter Request-Typ ohne Beachtung der Groß-/Kleinschreibung

bruno_search_requests

Durchsucht in einem einzigen Aufruf alle Collections nach Requests. Jedes Ergebnis enthält seine Collection-Kennung.

Erforderliche Eingabe:

  • query: nicht leere Teilzeichenfolge ohne Beachtung der Groß-/Kleinschreibung, die mit Name, Pfad und URL abgeglichen wird

Die optionalen Filter method und type verwenden exakten Abgleich ohne Beachtung der Groß-/Kleinschreibung.

bruno_get_request

Liest einen Bruno-OpenCollection-Request und gibt normalisierte Metadaten sowie das geparste YAML-Dokument zurück.

Erforderliche Eingaben:

  • collection: Collection-Kennung

  • request: Request-Pfad relativ zur Collection

Setzen Sie includeSource auf true, um auch die rohe YAML-Quelle zurückzugeben. Der Standardwert ist false. Das geparste Dokument und die Quelle werden ohne Schwärzung von Geheimnissen zurückgegeben. Verwenden Sie daher Request-Pfade, die von den Listen- oder Suchwerkzeugen erzeugt wurden, und betten Sie keine Anmeldeinformationen direkt in Request-YAML ein.

bruno_list_environments

Listet die für eine Collection verfügbaren Umgebungen auf, ohne Variablenwerte offenzulegen. Jedes Ergebnis enthält den Umgebungsnamen, den relativen Pfad, die Anzahl der Variablen und die Anzahl der Geheimnisse.

Erforderliche Eingabe:

  • collection: Collection-Kennung

bruno_get_environment

Untersucht eine Bruno-Umgebung. Variablen, die mit secret: true markiert sind, werden mit dem Wert [REDACTED] zurückgegeben; nicht geheime Werte werden in normalisierter Zeichenfolgenform zurückgegeben.

Erforderliche Eingaben:

  • collection: Collection-Kennung

  • environment: bloßer Name wie Local oder ein collections-relativer Pfad wie environments/Local.yml

bruno_run

Führt Requests, Ordner oder eine gesamte Collection mit der Bruno-CLI v4 aus. Sie gibt normalisierte Ausführungs-, Request-, Antwort-, Test- und Assertion-Ergebnisse zurück. Fehlgeschlagene Bruno-Tests oder -Assertions bleiben überprüfbare Ergebnisse und keine MCP-Transportfehler.

Eingaben:

Feld

Standard

Beschreibung

collection

Erforderlich

Collection-Kennung.

targets

[]

Request- oder Ordnerpfade. Ein leeres Array führt die gesamte Collection aus.

environment

Keine

Name der Bruno-Umgebung.

variables

Keine

Nicht geheime Zeichenfolgen-Überschreibungen, die als Bruno-Umgebungsvariablen übergeben werden.

bail

false

Stoppt nach dem ersten fehlgeschlagenen Request, Test oder Assertion.

testsOnly

false

Führt nur Requests aus, die Tests oder aktive Assertions enthalten.

delayMs

Keine

Nicht negative Verzögerung zwischen Requests in Millisekunden.

sandbox

safe

Bruno-Sandboxmodus: safe oder developer.

insecure

false

Deaktiviert die TLS-Zertifikatsprüfung für Requests.

responseBodyMode

onFailure

Zurückgegebene Antworttexte: none, onFailure oder full.

maxResponseBodyBytes

262144

Maximale UTF-8- oder serialisierte Größe jedes enthaltenen Antworttexts. Übergroße Antworttexte werden durch Größenmetadaten ersetzt.

Umgang mit Geheimnissen

Übergeben Sie keine Anmeldeinformationen oder anderen Geheimnisse über variables. MCP-Werkzeugargumente können für das Modell und den Host sichtbar sein, und Überschreibungen werden auch als Argumente an den Bruno-Prozess übergeben. Stellen Sie Geheimnisse stattdessen über Brunos normale Umgebungs- oder Prozessumgebungsmechanismen bereit.

Die Umgebungsprüfung respektiert secret: true, aber diese Markierung ist keine allgemeine Grenze für den Dateizugriff. bruno_get_request gibt Dateien ohne Schwärzung zurück und akzeptiert derzeit jede vorhandene Datei innerhalb einer Collection, nicht nur Pfade, die von der Request-Erkennung gefunden wurden. Ein autorisierter Aufrufer, der einen Umgebungsdateipfad angibt, könnte daher deren Rohinhalt erhalten. Beschränken Sie den MCP-Zugriff auf vertrauenswürdige Hosts und Benutzer, grenzen Sie BRUNO_MCP_ROOT eng ein und vermeiden Sie Produktionsgeheimnisse im Klartext an jeder Stelle, an der ein MCP-Aufrufer sie lesen kann.

Sandbox- und TLS-Richtlinien

bruno_run verwendet standardmäßig Brunos sichere Sandbox.

Die Ausführung in der Entwickler-Sandbox erfordert beide dieser expliziten Entscheidungen:

  1. Der Serverbetreiber setzt BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=true.

  2. Der Werkzeugaufrufer setzt sandbox für die Ausführung auf developer.

Ohne Serverberechtigung schlägt eine Anfrage im Entwicklermodus mit DEVELOPER_SANDBOX_DISABLED fehl. Der Entwicklermodus verleiht Bruno-Skripten größere Fähigkeiten, aktivieren Sie ihn daher nur für vertrauenswürdige Sammlungen.

Die Pfadeingrenzung kontrolliert Pfade, die an Bruno MCP übergeben werden; sie sandboxt keinen Code innerhalb von Bruno-Skripten. Bruno-Skripte können den Zustand von Sammlungen oder Umgebungen aktualisieren, und Skripte im Entwicklermodus können native Node.js-Fähigkeiten nutzen, um auf Pfade außerhalb von BRUNO_MCP_ROOT zuzugreifen oder andere Prozesse zu starten.

Die normale TLS-Zertifikatsprüfung ist standardmäßig aktiviert. Zum Deaktivieren sind zudem sowohl die Serverberechtigung (BRUNO_MCP_ALLOW_INSECURE=true) als auch insecure: true bei einem einzelnen Lauf erforderlich. Andernfalls schlägt die Anfrage mit INSECURE_DISABLED fehl. Der unsichere Modus schwächt die Transportsicherheit und sollte auf kontrollierte Entwicklungsumgebungen beschränkt werden.

Sicherheitsmodell

  • Root-Eingrenzung: Sammlungs-, Anfrage-, Umgebungs- und Ausführungspfade, die an Bruno MCP übergeben werden, werden gegen kanonische Dateisystemgrenzen geprüft. Traversal- und Symlink-Ausbrüche außerhalb von BRUNO_MCP_ROOT oder einer ausgewählten Sammlung werden abgelehnt. Dies schränkt Skriptcode im Entwicklermodus nicht ein.

  • Keine Shell-Ausführung: Bruno MCP übergibt eine feste Operation und einzelne Argumente direkt an die konfigurierte ausführbare Bruno-Datei, wobei die Shell-Ausführung deaktiviert ist. Es stellt weder eine allgemeine Shell noch ein Tool für Bruno CLI-Befehle bereit, aber Bruno-Skripte im Entwicklermodus können selbst Prozesse starten.

  • Schreibgeschützte Inspektion: Discovery und Inspektion erstellen, aktualisieren oder löschen nicht absichtlich Sammlungsdateien. bruno_run delegiert an die Bruno CLI und kann Skripte mit Nebenwirkungen ausführen, einschließlich persistierter Variablenänderungen.

  • Gezielte Schwärzung: Umgebungswerte, die explizit mit secret: true markiert sind, werden von der Umgebungsinspektion geschwärzt. Ausführungsberichte schwärzen rekursiv gängige sensible Header, einschließlich Autorisierungs-, Cookie- und API-Schlüssel-Headern. Rohe Datei- und Anfrage-Lesezugriffe werden nicht geschwärzt.

  • stdout ausschließlich für Protokollverkehr: stdout ist für den MCP-Protokollverkehr reserviert. Logs und Startdiagnosen werden auf stderr geschrieben.

  • Begrenzte Berichte: Übermäßig große Bruno-Berichte werden abgelehnt, und enthaltene Antwort-Bodys haben ein separates Limit pro Body.

Schwärzung ist Defense in Depth, keine allgemeine Geheimniserkennung. Rohe Dateien, Anfrage-YAML, Anfragequelle, URLs, Antwort-Bodys und Bruno-Diagnosen können Werte enthalten, die nicht als Geheimnisse erkannt werden. Konfigurieren Sie BRUNO_MCP_ROOT so eng wie praktikabel, vermeiden Sie, Zugangsdaten in Sammlungsdateien einzubetten, und verwenden Sie vertrauenswürdige Sammlungen und MCP-Aufrufer, wenn Sie die Ausführung von Anfragen aktivieren.

Entwicklung

Installieren Sie die festgeschriebenen Abhängigkeiten:

npm ci

Nützliche Befehle:

Befehl

Zweck

npm run dev

Führt den TypeScript-Einstiegspunkt in der Entwicklung aus.

npm run build

Kompiliert den Server nach dist/.

npm start

Führt den kompilierten Stdio-Server aus.

npm run check

Führt alle von CI geforderten Prüfungen aus.

npm run lint

Führt Linting für Quellcode, Tests und Tooling aus.

npm run typecheck

Führt eine Typprüfung von Quellcode, Tests und Tooling durch, ohne Dateien zu erzeugen.

npm test

Führt die Unit-Testsuite einmal aus.

npm run test:watch

Führt Unit-Tests im Watch-Modus aus.

npm run test:integration

Führt die Integrationstestsuite aus.

npm run fixtures:capture-reports

Regeneriert Bruno-Reporter-Fixtures, wenn Sie sie absichtlich aktualisieren.

Führen Sie vor dem Einreichen einer Änderung Folgendes aus:

npm run check

Bekannte Einschränkungen

  • Es wird nur Bruno OpenCollection YAML unterstützt; veraltete .bru-Sammlungen werden ignoriert.

  • Für Sammlungen, Anfragen, Umgebungen, Ordner und Arbeitsbereiche werden keine MCP-Mutationswerkzeuge bereitgestellt. Ausgeführte Bruno-Skripte können weiterhin Nebenwirkungen haben.

  • OpenAPI-Import und -Export werden nicht unterstützt.

  • Der Server stellt weder beliebige Bruno CLI-Befehle noch Shell-Ausführung bereit.

  • Es wird nur lokaler Stdio-MCP-Transport unterstützt. Remote-MCP- und HTTP-MCP-Transporte sind nicht enthalten.

  • Eine automatische Secret-Manager-Integration ist nicht enthalten.

  • Bruno MCP implementiert keinen eigenen HTTP-Client, keine Variableninterpolation, keine Authentifizierung, kein OAuth, keine Skripte, keine Anfrageverkettung, keine Assertions, kein Proxyverhalten, keine Weiterleitungen und kein Zertifikatsverhalten. Diese Verhaltensweisen obliegen der Bruno CLI.

Available Tools

7 tools
bruno_get_environmentGet Bruno environmentA

Inspect a Bruno environment. Variables marked as secrets are always redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionYesCollection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel.
environmentYesEnvironment reference, either a bare name (Local) or a collection-relative path (environments/Local.yml).

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are present, so the description carries the behavioral burden. It does add a useful, non-obvious behavior: 'Variables marked as secrets are always redacted.' However, it does not disclose other important traits such as read-only/no-side-effect behavior, not-found/error responses, or whether the full variable list is returned.

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 two sentences with no wasted words. The first sentence states the action and target, and the second adds an important caveat about secrets. It is front-loaded and easy to scan.

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 simple tool with two well-documented parameters and no nested schema, the description plus schema is sufficient for correct invocation. The redaction behavior is a key context detail. The main gaps are unspecified return format and failure behavior, but the low complexity makes those minor.

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

Parameters3/5

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

The input schema already covers both parameters at 100%, including detailed explanations of collection path conventions and environment reference forms. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.

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 uses a specific verb and resource: 'Inspect a Bruno environment.' It clearly identifies a single-environment inspection action, and the redaction note implies the output contains variables. It doesn't explicitly contrast itself with sibling tools like bruno_list_environments, but the singular 'environment' and title make the purpose reasonably clear.

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?

Usage context is only implied: an agent would infer this is for inspecting one Bruno environment rather than listing all environments. There is no explicit statement of when to use this vs. alternatives such as bruno_list_environments or when not to use it, so the guidance is adequate but not explicit.

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

bruno_get_requestGet Bruno requestA

Read a Bruno OpenCollection request and return its parsed YAML representation.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest path relative to the collection root (as returned by bruno_list_requests), for example Hotel/Search.yml.
collectionYesCollection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel.
includeSourceNoWhen true, also return the raw request source text alongside the parsed document. Defaults to false.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly indicates this is a read operation that returns parsed YAML, and the includeSource parameter (described in the schema) adds transparency about optional raw-source output. It does not mention error behavior or permissions, but the read-only nature is explicit.

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 efficient sentence that states the core action and result without repetition or filler. It earns its place and is easy for an agent to parse quickly.

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 simple read tool with fully documented parameters, the description plus schema provides enough information for correct invocation. A brief note about when to prefer this over bruno_run or bruno_search_requests would make it complete, but nothing essential is missing for basic usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema fully documents all three parameters. The main description adds no parameter-level meaning beyond 'parsed YAML representation,' but the high schema coverage means the description does not need to compensate.

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 identifies a specific verb ('Read') and resource ('a Bruno OpenCollection request') and states the output format ('parsed YAML representation'). This distinguishes it from sibling list/search/run tools, making its purpose immediately clear.

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 itself does not explicitly state when to use this tool versus alternatives like bruno_run or bruno_search_requests. However, the parameter descriptions do provide useful context by explaining how to obtain valid collection and request identifiers from the sibling listing tools, so usage is implied rather than fully spelled out.

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

bruno_list_collectionsList Bruno collectionsA

List Bruno OpenCollection collections available in the configured workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. 'List' implies a read-only operation and 'available in the configured workspace' adds scope context, but the description does not disclose output format, pagination, ordering, or error behavior. It is minimally adequate for a simple list operation.

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 that states the action, resource, and scope with no filler or redundant explanation. It is well-sized and immediately understandable.

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 zero-parameter, read-only list tool with no output schema, the description is largely sufficient: it names the action, resource, and scope. It could mention what information is returned or how the workspace is determined, but these are minor gaps for this complexity level.

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 input schema has no parameters, so there is no parameter documentation burden. The description adds workspace context but no parameter semantics are needed. Baseline 4 is appropriate for a zero-parameter 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 uses a specific verb ('List') and a precise resource ('Bruno OpenCollection collections') and scopes it to the configured workspace. It is clearly distinguishable from the sibling tools, which target requests and environments rather than collections.

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 intended use is implied by the verb 'List' and the collection resource, but the description does not explicitly state when to choose this tool over siblings or mention any exclusions. It provides context (configured workspace) but no direct routing guidance.

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

bruno_list_environmentsList Bruno environmentsA

List environments available to a Bruno collection without exposing variable values.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionYesCollection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel.

TDQS

A4/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 behavioral disclosure burden. It usefully states that variable values will not be exposed, which is a meaningful guarantee. However, it says nothing about output shape, error behavior, or ordering, so transparency is adequate but not thorough.

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 action and resource, then adds the important caveat about not exposing variable values. Every word earns its place.

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 simple one-parameter list tool with no output schema, the description covers the essential context: scope is the collection and variable values are intentionally withheld. It is slightly light on return-value expectations, but 'List environments' reasonably implies the returned artifact.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description already explains that 'collection' is a path relative to the workspace root with a nested example. The tool description reinforces the collection-scoped nature but does not add significant parameter semantics beyond the schema.

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 uses a specific verb and resource ('List environments available to a Bruno collection') and adds a distinguishing safety scope: 'without exposing variable values.' This clearly separates it from bruno_get_environment, which presumably returns variable values.

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 conveys when to use the tool: to enumerate environments for a collection while deliberately avoiding variable value exposure. It does not explicitly name a sibling alternative, but the caveat makes the intended use case clear enough.

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

bruno_list_requestsList Bruno requestsA

List and search requests in a Bruno OpenCollection collection. Returns request paths, names, types, and HTTP metadata when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to requests of this type (case-insensitive), for example http or graphql.
queryNoCase-insensitive substring filter matched against each request's name, path, and URL.
methodNoFilter to requests with this HTTP method (case-insensitive), for example GET or POST.
collectionYesCollection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel.

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It handles this well for a read-only list tool by explicitly stating that it returns request paths, names, types, and HTTP metadata when available, and by avoiding destructive or write semantics. Minor operational details like pagination or empty-result behavior are not disclosed, but the core behavior is clear.

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 two concise sentences with no filler. The primary action and resource are front-loaded, followed immediately by the key return information, so an agent can quickly determine what the tool offers.

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?

Given the rich schema and the absence of an output schema, the description usefully states the kind of data returned. It is sufficiently complete for a list-style tool, though it could be stronger with an explicit contrast to bruno_search_requests.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents all four parameters clearly, including collection path semantics and filter behavior. The tool description itself does not add parameter-level meaning beyond this, matching the baseline for high schema coverage.

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 states a clear verb ('List and search') and resource ('requests in a Bruno OpenCollection collection'), and it specifies the returned data (paths, names, types, HTTP metadata). However, it does not differentiate this tool from the sibling bruno_search_requests, whose purpose likely overlaps.

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 gives no guidance on when to use this tool versus alternatives such as bruno_search_requests or bruno_get_request. It also fails to clarify whether this tool's search behavior is a substitute for the dedicated search sibling or only a lightweight filter.

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

bruno_runRun Bruno requestsA

Execute requests, folders, or an entire Bruno collection using Bruno CLI v4. Returns structured request, response, test, and assertion results. Variable overrides must not contain secrets. Do not pass credentials or other secrets through variables. MCP tool arguments may be visible to the model and host. Provide secrets through Bruno's normal environment or process environment mechanisms instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
bailNoStop after the first failing request, test, or assertion.
delayMsNoDelay between requests in milliseconds.
sandboxNoJavaScript sandbox mode. Developer mode must be enabled by server policy.safe
targetsNoRequest files or folders relative to the collection root. An empty list runs the entire collection.
insecureNoDisable normal TLS certificate verification. Must be enabled by server policy.
testsOnlyNoOnly run requests containing tests or active assertions.
variablesNoNon-secret environment variable overrides. Do not include credentials or other secrets.
collectionYesCollection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name.
environmentNoBruno environment name to use for this run.
responseBodyModeNoResponse bodies to return in the MCP payload: none, only results with failed tests or assertions, or all results.onFailure
maxResponseBodyBytesNoMaximum serialized UTF-8 size of each returned response body. Oversized bodies are replaced by size metadata.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full transparency burden. It does well by disclosing that execution returns structured request/response/test/assertion results, that variable overrides must not contain secrets, and that MCP tool arguments may be visible to the model and host. This goes beyond the schema by explaining why secrets must be excluded.

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

Conciseness4/5

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

The description is appropriately front-loaded with purpose and return-value information, then turns to security guidance. It is slightly repetitive around secrets ('must not contain secrets' and 'do not pass credentials or other secrets'), but every sentence contributes useful information and the overall length is reasonable for a tool with 11 parameters and no annotations.

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 an 11-parameter execution tool with no output schema, the description is largely complete: it states what is executed, what results are returned, and critical security constraints. The schema covers parameter semantics and policy-gated flags, while the description adds the secret-handling context. Minor missing guidance around explicit sibling routing prevents a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 11 parameters. The description does not add new parameter-level meaning beyond repeating the variables security warning, which is already present in the schema's variable parameter description.

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 opens with a specific verb, 'Execute,' and names the exact resources: 'requests, folders, or an entire Bruno collection.' It also states the underlying implementation ('Bruno CLI v4') and describes the outcome, which clearly distinguishes this executor tool from the sibling list/get/search tools.

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?

While there is no explicit 'use this instead of X' statement, the description makes the tool's role unmistakable: it is the execution tool, contrasting with siblings that only list, get, or search. The scope ('requests, folders, or an entire collection') plus return-value description gives clear context for when an agent should invoke it.

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

bruno_search_requestsSearch Bruno requestsA

Search requests across all Bruno OpenCollection collections in the workspace in a single call. Returns each matching request tagged with its collection id.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to requests of this type (case-insensitive), for example http or graphql.
queryYesRequired case-insensitive substring matched against each request's name, path, and URL.
methodNoFilter to requests with this HTTP method (case-insensitive), for example GET or POST.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses the scope ('all collections'), the execution model ('in a single call'), and the result shape ('each matching request tagged with its collection id'). It lacks explicit statements about pagination or error behavior, so it is not a 5, but it is transparent about the core behavior.

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?

Two sentences with no filler. The core behavior and scope are front-loaded, and the result behavior is stated succinctly. Every clause contributes 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 search tool, the description plus schema covers scope, matching behavior, filters, and result tagging well. The lack of an output schema keeps it from a 5, since the exact structure of 'tagged' results is not fully specified.

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

Parameters3/5

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

The input schema provides 100% coverage for all three parameters, including semantics for query, type, and method. The description adds no parameter-level detail beyond what the schema already provides, so the baseline 3 is appropriate.

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 states a specific action ('Search requests'), a clear resource scope ('across all Bruno OpenCollection collections in the workspace'), and highlights the 'single call' nature. The mention that results are tagged with collection id further distinguishes this from collection-scoped siblings like bruno_list_requests and bruno_get_request.

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 this tool is for cross-collection searching rather than per-collection listing or fetching, but it never explicitly names alternatives or states when not to use it. The usage context is clear enough, but there is no direct routing to sibling tools.

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

TDQS

A4/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: collections, requests, environments, and execution are cleanly separated. The only minor overlap is bruno_list_requests vs bruno_search_requests, but their scoping within a single collection vs across all collections is sufficiently differentiated.

Naming Consistency5/5

All tool names follow the same bruno_<verb>_<noun> pattern with consistent verbs: list, get, run, and search. This makes the tool surface predictable and easy for an agent to navigate.

Tool Count5/5

Seven tools is a well-scoped size for a Bruno-focused MCP server. Each tool covers a necessary operation for browsing and executing collections without unnecessary bloat.

Completeness4/5

The set covers the core lifecycle for the apparent purpose of inspecting and running Bruno collections: list collections, list/search requests, read request details, inspect environments, and execute. It lacks create/update/delete operations, which may be intentional for a read/run-oriented server, but would be needed for full authoring workflows.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A Model Context Protocol (MCP) server that enables programmatic creation and management of Bruno API testing collections, environments, and requests through standardized MCP tools.
    1
    87
    31
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that executes requests from Bruno API collections via the Bruno CLI tool, enabling API request execution and collection management.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes Bruno CLI as tools for AI agents, allowing them to discover, inspect, and execute Bruno API collections through the MCP protocol.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gpact/bruno-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server