Skip to main content
Glama

Bruno MCP Server

Tests Coverage TypeScript License

A Model Context Protocol (MCP) server that integrates Bruno CLI for API testing and collection management. Execute API tests, validate collections, and generate reports through the Model Context Protocol.

Features

  • ๐Ÿš€ Run API Tests - Execute individual requests or entire collections

  • ๐Ÿ” Request Introspection - Inspect request details without execution

  • โœ… Validation - Validate collections and environments

  • ๐Ÿ“Š Report Generation - JSON, JUnit XML, and HTML reports

  • ๐ŸŒ Environment Management - List, validate, and switch environments

  • ๐Ÿ”Ž Collection Discovery - Recursive search for Bruno collections

  • ๐Ÿงช Dry Run Mode - Validate without making HTTP calls

  • ๐Ÿ”’ Security - Path validation, input sanitization, secret masking

  • โšก Performance - Request caching and execution metrics

  • ๐Ÿฅ Health Monitoring - Server health checks with detailed diagnostics

Related MCP server: BugBug MCP Server

Quick Start

Prerequisites

  • Node.js 20 or higher

  • Bruno collections (.bru files)

๐Ÿ“ What is Bruno MCP Server?

The Bruno MCP Server integrates the Bruno CLI (an open-source API client) with the Model Context Protocol (MCP) to enable direct API testing, collection management, and reporting via Claude.

Bruno stores its collections as human-readable .bru files in your filesystem, allowing for seamless integration with version control (Git).

๐Ÿš€ Key Capabilities

  • API Execution - Run individual requests or full test collections

  • Validation - Perform schema and environment validation (including a dry run mode without making HTTP calls)

  • Discovery - Recursively locate Bruno collections across specified directories

  • Environment Management - List and validate specific environments within a collection (e.g., dev, staging, production)

  • Reporting - Generate comprehensive reports in JSON, JUnit XML, or HTML formats

๐Ÿ’ก Sample Prompts

Goal

Sample Prompt

Discovery

"Find all Bruno collections in my projects directory at /Users/user-name/projects"

Request Execution

"Run the 'Get User' request from /path/to/collection using the 'dev' environment"

Validation (Dry Run)

"Validate the 'Create User' request from /path/to/collection without making the HTTP call"

Full Run & Reporting

"Run all tests in my API collection at /path/to/collection and generate HTML and JSON reports in ./reports"

Environment Check

"List all environments in /path/to/collection and validate the 'production' environment"

๐Ÿ“ฅ Installation (Claude CLI)

The simplest method is using the claude mcp add command, which automatically installs the server and configures the MCP transport.

Scope

Command

Global (personal use)

claude mcp add --transport stdio bruno -- npx -y bruno-mcp-server

Project-Scoped (team projects)

claude mcp add --transport stdio bruno --scope project -- npx -y bruno-mcp-server

Note: The --transport stdio flag and the -- separator are required. The -y flag automatically accepts npx prompts.

Option 2: Manual Installation

  1. Install the package globally:

npm install -g bruno-mcp-server
  1. Add to your Claude CLI configuration file:

    • Global config: ~/.claude.json

    • Project config: .claude.json (in your project root)

{
  "mcpServers": {
    "bruno": {
      "command": "npx",
      "args": ["bruno-mcp-server"]
    }
  }
}
  1. Restart your Claude CLI session

โœ… Verification

To confirm the server is installed correctly, check the appropriate configuration file:

# For global installation
cat ~/.claude.json

# For project-scoped installation
cat .claude.json

You should see the "bruno" server listed under mcpServers.

Test the installation by starting a new Claude CLI session and trying:

"Check if the bruno MCP server is available and list its tools"

Available Tools

1. bruno_run_request - Execute a Single Request

bruno_run_request({
  collectionPath: "/path/to/collection",
  requestName: "Get User",
  environment: "dev",           // optional
  envVariables: {               // optional
    "API_KEY": "your-key"
  },
  reporterJson: "./report.json",   // optional
  reporterJunit: "./report.xml",   // optional
  reporterHtml: "./report.html",   // optional
  dryRun: false                    // optional - validate only
})

