Skip to main content
Glama
gpact
by gpact

Bruno MCP

Bruno MCP es un servidor local de Model Context Protocol para descubrir, inspeccionar y ejecutar colecciones de API de Bruno. Proporciona a los clientes MCP una interfaz semántica para las colecciones de Bruno mientras delega la ejecución de solicitudes, la autenticación, los scripts, las aserciones y la resolución de entornos en la CLI de Bruno.

Las herramientas de descubrimiento e inspección no modifican los archivos de colección. La ejecución de solicitudes se delega en Bruno y puede ejecutar scripts de colección con efectos secundarios. El servidor se comunica con un host MCP a través de la entrada estándar y la salida estándar (stdio).

Proyecto no oficial: Bruno MCP es un servidor MCP independiente y no oficial. Este proyecto no está afiliado, respaldado, patrocinado ni asociado de ningún otro modo con Bruno o sus creadores. Bruno y los nombres, logotipos y marcas relacionados son marcas comerciales de sus respectivos propietarios. Las referencias a Bruno se utilizan únicamente para describir la compatibilidad con el software Bruno.

Requisitos

  • Node.js 22 o superior

  • npm

  • Bruno CLI >= 4.0.0 && < 5.0.0

Bruno MCP valida bru --version al inicio. Se admiten las versiones estables de Bruno CLI 4.x; las versiones preliminares y otras versiones principales se rechazan.

Related MCP server: Bruno MCP Server

Soporte de OpenCollection

Bruno MCP admite colecciones OpenCollection de Bruno v4 identificadas por un archivo opencollection.yml. Descubre solicitudes y entornos representados por archivos YAML de OpenCollection.

Las colecciones heredadas .bru no son compatibles. El descubrimiento de solicitudes ignora los archivos .bru en lugar de analizarlos o convertirlos.

Instalación

Instale Bruno MCP globalmente desde npm:

npm install --global @gpact/bruno-mcp

Instale por separado una CLI de Bruno compatible si aún no está disponible:

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

Confirme que ambos puntos de entrada se resuelven:

command -v bruno-mcp
bru --version

bruno-mcp no tiene opciones de línea de comandos, por lo que invocarlo inicia el servidor stdio en lugar de mostrar ayuda. Normalmente, los hosts MCP lo inician por usted.

Para instalarlo desde una copia del repositorio en su lugar:

npm ci
npm run build
npm link

Configuración del host MCP

El transporte stdio de MCP define cómo un host lanza un subproceso de servidor e intercambia mensajes a través de stdin y stdout. No define un archivo de configuración de host universal.

Configure su host para ejecutar el punto de entrada bruno-mcp como un servidor stdio local y pase BRUNO_MCP_ROOT en el entorno del proceso hijo. Use una ruta raíz absoluta porque no todos los hosts usan el mismo directorio de trabajo.

Hosts que usan mcpServers

La configuración de proyectos de Claude Desktop y Claude Code usa un objeto mcpServers:

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

Consulte la guía oficial de servidores locales y la documentación de MCP de Claude Code para conocer las ubicaciones de configuración y las opciones de ámbito.

Visual Studio Code

VS Code usa un objeto servers en su configuración mcp.json:

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

Consulte la referencia de configuración de MCP de VS Code para conocer las ubicaciones de configuración de espacio de trabajo y de usuario.

OpenCode

OpenCode usa una entrada MCP local bajo mcp, representa el comando como una matriz y llama environment al campo de entorno:

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

Consulte la documentación del servidor MCP de OpenCode para conocer la precedencia de configuración y las opciones adicionales de servidor local.

Otros hosts pueden usar otro esquema o un flujo de configuración mediante línea de comandos. En todos los casos, los conceptos requeridos son los mismos: un transporte stdio local, el comando bruno-mcp y las variables de entorno descritas a continuación. Si un host con interfaz gráfica no encuentra bruno-mcp o bru en su PATH, use la ruta absoluta que devuelve command -v bruno-mcp para el comando del servidor y establezca BRUNO_MCP_BRU en una ruta absoluta de la CLI de Bruno.

