Skip to main content
Glama
kodlbegiko

Bruno MCP Server

by kodlbegiko

Bruno MCP Server

A local-first, secure Model Context Protocol (MCP) server that enables AI coding assistants (like Cursor, Claude Desktop, and Aider) to discover, inspect, and run API requests in your Bruno collections entirely locally.

Bruno MCP Server self-healing demo


Key Features

  • Local-First & Private: Executes API calls locally on your machine using your own local Bruno files and environments. No credentials or source files are sent to a cloud service.

  • Universal Connection (MCP): Standardizes how AI coding agents query, analyze, and verify your back-end APIs.

  • Tolerant Parsing: Extracts metadata (URL, headers, body types, bearer tokens) from .bru files while preserving the exact raw contents.

  • Process Sandbox: Executes requests by calling your project-local @usebruno/cli directly with no shell interpolation, protecting against command injection.


Related MCP server: blackmount-mcp

Installation

Prerequisites

  • Node.js >= 20.0.0

  • A Bruno collection initialized in your workspace.

Running from source

The npm package name bruno-mcp-server is currently owned by another project. Clone this repository to ensure you run this implementation:

git clone https://github.com/kodlbegiko/bruno-mcp-server.git
cd bruno-mcp-server
npm ci
npm run build
node dist/index.js --project-path /absolute/path/to/your/bruno-collection

Client Configuration

1. Cursor

To configure the server in Cursor, open Settings -> Features -> MCP, click + Add New MCP Tool, and fill in the details:

  • Name: bruno

  • Type: stdio

  • Command: node /absolute/path/to/bruno-mcp-server/dist/index.js --project-path /absolute/path/to/your/bruno-collection

2. Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "bruno": {
      "command": "node",
      "args": [
        "/absolute/path/to/bruno-mcp-server/dist/index.js",
        "--project-path",
        "/absolute/path/to/your/bruno-collection"
      ]
    }
  }
}

Try the Self-Healing Demo

To see the AI agent automatically debug and heal code using this MCP server:

  1. Start the Mock Server:

    node fixtures/demo/server.js
  2. Introduce a Bug: Open fixtures/demo/server.js and change payload.email to payload.mail in the registration handler.

  3. Ask the AI: In Cursor or Claude, ask:

    "I just modified the register endpoint in fixtures/demo/server.js. Please use the Bruno MCP tool to run the 'Register' request in fixtures/demo/ to check if it passes."

  4. Watch it Heal: The AI agent will call the MCP tool, detect the 400 failure, inspect server.js, fix the typo back to payload.email, re-run the request, and confirm the test passes!


Tool Reference

1. list_bruno_requests

Discovers and lists all .bru request files inside the collection root.

  • Inputs:

    • project_path (string, optional)

  • Output:

    • A JSON array listing request names, paths, and detected HTTP methods.

2. get_bruno_request_detail

Extracts structured request details (URL, headers, body, auth parameters) and raw content.

  • Inputs:

    • request_name (string, required) - The name (relative path without extension, or unique basename) of the request.

    • project_path (string, optional)

3. run_bruno_request

Runs a request locally through the Bruno CLI and captures status and outputs.

  • Inputs:

    • request_name (string, required)

    • project_path (string, optional)

    • env (string, optional) - Target environment defined in your collection.

    • env_vars (object, optional) - Key-value overrides for environment variables.


Development & Contribution

See CONTRIBUTING.md for local setup, testing, and contribution protocols.

License

MIT License. See LICENSE for details.

Available Tools

3 tools
get_bruno_request_detailB

Get structured details and raw content of a specific Bruno request file.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathNoOptional absolute path to the Bruno collection root.
request_nameYesThe name of the request (slash-separated relative path without extension, e.g. 'users/get-profile', or unique file basename).

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description is the sole source of behavioral information. It states the tool gets details and raw content but does not disclose whether it is read-only, what errors may occur (e.g., request not found), the structure of the returned data, or any side effects. This is a significant transparency gap for an agent.

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, concise sentence that conveys the core function without redundancy. It is efficiently structured and front-loaded with the verb and resource.

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?

