fix: plugin MCP server now loads./reload-plugins reported "0 plugin MCP servers". Root cause (two compounding issues): plugin.json used "mcpServers": "./.mcp.json" (a string path, not a valid inline object/reference), AND .mcp.json is gitignored so it was never in the marketplace clone. Fixed by inlining the mcpServers object (with ${user_config.*} substitution) directly into the tracked plugin.json; bumped plugin to 0.1.1 so clients re-fetch.
feat: admin-configurable plugin marketplace URL (CI-green on dev) — Admin → Plugin marketplace setting, surfaced in every user's MCP Access install command so it's copyable.
Two changes since the last main merge:
1. **fix: plugin MCP server now loads.** `/reload-plugins` reported "0 plugin MCP servers". Root cause (two compounding issues): plugin.json used `"mcpServers": "./.mcp.json"` (a string path, not a valid inline object/reference), AND `.mcp.json` is gitignored so it was never in the marketplace clone. Fixed by inlining the `mcpServers` object (with `${user_config.*}` substitution) directly into the tracked `plugin.json`; bumped plugin to 0.1.1 so clients re-fetch.
2. **feat: admin-configurable plugin marketplace URL** (CI-green on dev) — `Admin → Plugin marketplace` setting, surfaced in every user's MCP Access install command so it's copyable.
No migrations.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The Settings install command had a <your-scribe-repo> placeholder — not
copyable. Add an instance-global 'plugin_marketplace_url' setting (admin sets
it to the app's own repo) that every user's MCP Access reads, so the
/plugin marketplace add command is copyable out of the box. Keeps it universal
(each deployment configures its own repo) rather than hardcoding one.
- services/settings.get_admin_setting(key): admin-scoped global read.
- routes/plugin: GET /api/plugin/marketplace-url (any user) + PUT (admin).
- SettingsView: Admin → 'Plugin marketplace' field to set it; MCP Access
marketplace field falls back to the configured value.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/reload-plugins reported '0 plugin MCP servers'. Root cause: plugin.json had
"mcpServers": "./.mcp.json" — a string path, which is neither a valid inline
object nor a recognized reference (per docs, plugin MCP servers are a root
.mcp.json OR an inline object in plugin.json), so it parsed to zero servers.
Inline the mcpServers object directly in plugin.json and remove the separate
.mcp.json. The user_config substitution syntax was already correct
(plugins-reference: values substitute as ${user_config.KEY} in MCP configs).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Two changes since the last main merge:
/reload-pluginsreported "0 plugin MCP servers". Root cause (two compounding issues): plugin.json used"mcpServers": "./.mcp.json"(a string path, not a valid inline object/reference), AND.mcp.jsonis gitignored so it was never in the marketplace clone. Fixed by inlining themcpServersobject (with${user_config.*}substitution) directly into the trackedplugin.json; bumped plugin to 0.1.1 so clients re-fetch.Admin → Plugin marketplacesetting, surfaced in every user's MCP Access install command so it's copyable.No migrations.
🤖 Generated with Claude Code
/reload-plugins reported '0 plugin MCP servers'. Root cause: plugin.json had "mcpServers": "./.mcp.json" — a string path, which is neither a valid inline object nor a recognized reference (per docs, plugin MCP servers are a root .mcp.json OR an inline object in plugin.json), so it parsed to zero servers. Inline the mcpServers object directly in plugin.json and remove the separate .mcp.json. The user_config substitution syntax was already correct (plugins-reference: values substitute as ${user_config.KEY} in MCP configs). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>