También puede iniciar el servidor directamente. Esperará mensajes MCP en stdin y escribirá mensajes de protocolo en stdout:

BRUNO_MCP_ROOT=/home/user/bruno bruno-mcp

Configuración

La configuración se proporciona mediante variables de entorno. Una configuración no válida impide que el servidor se inicie.

Variable

Predeterminado

Descripción

BRUNO_MCP_ROOT

Directorio de trabajo actual

Directorio existente que contiene las colecciones accesibles. La ruta se resuelve a su ubicación canónica al inicio y el acceso a colecciones se limita a ese directorio.

BRUNO_MCP_BRU

bru

Nombre o ruta del ejecutable de la CLI de Bruno. El ejecutable se invoca directamente, nunca a través de un shell.

BRUNO_MCP_TIMEOUT_MS

120000

Tiempo de espera por ejecución en milisegundos. Debe ser un entero positivo. Los valores superiores a 900000 se limitan a 900000 (15 minutos).

BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX

false

Permite que los llamadores soliciten el sandbox de desarrollo de Bruno cuando es true. No habilita el modo de desarrollo de forma predeterminada.

BRUNO_MCP_ALLOW_INSECURE

false

Permite que los llamadores deshabiliten la verificación normal de certificados TLS para una ejecución cuando es true. No deshabilita la verificación de forma predeterminada.

BRUNO_MCP_MAX_REPORT_BYTES

5242880

Tamaño máximo aceptado del informe JSON de Bruno en bytes UTF-8 (5 MiB por defecto). Debe ser un entero positivo.

BRUNO_MCP_LOG_LEVEL

info

Nivel mínimo de registro en stderr: error, warn, info o debug.

Los ajustes booleanos aceptan true, 1, yes u on, y false, 0, no u off, sin distinguir mayúsculas de minúsculas.

Ejemplo con políticas de ejecución explícitas:

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

Herramientas MCP

Los identificadores de colección son rutas relativas a BRUNO_MCP_ROOT. Las rutas de solicitudes y entornos son relativas a su colección. Las URL y variables YAML devueltas no se interpolan.

bruno_list_collections

Enumera las colecciones OpenCollection de Bruno disponibles en el espacio de trabajo configurado. No acepta argumentos y devuelve identificadores de colección, nombres y versiones de OpenCollection.

bruno_list_requests

Enumera y busca solicitudes en una colección OpenCollection de Bruno. Devuelve rutas de solicitud, nombres, tipos, y métodos HTTP y URL cuando están disponibles.

Entrada obligatoria:

  • collection: identificador de colección

Filtros opcionales:

  • query: subcadena sin distinción de mayúsculas y minúsculas que se compara con el nombre, la ruta y la URL

  • method: método HTTP exacto sin distinción de mayúsculas y minúsculas

  • type: tipo de solicitud exacto sin distinción de mayúsculas y minúsculas

bruno_search_requests

Busca solicitudes en todas las colecciones en una sola llamada. Cada resultado incluye su identificador de colección.

Entrada obligatoria:

  • query: subcadena no vacía, sin distinción de mayúsculas y minúsculas, comparada con el nombre, la ruta y la URL

Los filtros opcionales method y type usan coincidencia exacta sin distinción de mayúsculas y minúsculas.

bruno_get_request

Lee una solicitud OpenCollection de Bruno y devuelve metadatos normalizados junto con su documento YAML analizado.

Entradas obligatorias:

  • collection: identificador de colección

  • request: ruta de la solicitud relativa a la colección

Establezca includeSource en true para devolver también el código fuente YAML sin procesar. Su valor predeterminado es false. El documento analizado y el código fuente se devuelven sin ocultar secretos, por lo que use rutas de solicitud producidas por las herramientas de listado o búsqueda y no incruste credenciales directamente en el YAML de la solicitud.

