@vantageos/mcp-boilerplate 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vantage-mcp-boilerplate",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Clonable dual-transport MCP server template (stdio + Streamable HTTP, stateless) on the official @modelcontextprotocol/sdk, with protocol-kit result types, OAuth 2.1 auth + public tier, multi-tenant JWT scoping, MCP Apps UI extension, server-side FR/EN i18n, and a declarative eval harness. Scaffold, extend, publish.",
5
5
  "description_fr": "Template de serveur MCP clonable a double transport (stdio + Streamable HTTP, stateless) sur le @modelcontextprotocol/sdk officiel, avec types de resultats protocol-kit, auth OAuth 2.1 + tier public, scoping multi-tenant par JWT, extension UI MCP Apps, i18n FR/EN cote serveur, et un harnais d'evaluations declaratif. Scaffolder, etendre, publier.",
6
6
  "author": "ElPi Corp / Laurent Perello",
@@ -8,5 +8,18 @@
8
8
  "homepage": "https://github.com/elpiarthera/vantage-mcp-boilerplate",
9
9
  "category": "mcp-server",
10
10
  "bilingual": true,
11
- "keywords": ["mcp", "claude-code", "boilerplate", "starter", "template", "stdio", "streamable-http", "oauth", "multi-tenant", "i18n", "vantage", "elpi"]
11
+ "keywords": [
12
+ "mcp",
13
+ "claude-code",
14
+ "boilerplate",
15
+ "starter",
16
+ "template",
17
+ "stdio",
18
+ "streamable-http",
19
+ "oauth",
20
+ "multi-tenant",
21
+ "i18n",
22
+ "vantage",
23
+ "elpi"
24
+ ]
12
25
  }
package/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.2] - 2026-08-07
11
+
12
+ Two derive-never-type fixes, released together.
13
+
14
+ ### Fixed
15
+
16
+ - `tools/list` gating bug: the response was a hand-typed 2-entry descriptor
17
+ array (`ping`, `list_items`) while a third tool, `render_items_ui` (MCP
18
+ Apps UI), was registered on the server — callable but undiscoverable via
19
+ `tools/list`. The handler now derives the response from the SDK's own
20
+ registered-tools map, so no tool can be silently missing from discovery
21
+ again.
22
+ - `.claude-plugin/plugin.json`'s `version` field had drifted from
23
+ `package.json` (0.1.0 vs 0.1.1). It is now derived from `package.json` at
24
+ build time (`scripts/sync-plugin-version.mjs`, wired into `npm run build`).
25
+
10
26
  ## [0.1.1] - 2026-08-07
11
27
 
12
28
  Hardening pass on the published template — packaging and documentation
@@ -158,8 +158,27 @@ export function createBoilerplateMcpServer(deps = {}) {
158
158
  // top of the standard `tools` array every MCP client expects. The kit's
159
159
  // `buildToolsListResult` (0.2.0+) emits the `tools` key the official
160
160
  // `ListToolsResultSchema` requires directly — no hand alias needed.
161
- server.server.setRequestHandler(ListToolsRequestSchema, async () => {
162
- return buildToolsListResult([PING_TOOL_DESCRIPTOR, LIST_ITEMS_TOOL_DESCRIPTOR], {
161
+ //
162
+ // DERIVATION (not a hand-typed descriptor list): the SDK's own McpServer
163
+ // already builds the `tools/list` response from its single source of
164
+ // truth — `this._registeredTools`, populated by every `registerTool`/
165
+ // `registerAppTool` call above — and installs that handler on
166
+ // `server.server` (the low-level `Server`) via `setToolRequestHandlers()`
167
+ // BEFORE this function runs. Re-invoking that already-installed handler,
168
+ // then re-shaping its `tools` array through the kit, means a 4th
169
+ // registered tool appears here automatically — nothing here enumerates
170
+ // tool names by hand, so a tool can never again be silently missing from
171
+ // discovery just because this list forgot to mention it.
172
+ const baseListToolsHandler = server.server._requestHandlers.get("tools/list");
173
+ if (!baseListToolsHandler) {
174
+ throw new Error("tools/list handler not found on the SDK's Server — McpServer.registerTool() " +
175
+ "installs it lazily on first registration; this indicates no tool was ever " +
176
+ "registered, which is a boilerplate wiring bug, not a runtime condition to " +
177
+ "silently work around.");
178
+ }
179
+ server.server.setRequestHandler(ListToolsRequestSchema, async (request, extra) => {
180
+ const { tools } = await baseListToolsHandler(request, extra);
181
+ return buildToolsListResult(tools, {
163
182
  ttlMs: 60_000,
164
183
  cacheScope: "public",
165
184
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vantageos/mcp-boilerplate",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Clonable MCP server skeleton: dual-transport bootstrap (stdio + Streamable HTTP, stateless) on the official @modelcontextprotocol/sdk, ready to extend with protocol-kit, auth, tenant and UI layers.",
5
5
  "description_fr": "Squelette de serveur MCP clonable : bootstrap double-transport (stdio + Streamable HTTP, sans état) sur le @modelcontextprotocol/sdk officiel, prêt à étendre avec les couches protocol-kit, authentification, tenant et UI.",
6
6
  "type": "module",
@@ -38,7 +38,7 @@
38
38
  "homepage": "https://github.com/elpiarthera/vantage-mcp-boilerplate#readme",
39
39
  "author": "ElPi Corp / Laurent Perello",
40
40
  "scripts": {
41
- "build": "tsc && mkdir -p dist/locales && cp src/locales/en.json src/locales/fr.json dist/locales/",
41
+ "build": "tsc && mkdir -p dist/locales && cp src/locales/en.json src/locales/fr.json dist/locales/ && node scripts/sync-plugin-version.mjs",
42
42
  "build:ui": "vite build && mv dist/ui-bundle/index.html dist/ui-bundle/widget.html",
43
43
  "pretest": "npm run build && npm run build:ui",
44
44
  "test": "vitest run",