feat(mcp-actions): Add the ability to configure different plugins for different servers (#33235)

* feat: split MCP actions into per-plugin servers

Add mcpActions.servers config to create multiple MCP server endpoints
scoped by plugin source, with per-server include/exclude filtering.
Add mcpActions.tools for global tool description overrides.

Signed-off-by: benjdlambert <ben@blam.sh>

* feat: namespace tool names, use filter rules for server scoping

- Tool names now use action ID (plugin:name) by default, opt out
  via mcpActions.namespacedToolNames
- Removed pluginSources from server config, use filter.include
  with id glob patterns instead
- Removed tool description overrides (deferred to followup)
- Added server key validation for route safety

Signed-off-by: benjdlambert <ben@blam.sh>

* docs: update README for filter-based server scoping

Signed-off-by: benjdlambert <ben@blam.sh>

* feat: drop SSE routes for split servers

Signed-off-by: benjdlambert <ben@blam.sh>

* fix: handle empty servers config, fix test name

Signed-off-by: benjdlambert <ben@blam.sh>

---------

Signed-off-by: benjdlambert <ben@blam.sh>
This commit is contained in:
Ben Lambert
2026-03-10 11:28:31 +01:00
committed by GitHub
parent 64073a4290
commit c74b69788e
12 changed files with 881 additions and 39 deletions
+5 -1
View File
@@ -21,8 +21,10 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"configSchema": "config.d.ts",
"files": [
"dist"
"dist",
"config.d.ts"
],
"scripts": {
"build": "backstage-cli package build",
@@ -36,6 +38,7 @@
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/types": "workspace:^",
@@ -43,6 +46,7 @@
"@modelcontextprotocol/sdk": "^1.25.2",
"express": "^4.22.0",
"express-promise-router": "^4.1.0",
"minimatch": "^10.2.1",
"zod": "^3.25.76"
},
"devDependencies": {