cf-memory-mcp 3.8.10 → 3.8.12

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.
@@ -187,7 +187,7 @@ const TOOLS_LIST = [
187
187
  },
188
188
  {
189
189
  name: 'get_context_bootstrap',
190
- description: 'Get the most important memories to load at session start. Returns user preferences, ongoing tasks, and relevant facts within the token budget.',
190
+ description: 'Get the most important memories to load at session start. Returns user preferences, ongoing tasks, and relevant facts within the token budget. Includes an empty_hint pointing at store_memory when nothing is stored yet.',
191
191
  inputSchema: {
192
192
  type: 'object',
193
193
  properties: {
@@ -639,6 +639,16 @@ class CFMemoryMCP {
639
639
  return;
640
640
  }
641
641
 
642
+ // Per JSON-RPC 2.0, any method starting with `notifications/`
643
+ // doesn't carry an id and expects no response. Common ones we
644
+ // see in the wild: notifications/cancelled, notifications/progress,
645
+ // notifications/message. Swallow silently to avoid the bridge
646
+ // accidentally replying to them (which violates the spec).
647
+ if (message.method && message.method.startsWith('notifications/')) {
648
+ this.logDebug(`Ignoring client notification: ${message.method}`);
649
+ return;
650
+ }
651
+
642
652
  // Handle tools/list locally for fast connection
643
653
  if (message.method === 'tools/list') {
644
654
  const response = {
@@ -1981,6 +1991,45 @@ if (process.argv.includes('--diagnose')) {
1981
1991
  console.log(`FAIL: ${err.message}`);
1982
1992
  }
1983
1993
 
1994
+ // 5. Deep health (D1 + Vectorize + AI bindings)
1995
+ process.stdout.write('5. Deep health (D1/Vectorize/AI)... ');
1996
+ const deepStart = Date.now();
1997
+ try {
1998
+ const url = new URL(BASE_URL + '/health/deep');
1999
+ const result = await new Promise((resolve, reject) => {
2000
+ const req = https.request({
2001
+ hostname: url.hostname,
2002
+ port: url.port || 443,
2003
+ path: url.pathname,
2004
+ method: 'GET',
2005
+ headers: { 'X-API-Key': API_KEY },
2006
+ timeout: 15000,
2007
+ }, (res) => {
2008
+ let body = '';
2009
+ res.on('data', (c) => body += c);
2010
+ res.on('end', () => resolve({ status: res.statusCode, body }));
2011
+ });
2012
+ req.on('error', reject);
2013
+ req.on('timeout', () => reject(new Error('timeout')));
2014
+ req.end();
2015
+ });
2016
+ const elapsed = Date.now() - deepStart;
2017
+ const parsed = JSON.parse(result.body);
2018
+ const checks = parsed.checks || {};
2019
+ const summary = ['d1', 'vectorize', 'ai']
2020
+ .map(k => `${k}=${checks[k]?.ok ? 'ok' : 'FAIL'}`)
2021
+ .join(' ');
2022
+ console.log(`${parsed.status} (${elapsed}ms, ${summary})`);
2023
+ // Surface any sub-check errors
2024
+ for (const [k, v] of Object.entries(checks)) {
2025
+ if (v && typeof v === 'object' && 'ok' in v && !v.ok && v.error) {
2026
+ console.log(` ${k}: ${v.error}`);
2027
+ }
2028
+ }
2029
+ } catch (err) {
2030
+ console.log(`FAIL: ${err.message}`);
2031
+ }
2032
+
1984
2033
  console.log('\nDiagnostics complete.');
1985
2034
  process.exit(0);
1986
2035
  })().catch(err => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cf-memory-mcp",
3
- "version": "3.8.10",
3
+ "version": "3.8.12",
4
4
  "description": "Cloudflare-hosted MCP server for code indexing, retrieval, and assistant memory with a direct remote MCP endpoint and local stdio bridge.",
5
5
  "main": "bin/cf-memory-mcp.js",
6
6
  "bin": {