bruno_list_environments

Enumera los entornos disponibles para una colección sin exponer los valores de las variables. Cada resultado incluye el nombre del entorno, la ruta relativa, el número de variables y el número de secretos.

Entrada obligatoria:

  • collection: identificador de colección

bruno_get_environment

Inspecciona un entorno de Bruno. Las variables marcadas con secret: true se devuelven con el valor [REDACTED]; los valores no secretos se devuelven como cadena normalizada.

Entradas obligatorias:

  • collection: identificador de colección

  • environment: nombre simple como Local o una ruta relativa a la colección como environments/Local.yml

bruno_run

Ejecuta solicitudes, carpetas o una colección completa mediante la CLI de Bruno v4. Devuelve resultados normalizados de ejecución, solicitud, respuesta, prueba y aserción. Los fallos de pruebas o aserciones de Bruno siguen siendo resultados inspeccionables, no errores de transporte MCP.

Entradas:

Campo

Predeterminado

Descripción

collection

Obligatorio

Identificador de colección.

targets

[]

Rutas de solicitud o carpeta. Una matriz vacía ejecuta la colección completa.

environment

Ninguno

Nombre del entorno de Bruno.

variables

Ninguno

Sobrescrituras de cadena no secretas que se pasan como variables de entorno de Bruno.

bail

false

Se detiene después de la primera solicitud, prueba o aserción con fallo.

testsOnly

false

Ejecuta solo las solicitudes que contienen pruebas o aserciones activas.

delayMs

Ninguno

Retraso no negativo entre solicitudes en milisegundos.

sandbox

safe

Modo sandbox de Bruno: safe o developer.

insecure

false

Solicitudes con verificación de certificados TLS deshabilitada.

responseBodyMode

onFailure

Cuerpos de respuesta devueltos: none, onFailure o full.

maxResponseBodyBytes

262144

Tamaño máximo UTF-8 o serializado de cada cuerpo de respuesta incluido. Los cuerpos demasiado grandes se reemplazan por metadatos de tamaño.

Manejo de secretos

No pase credenciales ni otros secretos a través de variables. Los argumentos de las herramientas MCP pueden ser visibles para el modelo y el host, y las sobrescrituras también se pasan al proceso de Bruno como argumentos. Proporcione los secretos a través de los mecanismos normales de entorno de Bruno o del entorno del proceso.

La inspección de entornos respeta secret: true, pero este marcador no es un límite general de acceso a archivos. bruno_get_request devuelve archivos sin ocultar información y actualmente acepta cualquier archivo existente dentro de una colección, no solo las rutas encontradas por el descubrimiento de solicitudes. Por lo tanto, un llamador autorizado que proporcione la ruta de un archivo de entorno podría recibir su contenido sin procesar. Restrinja el acceso MCP a hosts y usuarios de confianza, limite el ámbito de BRUNO_MCP_ROOT y evite secretos de producción en texto plano en cualquier lugar donde un llamador MCP pueda leerlos.

Políticas de sandbox y TLS

bruno_run usa el sandbox seguro de Bruno de forma predeterminada.

La ejecución en sandbox de desarrollo requiere ambas opciones explícitas:

  1. El operador del servidor establece BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=true.

  2. El llamador de la herramienta establece sandbox en developer para la ejecución.

Sin el permiso del servidor, una solicitud en modo desarrollador falla con DEVELOPER_SANDBOX_DISABLED. El modo desarrollador otorga a los scripts de Bruno mayores capacidades, así que actívalo solo para colecciones de confianza.

El confinamiento de rutas controla las rutas proporcionadas a Bruno MCP; no aísla el código dentro de los scripts de Bruno. Los scripts de Bruno pueden actualizar el estado de la colección o del entorno, y los scripts en modo desarrollador pueden usar capacidades nativas de Node.js para acceder a rutas fuera de BRUNO_MCP_ROOT o iniciar otros procesos.

