Skip to main content
Glama
gpact
by gpact

Bruno MCP

Bruno MCP는 Bruno API 컬렉션을 검색, 검사, 실행하기 위한 로컬 Model Context Protocol 서버입니다. MCP 클라이언트에 Bruno 컬렉션에 대한 의미론적 인터페이스를 제공하면서, 요청 실행, 인증, 스크립팅, 어서션, 환경 해석은 Bruno CLI에 위임합니다.

검색 및 검사 도구는 컬렉션 파일을 수정하지 않습니다. 요청 실행은 Bruno에 위임되며 부작용이 있는 컬렉션 스크립트를 실행할 수 있습니다. 서버는 표준 입력과 표준 출력(stdio)을 통해 MCP 호스트와 통신합니다.

비공식 프로젝트: Bruno MCP는 독립적인 비공식 MCP 서버입니다. 이 프로젝트는 Bruno 또는 그 제작자와 제휴, 보증, 후원 또는 기타 관련이 없습니다. Bruno 및 관련 이름, 로고, 상표는 해당 소유자의 자산입니다. Bruno에 대한 언급은 Bruno 소프트웨어와의 호환성을 설명하는 용도로만 사용됩니다.

요구 사항

  • Node.js 22 이상

  • npm

  • Bruno CLI >= 4.0.0 && < 5.0.0

Bruno MCP는 시작 시 bru --version을 검증합니다. 안정적인 Bruno CLI 4.x 릴리스가 지원되며, 사전 릴리스 및 기타 주요 버전은 거부됩니다.

Related MCP server: Bruno MCP Server

OpenCollection 지원

Bruno MCP는 opencollection.yml 파일로 식별되는 Bruno v4 OpenCollection 컬렉션을 지원합니다. OpenCollection YAML 파일로 표현된 요청과 환경을 검색합니다.

레거시 .bru 컬렉션은 지원되지 않습니다. 요청 검색은 .bru 파일을 파싱하거나 변환하지 않고 무시합니다.

설치

npm에서 Bruno MCP를 전역으로 설치합니다:

npm install --global @gpact/bruno-mcp

지원되는 Bruno CLI가 아직 없으면 별도로 설치합니다:

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

두 엔트리 포인트가 모두 확인되는지 확인합니다:

command -v bruno-mcp
bru --version

bruno-mcp에는 명령줄 옵션이 없으므로, 실행하면 도움말을 출력하는 대신 stdio 서버가 시작됩니다. MCP 호스트는 일반적으로 이를 대신 시작합니다.

대신 저장소 체크아웃에서 설치하려면:

npm ci
npm run build
npm link

MCP 호스트 구성

MCP stdio 전송은 호스트가 서버 하위 프로세스를 시작하고 stdin과 stdout을 통해 메시지를 교환하는 방식을 정의합니다. 보편적인 호스트 구성 파일을 정의하지는 않습니다.

호스트가 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 경로로 설정하세요.

서버를 직접 시작할 수도 있습니다. stdin에서 MCP 메시지를 기다리고 stdout으로 프로토콜 메시지를 작성합니다:

BRUNO_MCP_ROOT=/home/user/bruno bruno-mcp

구성

구성은 환경 변수를 통해 제공됩니다. 잘못된 구성이 있으면 서버가 시작되지 않습니다.

변수

기본값

설명

BRUNO_MCP_ROOT

현재 작업 디렉터리

접근 가능한 컬렉션이 포함된 기존 디렉터리. 이 경로는 시작 시 정규 위치로 확인되며, 컬렉션 접근은 해당 경로로 제한됩니다.

BRUNO_MCP_BRU

bru

Bruno CLI 실행 파일 이름 또는 경로. 실행 파일은 셸을 거치지 않고 직접 호출됩니다.

BRUNO_MCP_TIMEOUT_MS

120000

실행당 시간 제한(밀리초). 양의 정수여야 합니다. 900000을 초과하는 값은 900000(15분)으로 제한됩니다.

BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX

false

true이면 호출자가 Bruno의 개발자 샌드박스를 요청할 수 있습니다. 기본적으로 개발자 모드를 활성화하지 않습니다.

BRUNO_MCP_ALLOW_INSECURE

false

