Skip to main content
Glama
bruno-mcp
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, 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-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에서 대소문자를 구분하지 않고 일치하는 비어 있지 않은 부분 문자열

선택적 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 전송 오류가 아니라 검사 가능한 결과로 남습니다.

입력:

필드

기본값

설명

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. 도구 호출자가 실행에 대해 sandbox를 developer로 설정합니다.

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

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

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

보안 모델

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

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

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

  • 대상별 편집: 명시적으로 secret: true로 표시된 환경 값은 환경 검사에서 편집됩니다. 실행 보고서는 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

11 tools
bruno_create_environmentCreate Bruno environmentA

Create a new Bruno environment file. Secret values must be omitted or [REDACTED].

NameRequiredDescriptionDefault
nameYesEnvironment name or path (e.g. Local or environments/Local.yml).
variablesNoInitial list of environment variables.
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).

TDQS

A3.9/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 does add a meaningful constraint: 'Secret values must be omitted or [REDACTED].' However, it does not disclose behavior around overwriting existing files, permission requirements, or what happens after creation. This is a mutation tool, so more detail would be valuable.

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

Conciseness5/5

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

Two short sentences: one states the primary action, the other communicates the one critical rule. There is no filler or repetition of schema details. The structure is appropriately concise and front-loaded.

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

Completeness3/5

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

The schema covers all parameters and the description highlights the key secret-handling rule, so an agent can likely call the tool correctly. However, there is no output schema and the description does not mention what the tool returns, whether it will overwrite an existing environment at the same path, or any side effects. For a file-creating mutation tool, these are notable gaps.

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

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 fully documents all three parameters. The description adds the security rule about secrets, but this mostly restates what the schema already specifies via the '[REDACTED]' const and corresponding descriptions. Thus the description provides minimal added value beyond the schema.

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

Purpose5/5

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

The description clearly states the action: 'Create a new Bruno environment file.' This is specific and unambiguous, naming both the verb and the resource. It distinguishes this tool from siblings like bruno_update_environment and bruno_get_environment simply by emphasizing 'new'.

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

Usage Guidelines4/5

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

The description establishes when to use the tool: when creating a new environment, not updating or listing existing ones. It does not explicitly name alternatives, but the 'new' qualifier makes the intended use clear enough. It stops short of explaining what not to use it for, so it lacks explicit exclusion guidance.

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

bruno_create_requestCreate Bruno requestA

Create a Bruno HTTP request YAML file. Missing parent folders are created and existing files are not overwritten.

NameRequiredDescriptionDefault
appNoApp extension settings.
urlYesRequest URL, optionally with Bruno {{variables}}.
authNoAuthentication config object (e.g. { type: 'bearer', token: '...' }) or 'inherit'. Use Bruno variables for secrets.
bodyNoRequest body: { type, data } object or list of variants.
docsNoDocumentation text.
nameYesRequest display name.
tagsNoRequest tags.
methodYesHTTP method, for example GET or POST.
paramsNoQuery and path parameters.
headersNoRequest headers.
requestYesNew request path relative to collection root, including .yml extension (e.g. Users/Create.yml).
runtimeNo
examplesNoRequest and response examples.
sequenceNoExecution sequence order.
settingsNo
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).
descriptionNoRequest description.

TDQS

A3.9/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 burden. It does disclose two non-obvious file behaviors: missing parent folders are auto-created and existing files are not overwritten. But it omits what happens when a file already exists (error vs no-op), what the successful response contains, and any other side effects beyond file creation.

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

Conciseness5/5

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

The description is one front-loaded sentence that conveys the essential action plus two important edge-case behaviors with no filler. Every clause earns its place.

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

Completeness3/5

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

For a 17-parameter mutation tool with no output schema and no annotations, the description is not fully complete: it lacks success/error signaling, what happens on an existing-file conflict, and explicit routing to bruno_update_request. The schema compensates for parameter details, and the description covers the most important file-system behaviors, so it is adequate but has clear gaps.

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

Parameters4/5

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

Schema description coverage is high at 88%, so the schema already documents most parameters and the baseline is 3. The description adds extra meaning by clarifying request-path behavior: nested parent folders are automatically created and an existing target file is not overwritten, which is not stated in the schema's parameter descriptions.

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

