Skip to content
WIP

This guide is a work in progress. Barry is also a work in progress.

Install external bags

Use this when you want a bag that does not ship with Barry: one from a repository, an npm package, or a remote MCP server.

Barry ships with a core set of bags, but most of what you add comes from outside. The examples use bags that are public today.

  • Build a Barry. These commands act as the bonanza identity from that guide; use your own identity’s command in its place.
  • For a bag whose server needs a key, set up the vault first, as Manage secrets shows.

Point barry install at a bag’s Git repository. Barry clones it into ~/repos/bags, builds it, and registers it under the name its bag.yaml declares:

Terminal
barry install https://github.com/perintyler/linear-bag
bonanza pack linear

Installing is machine-wide and belongs to barry; packing is per-identity. Once packed, start a session that grants the bag’s tools:

Terminal
bonanza session start --traits linear

barry install also takes a local directory, an npm package, or a remote MCP URL. Use --as <name> to register under a different name.

Many external bags wrap a service’s own MCP server rather than shipping tool code. The bag declares the server under mcp-servers: in its bag.yaml, and Barry runs it and serves its tools through the same policy as everything else. The three forms, each from a public bag:

A command-launched server, from the linear bag:

mcp-servers:
linear-mcp:
command: npx
args: ["-y", "mcp-remote", "https://mcp.linear.app/mcp", "--header", "Authorization: Bearer ${LINEAR_API_KEY}"]
env: [LINEAR_API_KEY]

An HTTP server, from the clickhouse bag:

mcp-servers:
clickhouse:
type: http
url: https://mcp.clickhouse.cloud/mcp

A server launched through uvx, from the temporal bag:

mcp-servers:
temporal:
command: uvx
args: ["temporal-mcp-server"]

A server must declare a url or a command. Its name becomes the namespace its tools live under. A bag whose server needs a key references it through the identity’s secrets, so install it, add the secret, and pack. Barry asks for the key at a masked prompt, stores it in the vault, and binds it to the identity in one step:

Terminal
barry install https://github.com/perintyler/linear-bag
bonanza identity secret set LINEAR_API_KEY --in vault
bonanza pack linear

To serve a local bag over MCP on its own, for testing, or as a reference server, use barry bag serve:

Terminal
barry bag serve linear --port 9878

This runs the bag’s tools over MCP at 127.0.0.1:9878 without packing it onto an identity.

These are public today and make good first installs. The range is the point: Barry is not only for coding.

  • linear manages Linear issues.
  • clickhouse runs ClickHouse queries, inspects schemas, and manages infrastructure.
  • temporal orchestrates Temporal workflows.
  • media inspects, identifies, and converts images, video, audio, and documents.
  • amazon-commerce and ebay-commerce drive marketplace listings and research.
  • ableton controls Ableton Live for music production.
  • mermaid, markdown, tts, and calendar are small single-purpose utilities, each at github.com/perintyler/<name>-bag.

Pack commerce bags onto one identity and music bags onto another, and each Barry becomes a different working persona. Primitives shows real identities built this way.

To confirm the identity packed the bag, run:

Terminal
bonanza identity show

The Bags: line lists linear. To see what the bag registered, run barry bag show linear: it prints the bag’s path, its MCP servers, and its traits.

  • A server needs you to sign in. Run bonanza bag auth <name> with the bag’s name to sign in to its MCP server.
  • The server’s tools fail for want of a key. Run bonanza identity check; a line that reports missing names the key the identity lacks. See A secret is not loading.
  • The session has no tools from the bag. Packing does not grant tools; start the session with --traits linear.