A CLI client and MCP server for Backstage, built in Rust.
Backstage has a great Web UI and an official CLI for plugin development, but no management CLI for day-to-day catalog operations. bsctl fills that gap.
| bsctl | Backstage Web UI | @backstage/cli | |
|---|---|---|---|
| Catalog CRUD | Yes | Yes | No |
| Template execution | Yes (with --wait) |
Yes | No |
| Scriptable / CI-friendly | Yes | No | No |
| MCP for AI agents | Yes (client-side) | No | No |
| Custom commands per plugin | Yes (.bsctl.yaml) |
No | No |
| Requires Backstage changes | No | — | — |
Backstage also has an official MCP plugin (experimental) that runs as a server-side backend plugin. bsctl takes the opposite approach:
- bsctl: Client-side.
cargo install bsctland you're done. No Backstage deployment needed. - Official plugin: Server-side. Requires installing a backend plugin and redeploying Backstage.
Both are useful — the official plugin is better for shared team MCP endpoints, bsctl is better for individual developer workflows and CI/CD.
- Catalog — List, get, register, unregister, refresh, facets with filtering, sorting, and pagination
- Search — Full-text search across the catalog
- Templates — Describe parameter schemas, run with
--wait, cancel tasks - Auth — Guest login, OAuth browser flow, static tokens, JWT expiry detection
- Plugins — Extend with custom commands via
.bsctl/plugins.yaml - Custom Columns — Per-type column views with
.bsctl/columns/, auto-generated from entities - MCP — 14 tools for AI agent integration, including custom plugin commands
- Output — Table (terminal-width-aware), JSON, jsonpath
cargo install bsctl# Configure and authenticate
bsctl config set-context dev --base-url http://localhost:7007
bsctl login -p guest
# Explore the catalog
bsctl catalog list
bsctl catalog list -t service --sort name
bsctl catalog get component:my-service
bsctl catalog facets spec.type
bsctl search query "payment"
# Work with templates
bsctl template list
bsctl template describe create-react-app
bsctl template run create-react-app -p name=my-app --wait- Command Reference — All commands with examples
- Authentication — Auth methods and configuration
- Plugin System — Custom commands via
.bsctl.yaml - Custom Columns — Per-type column views
{
"mcpServers": {
"backstage": {
"command": "bsctl",
"args": ["mcp"],
"env": { "BSCTL_BASE_URL": "http://localhost:7007" }
}
}
}14 tools: login, catalog_list, catalog_get, catalog_refresh, catalog_register, catalog_unregister, catalog_facets, search, template_list, template_describe, template_run, template_status, template_cancel, plugin_call.
MIT