Skip to content

Claude plugin .mcp.json declarations are ignored at runtime #148

Description

@kojizada490-wq

What happened?

Claude-style plugins with a root .mcp.json are recognized and installed by Step, but their MCP servers are not discovered after restart.

The plugin loader normalizes a Claude plugin with .mcp.json to mcpServers: ".mcp.json", and the diagnostics path accepts that file-backed declaration. The runtime path in discoverStepMcpServers() currently skips string declarations entirely:

if (!declared || typeof declared === "string") continue;

So the plugin appears under /plugin as installed, but its MCP server never starts. An otherwise equivalent plugin with inline mcpServers starts normally.

Steps to reproduce

  1. Create a Claude-style plugin with .claude-plugin/plugin.json.
  2. Add a root .mcp.json containing a stdio MCP server, for example a tiny Node process that writes a marker file when it starts.
  3. Add the plugin through a local marketplace and install it with /plugin install.
  4. Restart Step.
  5. The plugin is still listed as installed, but the marker from the .mcp.json server is never created.

As a control, moving the same server declaration inline into plugin.json -> mcpServers creates the marker after the same restart.

I have a local fix that resolves inline and file-backed declarations through one parser and added regression coverage for runtime discovery and plugin diagnostics. The focused tests pass, pnpm run check passes, and pnpm run build:offline passes. Happy to submit the fix if this direction looks good.

Expected behavior

A Claude-style plugin's root .mcp.json should be discovered and started after restart the same way as inline mcpServers.

Version

StepCode 0.1.0, main @ cb5fc1456d49d49c62e072bfed2926220083214e

AI-assisted wording; the repro, code path, fix, and tests were verified locally.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions