bruno-mcp
Bruno MCP
Bruno MCP 是一个本地 Model Context Protocol 服务器,用于发现、检查和执行 Bruno API 集合。它为 MCP 客户端提供对 Bruno 集合的语义接口,同时将请求执行、身份验证、脚本、断言和环境解析委托给 Bruno CLI。
发现和检查工具不会修改集合文件。请求执行被委托给 Bruno,并且可以运行带有副作用的集合脚本。服务器通过标准输入和标准输出(stdio)与 MCP 主机通信。
非官方项目: Bruno MCP 是一个独立的非官方 MCP 服务器。本项目与 Bruno 或其创建者没有任何关联、认可、赞助或其他联系。Bruno 及相关名称、徽标和标志均为其各自所有者的商标。提及 Bruno 仅用于描述与 Bruno 软件的兼容性。
Requirements
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 support
Bruno MCP 支持由 opencollection.yml 文件标识的 Bruno v4 OpenCollection 集合。它发现由 OpenCollection YAML 文件表示的请求和环境。
不支持旧版 .bru 集合。请求发现会忽略 .bru 文件,而不是解析或转换它们。
Installation
通过 npm 全局安装 Bruno MCP:
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 host configuration
MCP stdio 传输 定义了主机如何启动服务器子进程并通过 stdin 和 stdout 交换消息。它没有定义通用的主机配置文件。
将您的主机配置为以本地 stdio 服务器方式运行 bruno-mcp 入口点,并在子进程环境中传递 BRUNO_MCP_ROOT。请使用绝对根路径,因为并非所有主机都使用相同的工作目录。
Hosts using 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 的绝对路径。
您也可以直接启动服务器。它将等待 stdin 上的 MCP 消息,并将协议消息写入 stdout:
BRUNO_MCP_ROOT=/home/user/bruno bruno-mcpConfiguration
配置通过环境变量提供。无效配置会阻止服务器启动。
Variable | Default | Description |
| 当前工作目录 | 包含可访问集合的现有目录。该路径在启动时解析为其规范位置,集合访问被限制在该目录内。 |
|
| Bruno CLI 可执行文件名称或路径。该可执行文件被直接调用,从不通过 shell 调用。 |
|
| 每次运行的超时时间(毫秒)。必须是正整数。超过 |
|
| 为 |
|
| 为 |
|
| 接受的 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 tools
集合标识符是相对于 BRUNO_MCP_ROOT 的路径。请求和环境路径相对于其所属集合。返回的 URL 和 YAML 变量不会被插值。
bruno_list_collections
列出配置的工作区中可用的 Bruno OpenCollection 集合。它不接受任何参数,返回集合标识符、名称和 OpenCollection 版本。
bruno_list_requests
列出并搜索一个 Bruno OpenCollection 集合中的请求。它返回请求路径、名称、类型,以及可用的 HTTP 方法和 URL。
必需输入:
collection:集合标识符
可选过滤器:
query:不区分大小写的子字符串,匹配名称、路径和 URLmethod:不区分大小写的精确 HTTP 方法type:不区分大小写的精确请求类型
bruno_search_requests
在一次调用中搜索所有集合中的请求。每个结果都包含其集合标识符。
必需输入:
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 传输错误。
输入:
Field | Default | Description |
| 必需 | 集合标识符。 |
|
| 请求或文件夹路径。空数组将运行整个集合。 |
| 无 | Bruno 环境名称。 |
| 无 | 作为 Bruno 环境变量传递的非秘密字符串覆盖值。 |
|
| 在第一个失败的请求、测试或断言之后停止。 |
|
| 仅运行包含测试或启用断言的请求。 |
| 无 | 请求之间的非负延迟(毫秒)。 |
|
| Bruno 沙箱模式: |
|
| 请求禁用 TLS 证书验证。 |
|
| 返回的响应体: |
|
| 每个包含的响应体的最大 UTF-8 或序列化大小。超大的响应体将被大小元数据替换。 |
Secret handling
不要通过
variables传递凭据或其他秘密。MCP 工具参数可能对模型和主机可见,覆盖值也会作为参数传递给 Bruno 进程。请通过 Bruno 正常的环境或进程环境机制提供秘密。
环境检查会遵循 secret: true,但此标记并不是通用的文件访问边界。bruno_get_request 返回文件时不进行脱敏,并且目前接受集合内任何现有文件,而不仅仅是请求发现找到的路径。因此,提供环境文件路径的授权调用者可能会收到其原始内容。请将 MCP 访问限制在受信任的主机和用户范围内,窄化 BRUNO_MCP_ROOT 的作用域,并避免在任何 MCP 调用者可读取的地方存放明文的生产环境秘密。
Sandbox and TLS policies
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或所选集合的目录遍历和符号链接逃逸将被拒绝。这不限制开发者模式脚本代码。无 Shell 执行: Bruno MCP 在禁用 Shell 执行的情况下,将固定操作和单独参数直接传递给所配置的 Bruno 可执行文件。它不提供通用 Shell 或 Bruno CLI 命令工具,但开发者模式下的 Bruno 脚本可以自行启动进程。
只读检查: 发现和检查不会有意创建、更新或删除集合文件。
bruno_run委托给 Bruno CLI,并且可以执行具有副作用(包括持久化变量更改)的脚本。定向脱敏: 环境检查会对显式标记为
secret: true的环境值进行脱敏。执行报告会递归地对常见敏感标头(包括 authorization、cookies 和 API key 标头)进行脱敏。原始文件和请求读取不会被脱敏。仅协议 stdout: stdout 保留给 MCP 协议流量使用。日志和启动诊断信息写入 stderr。
有界报告: 过大的 Bruno 报告会被拒绝,所包含的响应正文有单独的逐正文限制。
脱敏是纵深防御,而非通用的机密检测。原始文件、请求 YAML、请求源、URL、响应正文和 Bruno 诊断信息可能包含未被识别为机密的数值。请在实际可行的范围内尽可能窄地配置 BRUNO_MCP_ROOT,避免在集合文件中嵌入凭据,并在启用请求执行时使用受信任的集合和 MCP 调用方。
开发
安装锁定的依赖项:
npm ci常用命令:
命令 | 用途 |
| 在开发中运行 TypeScript 入口点。 |
| 将服务器编译到 |
| 运行编译后的 stdio 服务器。 |
| 运行 CI 要求的所有检查。 |
| 对源代码、测试和工具运行 lint。 |
| 对源代码、测试和工具进行类型检查,不生成文件。 |
| 运行一次单元测试套件。 |
| 以监视模式运行单元测试。 |
| 运行集成测试套件。 |
| 在有意更新 Bruno 报告夹具时重新生成它们。 |
提交更改前,请运行:
npm run check已知限制
仅支持 Bruno OpenCollection YAML;旧版
.bru集合会被忽略。不提供用于集合、请求、环境、文件夹或工作区的 MCP 变更工具。已执行的 Bruno 脚本仍可能产生副作用。
不支持 OpenAPI 导入和导出。
服务器不暴露任意的 Bruno CLI 命令,也不提供 Shell 执行。
仅支持本地 stdio MCP 传输。不包含远程和 HTTP MCP 传输。
不包含自动机密管理器集成。
Bruno MCP 不实现自己的 HTTP 客户端、变量插值、身份验证、OAuth、脚本、请求链、断言、代理行为、重定向或证书行为。这些行为归 Bruno CLI 所有。
Available Tools
7 toolsbruno_get_environmentGet Bruno environmentA
Inspect a Bruno environment. Variables marked as secrets are always redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | 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. | |
| environment | Yes | Environment reference, either a bare name (Local) or a collection-relative path (environments/Local.yml). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request path relative to the collection root (as returned by bruno_list_requests), for example Hotel/Search.yml. | |
| collection | Yes | 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. | |
| includeSource | No | When true, also return the raw request source text alongside the parsed document. Defaults to false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | 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. |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to requests of this type (case-insensitive), for example http or graphql. | |
| query | No | Case-insensitive substring filter matched against each request's name, path, and URL. | |
| method | No | Filter to requests with this HTTP method (case-insensitive), for example GET or POST. | |
| collection | Yes | 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. |
TDQS
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.
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.
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.
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.
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.
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.
| 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. Developer mode must be enabled by server policy. | safe |
| targets | No | Request files or folders relative to the collection root. An empty list runs the entire collection. | |
| insecure | No | Disable normal TLS certificate verification. Must be enabled by server policy. | |
| testsOnly | No | Only run requests containing tests or active assertions. | |
| variables | No | Non-secret environment variable overrides. Do not include credentials or other secrets. | |
| collection | Yes | Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. | |
| environment | No | Bruno environment name to use for this run. | |
| responseBodyMode | No | Response bodies to return in the MCP payload: none, only results with failed tests or assertions, or all results. | onFailure |
| maxResponseBodyBytes | No | Maximum serialized UTF-8 size of each returned response body. Oversized bodies are replaced by size metadata. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to requests of this type (case-insensitive), for example http or graphql. | |
| query | Yes | Required case-insensitive substring matched against each request's name, path, and URL. | |
| method | No | Filter to requests with this HTTP method (case-insensitive), for example GET or POST. |
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 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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
A basic MCP server to operate on the Postman API.
- SupabaseOAuthcom.supabase
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
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.18731MIT
- 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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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