npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@theplatformlog/scaffolder-backend-module-mcp

v0.1.0

Published

Backstage scaffolder backend module that lets templates invoke any Model Context Protocol (MCP) server tool. Inverse of plugin-mcp-actions-backend.

Readme

Scaffolder Backend Module — MCP

A Backstage scaffolder backend module that lets templates call tools on Model Context Protocol servers.

It is the inverse of plugin-mcp-actions-backend, which exposes Backstage's own actions to external MCP clients. This module makes Backstage itself an MCP client, so any tool from any MCP server can be invoked as a step in a scaffolder template.

Installation

yarn --cwd packages/backend add @backstage/plugin-scaffolder-backend-module-mcp

Register the module on the backend:

// packages/backend/src/index.ts
backend.add(import('@backstage/plugin-scaffolder-backend-module-mcp'));

Configuration

Declare one or more MCP servers under scaffolder.mcpServers. The first call to a server lazily spawns its process; subsequent calls reuse the connection. Only the stdio transport is supported today.

scaffolder:
  mcpServers:
    fs:
      command: npx
      args: ['-y', '@modelcontextprotocol/server-filesystem', '/workspace']
    fetch:
      command: uvx
      args: ['mcp-server-fetch']
      timeoutMs: 30000

| Field | Type | Default | Notes | | ----------- | ----------------------- | ------- | -------------------------------------------------------------------------------------------------------- | | transport | 'stdio' | stdio | Only stdio is implemented in this release. | | command | string (required) | — | Executable to spawn. | | args | string[] | [] | Arguments passed to the command. | | env | Record<string,string> | {} | Additional env vars; merged on top of the backend's process.env. Marked secret in the config schema. | | cwd | string | — | Working directory for the spawned process. | | timeoutMs | number | 60000 | Per-tool-call timeout in milliseconds. |

Usage in a template

steps:
  - id: read-config
    name: Read repo config via MCP filesystem server
    action: mcp:call
    input:
      server: fs
      tool: read_file
      arguments:
        path: /workspace/template.yaml

  - id: fetch-spec
    name: Fetch OpenAPI spec via MCP fetch server
    action: mcp:call
    input:
      server: fetch
      tool: fetch
      arguments:
        url: https://example.com/openapi.yaml

The action returns the raw MCP tool response under steps.<id>.output.result, typically an object of the shape { content: [{ type: 'text', text: '...' }] }.

Lifecycle

The module registers a shutdown hook via coreServices.lifecycle that closes all open MCP client connections during graceful shutdown.

Limitations

  • stdio only. HTTP and SSE transports are not wired up yet.
  • Single generic action. A future revision may dynamically register one scaffolder action per discovered MCP tool (e.g. mcp.fs:read_file), so templates can declare the tool name in the step action: field.
  • No per-call auth. Credentials are baked into the server config; per-call pass-through (e.g. forwarding a user's token to an HTTP MCP server) will land with the HTTP transport.