@dudamel/mcp-memory 0.1.0 → 2026.917.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 +1 @@
1
- {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;gBAFZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM;CAK/B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAQvE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3E,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ5F,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ3F,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKpF,OAAO,CAAC,QAAQ;YAYF,OAAO;CAiBtB"}
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;gBAFZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM;CAK/B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAQvE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3E,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC;IAQP,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC;IAQP,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKpF,OAAO,CAAC,QAAQ;YAYF,OAAO;CAiBtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAE/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAyBrE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAE/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA6BrE"}
package/dist/server.js CHANGED
@@ -2,12 +2,15 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { DudamelApiClient } from './http-client.js';
3
3
  import { registerMemoryTools } from './tools/memories.js';
4
4
  import { registerConversationTools } from './tools/conversations.js';
5
+ import { registerFileTools } from './tools/files.js';
5
6
  export function createMemoryServer(config) {
6
7
  const server = new McpServer({ name: 'dudamel-memory', version: '0.1.0' }, {
7
8
  capabilities: { tools: {} },
8
9
  instructions: 'Dudamel Memory MCP — query and manage your memories and past conversations. ' +
9
10
  'Always search before creating or updating a memory to avoid duplicates. ' +
10
- 'Write tools require a prior search in the same session.',
11
+ 'Write tools require a prior search in the same session. ' +
12
+ 'Files: the turn workspace is wiped when the turn ends, so use save-file for ' +
13
+ 'anything that must outlive it.',
11
14
  });
12
15
  const client = new DudamelApiClient(config.apiUrl, config.apiKey, config.authScheme);
13
16
  const ctx = {
@@ -16,9 +19,11 @@ export function createMemoryServer(config) {
16
19
  seenIds: new Set(),
17
20
  fetchedIds: new Set(),
18
21
  hasListed: false,
22
+ conversationId: config.conversationId,
19
23
  };
20
24
  registerMemoryTools(server, client, ctx);
21
25
  registerConversationTools(server, client, ctx);
26
+ registerFileTools(server, client, ctx);
22
27
  return server;
23
28
  }
24
29
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,MAAM,UAAU,kBAAkB,CAAC,MAAuB;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,YAAY,EACV,8EAA8E;YAC9E,0EAA0E;YAC1E,yDAAyD;KAC5D,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,GAAG,GAAgB;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,UAAU,kBAAkB,CAAC,MAAuB;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,YAAY,EACV,8EAA8E;YAC9E,0EAA0E;YAC1E,0DAA0D;YAC1D,8EAA8E;YAC9E,gCAAgC;KACnC,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,GAAG,GAAgB;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC;IAEF,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -4,12 +4,17 @@ import { createMemoryServer } from './server.js';
4
4
  const apiUrl = process.env['DUDAMEL_API_URL'] ?? 'http://orchestrator:3000';
5
5
  const apiKey = process.env['DUDAMEL_API_KEY'];
6
6
  const userId = process.env['DUDAMEL_USER_ID'] ?? '';
7
- const agentName = process.env['DUDAMEL_AGENT_NAME'] ?? '';
7
+ // Absent (or empty) when there is no agent in context — a user's own API key from their
8
+ // terminal (Plan 52 A.1). It must reach the API as a REAL null, never as '': an empty string
9
+ // would be sent as `?agent=` and read as "unknown agent", failing every call.
10
+ const agentName = process.env['DUDAMEL_AGENT_NAME']?.trim() || null;
11
+ // Injected by the conversational driver (Plan 43 G1) — absent for a workflow step.
12
+ const conversationId = process.env['DUDAMEL_CONVERSATION_ID'];
8
13
  if (!apiKey) {
9
14
  process.stderr.write('Error: DUDAMEL_API_KEY environment variable is required.\n');
10
15
  process.exit(1);
11
16
  }
12
- const server = createMemoryServer({ apiUrl, apiKey, userId, agentName });
17
+ const server = createMemoryServer({ apiUrl, apiKey, userId, agentName, conversationId });
13
18
  const transport = new StdioServerTransport();
14
19
  await server.connect(transport);
15
20
  //# sourceMappingURL=stdio-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-server.js","sourceRoot":"","sources":["../src/stdio-server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,0BAA0B,CAAC;AAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;AAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACzE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"stdio-server.js","sourceRoot":"","sources":["../src/stdio-server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,0BAA0B,CAAC;AAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACpD,wFAAwF;AACxF,6FAA6F;AAC7F,8EAA8E;AAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpE,mFAAmF;AACnF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAE9D,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACzF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,IAAI,CA0CN"}
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,IAAI,CAwCN"}
@@ -1,14 +1,14 @@
1
1
  import { z } from 'zod';
2
- import { errorResult, jsonResult } from '../util.js';
2
+ import { agentParams, errorResult, jsonResult } from '../util.js';
3
3
  export function registerConversationTools(server, client, ctx) {
4
4
  server.registerTool('list-conversations', {
5
- description: 'List past conversations for the current agent. Returns conversation metadata ' +
6
- 'including ids, timestamps, and summaries.',
5
+ description: 'List your past conversations. Scoped to the current agent when one is in context; ' +
6
+ 'otherwise every conversation you have had, with any agent. Returns conversation ' +
7
+ 'metadata including ids, timestamps, and summaries.',
7
8
  annotations: { readOnlyHint: true },
8
9
  }, async () => {
9
10
  try {
10
- const params = { agent: ctx.agentName };
11
- const result = await client.get('/api/chat/conversations', params);
11
+ const result = await client.get('/api/chat/conversations', agentParams(ctx));
12
12
  return jsonResult(result);
13
13
  }
14
14
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAwB,EACxB,GAAgB;IAEhB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,+EAA+E;YAC/E,2CAA2C;QAC7C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;YACnE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EACT,iFAAiF;YACjF,yBAAyB;QAC3B,WAAW,EAAE;YACX,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,2BAA2B,cAAc,WAAW,CACrD,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAwB,EACxB,GAAgB;IAEhB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,oFAAoF;YACpF,kFAAkF;YAClF,oDAAoD;QACtD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EACT,iFAAiF;YACjF,yBAAyB;QAC3B,WAAW,EAAE;YACX,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,2BAA2B,cAAc,WAAW,CAAC,CAAC;YACtF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { DudamelApiClient } from '../http-client.js';
3
+ import type { ToolContext } from '../types.js';
4
+ /**
5
+ * File tools (Plan 43 Etapa 5, Decisión 3).
6
+ *
7
+ * The registry exists so an agent can hand something back and pick it up later: files live
8
+ * outside the turn's workspace, which is still wiped after every turn. Saving is explicit —
9
+ * the agent keeps what it decided matters, instead of the runtime sweeping a directory into
10
+ * object storage and producing garbage nobody asked for.
11
+ */
12
+ export declare function registerFileTools(server: McpServer, client: DudamelApiClient, ctx: ToolContext): void;
13
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,IAAI,CAwIN"}
@@ -0,0 +1,124 @@
1
+ import { z } from 'zod';
2
+ import { agentParams, errorResult, jsonResult } from '../util.js';
3
+ /**
4
+ * File tools (Plan 43 Etapa 5, Decisión 3).
5
+ *
6
+ * The registry exists so an agent can hand something back and pick it up later: files live
7
+ * outside the turn's workspace, which is still wiped after every turn. Saving is explicit —
8
+ * the agent keeps what it decided matters, instead of the runtime sweeping a directory into
9
+ * object storage and producing garbage nobody asked for.
10
+ */
11
+ export function registerFileTools(server, client, ctx) {
12
+ server.registerTool('save-file', {
13
+ description: 'Store a file so it survives this turn. The turn workspace is wiped when the turn ' +
14
+ 'ends, so anything you want to keep — a report, a diff, a generated CSV — has to be ' +
15
+ 'saved here. Returns an id you can hand back to the user or use in a later turn. ' +
16
+ 'Content goes base64-encoded.',
17
+ inputSchema: {
18
+ fileName: z.string().describe('Name for the file, e.g. "informe-q3.csv"'),
19
+ mimeType: z.string().describe('MIME type, e.g. "text/csv" or "application/pdf"'),
20
+ contentBase64: z.string().describe('File content, base64-encoded'),
21
+ conversationId: z
22
+ .string()
23
+ .optional()
24
+ .describe('Conversation this belongs to. Defaults to the current one.'),
25
+ },
26
+ annotations: { readOnlyHint: false, destructiveHint: false },
27
+ }, async ({ fileName, mimeType, contentBase64, conversationId }) => {
28
+ try {
29
+ return jsonResult(await client.post('/api/chat/files', {
30
+ fileName,
31
+ mimeType,
32
+ contentBase64,
33
+ // The current conversation unless told otherwise, so the common case needs no
34
+ // argument and the file is findable where it was produced.
35
+ conversationId: conversationId ?? ctx.conversationId,
36
+ ...(ctx.agentName ? { agentName: ctx.agentName } : {}),
37
+ }));
38
+ }
39
+ catch (err) {
40
+ return errorResult(err);
41
+ }
42
+ });
43
+ server.registerTool('list-files', {
44
+ description: 'List stored files for this conversation (default) or for this agent across ' +
45
+ 'conversations. Returns metadata only — ids, names, types, sizes — not content.',
46
+ inputSchema: {
47
+ conversationId: z
48
+ .string()
49
+ .optional()
50
+ .describe('Conversation to list. Defaults to the current one.'),
51
+ allConversations: z
52
+ .boolean()
53
+ .optional()
54
+ .describe("List everything this agent saved, not just this conversation's"),
55
+ limit: z.number().optional().describe('Max files to return (default 50)'),
56
+ },
57
+ annotations: { readOnlyHint: true },
58
+ }, async ({ conversationId, allConversations, limit }) => {
59
+ try {
60
+ const params = agentParams(ctx);
61
+ if (!allConversations) {
62
+ const target = conversationId ?? ctx.conversationId;
63
+ if (target)
64
+ params.conversationId = target;
65
+ }
66
+ if (limit)
67
+ params.limit = String(limit);
68
+ return jsonResult(await client.get('/api/chat/files', params));
69
+ }
70
+ catch (err) {
71
+ return errorResult(err);
72
+ }
73
+ });
74
+ server.registerTool('get-file', {
75
+ description: 'Read a stored file by id. Small text files come back with their content inline; ' +
76
+ 'anything large or binary returns metadata only, and you should pass the id along ' +
77
+ 'rather than trying to read the bytes — they would not fit in your context anyway.',
78
+ inputSchema: {
79
+ id: z.string().describe('File id from save-file or list-files'),
80
+ },
81
+ annotations: { readOnlyHint: true },
82
+ }, async ({ id }) => {
83
+ try {
84
+ return jsonResult(await client.get(`/api/chat/files/${encodeURIComponent(id)}`));
85
+ }
86
+ catch (err) {
87
+ return errorResult(err);
88
+ }
89
+ });
90
+ server.registerTool('send-file', {
91
+ description: 'Hand a stored file to the user in this conversation. Use it after save-file when ' +
92
+ 'the user should actually receive the file — saving alone only keeps it. It is ' +
93
+ 'delivered right after your reply, through whatever channel you are talking on; you ' +
94
+ 'do not need to know which.',
95
+ inputSchema: {
96
+ id: z.string().describe('File id from save-file or list-files'),
97
+ },
98
+ annotations: { readOnlyHint: false, destructiveHint: false },
99
+ }, async ({ id }) => {
100
+ try {
101
+ return jsonResult(await client.post(`/api/chat/files/${encodeURIComponent(id)}/send`, {}));
102
+ }
103
+ catch (err) {
104
+ return errorResult(err);
105
+ }
106
+ });
107
+ server.registerTool('delete-file', {
108
+ description: 'Delete a stored file permanently. Use it for things you produced and no longer ' +
109
+ 'need — not for files a user uploaded, unless they asked.',
110
+ inputSchema: {
111
+ id: z.string().describe('File id from save-file or list-files'),
112
+ },
113
+ annotations: { readOnlyHint: false, destructiveHint: true },
114
+ }, async ({ id }) => {
115
+ try {
116
+ await client.delete(`/api/chat/files/${encodeURIComponent(id)}`);
117
+ return jsonResult({ deleted: true, id });
118
+ }
119
+ catch (err) {
120
+ return errorResult(err);
121
+ }
122
+ });
123
+ }
124
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../../src/tools/memories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB/C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,IAAI,CAsKN"}
1
+ {"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../../src/tools/memories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoD/C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,IAAI,CA6MN"}
@@ -1,27 +1,71 @@
1
1
  import { z } from 'zod';
2
- import { errorResult, jsonResult } from '../util.js';
2
+ import { agentParams, errorResult, jsonResult } from '../util.js';
3
3
  // The 4 memory scopes (2×2). The server maps each to (agent_name, user_id) columns.
4
- const SCOPE_DESCRIPTION = "Scope of the memory:\n" +
5
- "- 'relational': what YOU (this agent) know about the CURRENT user.\n" +
6
- "- 'profile': a fact about the CURRENT user, shared with all agents.\n" +
7
- "- 'agent': org/general knowledge private to YOU (this agent), not about a user.\n" +
8
- "- 'org': org-wide general knowledge, shared with all agents, not about a user.\n" +
9
- "Ask: does this help me with ANYONE (org/agent) or only with THIS person (relational/profile)?";
4
+ //
5
+ // Each line states WHO WILL READ IT, not just what it means. The scopes are not equally
6
+ // consequential — 'org' is visible to every agent and every person in the organisation — and
7
+ // an LLM choosing between four abstract labels has no way to know that unless the description
8
+ // says so. Every scope stays writable: the risk here is an ACCIDENTAL over-share, not a
9
+ // malicious one, and the fix for an accident is a description that names the blast radius
10
+ // (Plan 52 A.1).
11
+ const SCOPE_HEADER = 'Scope of the memory — this is WHO WILL BE ABLE TO READ IT. Pick the NARROWEST that fits:\n';
12
+ const RELATIONAL_LINE = "- 'relational': you (this agent) + this one user. Nobody else. The default for a " +
13
+ 'preference or fact about the person you are talking to.\n';
14
+ const PROFILE_LINE = "- 'profile': this one user, across ALL agents — every agent they talk to sees it. For " +
15
+ 'facts about them that any agent should know (their role, timezone, how to reach them).\n';
16
+ const AGENT_LINE = "- 'agent': you (this agent), across ALL users — everyone who talks to you sees it. For " +
17
+ 'your own working knowledge; never for something about a particular person.\n';
18
+ const ORG_LINE = "- 'org': EVERY agent and EVERY user in the organisation. The widest reach there is — only " +
19
+ 'for a fact true of the whole organisation that you would be comfortable showing anyone ' +
20
+ 'in it.\n';
21
+ function scopeDescription(agentless) {
22
+ return agentless
23
+ ? SCOPE_HEADER +
24
+ PROFILE_LINE +
25
+ ORG_LINE +
26
+ 'No agent is in context (this is your own credential), so the two agent-scoped ' +
27
+ 'quadrants do not exist here. Ask: is this about YOU (profile) or about the whole ' +
28
+ 'organisation (org)? When unsure, profile.'
29
+ : SCOPE_HEADER +
30
+ RELATIONAL_LINE +
31
+ PROFILE_LINE +
32
+ AGENT_LINE +
33
+ ORG_LINE +
34
+ 'Ask, in order: is this about ONE person (relational/profile) or about nobody in ' +
35
+ 'particular (agent/org)? Then: does it really need to be visible beyond this ' +
36
+ 'conversation?';
37
+ }
10
38
  export function registerMemoryTools(server, client, ctx) {
39
+ // With no agent in context (a user's own API key — Plan 52 A.1) two of the four quadrants
40
+ // have no agent column to land in, so the tool schema does not offer them AT ALL. That is
41
+ // the structural half of the anti-accident design: the model cannot pick an impossible
42
+ // scope and then read an error, because the option is not on the menu. The server still
43
+ // refuses them (MEMORY_AGENT_REQUIRED) — a schema is a hint, not an enforcement point.
44
+ const agentless = ctx.agentName === null;
45
+ const listScopes = agentless
46
+ ? z.enum(['profile', 'org'])
47
+ : z.enum(['relational', 'profile', 'agent', 'org']);
11
48
  // ── Read: list (summaries) ─────────────────────────────────────────────────
12
49
  server.registerTool('list-memories', {
13
50
  description: 'List memories relevant to the current user (summaries only, NOT full content). ' +
14
- 'Returns the union of everything you know that applies here: your notes on this user, ' +
15
- 'their profile, and your/org general knowledge. Call this at the start of an interaction. ' +
51
+ (agentless
52
+ ? 'No agent is in context, so this returns what applies to YOU: your profile and ' +
53
+ 'org-wide knowledge. '
54
+ : 'Returns the union of everything you know that applies here: your notes on this ' +
55
+ 'user, their profile, and your/org general knowledge. ') +
56
+ 'Call this at the start of an interaction. ' +
16
57
  'You MUST call this before creating a memory. Use get-memory to read a full entry.',
17
58
  inputSchema: {
18
- q: z.string().optional().describe('Keyword filter over summary + content (omit to list all)'),
19
- scope: z.enum(['relational', 'profile', 'agent', 'org']).optional().describe('Filter to a single scope'),
59
+ q: z
60
+ .string()
61
+ .optional()
62
+ .describe('Keyword filter over summary + content (omit to list all)'),
63
+ scope: listScopes.optional().describe('Filter to a single scope'),
20
64
  },
21
65
  annotations: { readOnlyHint: true },
22
66
  }, async ({ q, scope }) => {
23
67
  try {
24
- const params = { agent: ctx.agentName };
68
+ const params = agentParams(ctx);
25
69
  if (q)
26
70
  params['q'] = q;
27
71
  if (scope)
@@ -47,7 +91,7 @@ export function registerMemoryTools(server, client, ctx) {
47
91
  annotations: { readOnlyHint: true },
48
92
  }, async ({ id }) => {
49
93
  try {
50
- const memory = await client.get(`/api/chat/memories/${id}`);
94
+ const memory = await client.get(`/api/chat/memories/${id}`, agentParams(ctx));
51
95
  if (memory?.id) {
52
96
  ctx.fetchedIds.add(memory.id);
53
97
  ctx.seenIds.add(memory.id);
@@ -65,7 +109,11 @@ export function registerMemoryTools(server, client, ctx) {
65
109
  'multi-line markdown. A one-line summary is generated automatically; if the summary ' +
66
110
  'service is unavailable the memory is NOT saved and you should retry later.',
67
111
  inputSchema: {
68
- scope: z.enum(['relational', 'profile', 'agent', 'org']).describe(SCOPE_DESCRIPTION),
112
+ // Agentless, the narrowest reachable scope is `profile` — so that is the default, and
113
+ // a write that says nothing about reach lands on the user rather than the whole org.
114
+ scope: agentless
115
+ ? z.enum(['profile', 'org']).default('profile').describe(scopeDescription(true))
116
+ : z.enum(['relational', 'profile', 'agent', 'org']).describe(scopeDescription(false)),
69
117
  content: z.string().describe('Full memory text (multi-line markdown allowed)'),
70
118
  },
71
119
  annotations: { readOnlyHint: false, destructiveHint: false },
@@ -75,7 +123,7 @@ export function registerMemoryTools(server, client, ctx) {
75
123
  }
76
124
  try {
77
125
  const result = await client.post('/api/chat/memories', {
78
- agentName: ctx.agentName,
126
+ ...(ctx.agentName ? { agentName: ctx.agentName } : {}),
79
127
  scope,
80
128
  content,
81
129
  });
@@ -89,7 +137,7 @@ export function registerMemoryTools(server, client, ctx) {
89
137
  });
90
138
  // ── Write: update ──────────────────────────────────────────────────────────
91
139
  server.registerTool('update-memory', {
92
- description: 'Update an existing memory\'s content (its summary is regenerated). You MUST call ' +
140
+ description: "Update an existing memory's content (its summary is regenerated). You MUST call " +
93
141
  'get-memory on this id first, so you edit its real content. If the summary service is ' +
94
142
  'unavailable the memory is NOT updated and you should retry later.',
95
143
  inputSchema: {
@@ -102,7 +150,7 @@ export function registerMemoryTools(server, client, ctx) {
102
150
  return errorResult(new Error(`Call get-memory("${id}") first so you update its real content, not a guess.`));
103
151
  }
104
152
  try {
105
- const result = await client.put(`/api/chat/memories/${id}`, { content });
153
+ const result = await client.put(`/api/chat/memories/${id}`, { content }, agentParams(ctx));
106
154
  return jsonResult(result);
107
155
  }
108
156
  catch (err) {
@@ -119,7 +167,7 @@ export function registerMemoryTools(server, client, ctx) {
119
167
  return errorResult(new Error(`Cannot delete ${id}: not seen in a prior list/get. Call list-memories first.`));
120
168
  }
121
169
  try {
122
- await client.delete(`/api/chat/memories/${id}`);
170
+ await client.delete(`/api/chat/memories/${id}`, agentParams(ctx));
123
171
  ctx.seenIds.delete(id);
124
172
  ctx.fetchedIds.delete(id);
125
173
  return jsonResult({ deleted: true, id });
@@ -139,7 +187,7 @@ export function registerMemoryTools(server, client, ctx) {
139
187
  return errorResult(new Error(`Cannot mark ${id}: not seen in a prior list/get. Call list-memories first.`));
140
188
  }
141
189
  try {
142
- const result = await client.post(`/api/chat/memories/${id}/useful`, undefined);
190
+ const result = await client.post(`/api/chat/memories/${id}/useful`, undefined, agentParams(ctx));
143
191
  return jsonResult(result);
144
192
  }
145
193
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../src/tools/memories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,oFAAoF;AACpF,MAAM,iBAAiB,GACrB,wBAAwB;IACxB,sEAAsE;IACtE,uEAAuE;IACvE,mFAAmF;IACnF,kFAAkF;IAClF,+FAA+F,CAAC;AAQlG,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,MAAwB,EACxB,GAAgB;IAEhB,8EAA8E;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,iFAAiF;YACjF,uFAAuF;YACvF,2FAA2F;YAC3F,mFAAmF;QACrF,WAAW,EAAE;YACX,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;YAC7F,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzG;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;YAChE,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAY,oBAAoB,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,IAAI,CAAC,CAAC,EAAE;wBAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6EAA6E;IAC7E,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EACT,sFAAsF;YACtF,kFAAkF;QACpF,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE;QAC1E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAwB,sBAAsB,EAAE,EAAE,CAAC,CAAC;YACnF,IAAI,MAAM,EAAE,EAAE,EAAE,CAAC;gBACf,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC9B,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,kFAAkF;YAClF,sFAAsF;YACtF,qFAAqF;YACrF,4EAA4E;QAC9E,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SAC/E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,WAAW,CAChB,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAC1G,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,oBAAoB,EAAE;gBACrE,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK;gBACL,OAAO;aACR,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,EAAE;gBAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,mFAAmF;YACnF,uFAAuF;YACvF,mEAAmE;QACrE,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;SAChF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,OAAO,WAAW,CAChB,IAAI,KAAK,CAAC,oBAAoB,EAAE,uDAAuD,CAAC,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,sBAAsB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACzF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,2FAA2F;QACxG,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;QAC/D,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;KAC5D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,2DAA2D,CAAC,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;YAChD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvB,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAC9E,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,wFAAwF;YACxF,uCAAuC;QACzC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;QACvE,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,eAAe,EAAE,2DAA2D,CAAC,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/E,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../src/tools/memories.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -3,16 +3,29 @@ export interface McpMemoryConfig {
3
3
  apiKey: string;
4
4
  authScheme?: 'ApiKey' | 'Bearer';
5
5
  userId: string;
6
- agentName: string;
6
+ /** null when no agent is in context (a user API key) — the agent-less half of the 2×2. */
7
+ agentName: string | null;
8
+ /** Conversation this MCP serves (Plan 43 G1 env) — scopes file tools by default. */
9
+ conversationId?: string;
7
10
  }
8
11
  export interface ToolContext {
9
12
  userId: string;
10
- agentName: string;
13
+ /** null when no agent is in context (a user API key) — reads see profile+org, and the
14
+ * agent-bearing scopes are refused by the server with MEMORY_AGENT_REQUIRED. */
15
+ agentName: string | null;
11
16
  /** Ids seen via list-memories or get-memory — gates delete / mark-useful. */
12
17
  seenIds: Set<string>;
13
18
  /** Ids whose full content was fetched via get-memory — gates update-memory. */
14
19
  fetchedIds: Set<string>;
15
20
  /** Whether list-memories/search ran this session — gates create-memory. */
16
21
  hasListed: boolean;
22
+ /**
23
+ * The conversation this MCP is serving (Plan 43 G1 injects it into the env).
24
+ *
25
+ * It is what makes `save-file` need no arguments in the common case: a file lands in the
26
+ * conversation that produced it, so a later turn finds it with `list-files` and no id to
27
+ * remember. Absent from a workflow step, where there is no conversation.
28
+ */
29
+ conversationId?: string;
17
30
  }
18
31
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;qFACiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
package/dist/util.d.ts CHANGED
@@ -1,3 +1,12 @@
1
+ import type { ToolContext } from './types.js';
2
+ /**
3
+ * The `?agent=` query param — PRESENT only when an agent is really in context.
4
+ *
5
+ * Sending `agent=` empty is not the same as omitting it: the server reads an empty name as a
6
+ * request it cannot honour, while an absent one is the legitimate agent-less principal
7
+ * (Plan 52 A.1). Every tool goes through here so the distinction cannot be lost at one site.
8
+ */
9
+ export declare function agentParams(ctx: ToolContext): Record<string, string>;
1
10
  export declare function jsonResult(data: unknown): {
2
11
  content: {
3
12
  type: "text";
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAIvC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO;;;;;;EAWzC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAIvC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO;;;;;;EAWzC"}
package/dist/util.js CHANGED
@@ -1,4 +1,14 @@
1
1
  import { DudamelApiError } from './http-client.js';
2
+ /**
3
+ * The `?agent=` query param — PRESENT only when an agent is really in context.
4
+ *
5
+ * Sending `agent=` empty is not the same as omitting it: the server reads an empty name as a
6
+ * request it cannot honour, while an absent one is the legitimate agent-less principal
7
+ * (Plan 52 A.1). Every tool goes through here so the distinction cannot be lost at one site.
8
+ */
9
+ export function agentParams(ctx) {
10
+ return ctx.agentName ? { agent: ctx.agentName } : {};
11
+ }
2
12
  export function jsonResult(data) {
3
13
  return {
4
14
  content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,OAAO,GACX,KAAK,YAAY,eAAe;QAC9B,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QAC5C,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,OAAO,GACX,KAAK,YAAY,eAAe;QAC9B,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QAC5C,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudamel/mcp-memory",
3
- "version": "0.1.0",
3
+ "version": "2026.917.2",
4
4
  "description": "Dudamel Memory MCP — stdio client for an org's Dudamel memory (agent/user knowledge) over its REST API.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "type": "module",