Skip to main content
Glama
gpact
by gpact

Bruno MCP

Bruno MCP は、Bruno API コレクションを発見・検査・実行するためのローカル Model Context Protocol サーバーです。MCP クライアントに Bruno コレクションへのセマンティックなインターフェースを提供しつつ、リクエストの実行、認証、スクリプト実行、アサーション、環境の解決を Bruno CLI に委任します。

発見・検査ツールはコレクションファイルを変更しません。リクエストの実行は Bruno に委任され、副作用を伴うコレクションスクリプトを実行できます。サーバーは標準入力と標準出力(stdio)を介して MCP ホストと通信します。

非公式プロジェクト: Bruno MCP は独立した非公式の MCP サーバーです。このプロジェクトは Bruno またはその作成者とは提携、承認、スポンサー関係になく、いかなる形でも関連していません。Bruno および関連する名称、ロゴ、マークは各所有者の商標です。Bruno への言及は、Bruno ソフトウェアとの互換性を説明するためにのみ使用されています。

要件

  • Node.js 22 以降

  • npm

  • Bruno CLI >= 4.0.0 && < 5.0.0

Bruno MCP は起動時に bru --version を検証します。安定版の Bruno CLI 4.x リリースがサポートされています。プレリリース版およびその他のメジャーバージョンは拒否されます。

Related MCP server: Bruno MCP Server

OpenCollection のサポート

Bruno MCP は、opencollection.yml ファイルで識別される Bruno v4 OpenCollection コレクションをサポートします。OpenCollection YAML ファイルで表現されたリクエストと環境を発見します。

レガシーな .bru コレクションはサポートされていません。リクエスト発見では .bru ファイルを解析または変換せずに無視します。

インストール

Bruno MCP を npm からグローバルにインストールします:

npm install --global @gpact/bruno-mcp

サポート対象の Bruno CLI がまだ利用できない場合は、別途インストールします:

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

両方のエントリポイントが解決されることを確認します:

command -v bruno-mcp
bru --version

bruno-mcp にはコマンドラインオプションがないため、呼び出すとヘルプを表示する代わりに stdio サーバーが起動します。通常は MCP ホストが起動します。

代わりにリポジトリのチェックアウトからインストールする場合:

npm ci
npm run build
npm link

MCP ホストの構成

MCP stdio トランスポート は、ホストがサーバーのサブプロセスを起動し、標準入力と標準出力を介してメッセージを交換する方法を定義します。これは普遍的なホスト構成ファイルを定義するものではありません。

bruno-mcp エントリポイントをローカル stdio サーバーとして実行するようにホストを構成し、子プロセス環境で BRUNO_MCP_ROOT を渡します。ホストによって作業ディレクトリが同じとは限らないため、ルートパスには絶対パスを使用してください。

mcpServers を使用するホスト

Claude Desktop と Claude Code のプロジェクト構成では mcpServers オブジェクトを使用します:

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

構成の場所とスコープオプションについては、公式のローカルサーバーガイドClaude Code MCP ドキュメントを参照してください。

Visual Studio Code

VS Code は mcp.json 構成で servers オブジェクトを使用します:

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

ワークスペースとユーザー構成の場所については、VS Code MCP 構成リファレンスを参照してください。

OpenCode

OpenCode は mcp 配下のローカル MCP エントリを使用し、コマンドを配列として表し、環境フィールドに environment という名前を付けます:

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

構成の優先順位と追加のローカルサーバーオプションについては、OpenCode MCP サーバードキュメントを参照してください。

他のホストは別のスキーマやコマンドラインのセットアップフローを使用する場合があります。いずれの場合も、必要な概念は同じです: ローカル stdio トランスポート、bruno-mcp コマンド、および後述の環境変数です。GUI ホストが PATH 上で bruno-mcp または bru を見つけられない場合は、command -v bruno-mcp が報告する絶対パスをサーバーコマンドとして使用し、BRUNO_MCP_BRU に Bruno CLI の絶対パスを設定してください。

サーバーを直接起動することもできます。標準入力で MCP メッセージを待機し、プロトコルメッセージを標準出力に書き込みます:

BRUNO_MCP_ROOT=/home/user/bruno bruno-mcp

構成

構成は環境変数を通じて提供されます。無効な構成はサーバーの起動を妨げます。

変数

デフォルト

説明

BRUNO_MCP_ROOT

現在の作業ディレクトリ

アクセス可能なコレクションを含む既存のディレクトリ。パスは起動時に正規の場所に解決され、コレクションへのアクセスはこのディレクトリ内に制限されます。

BRUNO_MCP_BRU

bru

Bruno CLI の実行可能ファイル名またはパス。実行可能ファイルはシェルを介さずに直接呼び出されます。

BRUNO_MCP_TIMEOUT_MS

120000

実行ごとのタイムアウト(ミリ秒)。正の整数である必要があります。900000 を超える値は 900000(15分)に上限が設定されます。

BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX

false

true の場合、呼び出し元が Bruno の開発者サンドボックスを要求できます。デフォルトでは開発者モードを有効にしません。

BRUNO_MCP_ALLOW_INSECURE

false

