bruno-mcp
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 --versionbruno-mcp にはコマンドラインオプションがないため、呼び出すとヘルプを表示する代わりに stdio サーバーが起動します。通常は MCP ホストが起動します。
代わりにリポジトリのチェックアウトからインストールする場合:
npm ci
npm run build
npm linkMCP ホストの構成
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 CLI の実行可能ファイル名またはパス。実行可能ファイルはシェルを介さずに直接呼び出されます。 |
|
| 実行ごとのタイムアウト(ミリ秒)。正の整数である必要があります。 |
|
|
|
|
|
|
|
| 受け入れ可能な Bruno JSON レポーターの最大サイズ(UTF-8 バイト、デフォルトは 5 MiB)。正の整数である必要があります。 |
|
| stderr の最小ログレベル: |
ブール設定は、大文字と小文字を区別せずに true、1、yes、on と false、0、no、off を受け付けます。
明示的な実行ポリシーを使用した例:
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-mcpMCP ツール
コレクション識別子は、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: コレクションからの相対パス
includeSource を true に設定すると、生の 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 トランスポートエラーではなく、検査可能な結果として残ります。
入力:
フィールド | デフォルト | 説明 |
| 必須 | コレクション識別子。 |
|
| リクエストまたはフォルダーのパス。空の配列はコレクション全体を実行します。 |
| なし | Bruno 環境名。 |
| なし | Bruno 環境変数として渡される非シークレットの文字列オーバーライド。 |
|
| 最初の失敗したリクエスト、テスト、またはアサーションの後に停止します。 |
|
| テストまたはアクティブなアサーションを含むリクエストのみを実行します。 |
| なし | リクエスト間の非負の遅延(ミリ秒)。 |
|
| Bruno サンドボックスモード: |
|
| リクエストで TLS 証明書検証を無効にします。 |
|
| 返されるレスポンスボディ: |
|
| 含まれる各レスポンスボディの最大 UTF-8 またはシリアル化サイズ。サイズ超過のボディはサイズメタデータに置き換えられます。 |
シークレットの取り扱い
variablesに資格情報やその他のシークレットを渡さないでください。MCP ツールの引数はモデルとホストから見える可能性があり、オーバーライドも Bruno プロセスに引数として渡されます。シークレットは、Bruno の通常の環境またはプロセス環境のメカニズムを通じて提供してください。
環境の検査では secret: true が尊重されますが、このマーカーは一般的なファイルアクセスの境界ではありません。bruno_get_request はファイルを秘匿せずに返し、現在はリクエスト発見で見つかったパスだけでなく、コレクション内の既存の任意のファイルを受け入れます。そのため、環境ファイルのパスを指定した許可された呼び出し元は、その生の内容を受け取る可能性があります。MCP アクセスを信頼できるホストとユーザーに制限し、BRUNO_MCP_ROOT を狭くスコープし、MCP 呼び出し元が読み取れる場所には平文の本番シークレットを置かないでください。
サンドボックスと TLS ポリシー
bruno_run はデフォルトで Bruno のセーフサンドボックスを使用します。
開発者サンドボックスの実行には、次の両方の明示的な選択が必要です:
サーバー運用者が
BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=trueを設定する。ツール呼び出し元が実行時に
sandboxをdeveloperに設定する。
サーバー権限がない場合、開発者モードのリクエストは 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 |
| 開発時に TypeScript エントリポイントを実行します。 |
| サーバーを |
| コンパイル済みの stdio サーバーを実行します。 |
| CI で必要なすべてのチェックを実行します。 |
| ソース、テスト、ツーリングをリントします。 |
| ファイルを出力せずにソース、テスト、ツーリングの型チェックを行います。 |
| ユニットテストスイートを一度実行します。 |
| ユニットテストをウォッチモードで実行します。 |
| 統合テストスイートを実行します。 |
| 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
11 toolsbruno_create_environmentCreate Bruno environmentA
Create a new Bruno environment file. Secret values must be omitted or [REDACTED].
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Environment name or path (e.g. Local or environments/Local.yml). | |
| variables | No | Initial list of environment variables. | |
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). |
TDQS
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 does add a meaningful constraint: 'Secret values must be omitted or [REDACTED].' However, it does not disclose behavior around overwriting existing files, permission requirements, or what happens after creation. This is a mutation tool, so more detail would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: one states the primary action, the other communicates the one critical rule. There is no filler or repetition of schema details. The structure is appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers all parameters and the description highlights the key secret-handling rule, so an agent can likely call the tool correctly. However, there is no output schema and the description does not mention what the tool returns, whether it will overwrite an existing environment at the same path, or any side effects. For a file-creating mutation tool, these are notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds the security rule about secrets, but this mostly restates what the schema already specifies via the '[REDACTED]' const and corresponding descriptions. Thus the description provides minimal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Create a new Bruno environment file.' This is specific and unambiguous, naming both the verb and the resource. It distinguishes this tool from siblings like bruno_update_environment and bruno_get_environment simply by emphasizing 'new'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes when to use the tool: when creating a new environment, not updating or listing existing ones. It does not explicitly name alternatives, but the 'new' qualifier makes the intended use clear enough. It stops short of explaining what not to use it for, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bruno_create_requestCreate Bruno requestA
Create a Bruno HTTP request YAML file. Missing parent folders are created and existing files are not overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | App extension settings. | |
| url | Yes | Request URL, optionally with Bruno {{variables}}. | |
| auth | No | Authentication config object (e.g. { type: 'bearer', token: '...' }) or 'inherit'. Use Bruno variables for secrets. | |
| body | No | Request body: { type, data } object or list of variants. | |
| docs | No | Documentation text. | |
| name | Yes | Request display name. | |
| tags | No | Request tags. | |
| method | Yes | HTTP method, for example GET or POST. | |
| params | No | Query and path parameters. | |
| headers | No | Request headers. | |
| request | Yes | New request path relative to collection root, including .yml extension (e.g. Users/Create.yml). | |
| runtime | No | ||
| examples | No | Request and response examples. | |
| sequence | No | Execution sequence order. | |
| settings | No | ||
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). | |
| description | No | Request description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose two non-obvious file behaviors: missing parent folders are auto-created and existing files are not overwritten. But it omits what happens when a file already exists (error vs no-op), what the successful response contains, and any other side effects beyond file creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one front-loaded sentence that conveys the essential action plus two important edge-case behaviors with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter mutation tool with no output schema and no annotations, the description is not fully complete: it lacks success/error signaling, what happens on an existing-file conflict, and explicit routing to bruno_update_request. The schema compensates for parameter details, and the description covers the most important file-system behaviors, so it is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 88%, so the schema already documents most parameters and the baseline is 3. The description adds extra meaning by clarifying request-path behavior: nested parent folders are automatically created and an existing target file is not overwritten, which is not stated in the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('Create') and a concrete resource ('Bruno HTTP request YAML file'), so an agent immediately knows what the tool does. The phrase 'existing files are not overwritten' also distinguishes it from bruno_update_request, which is the main sibling it could be confused with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'create' verb and the warning that existing files are not overwritten imply this tool is for new request files, giving some usage context. However, it never explicitly says to use bruno_update_request when the target already exists, nor does it state any other when-to-use/when-not-to-use guidance relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bruno_get_environmentGet Bruno environmentB
Inspect a Bruno environment. Variables marked as secrets are always redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). | |
| environment | Yes | Environment name or path (e.g. Local or environments/Local.yml). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses one important behavior: secret variables are always redacted in the output. However, it does not explicitly state that the operation is read-only, nor does it mention potential errors or permission requirements. Since no annotations are provided, the description carries the burden of behavior disclosure, but it only partially fulfills this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that leads with the core purpose and then adds a crucial detail about secret redaction. It is concise, free of filler, and well-structured; every word contributes to the tool's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get operation with two well-documented parameters, the description provides sufficient context: it names the action, the resource, and a key output behavior (redaction). It does not explicitly state the return format, but 'inspect' implies retrieving the environment's details, and the absence of an output schema makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for both parameters (collection and environment), so the baseline is 3. The description adds no additional parameter-level semantics beyond what the schema already states, making this a neutral score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Inspect') and the resource ('a Bruno environment'), which distinguishes it from create/update/delete operations. It does not explicitly contrast with bruno_list_environments, but 'inspect' implies fetching details of a specific environment, making 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a single environment's details as opposed to listing environments or running requests, leaving the selection decision to the agent's interpretation.
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 requestB
Read a Bruno request. Use responseMode=revision for revision check, or full for parsed content.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request path relative to collection root (e.g. Users/Create.yml). | |
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). | |
| responseMode | No | Detail level: "full" for document and metadata, or "revision" for revision check only. | |
| includeSource | No | Include raw YAML source in full mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does convey that the operation is a read and that 'full' returns parsed content while 'revision' performs a revision check, which gives some behavioral insight. However, it does not describe the exact response shape, error behavior, or explicitly confirm that no side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the core operation front-loaded and mode guidance immediately following. Every phrase earns its place, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers parameter semantics well, but with no annotations and no output schema, the description should more clearly explain return behavior and how this tool relates to sibling tools. It sketches the difference between revision and full modes but leaves the exact response and tool-selection context to inference. This is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters already have descriptive comments in the input schema, so the baseline is 3. The description's mode sentence mostly restates the responseMode schema, though 'parsed content' adds a small nuance. It adds no meaningful detail for collection, request, or includeSource beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: 'Read a Bruno request.' The mention of responseMode further clarifies that the tool supports both full content retrieval and revision checks, which is specific and useful. It is distinguishable from create/update/run siblings, though it does not explicitly contrast with list/search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance for choosing between responseMode values, but it says nothing about when to use this tool instead of bruno_list_requests, bruno_search_requests, or bruno_run. No alternatives or exclusion conditions are mentioned, so an agent must infer the tool's appropriate context from its name alone.
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 collectionsB
List Bruno collections available in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only restates the listing action and does not mention read-only behavior, return format, ordering, pagination, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the essential purpose with no filler or repetition. It is appropriately sized for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is functionally sufficient: the agent knows what the tool does and that it operates on workspace collections. The only minor gap is the lack of explicit return-shape details, but no output schema exists and the tool is simple enough to infer a list of collections.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden. The description does not need to explain inputs, and the empty input schema is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List') and resource ('Bruno collections') with a clear workspace scope. It is unambiguous, though it does not explicitly contrast with sibling listing tools such as bruno_list_requests or bruno_list_environments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. The agent must infer from the resource name that this is for collections, with no explicit exclusions or context for choosing among the sibling list tools.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). |
TDQS
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 explicitly promises that variable values are not exposed, which is a meaningful safety/security behavior. It does not describe error handling or return format, but for a simple listing operation this is a solid level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the core purpose ('List environments...') and immediately adds the key differentiator ('without 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one required parameter and no output schema, the description is largely sufficient. It covers purpose, scope, and the security-relevant behavior. It could be more complete by stating the return shape more explicitly, but the core selection and invocation needs are met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with a clear parameter description: 'Collection path relative to workspace root (as returned by bruno_list_collections).' The tool description adds no parameter details itself, but the schema already provides sufficient meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List environments') and adds the scope 'available to a Bruno collection'. It also includes a distinctive qualifier, 'without exposing variable values', which differentiates it from a tool like bruno_get_environment that would return variable values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to listing environments for a collection and points to bruno_list_collections as the source of the collection path. It does not explicitly name alternatives or say when not to use it, but the 'without exposing variable values' phrasing gives helpful context for choosing between this and a more detailed environment tool.
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 requestsB
List and search requests in a Bruno collection. Returns request paths, names, types, and HTTP metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by request type (e.g. http or graphql). | |
| query | No | Case-insensitive substring filter for request name, path, and URL. | |
| method | No | Filter by HTTP method (e.g. GET or POST). | |
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It does disclose that the tool returns request paths, names, types, and HTTP metadata, but it does not mention error behavior, pagination, or whether the operation is strictly read-only. The read-only nature is implied by 'list and search' but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core action and return contents in two short sentences with no filler. Every phrase contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main inputs and return fields, but with no output schema and no annotations, it is only minimally complete. The lack of any distinction from bruno_search_requests is a notable gap for an agent deciding which tool to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so all parameters already have descriptions. The tool description adds no extra parameter-level semantics beyond confirming the collection context, which the schema already provides. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: listing and searching requests in a Bruno collection, and it lists what is returned. However, it does not differentiate itself from the sibling tool bruno_search_requests, whose name suggests overlapping search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of bruno_search_requests or bruno_get_request. The description implies it is for exploring requests but never states exclusions or alternative selection criteria, leaving the agent to guess.
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 execution results. Do not pass credentials or other secrets through variables. MCP tool arguments may be visible to the model and host.
| Name | Required | Description | Default |
|---|---|---|---|
| bail | No | Stop after the first failing request, test, or assertion. | |
| delayMs | No | Delay between requests in milliseconds. | |
| sandbox | No | JavaScript sandbox mode (safe or developer). | safe |
| targets | No | Request files or folders relative to collection root, or empty array for entire collection. | |
| insecure | No | Disable normal TLS certificate verification. | |
| testsOnly | No | Only run requests containing tests or active assertions. | |
| variables | No | Non-secret environment variable overrides. | |
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). | |
| environment | No | Bruno environment name to use for this run. | |
| responseBodyMode | No | When to return response bodies: none, onFailure, or full. | onFailure |
| maxResponseBodyBytes | No | Maximum bytes for each returned response body. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does provide useful warnings about not passing secrets and MCP argument visibility, and it mentions structured results. However, it does not disclose that executing requests may perform live network calls, cause side effects, or take a long time, which are significant behavioral traits for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences that front-load the core action, then state the return type, then add a critical security warning. There is no filler or redundant wording, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 11 parameters and no output schema or annotations, the description stays very brief. It does not explain the structure of the execution results, warn about side effects, or provide guidance on selecting targets or interpreting failures. For such a complex, potentially side-effectful tool, the description is insufficiently complete on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description adds a security warning about variables, reinforcing but not extending the schema's note that variables are non-secret overrides. It provides no additional semantic value for the other ten parameters, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Execute' and clearly identifies the resource: 'requests, folders, or an entire Bruno collection' via 'Bruno CLI v4'. It also states the result type ('structured execution results'), making the tool's purpose unambiguous and easily distinguishable from the listing/getting/creating siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for running Bruno requests rather than managing them, but it does not explicitly state when to choose it over alternatives or when not to use it. There is no mention of sibling tools like bruno_list_collections or bruno_get_request, leaving usage context to inference. It 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_search_requestsSearch Bruno requestsB
Search requests across all collections in the workspace. Returns matching requests with collection id.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by request type (e.g. http or graphql). | |
| query | Yes | Case-insensitive substring filter for request name, path, and URL. | |
| method | No | Filter by HTTP method (e.g. GET or POST). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects and behavior. It mentions it returns matching requests, implying a read-only operation, but does not explicitly state that it does not modify data or that it is safe to call. The transparency is moderate 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, direct, and free of unnecessary detail. It efficiently conveys the tool's purpose and a key aspect of the output, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the essential information needed to invoke the tool: that it searches across all collections and returns matching requests with collection id. Even though there is no output schema, the mention of the return content satisfies basic completeness. It lacks details on pagination or filtering specifics, but these are minor for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all three parameters: query, type, and method. The tool description does not add any extra context about how these parameters interact or affect the search, so the value added beyond the schema is minimal. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for requests across all collections, using the specific verb 'search' and resource 'requests'. It also mentions it returns matching requests with collection id, which distinguishes it from simply listing requests. However, it does not explicitly contrast with the sibling tool bruno_list_requests, so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what the tool does but does not explicitly state when to use it over alternatives (e.g., bruno_list_requests or bruno_get_request). There is no guidance about using search when a filter is needed versus listing when a full enumeration is required, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bruno_update_environmentUpdate Bruno environmentB
Update an existing Bruno environment file. Existing secrets must be preserved with secret: true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Environment name or path (e.g. Local or environments/Local.yml). | |
| variables | Yes | Replacement list of variables. Existing secrets must keep secret: true. | |
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral disclosure burden. It does disclose one important constraint (preserving secrets with secret: true), but it omits that variables form a replacement list, whether unspecified variables are removed, and what the operation returns. This is a significant gap for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no redundancy. The primary purpose is stated first, and the critical secret-preservation constraint is added immediately without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description is too thin. It does not explain the replacement semantics, the effect on omitted variables, or the expected return value. The secret warning is helpful but leaves important operational context uncovered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters. The description's secret-preservation note adds emphasis but largely duplicates the schema's 'Existing secrets must keep secret: true.' Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('an existing Bruno environment file'), which distinguishes it from environment creation tools. It does not explicitly name sibling alternatives, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Existing' implies this tool is for modifying an already-created environment rather than creating one, providing weak usage context. However, it does not explicitly state when to use this tool over bruno_create_environment, bruno_get_environment, or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bruno_update_requestUpdate Bruno requestA
Patch an existing Bruno HTTP request while preserving untouched content. Use expectedRevision="*" to patch latest version without preflight.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| url | No | Request URL, optionally with Bruno {{variables}}. | |
| auth | No | ||
| body | No | ||
| docs | No | ||
| name | No | Request display name. | |
| tags | No | ||
| method | No | HTTP method, for example GET or POST. | |
| params | No | ||
| headers | No | ||
| request | Yes | Existing HTTP request path relative to collection root, including .yml extension. | |
| runtime | No | ||
| examples | No | ||
| sequence | No | ||
| settings | No | ||
| collection | Yes | Collection path relative to workspace root (as returned by bruno_list_collections). | |
| description | No | Request description. | |
| expectedRevision | Yes | Revision returned by bruno_get_request, or "*" to patch latest version without preflight. |
TDQS
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 does reveal the partial-update nature and the preflight bypass behavior. However, it does not state side effects like persistence, what happens on a revision mismatch, or what the response contains, so it is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler: the core patch behavior is front-loaded, and the operational revision tip follows immediately. The description avoids repeating parameter-level schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with no annotations and no output schema, the description plus the rich schema provides enough to select and invoke the tool correctly: patch an existing request, preserve untouched content, and optionally bypass preflight. Missing details like return shape and conflict behavior are minor but would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents most parameter meanings in detail. The description adds the cross-cutting patch semantics that omitted content is preserved, which is essential for constructing correct patches. The expectedRevision wildcard tip mostly reinforces existing schema text, so this is above baseline but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Patch'), a clear resource ('existing Bruno HTTP request'), and the critical scope 'preserving untouched content'. This unmistakably distinguishes it from bruno_create_request and from read/run siblings without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: this is for modifying an existing request, not creating one. However, it never explicitly names alternatives such as bruno_create_request or advises calling bruno_get_request first to fetch a revision. The expectedRevision='*' tip is a useful operational detail but not a full when-to-use vs. when-not-to-use guideline.
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.
10 tool updates
v0.2.0- Added
bruno_create_environment - Added
bruno_create_request - Changed
bruno_get_environment2 fields changed- changed
Input schema / properties / collection / descriptionPrevious value: -"Collection 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."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)." - changed
Input schema / properties / environment / descriptionPrevious value: -"Environment reference, either a bare name (Local) or a collection-relative path (environments/Local.yml)."New value: +"Environment name or path (e.g. Local or environments/Local.yml)."
- Changed
bruno_get_request4 fields changed- changed
Input schema / properties / collection / descriptionPrevious value: -"Collection 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."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)." - changed
Input schema / properties / includeSource / descriptionPrevious value: -"When true, also return the raw request source text alongside the parsed document. Defaults to false."New value: +"Include raw YAML source in full mode." - changed
Input schema / properties / request / descriptionPrevious value: -"Request path relative to the collection root (as returned by bruno_list_requests), for example Hotel/Search.yml."New value: +"Request path relative to collection root (e.g. Users/Create.yml)." - added
Input schema / properties / responseModeAdded value: +{ + "description": "Detail level: \"full\" for document and metadata, or \"revision\" for revision check only.", + "enum": [ + "full", + "revision" + ], + "type": "string" +}
- Changed
bruno_list_environments1 field changed- changed
Input schema / properties / collection / descriptionPrevious value: -"Collection 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."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
- Changed
bruno_list_requests4 fields changed- changed
Input schema / properties / collection / descriptionPrevious value: -"Collection 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."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)." - changed
Input schema / properties / method / descriptionPrevious value: -"Filter to requests with this HTTP method (case-insensitive), for example GET or POST."New value: +"Filter by HTTP method (e.g. GET or POST)." - changed
Input schema / properties / query / descriptionPrevious value: -"Case-insensitive substring filter matched against each request's name, path, and URL."New value: +"Case-insensitive substring filter for request name, path, and URL." - changed
Input schema / properties / type / descriptionPrevious value: -"Filter to requests of this type (case-insensitive), for example http or graphql."New value: +"Filter by request type (e.g. http or graphql)."
- Changed
bruno_run7 fields changed- changed
Input schema / properties / collection / descriptionPrevious value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)." - changed
Input schema / properties / insecure / descriptionPrevious value: -"Disable normal TLS certificate verification. Must be enabled by server policy."New value: +"Disable normal TLS certificate verification." - changed
Input schema / properties / maxResponseBodyBytes / descriptionPrevious value: -"Maximum serialized UTF-8 size of each returned response body. Oversized bodies are replaced by size metadata."New value: +"Maximum bytes for each returned response body." - changed
Input schema / properties / responseBodyMode / descriptionPrevious value: -"Response bodies to return in the MCP payload: none, only results with failed tests or assertions, or all results."New value: +"When to return response bodies: none, onFailure, or full." - changed
Input schema / properties / sandbox / descriptionPrevious value: -"JavaScript sandbox mode. Developer mode must be enabled by server policy."New value: +"JavaScript sandbox mode (safe or developer)." - changed
Input schema / properties / targets / descriptionPrevious value: -"Request files or folders relative to the collection root. An empty list runs the entire collection."New value: +"Request files or folders relative to collection root, or empty array for entire collection." - changed
Input schema / properties / variables / descriptionPrevious value: -"Non-secret environment variable overrides. Do not include credentials or other secrets."New value: +"Non-secret environment variable overrides."
- Changed
bruno_search_requests3 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"Filter to requests with this HTTP method (case-insensitive), for example GET or POST."New value: +"Filter by HTTP method (e.g. GET or POST)." - changed
Input schema / properties / query / descriptionPrevious value: -"Required case-insensitive substring matched against each request's name, path, and URL."New value: +"Case-insensitive substring filter for request name, path, and URL." - changed
Input schema / properties / type / descriptionPrevious value: -"Filter to requests of this type (case-insensitive), for example http or graphql."New value: +"Filter by request type (e.g. http or graphql)."
- Added
bruno_update_environment - Added
bruno_update_request
7 tool updates
v0.1.0- First observed
bruno_get_environment - First observed
bruno_get_request - First observed
bruno_list_collections - First observed
bruno_list_environments - First observed
bruno_list_requests - First observed
bruno_run - First observed
bruno_search_requests
TDQS
Scored across 11 tools
Most tools target distinct resources and actions clearly. The main ambiguity is between bruno_list_requests, which can also search within a collection, and bruno_search_requests, which searches across all collections.
The bruno_ prefix with verb_noun naming is highly consistent across nearly all tools. bruno_run is a minor deviation because it lacks a noun object, but it is still understandable given it runs requests, folders, or collections.
Eleven tools is well-scoped for a Bruno API client server covering collections, requests, environments, and execution. Each tool has a clear role in the overall workflow.
The tool surface covers listing, getting, creating, updating, searching, and running requests, plus environment management. The notable gap is the absence of delete operations for requests, environments, or collections.
Maintenance
Related MCP Connectors
MCP server for interacting with the Supabase platform
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
The official MCP Server from Mia-Platform to interact with Mia-Platform Console
The official MCP Server for the Mux API
Related MCP Servers
- MIT
- AlicenseBqualityFmaintenanceA Model Context Protocol (MCP) server that enables programmatic creation and management of Bruno API testing collections, environments, and requests through standardized MCP tools.181 npm36MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that executes requests from Bruno API collections via the Bruno CLI tool, enabling API request execution and collection management.4MIT
- AlicenseNot gradedqualityDmaintenanceExposes Bruno CLI as tools for AI agents, allowing them to discover, inspect, and execute Bruno API collections through the MCP protocol.1MIT