Bruno MCP Server
Allows AI agents to discover, inspect, and run API requests stored in Bruno collections locally, using the Bruno CLI.
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 Serverlist all API requests in the collection"
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 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.

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
.brufiles while preserving the exact raw contents.Process Sandbox: Executes requests by calling your project-local
@usebruno/clidirectly 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-collectionClient Configuration
1. Cursor
To configure the server in Cursor, open Settings -> Features -> MCP, click + Add New MCP Tool, and fill in the details:
Name:
brunoType:
stdioCommand:
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:
Start the Mock Server:
node fixtures/demo/server.jsIntroduce a Bug: Open
fixtures/demo/server.jsand changepayload.emailtopayload.mailin the registration handler.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."
Watch it Heal: The AI agent will call the MCP tool, detect the
400failure, inspectserver.js, fix the typo back topayload.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 toolsget_bruno_request_detailB
Get structured details and raw content of a specific Bruno request file.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Optional absolute path to the Bruno collection root. | |
| request_name | Yes | The name of the request (slash-separated relative path without extension, e.g. 'users/get-profile', or unique file basename). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Optional absolute path to the Bruno collection root. Defaults to the configured project path or current working directory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Optional environment name (e.g. 'local', 'staging'). | |
| env_vars | No | Optional key-value overrides for environment variables. | |
| project_path | No | Optional absolute path to the Bruno collection root. | |
| request_name | Yes | The name of the request to run. |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
get_bruno_request_detail - First observed
list_bruno_requests - First observed
run_bruno_request
TDQS
Scored across 3 tools
Each tool has a distinct purpose: listing files, getting details, and executing requests. There is no overlap in functionality.
All tool names follow the same verb_bruno_request pattern, making the naming predictable and consistent.
Three tools is a well-scoped, focused set for a Bruno request server. Each tool earns its place.
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
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
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Give your AI agents trusted access to the full Postman platform.
Serves your design system and coding standards to coding agents, so they stop guessing.
Securely search, create, and organize your Mem notes and collections from AI assistants.
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.53MIT

blackmount-mcpofficial
AlicenseNot gradedqualityAmaintenanceEnables AI assistants to access and search local browser history, bookmarks, open tabs, and downloads for personalized context.MIT- AlicenseNot gradedqualityDmaintenanceExposes Bruno CLI as tools for AI agents, allowing them to discover, inspect, and execute Bruno API collections through the MCP protocol.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to scan source code for secrets like API keys and passwords locally without network requests.2Apache 2.0
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/kodlbegiko/bruno-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server