mcp-server-mcpindex 0.3.1 → 0.3.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ All notable changes to `mcp-server-mcpindex` are recorded here.
4
4
 
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.2] - 2026-06-08
8
+
9
+ ### Changed
10
+
11
+ - **Update notice is now stderr-only.** Removed the MCP `notifications/message` (`sendLoggingMessage`) from the update-notice path — it was redundant with the stderr line and hosts render it inconsistently (Cursor logged it as a bare ` undefined`). stderr is the universal channel every host (Cursor, Claude Desktop, Claude Code, Gemini CLI) surfaces in its per-server log, so nothing a host actually displayed is lost. Supersedes the 0.3.0 dual-channel behavior.
12
+ - The `logging` server capability is **no longer declared** (it existed only to deliver that notification); the server now advertises `tools` only.
13
+
7
14
  ## [0.3.1] - 2026-06-08
8
15
 
9
16
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-mcpindex",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "An MCP server for finding MCP servers, plus advisory trust verdicts (check_tool_trust, assess_server) for agent frameworks. Drop-in for Claude Desktop, Cursor, Cline, Zed.",
5
5
  "keywords": [
6
6
  "mcp",
package/src/index.mjs CHANGED
@@ -19,9 +19,10 @@ const PKG_VERSION = createRequire(import.meta.url)('../package.json').version;
19
19
 
20
20
  const server = new Server(
21
21
  { name: 'mcp-server-mcpindex', version: PKG_VERSION },
22
- // `logging` lets us push the update notice as an MCP notifications/message the
23
- // host may render to the user; `sendLoggingMessage` no-ops without it.
24
- { capabilities: { tools: {}, logging: {} } },
22
+ // Tools only. We do NOT advertise `logging`: the update notice goes to stderr (which
23
+ // every host surfaces), not via `notifications/message` (rendered inconsistently — Cursor
24
+ // logs it as a bare ` undefined`). stderr is the universal, clean channel.
25
+ { capabilities: { tools: {} } },
25
26
  );
26
27
 
27
28
  const TOOLS = [
@@ -291,7 +292,7 @@ const transport = new StdioServerTransport();
291
292
  await server.connect(transport);
292
293
  console.error('[mcp-server-mcpindex] connected via stdio');
293
294
 
294
- // Fire-and-forget: tell the user if a newer version exists (stderr + best-effort
295
- // MCP notification). Dropped onto the event loop AFTER connect so it can never
295
+ // Fire-and-forget: tell the user if a newer version exists (stderr only — the channel
296
+ // every host renders cleanly). Dropped onto the event loop AFTER connect so it can never
296
297
  // delay or crash startup; all errors are swallowed inside.
297
- notifyUpdateIfAvailable({ currentVersion: PKG_VERSION, server }).catch(() => {});
298
+ notifyUpdateIfAvailable({ currentVersion: PKG_VERSION }).catch(() => {});
@@ -87,14 +87,15 @@ export async function fetchLatestVersion({
87
87
  }
88
88
  }
89
89
 
90
- /** Orchestration: check, and if a newer version exists, emit on BOTH channels.
91
- * stderr is the reliable channel; the MCP logging notification is best-effort
92
- * (only delivered if the host enabled `logging` and didn't filter `info`).
93
- * Returns the message it emitted (or null) handy for tests/callers.
94
- * Never throws; never blocks the caller meaningfully (caller fire-and-forgets). */
90
+ /** Orchestration: check, and if a newer version exists, emit the notice to STDERR only.
91
+ * stderr is the UNIVERSAL channel every MCP host (Cursor, Claude Desktop/Code, Gemini
92
+ * CLI, …) surfaces a spawned server's stderr in its per-server log. We deliberately do NOT
93
+ * emit an MCP `notifications/message`: hosts render it inconsistently (Cursor logs it as a
94
+ * bare ` undefined`, swallowing the text), so it only adds noise where stderr already
95
+ * carries the message cleanly. Returns the message it emitted (or null) — handy for
96
+ * tests/callers. Never throws; never blocks the caller (caller fire-and-forgets). */
95
97
  export async function notifyUpdateIfAvailable({
96
98
  currentVersion,
97
- server = null,
98
99
  env = process.env,
99
100
  log = (m) => console.error(`[mcp-server-mcpindex] ${m}`),
100
101
  fetchImpl = fetch,
@@ -105,14 +106,7 @@ export async function notifyUpdateIfAvailable({
105
106
  const latest = await fetchLatestVersion({ pkg, fetchImpl });
106
107
  if (!latest || !isOlder(currentVersion, latest)) return null;
107
108
  const msg = formatUpdateMessage(currentVersion, latest);
108
- log(msg); // stderr — reliable
109
- if (server && typeof server.sendLoggingMessage === 'function') {
110
- try {
111
- await server.sendLoggingMessage({ level: 'info', logger: 'mcpindex', data: msg });
112
- } catch {
113
- /* host didn't enable logging / filtered the level — stderr already covered it */
114
- }
115
- }
109
+ log(msg); // stderr — the one channel every host renders cleanly
116
110
  return msg;
117
111
  } catch {
118
112
  return null; // belt-and-suspenders: this path must never surface an error