true이면 호출자가 실행 중 일반 TLS 인증서 검증을 비활성화할 수 있습니다. 기본적으로 검증을 비활성화하지 않습니다.

BRUNO_MCP_MAX_REPORT_BYTES

5242880

허용되는 최대 Bruno JSON 리포터 크기(UTF-8 바이트, 기본 5MiB). 양의 정수여야 합니다.

BRUNO_MCP_LOG_LEVEL

info

최소 stderr 로그 수준: error, warn, info 또는 debug.

불리언 설정은 대소문자 구분 없이 true, 1, yes, onfalse, 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-mcp

MCP 도구

컬렉션 식별자는 BRUNO_MCP_ROOT 기준 상대 경로입니다. 요청 및 환경 경로는 해당 컬렉션 기준 상대 경로입니다. 반환된 URL과 YAML 변수는 보간되지 않습니다.

bruno_list_collections

구성된 작업 공간에서 사용 가능한 Bruno OpenCollection 컬렉션을 나열합니다. 인수를 받지 않으며 컬렉션 식별자, 이름, OpenCollection 버전을 반환합니다.

bruno_list_requests

하나의 Bruno OpenCollection 컬렉션에서 요청을 나열하고 검색합니다. 요청 경로, 이름, 유형, HTTP 메서드 및 URL(가능한 경우)을 반환합니다.

필수 입력:

  • collection: 컬렉션 식별자

선택적 필터:

  • query: 이름, 경로, URL에서 대소문자를 구분하지 않고 일치하는 부분 문자열

  • method: 대소문자를 구분하지 않는 정확한 HTTP 메서드

  • type: 대소문자를 구분하지 않는 정확한 요청 유형

bruno_search_requests

한 번의 호출로 모든 컬렉션에서 요청을 검색합니다. 각 결과에는 컬렉션 식별자가 포함됩니다.

필수 입력:

  • query: 이름, 경로, URL에서 대소문자를 구분하지 않고 일치하는 비어 있지 않은 부분 문자열

선택적 methodtype 필터는 대소문자를 구분하지 않는 정확한 일치를 사용합니다.

bruno_get_request

Bruno OpenCollection 요청을 읽고 정규화된 메타데이터와 파싱된 YAML 문서를 반환합니다.

필수 입력:

  • collection: 컬렉션 식별자

  • request: 컬렉션 기준 요청 경로

includeSourcetrue로 설정하면 원시 YAML 소스도 반환됩니다. 기본값은 false입니다. 파싱된 문서와 소스는 비밀 값 편집 없이 반환되므로, 목록 또는 검색 도구가 생성한 요청 경로를 사용하고 요청 YAML에 자격 증명을 직접 포함하지 마세요.

bruno_list_environments

변수 값을 노출하지 않고 컬렉션에서 사용 가능한 환경을 나열합니다. 각 결과에는 환경 이름, 상대 경로, 변수 개수, 비밀 개수가 포함됩니다.

필수 입력:

  • collection: 컬렉션 식별자

bruno_get_environment

Bruno 환경을 검사합니다. secret: true로 표시된 변수는 값이 [REDACTED]로 반환되고, 비밀이 아닌 값은 정규화된 문자열 형태로 반환됩니다.

필수 입력:

  • collection: 컬렉션 식별자

  • environment: Local 같은 단순 이름 또는 environments/Local.yml 같은 컬렉션 기준 경로

bruno_run

Bruno CLI v4를 사용하여 요청, 폴더 또는 전체 컬렉션을 실행합니다. 정규화된 실행, 요청, 응답, 테스트, 어서션 결과를 반환합니다. Bruno 테스트 또는 어서션 실패는 MCP 전송 오류가 아니라 검사 가능한 결과로 남습니다.

입력:

필드

기본값

설명

collection

필수

컬렉션 식별자.

targets

[]

요청 또는 폴더 경로. 빈 배열이면 전체 컬렉션을 실행합니다.

environment

없음

Bruno 환경 이름.

variables

없음

Bruno 환경 변수로 전달되는 비밀 아닌 문자열 재정의.

bail

false

첫 번째 실패한 요청, 테스트 또는 어서션 이후 중지합니다.

testsOnly

false

테스트 또는 활성 어서션이 포함된 요청만 실행합니다.

delayMs

없음

요청 간 지연 시간(밀리초, 음수 아님).