2. bruno_run_collection - Execute a Collection

bruno_run_collection({
  collectionPath: "/path/to/collection",
  environment: "dev",          // optional
  folderPath: "auth",          // optional - run specific folder
  envVariables: { },           // optional
  reporterJson: "./report.json",  // optional
  dryRun: false                   // optional
})

3. bruno_list_requests - List All Requests

bruno_list_requests({
  collectionPath: "/path/to/collection"
})

4. bruno_discover_collections - Find Collections

bruno_discover_collections({
  searchPath: "/path/to/workspace",
  maxDepth: 5  // optional (default: 5, max: 10)
})

5. bruno_list_environments - List Environments

bruno_list_environments({
  collectionPath: "/path/to/collection"
})

6. bruno_validate_environment - Validate Environment

bruno_validate_environment({
  collectionPath: "/path/to/collection",
  environmentName: "dev"
})

7. bruno_get_request_details - Inspect Request

bruno_get_request_details({
  collectionPath: "/path/to/collection",
  requestName: "Create User"
})

8. bruno_validate_collection - Validate Collection

bruno_validate_collection({
  collectionPath: "/path/to/collection"
})

9. bruno_health_check - Health Diagnostics

bruno_health_check({
  includeMetrics: true,      // optional
  includeCacheStats: true    // optional
})

Dry Run Mode

Validate request configuration without executing HTTP calls:

bruno_run_request({
  collectionPath: "/path/to/collection",
  requestName: "Create User",
  dryRun: true
})

Output:

=== DRY RUN: Request Validation ===

โœ… Request validated successfully (HTTP call not executed)

Request: Create User
Method: POST
URL: {{baseUrl}}/api/users

Configuration Summary:
  Headers: 2
  Body: json
  Auth: bearer
  Tests: 3

โ„น๏ธ  This was a dry run - no HTTP request was sent.

Report Generation

Generate test reports in multiple formats:

bruno_run_collection({
  collectionPath: "./my-api-tests",
  environment: "production",
  reporterJson: "./reports/results.json",
  reporterJunit: "./reports/results.xml",
  reporterHtml: "./reports/results.html"
})
  • JSON: Detailed results for programmatic processing

  • JUnit XML: CI/CD integration (Jenkins, GitHub Actions, GitLab CI)

  • HTML: Interactive report with Vue.js interface

Configuration

Create bruno-mcp.config.json in your project root or home directory:

{
  "timeout": {
    "request": 30000,
    "collection": 120000
  },
  "retry": {
    "enabled": true,
    "maxAttempts": 3,
    "backoff": "exponential"
  },
  "security": {
    "allowedPaths": ["/path/to/collections"],
    "maskSecrets": true,
    "secretPatterns": ["password", "api[_-]?key", "token"]
  },
  "logging": {
    "level": "info",
    "format": "json"
  },
  "performance": {
    "cacheEnabled": true,
    "cacheTTL": 300000
  }
}

See bruno-mcp.config.example.json for all options.

Development

# Clone repository
git clone https://github.com/jcr82/bruno-mcp-server.git
cd bruno-mcp-server

# Install dependencies
npm install

# Run tests
npm test

# Build
npm run build

# Run in development
npm run dev

Project Structure

bruno-mcp-server/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ index.ts              # Main MCP server
โ”‚   โ”œโ”€โ”€ bruno-cli.ts          # Bruno CLI wrapper
โ”‚   โ”œโ”€โ”€ config.ts             # Configuration management
โ”‚   โ”œโ”€โ”€ security.ts           # Security utilities
โ”‚   โ”œโ”€โ”€ performance.ts        # Caching and metrics
โ”‚   โ”œโ”€โ”€ logger.ts             # Logging system
โ”‚   โ”œโ”€โ”€ di/                   # Dependency injection
โ”‚   โ”œโ”€โ”€ services/             # Business logic services
โ”‚   โ”œโ”€โ”€ tools/
โ”‚   โ”‚   โ”œโ”€โ”€ handlers/         # MCP tool handlers (9 tools)
โ”‚   โ”‚   โ””โ”€โ”€ formatters/       # Output formatters
โ”‚   โ””โ”€โ”€ __tests__/            # Test suites
โ”‚       โ”œโ”€โ”€ unit/             # Unit tests (100% handler coverage)
โ”‚       โ”œโ”€โ”€ integration/      # Integration tests
โ”‚       โ””โ”€โ”€ e2e/              # End-to-end workflow tests
โ”œโ”€โ”€ dist/                     # Compiled output
โ””โ”€โ”€ bruno-mcp.config.json     # Configuration file