true の場合、呼び出し元が実行時に通常の TLS 証明書検証を無効にできます。デフォルトでは検証を無効にしません。

BRUNO_MCP_MAX_REPORT_BYTES

5242880

受け入れ可能な Bruno JSON レポーターの最大サイズ(UTF-8 バイト、デフォルトは 5 MiB)。正の整数である必要があります。

BRUNO_MCP_LOG_LEVEL

info

stderr の最小ログレベル: errorwarninfo、または debug

ブール設定は、大文字と小文字を区別せずに true1yesonfalse0nooff を受け付けます。

明示的な実行ポリシーを使用した例:

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 ツール

コレクション識別子は、BRUNO_MCP_ROOT からの相対パスです。リクエストと環境のパスは、それぞれのコレクションからの相対パスです。返される URL と YAML 変数は補間されません。

bruno_list_collections

構成されたワークスペースで利用可能な Bruno OpenCollection コレクションを一覧表示します。引数は不要で、コレクション識別子、名前、OpenCollection バージョンを返します。

bruno_list_requests

1つの Bruno OpenCollection コレクション内のリクエストを一覧表示・検索します。利用可能な場合、リクエストパス、名前、タイプ、HTTP メソッド、URL を返します。

必須入力:

  • collection: コレクション識別子

オプションのフィルター:

  • query: 名前、パス、URL に対して照合される大文字と小文字を区別しない部分文字列

  • method: 大文字と小文字を区別しない完全一致の HTTP メソッド

  • type: 大文字と小文字を区別しない完全一致のリクエストタイプ

bruno_search_requests

1回の呼び出しで全コレクションのリクエストを検索します。各結果にはコレクション識別子が含まれます。

必須入力:

  • query: 名前、パス、URL に対して照合される空でない大文字と小文字を区別しない部分文字列

オプションの method および type フィルターは、大文字と小文字を区別しない完全一致を使用します。

bruno_get_request

Bruno OpenCollection リクエストを読み取り、正規化されたメタデータと解析済みの YAML ドキュメントを返します。

必須入力:

  • collection: コレクション識別子

  • request: コレクションからの相対パス

includeSourcetrue に設定すると、生の YAML ソースも返されます。デフォルトは false です。解析されたドキュメントとソースはシークレットを秘匿せずに返されるため、一覧表示ツールまたは検索ツールが生成したリクエストパスを使用し、資格情報をリクエスト YAML に直接埋め込まないでください。

bruno_list_environments

変数の値を公開せずに、コレクションで利用可能な環境を一覧表示します。各結果には、環境名、相対パス、変数の数、シークレットの数が含まれます。

必須入力:

  • collection: コレクション識別子

bruno_get_environment

Bruno 環境を検査します。secret: true とマークされた変数は値 [REDACTED] で返され、非シークレットの値は正規化された文字列形式で返されます。

必須入力:

  • collection: コレクション識別子

  • environment: Local などのベア名、または environments/Local.yml などのコレクション相対パス

bruno_run

Bruno CLI v4 を使用して、リクエスト、フォルダー、またはコレクション全体を実行します。正規化された実行、リクエスト、レスポンス、テスト、アサーションの結果を返します。Bruno のテストまたはアサーションの失敗は、MCP トランスポートエラーではなく、検査可能な結果として残ります。

入力:

フィールド

デフォルト

説明

collection

必須

コレクション識別子。

targets

[]

リクエストまたはフォルダーのパス。空の配列はコレクション全体を実行します。

environment

なし

Bruno 環境名。

variables

なし

Bruno 環境変数として渡される非シークレットの文字列オーバーライド。

bail

false

最初の失敗したリクエスト、テスト、またはアサーションの後に停止します。

testsOnly

false

テストまたはアクティブなアサーションを含むリクエストのみを実行します。

delayMs

なし

リクエスト間の非負の遅延(ミリ秒)。

sandbox

safe

Bruno サンドボックスモード: safe または developer

insecure

false

リクエストで TLS 証明書検証を無効にします。

responseBodyMode

onFailure

返されるレスポンスボディ: noneonFailure、または full

maxResponseBodyBytes

262144

含まれる各レスポンスボディの最大 UTF-8 またはシリアル化サイズ。サイズ超過のボディはサイズメタデータに置き換えられます。

シークレットの取り扱い

variables に資格情報やその他のシークレットを渡さないでください。MCP ツールの引数はモデルとホストから見える可能性があり、オーバーライドも Bruno プロセスに引数として渡されます。シークレットは、Bruno の通常の環境またはプロセス環境のメカニズムを通じて提供してください。

環境の検査では secret: true が尊重されますが、このマーカーは一般的なファイルアクセスの境界ではありません。bruno_get_request はファイルを秘匿せずに返し、現在はリクエスト発見で見つかったパスだけでなく、コレクション内の既存の任意のファイルを受け入れます。そのため、環境ファイルのパスを指定した許可された呼び出し元は、その生の内容を受け取る可能性があります。MCP アクセスを信頼できるホストとユーザーに制限し、BRUNO_MCP_ROOT を狭くスコープし、MCP 呼び出し元が読み取れる場所には平文の本番シークレットを置かないでください。