sandbox

safe

Bruno 샌드박스 모드: safe 또는 developer.

insecure

false

요청 시 TLS 인증서 검증을 비활성화합니다.

responseBodyMode

onFailure

반환되는 응답 본문: none, onFailure 또는 full.

maxResponseBodyBytes

262144

포함되는 각 응답 본문의 최대 UTF-8 또는 직렬화 크기. 크기를 초과하는 본문은 크기 메타데이터로 대체됩니다.

비밀 값 처리

variables를 통해 자격 증명 또는 기타 비밀 값을 전달하지 마세요. MCP 도구 인수는 모델과 호스트에 표시될 수 있으며, 재정의 값도 인수로 Bruno 프로세스에 전달됩니다. 대신 Bruno의 일반 환경 또는 프로세스 환경 메커니즘을 통해 비밀 값을 제공하세요.

환경 검사는 secret: true를 존중하지만, 이 표시는 일반적인 파일 접근 경계가 아닙니다. bruno_get_request는 파일을 편집 없이 반환하며, 현재 요청 검색으로 찾은 경로뿐만 아니라 컬렉션 내의 모든 기존 파일을 허용합니다. 따라서 환경 파일 경로를 제공하는 인증된 호출자는 해당 파일의 원시 내용을 받을 수 있습니다. MCP 접근을 신뢰할 수 있는 호스트와 사용자로 제한하고, BRUNO_MCP_ROOT를 좁게 설정하며, MCP 호출자가 읽을 수 있는 곳에는 일반 텍스트 프로덕션 비밀 값을 저장하지 마세요.

샌드박스 및 TLS 정책

bruno_run은 기본적으로 Bruno의 안전한 샌드박스를 사용합니다.

개발자 샌드박스 실행에는 다음 두 가지 명시적 선택이 모두 필요합니다:

  1. 서버 운영자가 BRUNO_MCP_ALLOW_DEVELOPER_SANDBOX=true를 설정합니다.

  2. 도구 호출자가 실행에 대해 sandboxdeveloper로 설정합니다.

서버 권한 없이 개발자 모드 요청은 DEVELOPER_SANDBOX_DISABLED로 실패합니다. 개발자 모드는 Bruno 스크립트에 더 큰 기능을 부여하므로 신뢰할 수 있는 컬렉션에서만 활성화하세요.

경로 격리는 Bruno MCP에 제공되는 경로를 제어하며, Bruno 스크립트 내부의 코드를 샌드박싱하지 않습니다. Bruno 스크립트는 컬렉션이나 환경 상태를 업데이트할 수 있으며, 개발자 모드 스크립트는 네이티브 Node.js 기능을 사용하여 BRUNO_MCP_ROOT 외부의 경로에 접근하거나 다른 프로세스를 시작할 수 있습니다.

일반적인 TLS 인증서 검증은 기본적으로 활성화되어 있습니다. 이를 비활성화하려면 서버 권한(BRUNO_MCP_ALLOW_INSECURE=true)과 개별 실행 시 insecure: true가 모두 필요합니다. 그렇지 않으면 요청은 INSECURE_DISABLED로 실패합니다. 비보안 모드는 전송 보안을 약화시키므로 통제된 개발 환경으로 제한해야 합니다.

보안 모델

  • 루트 격리: Bruno MCP에 제공되는 컬렉션, 요청, 환경 및 실행 경로는 정규화된 파일시스템 경계에 대해 검사됩니다. BRUNO_MCP_ROOT 또는 선택된 컬렉션 외부로의 경로 탐색 및 심볼릭 링크 이탈은 거부됩니다. 이는 개발자 모드 스크립트 코드를 제한하지 않습니다.

  • 셸 실행 없음: Bruno MCP는 셸 실행이 비활성화된 상태에서 고정된 작업과 별도의 인수를 구성된 Bruno 실행 파일에 직접 전달합니다. 일반적인 셸이나 Bruno CLI 명령 도구를 노출하지 않지만, 개발자 모드 Bruno 스크립트는 프로세스를 직접 시작할 수 있습니다.

  • 읽기 전용 검사: 탐색 및 검사는 의도적으로 컬렉션 파일을 생성, 업데이트 또는 삭제하지 않습니다. bruno_run은 Bruno CLI에 위임하며 지속되는 변수 변경을 포함한 부작용이 있는 스크립트를 실행할 수 있습니다.

  • 대상별 편집: 명시적으로 secret: true로 표시된 환경 값은 환경 검사에서 편집됩니다. 실행 보고서는 authorization, 쿠키 및 API 키 헤더를 포함한 일반적인 민감 헤더를 재귀적으로 편집합니다. 원시 파일 및 요청 읽기는 편집되지 않습니다.

  • 프로토콜 전용 stdout: stdout은 MCP 프로토콜 트래픽 전용입니다. 로그 및 시작 진단은 stderr에 기록됩니다.

  • 크기 제한 보고서: 과도하게 큰 Bruno 보고서는 거부되며, 포함된 응답 본문에는 별도의 본문별 제한이 있습니다.