Purpose5/5

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

The description names a concrete action ('Create') and a concrete resource ('Bruno HTTP request YAML file'), so an agent immediately knows what the tool does. The phrase 'existing files are not overwritten' also distinguishes it from bruno_update_request, which is the main sibling it could be confused with.

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

Usage Guidelines3/5

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

The 'create' verb and the warning that existing files are not overwritten imply this tool is for new request files, giving some usage context. However, it never explicitly says to use bruno_update_request when the target already exists, nor does it state any other when-to-use/when-not-to-use guidance relative to sibling tools.

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

bruno_get_environmentGet Bruno environmentB

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

NameRequiredDescriptionDefault
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).
environmentYesEnvironment name or path (e.g. Local or environments/Local.yml).

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses one important behavior: secret variables are always redacted in the output. However, it does not explicitly state that the operation is read-only, nor does it mention potential errors or permission requirements. Since no annotations are provided, the description carries the burden of behavior disclosure, but it only partially fulfills this.

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

Conciseness5/5

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

The description is a single sentence that leads with the core purpose and then adds a crucial detail about secret redaction. It is concise, free of filler, and well-structured; every word contributes to the tool's understanding.

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

Completeness4/5

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

For a simple get operation with two well-documented parameters, the description provides sufficient context: it names the action, the resource, and a key output behavior (redaction). It does not explicitly state the return format, but 'inspect' implies retrieving the environment's details, and the absence of an output schema makes this a minor gap.

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

Parameters3/5

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

The input schema provides full descriptions for both parameters (collection and environment), so the baseline is 3. The description adds no additional parameter-level semantics beyond what the schema already states, making this a neutral score.

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

Purpose4/5

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

The description clearly states the action ('Inspect') and the resource ('a Bruno environment'), which distinguishes it from create/update/delete operations. It does not explicitly contrast with bruno_list_environments, but 'inspect' implies fetching details of a specific environment, making the purpose reasonably clear.

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

Usage Guidelines2/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a single environment's details as opposed to listing environments or running requests, leaving the selection decision to the agent's interpretation.

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

bruno_get_requestGet Bruno requestB

Read a Bruno request. Use responseMode=revision for revision check, or full for parsed content.

NameRequiredDescriptionDefault
requestYesRequest path relative to collection root (e.g. Users/Create.yml).
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).
responseModeNoDetail level: "full" for document and metadata, or "revision" for revision check only.
includeSourceNoInclude raw YAML source in full mode.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does convey that the operation is a read and that 'full' returns parsed content while 'revision' performs a revision check, which gives some behavioral insight. However, it does not describe the exact response shape, error behavior, or explicitly confirm that no side effects occur.

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

Conciseness5/5

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

The description is two short sentences with the core operation front-loaded and mode guidance immediately following. Every phrase earns its place, and there is no redundancy or filler.

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

Completeness3/5

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

The schema covers parameter semantics well, but with no annotations and no output schema, the description should more clearly explain return behavior and how this tool relates to sibling tools. It sketches the difference between revision and full modes but leaves the exact response and tool-selection context to inference. This is adequate but has clear gaps.

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

Parameters3/5

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

All four parameters already have descriptive comments in the input schema, so the baseline is 3. The description's mode sentence mostly restates the responseMode schema, though 'parsed content' adds a small nuance. It adds no meaningful detail for collection, request, or includeSource beyond the schema.

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

Purpose4/5

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

The description clearly states the operation: 'Read a Bruno request.' The mention of responseMode further clarifies that the tool supports both full content retrieval and revision checks, which is specific and useful. It is distinguishable from create/update/run siblings, though it does not explicitly contrast with list/search tools.

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

Usage Guidelines2/5

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

The description provides guidance for choosing between responseMode values, but it says nothing about when to use this tool instead of bruno_list_requests, bruno_search_requests, or bruno_run. No alternatives or exclusion conditions are mentioned, so an agent must infer the tool's appropriate context from its name alone.

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

bruno_list_collectionsList Bruno collectionsB