La verificación normal de certificados TLS está habilitada por defecto. Deshabilitarla requiere también tanto el permiso del servidor (BRUNO_MCP_ALLOW_INSECURE=true) como insecure: true en una ejecución individual. De lo contrario, la solicitud falla con INSECURE_DISABLED. El modo inseguro debilita la seguridad del transporte y debe limitarse a entornos de desarrollo controlados.

Modelo de seguridad

  • Confinamiento de raíz: Las rutas de colección, solicitud, entorno y ejecución proporcionadas a Bruno MCP se verifican contra los límites canónicos del sistema de archivos. Los escapes por traversal y enlaces simbólicos fuera de BRUNO_MCP_ROOT o de una colección seleccionada se rechazan. Esto no restringe el código de los scripts en modo desarrollador.

  • Sin ejecución de shell: Bruno MCP pasa una operación fija y argumentos separados directamente al ejecutable de Bruno configurado, con la ejecución de shell deshabilitada. No expone un shell genérico ni una herramienta de comandos de la CLI de Bruno, pero los scripts de Bruno en modo desarrollador pueden iniciar procesos por sí mismos.

  • Inspección de solo lectura: El descubrimiento y la inspección no crean, actualizan ni eliminan intencionadamente archivos de colección. bruno_run delega en la CLI de Bruno y puede ejecutar scripts con efectos secundarios, incluidos cambios de variables persistidos.

  • Redacción selectiva: La inspección de entorno redacta los valores de entorno marcados explícitamente como secret: true. Los informes de ejecución redactan recursivamente cabeceras sensibles comunes, incluidas las de autorización, cookies y claves de API. Las lecturas sin procesar de archivos y solicitudes no se redactan.

  • stdout solo para protocolo: stdout está reservado para el tráfico del protocolo MCP. Los registros y los diagnósticos de inicio se escriben en stderr.

  • Informes acotados: Los informes de Bruno de tamaño excesivo se rechazan, y los cuerpos de respuesta incluidos tienen un límite separado por cuerpo.

La redacción es una defensa en profundidad, no una detección general de secretos. Los archivos sin procesar, el YAML de las solicitudes, el código fuente de las solicitudes, las URL, los cuerpos de respuesta y los diagnósticos de Bruno pueden contener valores que no se reconocen como secretos. Configura BRUNO_MCP_ROOT de la forma más restringida posible, evita incrustar credenciales en los archivos de colección y usa colecciones de confianza y clientes MCP al habilitar la ejecución de solicitudes.

Desarrollo

Instala las dependencias bloqueadas:

npm ci

Comandos útiles:

Comando

Propósito

npm run dev

Ejecuta el punto de entrada de TypeScript en desarrollo.

npm run build

Compila el servidor en dist/.

npm start

Ejecuta el servidor stdio compilado.

npm run check

Ejecuta todas las comprobaciones requeridas por CI.

npm run lint

Aplica lint al código fuente, las pruebas y las herramientas.

npm run typecheck

Verifica los tipos del código fuente, las pruebas y las herramientas sin generar archivos.

npm test

Ejecuta la suite de pruebas unitarias una vez.

npm run test:watch

Ejecuta las pruebas unitarias en modo watch.

npm run test:integration

Ejecuta la suite de pruebas de integración.

npm run fixtures:capture-reports

Regenera los fixtures del reporter de Bruno cuando se actualizan intencionadamente.

Antes de enviar un cambio, ejecuta:

npm run check

