Backstage MCP Actions

Backstage backend plugin that serves your portal's registered actions as MCP tools over HTTP

Official · Backstage TypeScript Local · Streamable HTTP Developer toolsDevOps and monitoring

102 popularity score ★ 35k ↓ 95k/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http backstage-actions http://localhost:7007/api/mcp-actions/v1
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "backstage-actions": {
      "url": "http://localhost:7007/api/mcp-actions/v1"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "backstage-actions": {
      "type": "http",
      "url": "http://localhost:7007/api/mcp-actions/v1"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.backstage-actions]
url = "http://localhost:7007/api/mcp-actions/v1"
Gemini CLITerminal
gemini mcp add --scope user --transport http backstage-actions http://localhost:7007/api/mcp-actions/v1

Settings 1

MCP_TOKEN Optional: Static external-access token you define in app-config under backend.auth.externalAccess; clients send it as Authorization: Bearer. Not needed when clients sign in with OAuth (CIMD).

What it does

MCP Actions Backend is a plugin from the Backstage project that you add to the backend of your own Backstage instance. It takes the actions other plugins have put in the Backstage Actions Registry and offers them to MCP clients as tools, over Streamable HTTP at /api/mcp-actions/v1 on the backend (http://localhost:7007/api/mcp-actions/v1 in a default local setup).

There is no fixed tool list: what a client sees depends on which plugins are installed and which ones you name under backend.actions.pluginSources. The actions Backstage documents include querying and fetching catalog entities, registering and unregistering catalog locations, validating catalog-info.yaml, running or dry-running Software Templates, reading scaffolder task logs, searching the portal, reading notifications and listing Kubernetes resources for an entity. Tool names carry the plugin ID as a prefix by default (catalog.get-catalog-entity); mcpActions.namespacedToolNames: false turns that off.

You can split the actions into several focused servers with mcpActions.servers, each with include and exclude filter rules on action IDs or attributes such as destructive. Since version 0.2.2 the default endpoint stays up and keeps exposing every registered action even when named servers are configured; before that, adding one named server removed the default endpoint (CHANGELOG). Version 0.2.0 removed the old SSE transport, so clients must use Streamable HTTP.

The plugin also emits OpenTelemetry metrics and a trace span per tool call, and from 0.2.1 it writes audit events for connections, tool discovery and tool execution.

What it needs

RuntimeNode.js

A running Backstage instance whose backend you control, with the package added via yarn to packages/backend and registered in its index.ts. Clients need either a static external-access token configured in app-config, or OAuth via Client ID Metadata Documents, which needs the New Frontend System, @backstage/plugin-auth-backend and the @backstage/plugin-auth frontend plugin.

Limits

It is not a standalone program: there is no npx or Docker command, and it only runs inside a Backstage backend. Its tools are only the actions the installed plugins register, so a portal without the catalog, scaffolder or search plugins offers none of theirs. Only Streamable HTTP is served; the SSE transport was removed in 0.2.0. Backstage calls static tokens a temporary workaround until device authentication is finished, and Dynamic Client Registration is deprecated. The default endpoint always exposes every registered action; named servers can narrow what a client is given, but not remove that endpoint.

Who it suits

Teams that already run Backstage and want assistants such as Claude, Cursor or VS Code to query their software catalog, search the portal or start Software Templates under Backstage's own auth and permissions. It is no use without a Backstage deployment you can change and redeploy. Because it can register entities and execute templates, teams that want read-only access should set up a named server that excludes destructive actions and hand clients that endpoint.

Tools 16

auth.who-am-i
Return the catalog entity and user details of the signed-in user
catalog.get-catalog-entity
Fetch one entity from the software catalog
catalog.query-catalog-entities
Find catalog entities using predicate filters
catalog.register-entity
Add a Location pointing at a remote catalog-info.yaml to the catalog
catalog.unregister-entity
Remove a Location and every entity it owns from the catalog
catalog.validate-entity
Check catalog-info.yaml content for errors
catalog.get-catalog-model-description
Describe the catalog's entity kinds, annotations, labels, tags and relations in markdown
notifications.get-notifications
List the user's notifications, unread only by default, with filters and paging
kubernetes.get-kubernetes-clusters
List the Kubernetes clusters registered in Backstage
kubernetes.get-kubernetes-resources-for-entity
Fetch live pods, deployments and services tied to a catalog entity
scaffolder.dry-run-template
Test a Software Template without making changes and return its logs
scaffolder.list-scaffolder-actions
List the installed scaffolder actions
scaffolder.list-scaffolder-tasks
List scaffolder tasks that have been created
scaffolder.execute-template
Run a Software Template with given input values
scaffolder.get-scaffolder-task-logs
Read the logs of one scaffolder task
search.query
Search the portal's search index across all or chosen document types

Similar servers