List Bruno collections available in the workspace.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It only restates the listing action and does not mention read-only behavior, return format, ordering, pagination, or potential side effects.

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

Conciseness5/5

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

A single, front-loaded sentence that states the essential purpose with no filler or repetition. It is appropriately sized for such a simple tool.

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

Completeness4/5

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

For a zero-parameter listing tool, the description is functionally sufficient: the agent knows what the tool does and that it operates on workspace collections. The only minor gap is the lack of explicit return-shape details, but no output schema exists and the tool is simple enough to infer a list of collections.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics burden. The description does not need to explain inputs, and the empty input schema is trivially complete.

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

Purpose4/5

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

The description states a specific action ('List') and resource ('Bruno collections') with a clear workspace scope. It is unambiguous, though it does not explicitly contrast with sibling listing tools such as bruno_list_requests or bruno_list_environments.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives. The agent must infer from the resource name that this is for collections, with no explicit exclusions or context for choosing among the sibling list tools.

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

bruno_list_environmentsList Bruno environmentsA

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

NameRequiredDescriptionDefault
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).

TDQS

A4.2/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 explicitly promises that variable values are not exposed, which is a meaningful safety/security behavior. It does not describe error handling or return format, but for a simple listing operation this is a solid level of transparency.

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

Conciseness5/5

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

The description is a single sentence with no filler. It front-loads the core purpose ('List environments...') and immediately adds the key differentiator ('without exposing variable values'). Every word earns its place.

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

Completeness4/5

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

For a low-complexity tool with one required parameter and no output schema, the description is largely sufficient. It covers purpose, scope, and the security-relevant behavior. It could be more complete by stating the return shape more explicitly, but the core selection and invocation needs are met.

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

Parameters3/5

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

The schema has 100% coverage with a clear parameter description: 'Collection path relative to workspace root (as returned by bruno_list_collections).' The tool description adds no parameter details itself, but the schema already provides sufficient meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource ('List environments') and adds the scope 'available to a Bruno collection'. It also includes a distinctive qualifier, 'without exposing variable values', which differentiates it from a tool like bruno_get_environment that would return variable values.

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

Usage Guidelines4/5

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

The description clearly scopes the tool to listing environments for a collection and points to bruno_list_collections as the source of the collection path. It does not explicitly name alternatives or say when not to use it, but the 'without exposing variable values' phrasing gives helpful context for choosing between this and a more detailed environment tool.

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

bruno_list_requestsList Bruno requestsB

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

NameRequiredDescriptionDefault
typeNoFilter by request type (e.g. http or graphql).
queryNoCase-insensitive substring filter for request name, path, and URL.
methodNoFilter by HTTP method (e.g. GET or POST).
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It does disclose that the tool returns request paths, names, types, and HTTP metadata, but it does not mention error behavior, pagination, or whether the operation is strictly read-only. The read-only nature is implied by 'list and search' but not explicit.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the core action and return contents in two short sentences with no filler. Every phrase contributes meaningful information.

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

Completeness3/5

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

The description covers the main inputs and return fields, but with no output schema and no annotations, it is only minimally complete. The lack of any distinction from bruno_search_requests is a notable gap for an agent deciding which tool to invoke.

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

Parameters3/5

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

Input schema coverage is 100%, so all parameters already have descriptions. The tool description adds no extra parameter-level semantics beyond confirming the collection context, which the schema already provides. A baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the operation: listing and searching requests in a Bruno collection, and it lists what is returned. However, it does not differentiate itself from the sibling tool bruno_search_requests, whose name suggests overlapping search functionality.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool instead of bruno_search_requests or bruno_get_request. The description implies it is for exploring requests but never states exclusions or alternative selection criteria, leaving the agent to guess.

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

bruno_runRun Bruno requestsA

Execute requests, folders, or an entire Bruno collection using Bruno CLI v4. Returns structured execution results. Do not pass credentials or other secrets through variables. MCP tool arguments may be visible to the model and host.

