Bruno MCP Server
The Bruno MCP Server integrates Bruno CLI with the Model Context Protocol to provide API testing, collection management, and reporting capabilities through Claude.
API Testing & Execution: Run individual requests or entire collections with optional environment variables, dry-run validation without HTTP calls, and runtime configuration overrides.
Collection Management: List and inspect requests, recursively discover collections via bruno.json files, validate collection structure and syntax, and view detailed request information (method, URL, headers, body, tests) without execution.
Environment Management: List, validate, and switch between environments (dev, staging, production) with proper structure and variable definitions.
Reporting & CI/CD Integration: Generate test reports in JSON, JUnit XML, and HTML formats with interactive Vue.js interface for integration with Jenkins, GitHub Actions, and GitLab CI.
Monitoring & Diagnostics: Health checks with server status verification, Bruno CLI availability, performance metrics tracking, and cache statistics.
Security: Path validation against directory traversal, input sanitization for command injection protection, secret masking in logs/outputs, and environment validation for safe variable characters.
Provides integration with Bruno CLI for API testing and collection management, including running individual requests or entire collections, managing environments, generating test reports in multiple formats (JSON, JUnit, HTML), validating collections, and introspecting request configurations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bruno MCP Serverrun the 'Get Users' request from my API collection using the staging environment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bruno MCP Server
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 (
.brufiles)
๐ 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 |
Request Execution | "Run the 'Get User' request from |
Validation (Dry Run) | "Validate the 'Create User' request from |
Full Run & Reporting | "Run all tests in my API collection at |
Environment Check | "List all environments in |
๐ฅ Installation (Claude CLI)
Option 1: Using Claude MCP Add (Recommended)
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) |
|
Project-Scoped (team projects) |
|
Note: The
--transport stdioflag and the--separator are required. The-yflag automatically accepts npx prompts.
Option 2: Manual Installation
Install the package globally:
npm install -g bruno-mcp-serverAdd to your Claude CLI configuration file:
Global config:
~/.claude.jsonProject config:
.claude.json(in your project root)
{
"mcpServers": {
"bruno": {
"command": "npx",
"args": ["bruno-mcp-server"]
}
}
}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.jsonYou 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 devProject 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 fileTest 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 stdioand--separatorCorrect:
claude mcp add --transport stdio bruno -- npx -y bruno-mcp-serverWrong:
claude mcp add bruno-mcp-server
MCP Server Not Showing Up in Claude
Verify installation:
cat ~/.claude.json(or project's.claude.jsonif using--scope project)Restart Claude Desktop/CLI after installation
Check the server is configured correctly in the JSON file
npx Prompts During Installation
Always use the
-yflag:npx -y bruno-mcp-serverThis auto-accepts installation prompts
Bruno CLI Not Found
# Verify Bruno CLI installation
npx bru --version
# Server uses local installation in node_modules/.bin/bruCollection Not Found
Use absolute paths
Verify
bruno.jsonexists in collection directoryCheck 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
Links
Available Tools
9 toolsbruno_discover_collectionsB
Discover Bruno collections in a directory tree
| Name | Required | Description | Default |
|---|---|---|---|
| searchPath | Yes | Directory path to search for Bruno collections | |
| maxDepth | No | Maximum directory depth to search (default: 5) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection | |
| requestName | Yes | Name of the request to inspect |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| includeMetrics | No | Include performance metrics in output | |
| includeCacheStats | No | Include cache statistics in output |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection | |
| environment | No | Name or path of the environment to use | |
| enviroment | No | Alias for environment (to handle common typo) | |
| folderPath | No | Specific folder within collection to run | |
| envVariables | No | Environment variables as key-value pairs | |
| reporterJson | No | Path to write JSON report | |
| reporterJunit | No | Path to write JUnit XML report | |
| reporterHtml | No | Path to write HTML report | |
| dryRun | No | Validate requests without executing HTTP calls |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection | |
| requestName | Yes | Name of the request to run | |
| environment | No | Name or path of the environment to use | |
| enviroment | No | Alias for environment (to handle common typo) | |
| envVariables | No | Environment variables as key-value pairs | |
| reporterJson | No | Path to write JSON report | |
| reporterJunit | No | Path to write JUnit XML report | |
| reporterHtml | No | Path to write HTML report | |
| dryRun | No | Validate request without executing HTTP call |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection to validate |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| collectionPath | Yes | Path to the Bruno collection | |
| environmentName | Yes | Name of the environment to validate |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.0- Changed
bruno_discover_collections1 field changed- changed
Input schema / properties / maxDepth / descriptionPrevious value: -"Maximum directory depth to search (default: 5, max: 10)"New value: +"Maximum directory depth to search (default: 5)"
- Changed
bruno_health_check3 fields changed- changed
Input schema / properties / includeCacheStats / descriptionPrevious value: -"Include cache statistics in output (optional)"New value: +"Include cache statistics in output" - changed
Input schema / properties / includeMetrics / descriptionPrevious value: -"Include performance metrics in output (optional)"New value: +"Include performance metrics in output" - removed
Input schema / requiredRemoved value: -[]
- Changed
bruno_run_collection8 fields changed- changed
Input schema / properties / dryRun / descriptionPrevious value: -"Validate all requests without executing HTTP calls (optional)"New value: +"Validate requests without executing HTTP calls" - changed
Input schema / properties / envVariables / descriptionPrevious value: -"Environment variables as key-value pairs (optional)"New value: +"Environment variables as key-value pairs" - added
Input schema / properties / enviromentAdded value: +{ + "description": "Alias for environment (to handle common typo)", + "type": "string" +} - changed
Input schema / properties / environment / descriptionPrevious value: -"Name or path of the environment to use (optional)"New value: +"Name or path of the environment to use" - changed
Input schema / properties / folderPath / descriptionPrevious value: -"Specific folder within collection to run (optional)"New value: +"Specific folder within collection to run" - changed
Input schema / properties / reporterHtml / descriptionPrevious value: -"Path to write HTML report (optional)"New value: +"Path to write HTML report" - changed
Input schema / properties / reporterJson / descriptionPrevious value: -"Path to write JSON report (optional)"New value: +"Path to write JSON report" - changed
Input schema / properties / reporterJunit / descriptionPrevious value: -"Path to write JUnit XML report for CI/CD integration (optional)"New value: +"Path to write JUnit XML report"
- Changed
bruno_run_request7 fields changed- changed
Input schema / properties / dryRun / descriptionPrevious value: -"Validate request configuration without executing HTTP call (optional)"New value: +"Validate request without executing HTTP call" - changed
Input schema / properties / envVariables / descriptionPrevious value: -"Environment variables as key-value pairs (optional)"New value: +"Environment variables as key-value pairs" - added
Input schema / properties / enviromentAdded value: +{ + "description": "Alias for environment (to handle common typo)", + "type": "string" +} - changed
Input schema / properties / environment / descriptionPrevious value: -"Name or path of the environment to use (optional)"New value: +"Name or path of the environment to use" - changed
Input schema / properties / reporterHtml / descriptionPrevious value: -"Path to write HTML report (optional)"New value: +"Path to write HTML report" - changed
Input schema / properties / reporterJson / descriptionPrevious value: -"Path to write JSON report (optional)"New value: +"Path to write JSON report" - changed
Input schema / properties / reporterJunit / descriptionPrevious value: -"Path to write JUnit XML report for CI/CD integration (optional)"New value: +"Path to write JUnit XML report"
- Changed
bruno_validate_environment1 field changed- changed
Input schema / properties / environmentName / descriptionPrevious value: -"Name of the environment to validate (e.g., \"dev\", \"staging\", \"production\")"New value: +"Name of the environment to validate"
9 tool updates
- First observed
bruno_discover_collections - First observed
bruno_get_request_details - First observed
bruno_health_check - First observed
bruno_list_environments - First observed
bruno_list_requests - First observed
bruno_run_collection - First observed
bruno_run_request - First observed
bruno_validate_collection - First observed
bruno_validate_environment
TDQS
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.
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.
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.
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
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
Direct access to Cypress tests results and accessibility reports in your AI workflow.
End-to-end API testing โ generate and run tests from OpenAPI, curl, Postman, or real user traffic.
Drive OctoPerf load testing from any AI agent: import, edit, validate, run scenarios, read metrics.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes Bruno API collections as Model Context Protocol (MCP) tools, allowing AI agents and MCP clients to interact with your API collections.173MIT
- AlicenseAqualityNot gradedmaintenanceEnables 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.202-
- AlicenseNot gradedqualityDmaintenanceExposes Bruno CLI as tools for AI agents, allowing them to discover, inspect, and execute Bruno API collections through the MCP protocol.1MIT
- AlicenseAqualityBmaintenanceEnables AI coding assistants to discover, inspect, and run API requests in Bruno collections locally, keeping all data private.340MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jcr82/bruno-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server