mcp-server-mcpindex 0.3.1 → 0.3.3

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,19 @@ 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.3] - 2026-06-08
8
+
9
+ ### Changed
10
+
11
+ - **Recommended install now rides `@latest`.** The docs wire `npx -y mcp-server-mcpindex@latest` so the host fetches the newest discovery server on each restart — no manual upgrade step. This server is the *advisory* recommender (`recommend_mcp_for_task` / `check_tool_trust` / `assess_server`), **not** the in-path drift gate, so it carries no version pin (the gate, `mcpindex-preflight`, stays pinned + notify-only on purpose). The startup update notice already prints the exact `npm i -g …@latest` command for anyone who pins.
12
+
13
+ ## [0.3.2] - 2026-06-08
14
+
15
+ ### Changed
16
+
17
+ - **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.
18
+ - The `logging` server capability is **no longer declared** (it existed only to deliver that notification); the server now advertises `tools` only.
19
+
7
20
  ## [0.3.1] - 2026-06-08
8
21
 
9
22
  ### Changed
package/README.md CHANGED
@@ -19,12 +19,16 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
19
19
  "mcpServers": {
20
20
  "mcpindex": {
21
21
  "command": "npx",
22
- "args": ["-y", "mcp-server-mcpindex"]
22
+ "args": ["-y", "mcp-server-mcpindex@latest"]
23
23
  }
24
24
  }
25
25
  }
26
26
  ```
27
27
 
28
+ > `@latest` keeps you current: this is the advisory discovery server (not the in-path drift
29
+ > gate), so it carries no version pin — `npx` fetches the newest on your next host restart, no
30
+ > manual upgrade step.
31
+
28
32
  Restart Claude Desktop. Then ask:
29
33
 
30
34
  > "Find me an MCP server that can read PDFs and write the contents to S3."
@@ -40,7 +44,7 @@ Add to `.cursor/mcp.json`:
40
44
  "mcpServers": {
41
45
  "mcpindex": {
42
46
  "command": "npx",
43
- "args": ["-y", "mcp-server-mcpindex"]
47
+ "args": ["-y", "mcp-server-mcpindex@latest"]
44
48
  }
45
49
  }
46
50
  }
@@ -51,7 +55,7 @@ Add to `.cursor/mcp.json`:
51
55
  Add to your Cline settings:
52
56
 
53
57
  ```bash
54
- npx -y mcp-server-mcpindex
58
+ npx -y mcp-server-mcpindex@latest
55
59
  ```
56
60
 
57
61
  ## Tools exposed
@@ -112,7 +116,7 @@ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
112
116
 
113
117
  const mcpindex = new Client({ name: 'gate', version: '1.0.0' }, { capabilities: {} });
114
118
  await mcpindex.connect(new StdioClientTransport({
115
- command: 'npx', args: ['-y', 'mcp-server-mcpindex'],
119
+ command: 'npx', args: ['-y', 'mcp-server-mcpindex@latest'],
116
120
  }));
117
121
 
118
122
  // gateToolCall wraps any agent tool dispatch. Plug it in front of
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.3",
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