developer-tools

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.

github stars

2

Works with version-controlled .bru files91% test coverageDry run mode for validation without HTTP calls

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

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

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

GoalSample 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.

ScopeCommand
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 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.
MCP server reviews

Ratings

4.510 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.