サンドボックスと TLS ポリシー

bruno_run はデフォルトで Bruno のセーフサンドボックスを使用します。

開発者サンドボックスの実行には、次の両方の明示的な選択が必要です:

  1. サーバー運用者が BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=true を設定する。

  2. ツール呼び出し元が実行時に sandboxdeveloper に設定する。

サーバー権限がない場合、開発者モードのリクエストは DEVELOPER_SANDBOX_DISABLED で失敗します。開発者モードは Bruno スクリプトにさらに高度な機能を提供するため、信頼できるコレクションに対してのみ有効にしてください。

パス封じ込めは Bruno MCP に渡されるパスを制御しますが、Bruno スクリプト内のコードをサンドボックス化するものではありません。Bruno スクリプトはコレクションまたは環境の状態を更新でき、開発者モードのスクリプトはネイティブの Node.js 機能を使用して BRUNO_MCP_ROOT の外部のパスにアクセスしたり、他のプロセスを起動したりできます。

通常の TLS 証明書検証はデフォルトで有効です。無効にするには、サーバー権限(BRUNO_MCP_ALLOW_INSECURE=true)と個々の実行時の insecure: true の両方が必要です。そうでない場合、リクエストは INSECURE_DISABLED で失敗します。インセキュアモードはトランスポートのセキュリティを弱めるため、管理された開発環境に限定すべきです。

セキュリティモデル

  • ルート封じ込め: Bruno MCP に渡されるコレクション、リクエスト、環境、実行パスは、正規化されたファイルシステム境界に対してチェックされます。BRUNO_MCP_ROOT または選択されたコレクションの外部へのトラバーサルやシンボリックリンクによるエスケープは拒否されます。これは開発者モードのスクリプトコードを制限するものではありません。

  • シェル実行なし: Bruno MCP は、シェル実行を無効にした状態で、固定の操作と個別の引数を設定済みの Bruno 実行ファイルに直接渡します。汎用シェルや Bruno CLI コマンドツールは公開しませんが、開発者モードの Bruno スクリプトは自身でプロセスを起動できます。

  • 読み取り専用の検査: 探索と検査は、コレクションファイルを意図的に作成、更新、削除しません。bruno_run は Bruno CLI に委任するため、永続化された変数の変更を含む副作用のあるスクリプトを実行できます。

  • 対象を絞った秘匿化: secret: true と明示的にマークされた環境値は、環境の検査によって秘匿化されます。実行レポートは、認可、Cookie、API キーヘッダーを含む一般的な機密ヘッダーを再帰的に秘匿化します。生のファイル読み取りとリクエスト読み取りは秘匿化されません。

  • プロトコル専用の stdout: stdout は MCP プロトコルトラフィック専用です。ログと起動時診断は stderr に書き込まれます。

  • サイズ制限付きレポート: 過大な Bruno レポートは拒否され、含まれるレスポンス本文には本文ごとの個別の制限があります。

秘匿化は多層防御であり、一般的なシークレット検出ではありません。生のファイル、リクエスト YAML、リクエストソース、URL、レスポンス本文、Bruno 診断には、シークレットとして認識されない値が含まれる可能性があります。BRUNO_MCP_ROOT は実用上可能な限り狭く構成し、コレクションファイルに認証情報を埋め込まず、リクエスト実行を有効にする場合は信頼できるコレクションと MCP 呼び出し元を使用してください。

開発

ロックされた依存関係をインストールします:

npm ci

便利なコマンド:

Command

Purpose

npm run dev

開発時に TypeScript エントリポイントを実行します。

npm run build

サーバーを dist/ にコンパイルします。

npm start

コンパイル済みの stdio サーバーを実行します。

npm run check

CI で必要なすべてのチェックを実行します。

npm run lint

ソース、テスト、ツーリングをリントします。

npm run typecheck

ファイルを出力せずにソース、テスト、ツーリングの型チェックを行います。

npm test

ユニットテストスイートを一度実行します。

npm run test:watch

ユニットテストをウォッチモードで実行します。

npm run test:integration

統合テストスイートを実行します。

npm run fixtures:capture-reports

Bruno レポーターフィクスチャを意図的に更新するときに再生成します。

変更を送信する前に、次を実行してください:

npm run check

既知の制限事項

  • Bruno OpenCollection YAML のみがサポートされ、レガシーな .bru コレクションは無視されます。

  • コレクション、リクエスト、環境、フォルダー、ワークスペース向けの MCP ミューテーションツールは提供されません。実行された Bruno スクリプトは依然として副作用を持つ可能性があります。

  • OpenAPI のインポートとエクスポートはサポートされていません。

  • サーバーは任意の Bruno CLI コマンドやシェル実行を公開しません。

  • ローカルの stdio MCP トランスポートのみがサポートされています。リモートおよび HTTP MCP トランスポートは含まれません。

  • 自動シークレットマネージャー統合は含まれていません。

  • Bruno MCP は、独自の HTTP クライアント、変数補間、認証、OAuth、スクリプト、リクエストチェーン、アサーション、プロキシ動作、リダイレクト、証明書動作を実装していません。これらの動作は 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