NameRequiredDescriptionDefault
bailNoStop after the first failing request, test, or assertion.
delayMsNoDelay between requests in milliseconds.
sandboxNoJavaScript sandbox mode (safe or developer).safe
targetsNoRequest files or folders relative to collection root, or empty array for entire collection.
insecureNoDisable normal TLS certificate verification.
testsOnlyNoOnly run requests containing tests or active assertions.
variablesNoNon-secret environment variable overrides.
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).
environmentNoBruno environment name to use for this run.
responseBodyModeNoWhen to return response bodies: none, onFailure, or full.onFailure
maxResponseBodyBytesNoMaximum bytes for each returned response body.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral disclosure burden. It does provide useful warnings about not passing secrets and MCP argument visibility, and it mentions structured results. However, it does not disclose that executing requests may perform live network calls, cause side effects, or take a long time, which are significant behavioral traits for an execution tool.

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

Conciseness5/5

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

The description is three concise sentences that front-load the core action, then state the return type, then add a critical security warning. There is no filler or redundant wording, and every sentence earns its place.

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

Completeness2/5

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

Despite having 11 parameters and no output schema or annotations, the description stays very brief. It does not explain the structure of the execution results, warn about side effects, or provide guidance on selecting targets or interpreting failures. For such a complex, potentially side-effectful tool, the description is insufficiently complete on its own.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description adds a security warning about variables, reinforcing but not extending the schema's note that variables are non-secret overrides. It provides no additional semantic value for the other ten parameters, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'Execute' and clearly identifies the resource: 'requests, folders, or an entire Bruno collection' via 'Bruno CLI v4'. It also states the result type ('structured execution results'), making the tool's purpose unambiguous and easily distinguishable from the listing/getting/creating siblings.

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

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 running Bruno requests rather than managing them, but it does not explicitly state when to choose it over alternatives or when not to use it. There is no mention of sibling tools like bruno_list_collections or bruno_get_request, leaving usage context to inference. It is adequate but not explicit.

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

bruno_search_requestsSearch Bruno requestsB

Search requests across all collections in the workspace. Returns matching requests with collection id.

NameRequiredDescriptionDefault
typeNoFilter by request type (e.g. http or graphql).
queryYesCase-insensitive substring filter for request name, path, and URL.
methodNoFilter by HTTP method (e.g. GET or POST).

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of disclosing side effects and behavior. It mentions it returns matching requests, implying a read-only operation, but does not explicitly state that it does not modify data or that it is safe to call. The transparency is moderate but not thorough.

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

Conciseness5/5

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

The description is two sentences, direct, and free of unnecessary detail. It efficiently conveys the tool's purpose and a key aspect of the output, with no fluff or redundancy.

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

Completeness4/5

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

The description provides the essential information needed to invoke the tool: that it searches across all collections and returns matching requests with collection id. Even though there is no output schema, the mention of the return content satisfies basic completeness. It lacks details on pagination or filtering specifics, but these are minor for a search tool.

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

Parameters3/5

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

The schema already provides descriptions for all three parameters: query, type, and method. The tool description does not add any extra context about how these parameters interact or affect the search, so the value added beyond the schema is minimal. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool searches for requests across all collections, using the specific verb 'search' and resource 'requests'. It also mentions it returns matching requests with collection id, which distinguishes it from simply listing requests. However, it does not explicitly contrast with the sibling tool bruno_list_requests, so it stops short of a perfect 5.

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

Usage Guidelines2/5

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

The description says what the tool does but does not explicitly state when to use it over alternatives (e.g., bruno_list_requests or bruno_get_request). There is no guidance about using search when a filter is needed versus listing when a full enumeration is required, leaving the agent to infer usage.

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

bruno_update_environmentUpdate Bruno environmentB

Update an existing Bruno environment file. Existing secrets must be preserved with secret: true.

NameRequiredDescriptionDefault
nameYesEnvironment name or path (e.g. Local or environments/Local.yml).
variablesYesReplacement list of variables. Existing secrets must keep secret: true.
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must carry the full behavioral disclosure burden. It does disclose one important constraint (preserving secrets with secret: true), but it omits that variables form a replacement list, whether unspecified variables are removed, and what the operation returns. This is a significant gap for a mutating tool.

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

Conciseness5/5

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

Two short sentences with no redundancy. The primary purpose is stated first, and the critical secret-preservation constraint is added immediately without unnecessary detail.

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

