LabscoMCP early access ↗
OsticoMCP SERVER

Bruno MCP

Let an agent write, edit and run Bruno API collections — leaving files your CI and your team's Bruno app can both use.

by Ostico ↗API Specifications & HTTP ToolingCommunity

LABSCO SUMMARY

The agent stops guessing the file format, because the server writes the bytes.

A model writing .bru by hand gets the shape right and the details wrong, and Bruno does not complain — it reads the keys it recognises and ignores the rest, so a request that looks complete can test nothing. This server imports Bruno's own grammar package, and every file it writes is parsed back with Bruno's own reader in the test suite. Edits are partial merges, so a field the writer does not model yet is not silently dropped on the next change.

What it is

An independent MCP server for Bruno collections that authors them as well as running them. It writes .bru and .yml files through Bruno's own grammar package rather than from a model's memory, and runs the requests in-process — no bru CLI, no Bruno GUI, no shelling out.

What you get

  • Requests written by the server instead of guessed: create_request, modify_request with partial-merge so untouched fields survive, delete_request, and read_request returning structured JSON identical for both formats
  • Environments as a first-class thing — create_environment, update_environment merging into what exists, set_environment_variable, remove_environment_variable, and read_environment with each variable's disabled and secret flags
  • Scripts attached to a request: add_test_script for pre-request, post-response or tests, and remove_script to take one back off without touching the rest
  • Whole suites in one call — create_crud_requests writes list, get, create, update and delete inheriting the collection's auth, and create_test_suite builds related requests with dependency ordering
  • run_collection executes the requests and their test scripts, takes an ordered subset if you pass one, and reports per-request pass or fail
  • Collections and inventory: create_collection, list_collections from Bruno's workspace.yml, list_requests returning absolute paths, get_collection_stats with counts by method and per-request detail
  • Execution groups inside a single run — separate identities, environments, variable stores and cookie jars, serial or concurrent, with no leakage between them
  • Auth exchanged in memory: bearer, basic, api-key, digest, OAuth 2.0 client-credentials and password grants, or inherited from the collection or folder

Requirements

Node.js 22 or newer — CI tests 22.x and 24.x — and somewhere on disk for the collection. No account and no key. npx -y @ostico/bruno-mcp over stdio is the whole install; npm install @ostico/bruno-mcp pins a version instead. Both Bruno formats work and the server detects which one it is looking at: .yml opencollection and legacy .bru. What it leaves behind is a normal Bruno collection — bru run reads it in CI and the Bruno app opens it. Requests are SSRF-checked on every redirect hop, file paths are confined, and scripts run in a forked sandbox with a scrubbed environment.

Setup effort

One command — npx -y @ostico/bruno-mcp