편집은 심층 방어이지 일반적인 비밀 감지가 아닙니다. 원시 파일, 요청 YAML, 요청 소스, URL, 응답 본문 및 Bruno 진단에는 비밀로 인식되지 않는 값이 포함될 수 있습니다. BRUNO_MCP_ROOT를 실용적으로 가능한 한 좁게 구성하고, 컬렉션 파일에 자격 증명을 포함하지 않으며, 요청 실행을 활성화할 때 신뢰할 수 있는 컬렉션과 MCP 호출자를 사용하세요.

개발

잠긴 의존성을 설치하세요:

npm ci

유용한 명령:

Command

Purpose

npm run dev

개발 모드에서 TypeScript 진입점을 실행합니다.

npm run build

서버를 dist/로 컴파일합니다.

npm start

컴파일된 stdio 서버를 실행합니다.

npm run check

CI에 필요한 모든 검사를 실행합니다.

npm run lint

소스, 테스트 및 도구를 린트합니다.

npm run typecheck

파일을 생성하지 않고 소스, 테스트 및 도구의 타입을 검사합니다.

npm test

단위 테스트 스위트를 한 번 실행합니다.

npm run test:watch

단위 테스트를 감시 모드로 실행합니다.

npm run test:integration

통합 테스트 스위트를 실행합니다.

npm run fixtures:capture-reports

의도적으로 업데이트할 때 Bruno 리포터 픽스처를 다시 생성합니다.

변경 사항을 제출하기 전에 다음을 실행하세요:

npm run check

알려진 제한 사항

  • Bruno OpenCollection YAML만 지원되며, 레거시 .bru 컬렉션은 무시됩니다.

  • 컬렉션, 요청, 환경, 폴더 또는 워크스페이스에 대한 MCP 변경 도구는 제공되지 않습니다. 실행된 Bruno 스크립트는 여전히 부작용을 가질 수 있습니다.

  • OpenAPI 가져오기 및 내보내기는 지원되지 않습니다.

  • 서버는 임의의 Bruno CLI 명령이나 셸 실행을 노출하지 않습니다.

  • 로컬 stdio MCP 전송만 지원됩니다. 원격 및 HTTP MCP 전송은 포함되지 않습니다.

  • 자동 비밀 관리자 통합은 포함되지 않습니다.

  • Bruno MCP는 자체 HTTP 클라이언트, 변수 보간, 인증, OAuth, 스크립트, 요청 체이닝, 어서션, 프록시 동작, 리디렉션 또는 인증서 동작을 구현하지 않습니다. 이러한 동작은 Bruno CLI가 담당합니다.

Available Tools

7 tools
bruno_get_environmentGet Bruno environmentA

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

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

TDQS

A3.6/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines3/5

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

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

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

bruno_get_requestGet Bruno requestA

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

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

bruno_list_collectionsList Bruno collectionsA

List Bruno OpenCollection collections available in the configured workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

bruno_list_environmentsList Bruno environmentsA

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

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

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

bruno_list_requestsList Bruno requestsA

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

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

TDQS

A3.6/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

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

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

bruno_runRun Bruno requestsA

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

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

TDQS

A4.1/5.0
Behavior4/5

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

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

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

Conciseness4/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

bruno_search_requestsSearch Bruno requestsA

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

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

TDQS

A4/5.0
Disambiguation4/5

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

Naming Consistency5/5

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

Tool Count5/5

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

Completeness4/5

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

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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

Latest Blog Posts

MCP directory API

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

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

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