Limitaciones conocidas

  • Solo se admite YAML de OpenCollection de Bruno; las colecciones heredadas .bru se ignoran.

  • No se proporcionan herramientas MCP de mutación para colecciones, solicitudes, entornos, carpetas o espacios de trabajo. Los scripts de Bruno ejecutados aún pueden tener efectos secundarios.

  • La importación y exportación de OpenAPI no son compatibles.

  • El servidor no expone comandos arbitrarios de la CLI de Bruno ni ejecución de shell.

  • Solo se admite el transporte MCP stdio local. Los transportes MCP remotos y HTTP no están incluidos.

  • La integración automática con el gestor de secretos no está incluida.

  • Bruno MCP no implementa su propio cliente HTTP, interpolación de variables, autenticación, OAuth, scripts, encadenamiento de solicitudes, aserciones, comportamiento de proxy, redirecciones ni comportamiento de certificados. Esos comportamientos pertenecen a la CLI de Bruno.

Available Tools

7 tools
bruno_get_environmentGet Bruno environmentA

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

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

TDQS

A3.6/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

The description is two sentences with no wasted words. The first sentence states the action and target, and the second adds an important caveat about secrets. It is front-loaded and easy to scan.

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines3/5

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

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

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

bruno_get_requestGet Bruno requestA

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

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

The description is a single efficient sentence that states the core action and result without repetition or filler. It earns its place and is easy for an agent to parse quickly.

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

The description identifies a specific verb ('Read') and resource ('a Bruno OpenCollection request') and states the output format ('parsed YAML representation'). This distinguishes it from sibling list/search/run tools, making its purpose immediately clear.

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

Usage Guidelines3/5

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

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

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

bruno_list_collectionsList Bruno collectionsA

List Bruno OpenCollection collections available in the configured workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

The description is a single sentence that states the action, resource, and scope with no filler or redundant explanation. It is well-sized and immediately understandable.

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

Completeness4/5

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

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

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

Parameters4/5

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

The input schema has no parameters, so there is no parameter documentation burden. The description adds workspace context but no parameter semantics are needed. Baseline 4 is appropriate for a zero-parameter tool.

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

Purpose5/5

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

The description uses a specific verb ('List') and a precise resource ('Bruno OpenCollection collections') and scopes it to the configured workspace. It is clearly distinguishable from the sibling tools, which target requests and environments rather than collections.

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

Usage Guidelines3/5

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

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

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

bruno_list_environmentsList Bruno environmentsA

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

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

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It usefully states that variable values will not be exposed, which is a meaningful guarantee. However, it says nothing about output shape, error behavior, or ordering, so transparency is adequate but not thorough.

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

Conciseness5/5

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

The description is a single well-structured sentence that front-loads the action and resource, then adds the important caveat about not exposing variable values. Every word earns its place.

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

The description uses a specific verb and resource ('List environments available to a Bruno collection') and adds a distinguishing safety scope: 'without exposing variable values.' This clearly separates it from bruno_get_environment, which presumably returns variable values.

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

Usage Guidelines4/5

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

The description conveys when to use the tool: to enumerate environments for a collection while deliberately avoiding variable value exposure. It does not explicitly name a sibling alternative, but the caveat makes the intended use case clear enough.

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

bruno_list_requestsList Bruno requestsA

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

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

TDQS

A3.6/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

The description is two concise sentences with no filler. The primary action and resource are front-loaded, followed immediately by the key return information, so an agent can quickly determine what the tool offers.

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as bruno_search_requests or bruno_get_request. It also fails to clarify whether this tool's search behavior is a substitute for the dedicated search sibling or only a lightweight filter.

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

bruno_runRun Bruno requestsA

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

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

TDQS

A4.1/5.0
Behavior4/5

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

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

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

Conciseness4/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

bruno_search_requestsSearch Bruno requestsA

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

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

Two sentences with no filler. The core behavior and scope are front-loaded, and the result behavior is stated succinctly. Every clause contributes value.

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

Completeness4/5

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

For a relatively simple search tool, the description plus schema covers scope, matching behavior, filters, and result tagging well. The lack of an output schema keeps it from a 5, since the exact structure of 'tagged' results is not fully specified.

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

TDQS

A4/5.0
Disambiguation4/5

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

Naming Consistency5/5

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

Tool Count5/5

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

Completeness4/5

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

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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

Latest Blog Posts

MCP directory API

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

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

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