The tool is relatively simple with two parameters and no output schema, but the description is too sparse to be complete. It does not explain what 'structured details' includes, the format of 'raw content', or any prerequisites. The lack of an output schema increases the need for description to clarify return value semantics, which it fails to do.

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 covers 100% of the parameters, with descriptions for both 'request_name' and 'project_path', including an example for request_name. The tool description adds no additional parameter information, so the baseline of 3 is appropriate; the schema already provides sufficient semantics.

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 identifies the action (get), the resource (specific Bruno request file), and the type of output (structured details and raw content). This distinguishes it from sibling tools like list_bruno_requests (listing all) and run_bruno_request (executing), making its purpose 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?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that this is for a single request while list_bruno_requests is for listing, or that run_bruno_request executes rather than retrieves details. Sibling names provide context, but the description itself offers no usage directives.

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

list_bruno_requestsB

List all Bruno request files in the collection root. Optionally specify a project_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathNoOptional absolute path to the Bruno collection root. Defaults to the configured project path or current working directory.

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavioral traits. It indicates a read-only listing operation but does not mention behaviors like recursive search, file ordering, or output format. This leaves the agent uncertain about what exactly will be returned.

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 remarkably concise, consisting of two short sentences. It front-loads the core purpose and adds the optional parameter in a natural way, with no wasted words.

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?

The tool is simple (one optional param, no output schema), but the description fails to specify what information is returned (e.g., filenames, full paths, metadata) or whether the listing is recursive. Given the lack of an output schema, this is a meaningful gap for an agent.

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 already provides a full description for the only parameter (project_path) with 100% coverage. The tool description adds the context 'collection root' but does not go beyond the schema in explaining the parameter's meaning or behavior.

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's function with a specific verb and resource: 'List all Bruno request files in the collection root.' It is distinct from sibling tools 'get_bruno_request_detail' and 'run_bruno_request', which focus on viewing details and executing requests respectively.

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 gives clear context that this tool lists files at the collection root and mentions the optional project_path parameter. However, it does not explicitly explain when to use this tool over the siblings, such as saying 'use this to browse available requests before running them.'

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

run_bruno_requestB

Execute a Bruno API request using the local Bruno CLI and get status and outputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoOptional environment name (e.g. 'local', 'staging').
env_varsNoOptional key-value overrides for environment variables.
project_pathNoOptional absolute path to the Bruno collection root.
request_nameYesThe name of the request to run.

TDQS

B3.4/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 the full burden. It mentions 'using the local Bruno CLI' and 'get status and outputs,' but does not disclose potential side effects, prerequisites (e.g., project_path), or the format of outputs. This is insufficient for an execution tool.

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 concise sentence that front-loads the action and outcome. It contains no filler or repetition.

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?

With no output schema and no annotations, the description should clarify expected outputs and execution context. It vaguely says 'get status and outputs' but does not explain the structure or behavior for optional parameters, making it incomplete for a tool with moderate complexity.

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 descriptions for all parameters, so the baseline is 3. The tool description adds no parameter-specific semantics beyond what the schema already provides.

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 ('Execute') and resource ('Bruno API request'), clarifies it uses the local CLI, and mentions status/output. This clearly distinguishes it from siblings that list requests or get request details.

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 does not explicitly state when to use this tool versus alternatives. However, the tool name and sibling names imply that this is for executing a request, while siblings are for listing/detailing, so usage is implied but not stated.

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. 3 tool updatesv0.1.0
    • First observedget_bruno_request_detail
    • First observedlist_bruno_requests
    • First observedrun_bruno_request

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct purpose: listing files, getting details, and executing requests. There is no overlap in functionality.

Naming Consistency5/5

All tool names follow the same verb_bruno_request pattern, making the naming predictable and consistent.

Tool Count5/5

Three tools is a well-scoped, focused set for a Bruno request server. Each tool earns its place.

Completeness4/5

The server covers the core workflow of listing, inspecting, and running requests. Missing mutation operations (create/update/delete) are a minor gap but not critical for the server's apparent purpose.

Maintenance

ActivitySlowing
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
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to access and search local browser history, bookmarks, open tabs, and downloads for personalized context.
    MIT
  • 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/kodlbegiko/bruno-mcp-server'

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