Test Coverage

  • Overall Coverage: 91.04%

  • Handler Coverage: 99.72% (9/9 handlers)

  • Formatter Coverage: 98.74%

  • Total Tests: 362 passing

  • Test Types: Unit, Integration, E2E

Security Features

  • Path Validation: Prevents directory traversal attacks

  • Input Sanitization: Protects against command injection

  • Secret Masking: Automatically masks sensitive data in logs

  • Environment Validation: Validates variables for safe characters

Troubleshooting

Installation Issues

Error: "missing required argument 'commandOrUrl'"

  • Make sure you include --transport stdio and -- separator

  • Correct: claude mcp add --transport stdio bruno -- npx -y bruno-mcp-server

  • Wrong: claude mcp add bruno-mcp-server

MCP Server Not Showing Up in Claude

  1. Verify installation: cat ~/.claude.json (or project's .claude.json if using --scope project)

  2. Restart Claude Desktop/CLI after installation

  3. Check the server is configured correctly in the JSON file

npx Prompts During Installation

  • Always use the -y flag: npx -y bruno-mcp-server

  • This auto-accepts installation prompts

Bruno CLI Not Found

# Verify Bruno CLI installation
npx bru --version

# Server uses local installation in node_modules/.bin/bru

Collection Not Found

  • Use absolute paths

  • Verify bruno.json exists in collection directory

  • Check file permissions

Permission Issues

  • Ensure read access to Bruno collections

  • Verify server can execute Bruno CLI

Documentation

Contributing

Contributions welcome! Please submit issues or pull requests.

License

MIT ยฉ Juan Ruiz

Available Tools

9 tools
bruno_discover_collectionsB

Discover Bruno collections in a directory tree

ParametersJSON Schema
NameRequiredDescriptionDefault
searchPathYesDirectory path to search for Bruno collections
maxDepthNoMaximum directory depth to search (default: 5)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior, but it only states what the tool does without explaining side effects, output format, or limitations like recursion depth or performance impact.

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 extremely concise (one sentence) and front-loaded with the core action. No unnecessary words, though structure is minimal.

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?

Given the absence of output schema and annotations, the description is too sparse. It does not explain what 'Discover' returns (e.g., list of paths) or error conditions, leaving the agent with incomplete context.

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 parameter descriptions (e.g., 'searchPath', 'maxDepth') are already clear. The description adds no additional semantic 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 ('Discover'), the resource ('Bruno collections'), and the scope ('in a directory tree'), making it distinct from sibling tools like bruno_list_requests or bruno_run_request.

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 on when to use this tool versus alternatives. The description lacks context about prerequisites, typical use cases, or situations where it is not appropriate.

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

bruno_get_request_detailsA

Get detailed information about a specific request without executing it

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection
requestNameYesName of the request to inspect

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided. The description only mentions that the tool does not execute the request, but fails to disclose other behavioral traits such as side effects, authentication requirements, or error handling.

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 with no unnecessary words, fully front-loading the essential 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?

Given the tool's low complexity (2 required params, no output schema), the description is minimally adequate. However, it could be improved by hinting at the nature of the returned 'detailed information'.

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% for both parameters, so the baseline is 3. The description does not add additional meaning beyond what the schema already provides for the parameters.

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 (get), the resource (detailed information about a request), and the key constraint (without executing it). This effectively distinguishes it from siblings like bruno_run_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 usage when details are needed without execution, but does not explicitly state when to use this tool versus alternatives like bruno_list_requests or bruno_run_request.

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

bruno_health_checkA

Check the health status of the Bruno MCP server and Bruno CLI

ParametersJSON Schema
NameRequiredDescriptionDefault
includeMetricsNoInclude performance metrics in output
includeCacheStatsNoInclude cache statistics in output

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only mentions 'health status' as a read operation but does not explicitly state that it is non-destructive, idempotent, or safe.

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 concise single sentence that front-loads the purpose with no wasted words.

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 tool has no output schema, so description should clarify what the health status output contains (e.g., 'OK' or detailed diagnostics). It lacks this detail, making it adequate but incomplete.

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 documentation covers both parameters (includeMetrics, includeCacheStats) at 100%, but the description adds no extra meaning or context 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 states a specific verb ('Check') and resource ('health status of Bruno MCP server and Bruno CLI'), clearly distinguishing from sibling tools that focus on collections, requests, and environments.

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 provides clear context for use (health checking) but offers no guidance on when to use this tool versus alternatives, or any exclusions.

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

bruno_list_environmentsB

List all environments in a Bruno collection

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection

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 full burden. It merely restates the tool's purpose without adding behavior like what happens if the collection path is invalid, whether empty environments are returned, or any side effects. The phrase 'List all environments' is vague.

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, clear sentence with no unnecessary words. It is front-loaded and efficient.

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?

Given the tool's simplicity (one parameter, no output schema), the description is almost adequate but lacks information about return values (e.g., list of environment names) and error handling. It does not fully compensate for the missing output schema.

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 has 100% coverage with a single parameter described as 'Path to the Bruno collection'. The description adds no extra meaning beyond the schema, so 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 clearly states it lists all environments in a Bruno collection, using a specific verb ('List') and resource ('environments'), and distinguishes from siblings like bruno_list_requests and bruno_discover_collections which target different resources.

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 no guidance on when to use this tool versus alternatives such as bruno_validate_environment or bruno_run_collection. There is no mention of prerequisites, exclusions, or typical use cases.

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

bruno_list_requestsB

List all requests in a Bruno collection

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It only states the action without describing the output format, prerequisites (e.g., collection must exist), or error conditions. This leaves the agent uncertain about what to expect.

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 a single sentence that is clear and to the point. It could include a bit more context but is not verbose or wasteful.

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?

With one parameter and no output schema, the description is somewhat incomplete. It doesn't specify the return type (e.g., request names, IDs) or any error conditions. However, for a simple listing tool, it is minimally adequate.

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 describes the parameter 'collectionPath' with full coverage. The description does not add any additional meaning beyond the schema. 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 clearly states the verb 'List' and the resource 'requests in a Bruno collection'. It distinguishes itself from siblings like bruno_get_request_details (details) and bruno_run_request (run), so purpose is unambiguous.

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 provided on when to use this tool versus alternatives. For example, it does not mention that this tool should be used to get a list before retrieving details with bruno_get_request_details.

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

bruno_run_collectionB

Run all requests in a Bruno collection or specific folder

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection
environmentNoName or path of the environment to use
enviromentNoAlias for environment (to handle common typo)
folderPathNoSpecific folder within collection to run
envVariablesNoEnvironment variables as key-value pairs
reporterJsonNoPath to write JSON report
reporterJunitNoPath to write JUnit XML report
reporterHtmlNoPath to write HTML report
dryRunNoValidate requests without executing HTTP calls

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided. The description lacks behavioral details such as side effects, error handling, or what happens if the collection path is invalid. Only states the action without additional transparency.

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 a single, efficient sentence that front-loads the key purpose. No unnecessary words, but lacks structured 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?

Given 9 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, error conditions, or behavioral nuances for a complex 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?

Input schema has 100% description coverage for all 9 parameters, so the schema itself is detailed. The description adds minimal extra meaning beyond summarizing the tool's purpose. 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 clearly states the verb 'Run' and resource 'requests in a Bruno collection' with scope options (all or specific folder). It effectively distinguishes from sibling 'bruno_run_request' which runs a single request.

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 explicit guidance on when to use this tool versus alternatives like 'bruno_run_request' or other siblings. The description only states the action without context for selection.

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

bruno_run_requestB

Run a specific request from a Bruno collection

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection
requestNameYesName of the request to run
environmentNoName or path of the environment to use
enviromentNoAlias for environment (to handle common typo)
envVariablesNoEnvironment variables as key-value pairs
reporterJsonNoPath to write JSON report
reporterJunitNoPath to write JUnit XML report
reporterHtmlNoPath to write HTML report
dryRunNoValidate request without executing HTTP call

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden but only states 'Run a specific request'. It does not disclose that dryRun validates without executing, nor any side effects, authentication needs, or error behavior. The description is too minimal to be transparent.

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 a single, front-loaded sentence that efficiently states the tool's purpose. It could benefit from additional structure (e.g., listing key options), but it is not verbose.

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?

Given 9 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, the dry-run capability, or how it differs from bruno_run_collection. Missing critical completeness context.

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% with descriptions for each parameter (e.g., 'Path to the Bruno collection'). The tool description adds no additional semantics beyond the schema, so 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.

Purpose5/5

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

The description 'Run a specific request from a Bruno collection' uses a specific verb and resource, and clearly distinguishes from sibling tools like bruno_run_collection (which runs an entire collection) and bruno_list_requests (which lists, not executes).

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 on when to use this tool vs. alternatives (e.g., bruno_run_collection). No prerequisites or context are provided, leaving the agent to infer usage from the tool name and input schema alone.

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

bruno_validate_collectionB

Validate a Bruno collection's structure and configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection to validate

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 should disclose behavioral traits like read-only or side effects. Only a single sentence stating what it does, with no elaboration on outcomes (errors, return values, or modifications).

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?

Single sentence with no superfluous words. However, it could be more informative without increasing length significantly.

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?

Given the simplicity of the tool (one param, no output schema), the description provides the basic purpose but lacks contextual details like what validation entails or expected output, which an agent might need for correct invocation.

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 single parameter collectionPath is fully described in the schema (100% coverage). The description adds no further meaning beyond 'path to the Bruno collection', so baseline 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 a specific verb 'Validate' and resource 'Bruno collection's structure and configuration', clearly distinguishing it from siblings like run_collection or validate_environment.

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 on when to use this tool vs alternatives (e.g., before running a collection, or if wanting to validate an environment). Usage context is only implied.

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

bruno_validate_environmentB

Validate an environment file in a Bruno collection

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionPathYesPath to the Bruno collection
environmentNameYesName of the environment to validate

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It does not indicate whether validation is read-only, what happens on failure, or any side effects. The description is minimal and lacks transparency.

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 a single sentence of 7 words with no wasted words. It is appropriately sized for the tool's simplicity, though it could be slightly more structured with additional context.

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 simple validation tool with no output schema and no annotations, the description is adequate but incomplete. It does not explain what the validation result looks like or whether it throws errors, leaving gaps in context.

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 both parameters. The description does not add any additional meaning beyond 'validate an environment file', so 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 clearly states the tool validates an environment file in a Bruno collection, using a specific verb and resource. It distinguishes from siblings like bruno_validate_collection (validates whole collection) and bruno_list_environments (lists 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?

No guidance on when to use this tool versus alternatives such as bruno_validate_collection or others. There is no mention of prerequisites, expected inputs, or when not to use it.

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. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • Changedbruno_discover_collections1 field changed
      • changedInput schema / properties / maxDepth / description
        Previous value: -"Maximum directory depth to search (default: 5, max: 10)"New value: +"Maximum directory depth to search (default: 5)"
    • Changedbruno_health_check3 fields changed
      • changedInput schema / properties / includeCacheStats / description
        Previous value: -"Include cache statistics in output (optional)"New value: +"Include cache statistics in output"
      • changedInput schema / properties / includeMetrics / description
        Previous value: -"Include performance metrics in output (optional)"New value: +"Include performance metrics in output"
      • removedInput schema / required
        Removed value: -[]
    • Changedbruno_run_collection8 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Validate all requests without executing HTTP calls (optional)"New value: +"Validate requests without executing HTTP calls"
      • changedInput schema / properties / envVariables / description
        Previous value: -"Environment variables as key-value pairs (optional)"New value: +"Environment variables as key-value pairs"
      • addedInput schema / properties / enviroment
        Added value: +{
        +  "description": "Alias for environment (to handle common typo)",
        +  "type": "string"
        +}
      • changedInput schema / properties / environment / description
        Previous value: -"Name or path of the environment to use (optional)"New value: +"Name or path of the environment to use"
      • changedInput schema / properties / folderPath / description
        Previous value: -"Specific folder within collection to run (optional)"New value: +"Specific folder within collection to run"
      • changedInput schema / properties / reporterHtml / description
        Previous value: -"Path to write HTML report (optional)"New value: +"Path to write HTML report"
      • changedInput schema / properties / reporterJson / description
        Previous value: -"Path to write JSON report (optional)"New value: +"Path to write JSON report"
      • changedInput schema / properties / reporterJunit / description
        Previous value: -"Path to write JUnit XML report for CI/CD integration (optional)"New value: +"Path to write JUnit XML report"
    • Changedbruno_run_request7 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Validate request configuration without executing HTTP call (optional)"New value: +"Validate request without executing HTTP call"
      • changedInput schema / properties / envVariables / description
        Previous value: -"Environment variables as key-value pairs (optional)"New value: +"Environment variables as key-value pairs"
      • addedInput schema / properties / enviroment
        Added value: +{
        +  "description": "Alias for environment (to handle common typo)",
        +  "type": "string"
        +}
      • changedInput schema / properties / environment / description
        Previous value: -"Name or path of the environment to use (optional)"New value: +"Name or path of the environment to use"
      • changedInput schema / properties / reporterHtml / description
        Previous value: -"Path to write HTML report (optional)"New value: +"Path to write HTML report"
      • changedInput schema / properties / reporterJson / description
        Previous value: -"Path to write JSON report (optional)"New value: +"Path to write JSON report"
      • changedInput schema / properties / reporterJunit / description
        Previous value: -"Path to write JUnit XML report for CI/CD integration (optional)"New value: +"Path to write JUnit XML report"
    • Changedbruno_validate_environment1 field changed
      • changedInput schema / properties / environmentName / description
        Previous value: -"Name of the environment to validate (e.g., \"dev\", \"staging\", \"production\")"New value: +"Name of the environment to validate"
  2. 9 tool updates
    • First observedbruno_discover_collections
    • First observedbruno_get_request_details
    • First observedbruno_health_check
    • First observedbruno_list_environments
    • First observedbruno_list_requests
    • First observedbruno_run_collection
    • First observedbruno_run_request
    • First observedbruno_validate_collection
    • First observedbruno_validate_environment

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose: discovery, detail retrieval, health checking, listing, running, and validation. No two tools overlap in functionality, making it easy for an agent to select the correct one.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with the 'bruno_' prefix (e.g., bruno_discover_collections, bruno_run_request). The naming is predictable and uses the same snake_case convention throughout.

Tool Count5/5

With 9 tools, the server covers the essential operations for interacting with Bruno collections without being overwhelming. Each tool addresses a necessary action, and the count is well-scoped for the server's purpose.

Completeness5/5

The toolset provides comprehensive coverage for inspecting, running, and validating Bruno collections and environments. While it lacks create/update/delete operations, these are out of scope for a read/run-oriented server, so there are no obvious gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    A
    quality
    Not graded
    maintenance
    Enables comprehensive interaction with the BugBug test automation platform through its API. Supports running tests, monitoring execution status, managing test suites, retrieving results and screenshots, and performing batch operations through natural language commands.
    20
    2
    -
  • 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/jcr82/bruno-mcp-server'

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