Completeness2/5

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

For a mutating tool with no annotations and no output schema, the description is too thin. It does not explain the replacement semantics, the effect on omitted variables, or the expected return value. The secret warning is helpful but leaves important operational context uncovered.

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

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 parameters. The description's secret-preservation note adds emphasis but largely duplicates the schema's 'Existing secrets must keep secret: true.' Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Update') and the resource ('an existing Bruno environment file'), which distinguishes it from environment creation tools. It does not explicitly name sibling alternatives, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

'Existing' implies this tool is for modifying an already-created environment rather than creating one, providing weak usage context. However, it does not explicitly state when to use this tool over bruno_create_environment, bruno_get_environment, or other siblings.

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

bruno_update_requestUpdate Bruno requestA

Patch an existing Bruno HTTP request while preserving untouched content. Use expectedRevision="*" to patch latest version without preflight.

NameRequiredDescriptionDefault
appNo
urlNoRequest URL, optionally with Bruno {{variables}}.
authNo
bodyNo
docsNo
nameNoRequest display name.
tagsNo
methodNoHTTP method, for example GET or POST.
paramsNo
headersNo
requestYesExisting HTTP request path relative to collection root, including .yml extension.
runtimeNo
examplesNo
sequenceNo
settingsNo
collectionYesCollection path relative to workspace root (as returned by bruno_list_collections).
descriptionNoRequest description.
expectedRevisionYesRevision returned by bruno_get_request, or "*" to patch latest version without preflight.

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 burden of behavioral disclosure. It does reveal the partial-update nature and the preflight bypass behavior. However, it does not state side effects like persistence, what happens on a revision mismatch, or what the response contains, so it is adequate but not comprehensive.

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

Conciseness5/5

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

Two tight sentences with no filler: the core patch behavior is front-loaded, and the operational revision tip follows immediately. The description avoids repeating parameter-level schema details.

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

Completeness4/5

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

For an 18-parameter mutation tool with no annotations and no output schema, the description plus the rich schema provides enough to select and invoke the tool correctly: patch an existing request, preserve untouched content, and optionally bypass preflight. Missing details like return shape and conflict behavior are minor but would make it more complete.

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

Parameters4/5

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

The schema already documents most parameter meanings in detail. The description adds the cross-cutting patch semantics that omitted content is preserved, which is essential for constructing correct patches. The expectedRevision wildcard tip mostly reinforces existing schema text, so this is above baseline but not exceptional.

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

Purpose5/5

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

Uses a specific verb ('Patch'), a clear resource ('existing Bruno HTTP request'), and the critical scope 'preserving untouched content'. This unmistakably distinguishes it from bruno_create_request and from read/run siblings without needing the schema.

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

Usage Guidelines3/5

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

