by jcr82
Bruno: API testing via Bruno CLI — execute requests, manage collections & environments, and generate automated test repo
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.
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.
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.
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.
Add new capabilities to Claude beyond text generation
Example
Access external data sources, execute code, interact with tools and services
Transform Claude from chatbot to action-taking agent
Provide Claude with access to relevant context and data
Example
Load project documentation, access knowledge bases, query databases
Get more accurate, context-aware responses
Automate multi-step workflows combining AI and external tools
Example
Research → Summarize → Create document → Send notification
Complete complex tasks end-to-end without manual steps
Share your MCP server with the developer community
Bruno is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
Bruno has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
We wired Bruno into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
Strong directory entry: Bruno surfaces stars and publisher context so we could sanity-check maintenance before adopting.
According to our notes, Bruno benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.
Bruno is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
Strong directory entry: Bruno surfaces stars and publisher context so we could sanity-check maintenance before adopting.
Bruno is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
We evaluated Bruno against two servers with overlapping tools; this profile had the clearer scope statement.
Bruno reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
showing 1-10 of 30
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.
.bru files)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).
dev, staging, production)| 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" |
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.
npm install -g bruno-mcp-server
~/.claude.json.claude.json (in your project root){
"mcpServers": {
"bruno": {
"command": "npx",
"args": ["bruno-mcp-server"]
}
}
}
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"
bruno_run_request - Execute a Single Requestbruno_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
})
bruno_run_collection - Execute a Collectionbruno_run_collection({
collectionPath: "/path/to/collection",
environment: "dev", // optional
folderPath: "auth", // optional - run specific folder
envVariables: { }, // optional
reporterJson: "./report.json", // optional
dryRun: false // optional
})
bruno_list_requests - List All Requestsbruno_list_requests({
collectionPath: "/path/to/collection"
})
bruno_discover_collections - Find Collectionsbruno_discover_collections({
searchPath: "/path/to/workspace",
maxDepth: 5 // optional (default: 5, max: 10)
})
bruno_list_environments - List Environmentsbruno_list_environments({
collectionPath: "/path/to/collection"
})
bruno_validate_environment - Validate Environmentbruno_validate_environment({
collectionPath: "/path/to/collection",
environmentName: "dev"
})
bruno_get_request_details - Inspect Requestbruno_get_request_details({
collectionPath: "/path/to/collection",
requestName: "Create User"
})
bruno_validate_collection - Validate Collectionbruno_validate_collection({
collectionPath: "/path/to/collection"
})
bruno_health_check - Health Diagnosticsbruno_health_check({
includeMetrics: true, // optional
includeCacheStats: true // optional
})
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.
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"
})
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.
# 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
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
Error: "missing required argument 'commandOrUrl'"
--transport stdio and -- separatorclaude mcp add --transport stdio bruno -- npx -y bruno-mcp-serverclaude mcp add bruno-mcp-serverMCP Server Not Showing Up in Claude
Prerequisites
Time Estimate
15-60 minutes depending on server complexity
Steps
Troubleshooting
✓ Do
✗ Don't
💡 Pro Tips
Architecture
Model Context Protocol standardizes how AI hosts (Claude, Cursor) communicate with external tools and data sources through server implementations.
Protocols
Compatibility
✓ Use when
Use when you need Claude to access external data, execute actions, or integrate with tools. Best for extending AI capabilities beyond conversation.
✗ Avoid when
Avoid when native integrations exist (use official APIs directly), for real-time critical systems, or when security/compliance requires zero external dependencies.