Bruno▌

by jcr82
Bruno: API testing via Bruno CLI — execute requests, manage collections & environments, and generate automated test repo
Integrates with Bruno CLI to provide API testing capabilities including request execution, collection management, environment handling, and automated test report generation for development workflows and CI/CD pipelines.
best for
- / API developers testing endpoints during development
- / Teams integrating API tests into CI/CD pipelines
- / QA engineers validating API collections
capabilities
- / Run individual API requests or entire collections
- / Validate collection structure and environments
- / Generate test reports in JSON, JUnit XML, and HTML formats
- / Discover Bruno collections recursively in directories
- / List and validate environments across collections
- / Perform dry runs without making HTTP calls
what it does
Integrates Bruno CLI to let you run API tests, manage collections, and generate reports directly through MCP. Works with Bruno's .bru files for version-controlled API testing.
about
Bruno is a community-built MCP server published by jcr82 that provides AI assistants with tools and capabilities via the Model Context Protocol. Bruno: API testing via Bruno CLI — execute requests, manage collections & environments, and generate automated test repo It is categorized under developer tools. This server exposes 9 tools that AI clients can invoke during conversations and coding sessions.
how to install
You can install Bruno in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.
license
MIT
Bruno is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.
readme
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
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 /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)
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) | 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 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-server
- Add to your Claude CLI configuration file:
- Global config:
~/.claude.json - Project config:
.claude.json(in your project root)
- Global config:
{
"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.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 stdioand--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
- Verify in
FAQ
- What is the Bruno MCP server?
- Bruno is a Model Context Protocol (MCP) server profile on explainx.ai. MCP lets AI hosts (e.g. Claude Desktop, Cursor) call tools and resources through a standard interface; this page summarizes categories, install hints, and community ratings.
- How do MCP servers relate to agent skills?
- Skills are reusable instruction packages (often SKILL.md); MCP servers expose live capabilities. Teams frequently combine both—skills for workflows, MCP for APIs and data. See explainx.ai/skills and explainx.ai/mcp-servers for parallel directories.
- How are reviews shown for Bruno?
- This profile displays 10 aggregated ratings (sample rows for discoverability plus signed-in user reviews). Average score is about 4.5 out of 5—verify behavior in your own environment before production use.
Ratings
4.5★★★★★10 reviews- ★★★★★Shikha Mishra· Oct 10, 2024
Bruno is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
- ★★★★★Piyush G· Sep 9, 2024
We evaluated Bruno against two servers with overlapping tools; this profile had the clearer scope statement.
- ★★★★★Chaitanya Patil· Aug 8, 2024
Useful MCP listing: Bruno is the kind of server we cite when onboarding engineers to host + tool permissions.
- ★★★★★Sakshi Patil· Jul 7, 2024
Bruno reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
- ★★★★★Ganesh Mohane· Jun 6, 2024
I recommend Bruno for teams standardizing on MCP; the explainx.ai page compares cleanly with sibling servers.
- ★★★★★Oshnikdeep· May 5, 2024
Strong directory entry: Bruno surfaces stars and publisher context so we could sanity-check maintenance before adopting.
- ★★★★★Dhruvi Jain· Apr 4, 2024
Bruno has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
- ★★★★★Rahul Santra· Mar 3, 2024
According to our notes, Bruno benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.
- ★★★★★Pratham Ware· Feb 2, 2024
We wired Bruno into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
- ★★★★★Yash Thakker· Jan 1, 2024
Bruno is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.