The usage is implied: this is for modifying an existing request, not creating one. However, it never explicitly names alternatives such as bruno_create_request or advises calling bruno_get_request first to fetch a revision. The expectedRevision='*' tip is a useful operational detail but not a full when-to-use vs. when-not-to-use guideline.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.2.0
    • Addedbruno_create_environment
    • Addedbruno_create_request
    • Changedbruno_get_environment2 fields changed
      • changedInput schema / properties / collection / description
        Previous value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
      • changedInput schema / properties / environment / description
        Previous value: -"Environment reference, either a bare name (Local) or a collection-relative path (environments/Local.yml)."New value: +"Environment name or path (e.g. Local or environments/Local.yml)."
    • Changedbruno_get_request4 fields changed
      • changedInput schema / properties / collection / description
        Previous value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
      • changedInput schema / properties / includeSource / description
        Previous value: -"When true, also return the raw request source text alongside the parsed document. Defaults to false."New value: +"Include raw YAML source in full mode."
      • changedInput schema / properties / request / description
        Previous value: -"Request path relative to the collection root (as returned by bruno_list_requests), for example Hotel/Search.yml."New value: +"Request path relative to collection root (e.g. Users/Create.yml)."
      • addedInput schema / properties / responseMode
        Added value: +{
        +  "description": "Detail level: \"full\" for document and metadata, or \"revision\" for revision check only.",
        +  "enum": [
        +    "full",
        +    "revision"
        +  ],
        +  "type": "string"
        +}
    • Changedbruno_list_environments1 field changed
      • changedInput schema / properties / collection / description
        Previous value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
    • Changedbruno_list_requests4 fields changed
      • changedInput schema / properties / collection / description
        Previous value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name. It may be nested, for example collections/hotel."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
      • changedInput schema / properties / method / description
        Previous value: -"Filter to requests with this HTTP method (case-insensitive), for example GET or POST."New value: +"Filter by HTTP method (e.g. GET or POST)."
      • changedInput schema / properties / query / description
        Previous value: -"Case-insensitive substring filter matched against each request's name, path, and URL."New value: +"Case-insensitive substring filter for request name, path, and URL."
      • changedInput schema / properties / type / description
        Previous value: -"Filter to requests of this type (case-insensitive), for example http or graphql."New value: +"Filter by request type (e.g. http or graphql)."
    • Changedbruno_run7 fields changed
      • changedInput schema / properties / collection / description
        Previous value: -"Collection identifier: the collection's path relative to the workspace root (as returned by bruno_list_collections), not its display name."New value: +"Collection path relative to workspace root (as returned by bruno_list_collections)."
      • changedInput schema / properties / insecure / description
        Previous value: -"Disable normal TLS certificate verification. Must be enabled by server policy."New value: +"Disable normal TLS certificate verification."
      • changedInput schema / properties / maxResponseBodyBytes / description
        Previous value: -"Maximum serialized UTF-8 size of each returned response body. Oversized bodies are replaced by size metadata."New value: +"Maximum bytes for each returned response body."
      • changedInput schema / properties / responseBodyMode / description
        Previous value: -"Response bodies to return in the MCP payload: none, only results with failed tests or assertions, or all results."New value: +"When to return response bodies: none, onFailure, or full."
      • changedInput schema / properties / sandbox / description
        Previous value: -"JavaScript sandbox mode. Developer mode must be enabled by server policy."New value: +"JavaScript sandbox mode (safe or developer)."
      • changedInput schema / properties / targets / description
        Previous value: -"Request files or folders relative to the collection root. An empty list runs the entire collection."New value: +"Request files or folders relative to collection root, or empty array for entire collection."
      • changedInput schema / properties / variables / description
        Previous value: -"Non-secret environment variable overrides. Do not include credentials or other secrets."New value: +"Non-secret environment variable overrides."
    • Changedbruno_search_requests3 fields changed
      • changedInput schema / properties / method / description
        Previous value: -"Filter to requests with this HTTP method (case-insensitive), for example GET or POST."New value: +"Filter by HTTP method (e.g. GET or POST)."
      • changedInput schema / properties / query / description
        Previous value: -"Required case-insensitive substring matched against each request's name, path, and URL."New value: +"Case-insensitive substring filter for request name, path, and URL."
      • changedInput schema / properties / type / description
        Previous value: -"Filter to requests of this type (case-insensitive), for example http or graphql."New value: +"Filter by request type (e.g. http or graphql)."
    • Addedbruno_update_environment
    • Addedbruno_update_request
  2. 7 tool updatesv0.1.0
    • First observedbruno_get_environment
    • First observedbruno_get_request
    • First observedbruno_list_collections
    • First observedbruno_list_environments
    • First observedbruno_list_requests
    • First observedbruno_run
    • First observedbruno_search_requests

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct resources and actions clearly. The main ambiguity is between bruno_list_requests, which can also search within a collection, and bruno_search_requests, which searches across all collections.

Naming Consistency4/5

The bruno_ prefix with verb_noun naming is highly consistent across nearly all tools. bruno_run is a minor deviation because it lacks a noun object, but it is still understandable given it runs requests, folders, or collections.

Tool Count5/5

Eleven tools is well-scoped for a Bruno API client server covering collections, requests, environments, and execution. Each tool has a clear role in the overall workflow.

Completeness4/5

The tool surface covers listing, getting, creating, updating, searching, and running requests, plus environment management. The notable gap is the absence of delete operations for requests, environments, or collections.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

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
    81 npm
    36
    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