B.O.R.I.S. MCP to CLI converter.
bmcp lets local AI coding agents query the remote BORIS MCP server hosted
on AWS AgentCore through a regular CLI. It handles SigV4 auth, tool discovery,
schema caching, validation, and MCP text-envelope unwrapping.
The MCP protocol is brittle in real-world use, especially when the server is behind real auth. Wrapping the remote MCP server as a CLI bypasses several rough edges at once:
- Auth and transport are handled once, in one place. SigV4 signing, region inference, and the AWS credential chain live in this binary instead of inside each harness's MCP client.
- One-step config and install.
bmcp initsaves config;bmcp install <claude-code|codex|opencode|cursor|kiro|all>drops a small instructions file into each harness. No per-harness MCP server registration to maintain. - No separate skill to distribute. The installer emits a single
BORIS.mdwhose contents are generated from the live tool catalog, so updating agent guidance for a new tool isbmcp sync— not a new release of a Claude skill, Cursor rule, or Codex prompt. - Cheaper context. Native MCP clients load every tool's full JSON schema
into the agent's context on every turn. With
bmcpthe agent sees a short tool list up front and callsbmcp describe <tool>only when it actually needs the schema — one tool at a time, on demand.
brew install sirob-tech/tap/bmcpOr tap first:
brew tap sirob-tech/tap
brew install bmcpcurl -fsSL https://raw.githubusercontent.com/sirob-tech/boris-mcp-cli/main/install.sh | shPin a version with BMCP_VERSION=v0.1.0 or choose an install directory with
BMCP_INSTALL_DIR=/usr/local/bin.
Use either Homebrew or the install script for routine upgrades. The install
script defaults to ~/.local/bin, while Homebrew installs under its own prefix.
If both exist, whichever directory appears first on PATH wins, so a successful
Homebrew upgrade may still leave an older install-script binary active.
Check all installed copies and the active version with:
which -a bmcp
bmcp versionWhen switching to Homebrew, remove a previous install-script copy and clear the shell command cache:
rm ~/.local/bin/bmcp
hash -rOnly remove that path after confirming it is the old install-script copy. The
install script verifies the exact binary it writes and warns when another copy
takes precedence on PATH.
Download the tarball for your platform from
GitHub Releases and
verify it against checksums.txt:
bmcp-darwin-amd64.tar.gz
bmcp-darwin-arm64.tar.gz
bmcp-linux-amd64.tar.gz
bmcp-linux-arm64.tar.gz
Extract and place bmcp on your PATH.
For development:
go build -o bmcp ./cmd/bmcpPut the binary somewhere on PATH, for example:
ln -s "$(pwd)/bmcp" ~/.local/bin/bmcpRun first-time setup:
bmcp init --url <url> --profile <aws-profile>--profile is optional; if omitted, the AWS SDK default credential chain is
used. The BORIS MCP server requires AWS credentials for any account in the AWS
Organization. init saves config, syncs the remote tool catalog, and in
interactive sessions offers to install agent instructions for detected
harnesses.
Harness detection checks for a known executable on PATH or an existing config
directory such as ~/.claude, ~/.codex, ~/.config/opencode, ~/.cursor,
or ~/.kiro. Kiro is detected from either kiro-cli or kiro on PATH. Each detected harness is
prompted separately and defaults to yes. Use --non-interactive to disable
prompts.
Additional configuration flags:
--region <region>: override the SigV4 region.--service <service>: override the SigV4 service.--allow-http: allow non-localhosthttp://BORIS URLs.
Check setup:
bmcp doctorThe installer does not register BORIS as a local MCP server. It writes
instructions that teach agents to call the existing bmcp CLI and include
the currently synced BORIS tool catalog. Run bmcp init first so the
installer has config and a tool catalog to read.
User-global install is the default:
bmcp install claude-code
bmcp install codex
bmcp install opencode
bmcp install cursor
bmcp install kiro
bmcp install allProject-local install:
bmcp install claude-code --scope project
bmcp install codex --scope project
bmcp install opencode --scope project
bmcp install cursor --scope project
bmcp install kiro --scope projectUser-scope targets:
- Claude Code:
~/.claude/BORIS.md, referenced from~/.claude/CLAUDE.md - Codex:
~/.codex/BORIS.md, inlined into a managed block in~/.codex/AGENTS.md - OpenCode:
~/.config/opencode/BORIS.md, inlined into a managed block in~/.config/opencode/AGENTS.md - Cursor:
~/.cursor/rules/boris.mdc - Kiro:
~/.kiro/steering/boris.md
Project-scope targets:
- Claude Code:
./BORIS.md, referenced from./CLAUDE.md - Codex:
./BORIS.md, inlined into a managed block in./AGENTS.md - OpenCode:
./BORIS.md, inlined into a managed block in./AGENTS.md(shared with Codex) - Cursor:
./.cursor/rules/boris.mdc - Kiro:
./.kiro/steering/boris.md
Existing files are modified in place. When a file changes, a timestamped
.bak-<timestamp> backup is created and printed.
Refresh tools and installed instructions:
bmcp syncsync refreshes the local tool cache and updates any existing BORIS instruction
files it finds, without installing new harnesses.
bmcp list
bmcp describe <tool>
bmcp <tool> --arg value
bmcp call <tool> '{"arg":"value"}'Successful tool calls unwrap MCP text envelopes internally and print the useful
payload directly. Use --pretty to format JSON payloads and --raw to inspect
the original MCP envelope.