hippocampus-mcp 1.0.0

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.
Files changed (70) hide show
  1. package/README.md +284 -0
  2. package/dist/aws/credentials-provider.d.ts +20 -0
  3. package/dist/aws/credentials-provider.d.ts.map +1 -0
  4. package/dist/aws/credentials-provider.js +107 -0
  5. package/dist/aws/credentials-provider.js.map +1 -0
  6. package/dist/config/environment.d.ts +12 -0
  7. package/dist/config/environment.d.ts.map +1 -0
  8. package/dist/config/environment.js +42 -0
  9. package/dist/config/environment.js.map +1 -0
  10. package/dist/config/index.d.ts +2 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +2 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/data/dynamodb-client.d.ts +25 -0
  15. package/dist/data/dynamodb-client.d.ts.map +1 -0
  16. package/dist/data/dynamodb-client.js +107 -0
  17. package/dist/data/dynamodb-client.js.map +1 -0
  18. package/dist/data/entity-manager.d.ts +31 -0
  19. package/dist/data/entity-manager.d.ts.map +1 -0
  20. package/dist/data/entity-manager.js +330 -0
  21. package/dist/data/entity-manager.js.map +1 -0
  22. package/dist/data/models.d.ts +67 -0
  23. package/dist/data/models.d.ts.map +1 -0
  24. package/dist/data/models.js +19 -0
  25. package/dist/data/models.js.map +1 -0
  26. package/dist/data/preference-manager.d.ts +11 -0
  27. package/dist/data/preference-manager.d.ts.map +1 -0
  28. package/dist/data/preference-manager.js +47 -0
  29. package/dist/data/preference-manager.js.map +1 -0
  30. package/dist/data/search-engine.d.ts +19 -0
  31. package/dist/data/search-engine.d.ts.map +1 -0
  32. package/dist/data/search-engine.js +164 -0
  33. package/dist/data/search-engine.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +105 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp/resource-registry.d.ts +18 -0
  39. package/dist/mcp/resource-registry.d.ts.map +1 -0
  40. package/dist/mcp/resource-registry.js +140 -0
  41. package/dist/mcp/resource-registry.js.map +1 -0
  42. package/dist/mcp/tool-handler.d.ts +37 -0
  43. package/dist/mcp/tool-handler.d.ts.map +1 -0
  44. package/dist/mcp/tool-handler.js +221 -0
  45. package/dist/mcp/tool-handler.js.map +1 -0
  46. package/dist/mcp/tool-registry.d.ts +6 -0
  47. package/dist/mcp/tool-registry.d.ts.map +1 -0
  48. package/dist/mcp/tool-registry.js +619 -0
  49. package/dist/mcp/tool-registry.js.map +1 -0
  50. package/dist/protocol/jsonrpc-handler.d.ts +36 -0
  51. package/dist/protocol/jsonrpc-handler.d.ts.map +1 -0
  52. package/dist/protocol/jsonrpc-handler.js +143 -0
  53. package/dist/protocol/jsonrpc-handler.js.map +1 -0
  54. package/dist/protocol/stdio-handler.d.ts +20 -0
  55. package/dist/protocol/stdio-handler.d.ts.map +1 -0
  56. package/dist/protocol/stdio-handler.js +100 -0
  57. package/dist/protocol/stdio-handler.js.map +1 -0
  58. package/dist/protocol/types.d.ts +38 -0
  59. package/dist/protocol/types.d.ts.map +1 -0
  60. package/dist/protocol/types.js +11 -0
  61. package/dist/protocol/types.js.map +1 -0
  62. package/dist/utils/errors.d.ts +2 -0
  63. package/dist/utils/errors.d.ts.map +1 -0
  64. package/dist/utils/errors.js +2 -0
  65. package/dist/utils/errors.js.map +1 -0
  66. package/dist/utils/logger.d.ts +2 -0
  67. package/dist/utils/logger.d.ts.map +1 -0
  68. package/dist/utils/logger.js +2 -0
  69. package/dist/utils/logger.js.map +1 -0
  70. package/package.json +81 -0
@@ -0,0 +1,164 @@
1
+ export class SearchEngine {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ async searchAll(query, entityType, limit = 20) {
7
+ if (!query || query.trim() === '') {
8
+ return [];
9
+ }
10
+ const normalizedQuery = query.toLowerCase();
11
+ const scanParams = {};
12
+ if (entityType) {
13
+ scanParams.FilterExpression = 'entity_type = :entity_type';
14
+ scanParams.ExpressionAttributeValues = {
15
+ ':entity_type': entityType,
16
+ };
17
+ }
18
+ const result = await this.client.scan(scanParams);
19
+ const items = (result.Items || []);
20
+ const scoredResults = [];
21
+ for (const item of items) {
22
+ const score = this.calculateRelevanceScore(item, normalizedQuery);
23
+ if (score > 0) {
24
+ scoredResults.push({
25
+ entity_type: item.entity_type,
26
+ id: item.id,
27
+ relevance_score: score,
28
+ preview: this.generatePreview(item, normalizedQuery),
29
+ data: item,
30
+ });
31
+ }
32
+ }
33
+ scoredResults.sort((a, b) => b.relevance_score - a.relevance_score);
34
+ return scoredResults.slice(0, limit);
35
+ }
36
+ calculateRelevanceScore(entity, normalizedQuery) {
37
+ let score = 0;
38
+ let matchCount = 0;
39
+ const scoreField = (fieldValue, isPrimaryField, _fieldName) => {
40
+ if (!fieldValue)
41
+ return;
42
+ const normalizedField = fieldValue.toLowerCase();
43
+ if (normalizedField === normalizedQuery) {
44
+ score += isPrimaryField ? 100 : 50;
45
+ matchCount++;
46
+ }
47
+ else if (normalizedField.includes(normalizedQuery)) {
48
+ score += isPrimaryField ? 50 : 25;
49
+ matchCount++;
50
+ if (normalizedField.startsWith(normalizedQuery)) {
51
+ score += 10;
52
+ }
53
+ }
54
+ };
55
+ switch (entity.entity_type) {
56
+ case 'preference':
57
+ const pref = entity;
58
+ scoreField(pref.id, true, 'id');
59
+ scoreField(pref.value, false, 'value');
60
+ break;
61
+ case 'person':
62
+ const person = entity;
63
+ scoreField(person.name, true, 'name');
64
+ scoreField(person.relationship, false, 'relationship');
65
+ scoreField(person.notes, false, 'notes');
66
+ if (person.contact_info) {
67
+ Object.values(person.contact_info).forEach(value => {
68
+ scoreField(value, false, 'contact_info');
69
+ });
70
+ }
71
+ break;
72
+ case 'event':
73
+ const event = entity;
74
+ scoreField(event.title, true, 'title');
75
+ scoreField(event.location, false, 'location');
76
+ scoreField(event.notes, false, 'notes');
77
+ if (event.attendees) {
78
+ event.attendees.forEach(attendee => {
79
+ scoreField(attendee, false, 'attendees');
80
+ });
81
+ }
82
+ break;
83
+ case 'task':
84
+ const task = entity;
85
+ scoreField(task.title, true, 'title');
86
+ scoreField(task.description, false, 'description');
87
+ break;
88
+ case 'place':
89
+ const place = entity;
90
+ scoreField(place.name, true, 'name');
91
+ scoreField(place.address, false, 'address');
92
+ scoreField(place.type, false, 'type');
93
+ scoreField(place.notes, false, 'notes');
94
+ break;
95
+ case 'note':
96
+ const note = entity;
97
+ scoreField(note.title, true, 'title');
98
+ scoreField(note.content, false, 'content');
99
+ scoreField(note.category, false, 'category');
100
+ if (note.tags) {
101
+ note.tags.forEach(tag => {
102
+ scoreField(tag, false, 'tags');
103
+ });
104
+ }
105
+ break;
106
+ }
107
+ if (matchCount > 1) {
108
+ score += (matchCount - 1) * 5;
109
+ }
110
+ return score;
111
+ }
112
+ generatePreview(entity, _normalizedQuery) {
113
+ let preview = '';
114
+ switch (entity.entity_type) {
115
+ case 'preference':
116
+ const pref = entity;
117
+ preview = `${pref.id}: ${pref.value}`;
118
+ break;
119
+ case 'person':
120
+ const person = entity;
121
+ preview = person.name;
122
+ if (person.relationship) {
123
+ preview += ` (${person.relationship})`;
124
+ }
125
+ if (person.notes) {
126
+ preview += ` - ${person.notes}`;
127
+ }
128
+ break;
129
+ case 'event':
130
+ const event = entity;
131
+ preview = `${event.title} - ${event.date}`;
132
+ if (event.location) {
133
+ preview += ` at ${event.location}`;
134
+ }
135
+ break;
136
+ case 'task':
137
+ const task = entity;
138
+ preview = `[${task.status}] ${task.title}`;
139
+ if (task.description) {
140
+ preview += ` - ${task.description}`;
141
+ }
142
+ break;
143
+ case 'place':
144
+ const place = entity;
145
+ preview = place.name;
146
+ if (place.address) {
147
+ preview += ` - ${place.address}`;
148
+ }
149
+ break;
150
+ case 'note':
151
+ const note = entity;
152
+ preview = `${note.title}: ${note.content}`;
153
+ break;
154
+ }
155
+ if (preview.length > 150) {
156
+ preview = preview.substring(0, 147) + '...';
157
+ }
158
+ return preview;
159
+ }
160
+ }
161
+ export function createSearchEngine(client) {
162
+ return new SearchEngine(client);
163
+ }
164
+ //# sourceMappingURL=search-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../src/data/search-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+ import { getConfig } from './config/environment.js';
3
+ import { loadCredentials, CredentialsError } from './aws/credentials-provider.js';
4
+ import { createDynamoDBClient, DynamoDBError } from './data/dynamodb-client.js';
5
+ import { createPreferenceManager } from './data/preference-manager.js';
6
+ import { createEntityManager } from './data/entity-manager.js';
7
+ import { createSearchEngine } from './data/search-engine.js';
8
+ import { createResourceRegistry } from './mcp/resource-registry.js';
9
+ import { createToolHandler } from './mcp/tool-handler.js';
10
+ import { getAllTools } from './mcp/tool-registry.js';
11
+ import { StdioHandler } from './protocol/stdio-handler.js';
12
+ import { JSONRPCHandler } from './protocol/jsonrpc-handler.js';
13
+ async function main() {
14
+ try {
15
+ console.error('[MCP Server] Starting Personal Knowledge MCP Server...');
16
+ console.error('[MCP Server] Loading configuration...');
17
+ const config = getConfig();
18
+ console.error(`[MCP Server] Configuration loaded: region=${config.awsRegion}, profile=${config.awsProfile}, table=${config.tableName}`);
19
+ console.error('[MCP Server] Loading AWS credentials...');
20
+ try {
21
+ const credentialsResult = await loadCredentials({
22
+ profile: config.awsProfile,
23
+ region: config.awsRegion,
24
+ });
25
+ console.error(`[MCP Server] AWS credentials loaded successfully from ${credentialsResult.source}`);
26
+ }
27
+ catch (error) {
28
+ if (error instanceof CredentialsError) {
29
+ console.error(`[MCP Server] ERROR: ${error.message}`);
30
+ process.exit(1);
31
+ }
32
+ throw error;
33
+ }
34
+ console.error('[MCP Server] Initializing DynamoDB client...');
35
+ const dynamoDBClient = createDynamoDBClient({
36
+ region: config.awsRegion,
37
+ profile: config.awsProfile,
38
+ tableName: config.tableName,
39
+ });
40
+ console.error(`[MCP Server] DynamoDB client initialized for table: ${dynamoDBClient.getTableName()}`);
41
+ console.error('[MCP Server] Initializing data managers...');
42
+ const preferenceManager = createPreferenceManager(dynamoDBClient);
43
+ const entityManager = createEntityManager(dynamoDBClient);
44
+ const searchEngine = createSearchEngine(dynamoDBClient);
45
+ console.error('[MCP Server] Data managers initialized');
46
+ console.error('[MCP Server] Initializing MCP registries...');
47
+ const resourceRegistry = createResourceRegistry(preferenceManager, entityManager);
48
+ const toolHandler = createToolHandler(preferenceManager, entityManager, searchEngine);
49
+ console.error('[MCP Server] MCP registries initialized');
50
+ console.error('[MCP Server] Initializing JSON-RPC handler...');
51
+ const jsonrpcHandler = new JSONRPCHandler({
52
+ name: 'personal-knowledge-mcp-server',
53
+ version: '1.0.0',
54
+ }, {
55
+ tools: {},
56
+ resources: {},
57
+ });
58
+ const allTools = getAllTools();
59
+ jsonrpcHandler.setToolRegistry(allTools);
60
+ jsonrpcHandler.setResourceRegistry(resourceRegistry.listResources());
61
+ console.error(`[MCP Server] Registered ${allTools.length} tools and ${resourceRegistry.listResources().length} resources`);
62
+ jsonrpcHandler.setToolExecutor(async (toolName, params) => {
63
+ return await toolHandler.executeTool(toolName, params);
64
+ });
65
+ jsonrpcHandler.setResourceReader(async (uri) => {
66
+ return await resourceRegistry.readResource(uri);
67
+ });
68
+ console.error('[MCP Server] Initializing stdio handler...');
69
+ const stdioHandler = new StdioHandler();
70
+ stdioHandler.setMessageHandler(async (request) => {
71
+ return await jsonrpcHandler.handleRequest(request);
72
+ });
73
+ const shutdown = async (signal) => {
74
+ console.error(`[MCP Server] Received ${signal}, shutting down gracefully...`);
75
+ stdioHandler.stop();
76
+ await dynamoDBClient.close();
77
+ console.error('[MCP Server] Shutdown complete');
78
+ process.exit(0);
79
+ };
80
+ process.on('SIGINT', () => shutdown('SIGINT'));
81
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
82
+ console.error('[MCP Server] Starting stdio handler...');
83
+ stdioHandler.start();
84
+ console.error('[MCP Server] Server is ready and listening on stdio');
85
+ }
86
+ catch (error) {
87
+ if (error instanceof DynamoDBError) {
88
+ console.error(`[MCP Server] FATAL: DynamoDB error: ${error.message}`);
89
+ console.error(`[MCP Server] Operation: ${error.operation}`);
90
+ }
91
+ else if (error instanceof Error) {
92
+ console.error(`[MCP Server] FATAL: ${error.message}`);
93
+ console.error(`[MCP Server] Stack trace: ${error.stack}`);
94
+ }
95
+ else {
96
+ console.error(`[MCP Server] FATAL: Unknown error: ${String(error)}`);
97
+ }
98
+ process.exit(1);
99
+ }
100
+ }
101
+ main().catch((error) => {
102
+ console.error(`[MCP Server] Unhandled error in main: ${error}`);
103
+ process.exit(1);
104
+ });
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { MCPResource } from '../protocol/types.js';
2
+ import { PreferenceManager } from '../data/preference-manager.js';
3
+ import { EntityManager } from '../data/entity-manager.js';
4
+ export declare class ResourceRegistry {
5
+ private readonly preferenceManager;
6
+ private readonly entityManager;
7
+ constructor(preferenceManager: PreferenceManager, entityManager: EntityManager);
8
+ listResources(): MCPResource[];
9
+ readResource(uri: string): Promise<string>;
10
+ private readPreferences;
11
+ private readPeople;
12
+ private readPerson;
13
+ private readTasks;
14
+ private readNotes;
15
+ private readNotesByCategory;
16
+ }
17
+ export declare function createResourceRegistry(preferenceManager: PreferenceManager, entityManager: EntityManager): ResourceRegistry;
18
+ //# sourceMappingURL=resource-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/resource-registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAS1D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAQlC,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa;IAY9E,aAAa,IAAI,WAAW,EAAE;IAwDxB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAmDlC,eAAe;YAYf,UAAU;YA0BV,UAAU;YAiBV,SAAS;YAmBT,SAAS;YAyBT,mBAAmB;CAiBlC;AASD,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,GAC3B,gBAAgB,CAElB"}
@@ -0,0 +1,140 @@
1
+ export class ResourceRegistry {
2
+ preferenceManager;
3
+ entityManager;
4
+ constructor(preferenceManager, entityManager) {
5
+ this.preferenceManager = preferenceManager;
6
+ this.entityManager = entityManager;
7
+ }
8
+ listResources() {
9
+ return [
10
+ {
11
+ uri: 'preferences://',
12
+ name: 'Preferences',
13
+ description: 'All personal preferences as JSON',
14
+ mimeType: 'application/json',
15
+ },
16
+ {
17
+ uri: 'people://',
18
+ name: 'People',
19
+ description: 'List of all people with basic information',
20
+ mimeType: 'application/json',
21
+ },
22
+ {
23
+ uri: 'person://{id}',
24
+ name: 'Person Details',
25
+ description: 'Detailed information about a specific person',
26
+ mimeType: 'application/json',
27
+ },
28
+ {
29
+ uri: 'tasks://',
30
+ name: 'Tasks',
31
+ description: 'List of all active tasks',
32
+ mimeType: 'application/json',
33
+ },
34
+ {
35
+ uri: 'notes://',
36
+ name: 'Notes',
37
+ description: 'List of all notes with metadata',
38
+ mimeType: 'application/json',
39
+ },
40
+ {
41
+ uri: 'work-logs://',
42
+ name: 'Work Logs',
43
+ description: 'List of all work log notes (category: work_log)',
44
+ mimeType: 'application/json',
45
+ },
46
+ {
47
+ uri: 'journal://',
48
+ name: 'Personal Journal',
49
+ description: 'List of all personal journal entries (category: personal_journal)',
50
+ mimeType: 'application/json',
51
+ },
52
+ ];
53
+ }
54
+ async readResource(uri) {
55
+ if (uri === 'preferences://') {
56
+ return await this.readPreferences();
57
+ }
58
+ if (uri === 'people://') {
59
+ return await this.readPeople();
60
+ }
61
+ if (uri.startsWith('person://')) {
62
+ const id = uri.substring('person://'.length);
63
+ if (!id) {
64
+ throw new Error('Person ID is required in URI: person://{id}');
65
+ }
66
+ return await this.readPerson(id);
67
+ }
68
+ if (uri === 'tasks://') {
69
+ return await this.readTasks();
70
+ }
71
+ if (uri === 'notes://') {
72
+ return await this.readNotes();
73
+ }
74
+ if (uri === 'work-logs://') {
75
+ return await this.readNotesByCategory('work_log');
76
+ }
77
+ if (uri === 'journal://') {
78
+ return await this.readNotesByCategory('personal_journal');
79
+ }
80
+ throw new Error(`Unknown resource URI: ${uri}`);
81
+ }
82
+ async readPreferences() {
83
+ const preferences = await this.preferenceManager.listPreferences();
84
+ return JSON.stringify(preferences, null, 2);
85
+ }
86
+ async readPeople() {
87
+ const people = await this.entityManager.searchPeople('');
88
+ const basicInfo = people.map((person) => ({
89
+ id: person.id,
90
+ name: person.name,
91
+ relationship: person.relationship,
92
+ last_interaction: person.last_interaction,
93
+ created_at: person.created_at,
94
+ updated_at: person.updated_at,
95
+ }));
96
+ return JSON.stringify(basicInfo, null, 2);
97
+ }
98
+ async readPerson(id) {
99
+ const person = await this.entityManager.getPerson(id);
100
+ if (!person) {
101
+ throw new Error(`Person with id ${id} not found`);
102
+ }
103
+ return JSON.stringify(person, null, 2);
104
+ }
105
+ async readTasks() {
106
+ const allTasks = await this.entityManager.listTasks();
107
+ const activeTasks = allTasks.filter((task) => task.status === 'todo' || task.status === 'in_progress');
108
+ return JSON.stringify(activeTasks, null, 2);
109
+ }
110
+ async readNotes() {
111
+ const notes = await this.entityManager.listNotes();
112
+ const notesWithMetadata = notes.map((note) => ({
113
+ id: note.id,
114
+ title: note.title,
115
+ category: note.category,
116
+ tags: note.tags,
117
+ created_at: note.created_at,
118
+ updated_at: note.updated_at,
119
+ content: note.content,
120
+ }));
121
+ return JSON.stringify(notesWithMetadata, null, 2);
122
+ }
123
+ async readNotesByCategory(category) {
124
+ const notes = await this.entityManager.listNotes(category);
125
+ const notesWithMetadata = notes.map((note) => ({
126
+ id: note.id,
127
+ title: note.title,
128
+ category: note.category,
129
+ tags: note.tags,
130
+ created_at: note.created_at,
131
+ updated_at: note.updated_at,
132
+ content: note.content,
133
+ }));
134
+ return JSON.stringify(notesWithMetadata, null, 2);
135
+ }
136
+ }
137
+ export function createResourceRegistry(preferenceManager, entityManager) {
138
+ return new ResourceRegistry(preferenceManager, entityManager);
139
+ }
140
+ //# sourceMappingURL=resource-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../../src/mcp/resource-registry.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,gBAAgB;IACV,iBAAiB,CAAoB;IACrC,aAAa,CAAgB;IAQ9C,YAAY,iBAAoC,EAAE,aAA4B;QAC5E,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IASD,aAAa;QACX,OAAO;YACL;gBACE,GAAG,EAAE,gBAAgB;gBACrB,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,kCAAkC;gBAC/C,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;gBACxD,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,eAAe;gBACpB,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,0BAA0B;gBACvC,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,iCAAiC;gBAC9C,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,cAAc;gBACnB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,iDAAiD;gBAC9D,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,YAAY;gBACjB,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,mEAAmE;gBAChF,QAAQ,EAAE,kBAAkB;aAC7B;SACF,CAAC;IACJ,CAAC;IAWD,KAAK,CAAC,YAAY,CAAC,GAAW;QAE5B,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC7B,OAAO,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,CAAC;QAGD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC;QAGD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAGD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,OAAO,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,CAAC;QAGD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,OAAO,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,CAAC;QAGD,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAC3B,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QAGD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAC5D,CAAC;QAGD,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IASO,KAAK,CAAC,eAAe;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IASO,KAAK,CAAC,UAAU;QAEtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAGzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAWO,KAAK,CAAC,UAAU,CAAC,EAAU;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IASO,KAAK,CAAC,SAAS;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAGtD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE,CACjD,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CACxD,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IASO,KAAK,CAAC,SAAS;QAErB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAGnD,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC;YACnD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAE3B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAQO,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QAEhD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAG3D,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC;YACnD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AASD,MAAM,UAAU,sBAAsB,CACpC,iBAAoC,EACpC,aAA4B;IAE5B,OAAO,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { PreferenceManager } from '../data/preference-manager.js';
2
+ import { EntityManager } from '../data/entity-manager.js';
3
+ import { SearchEngine } from '../data/search-engine.js';
4
+ export declare class ToolHandler {
5
+ private readonly preferenceManager;
6
+ private readonly entityManager;
7
+ private readonly searchEngine;
8
+ constructor(preferenceManager: PreferenceManager, entityManager: EntityManager, searchEngine: SearchEngine);
9
+ executeTool(toolName: string, params: Record<string, any>): Promise<any>;
10
+ private validateParameters;
11
+ private handleGetPreference;
12
+ private handleSetPreference;
13
+ private handleListPreferences;
14
+ private handleGetPerson;
15
+ private handleAddPerson;
16
+ private handleUpdatePerson;
17
+ private handleSearchPeople;
18
+ private handleGetEvent;
19
+ private handleAddEvent;
20
+ private handleListEvents;
21
+ private handleUpdateEvent;
22
+ private handleGetTask;
23
+ private handleAddTask;
24
+ private handleListTasks;
25
+ private handleUpdateTask;
26
+ private handleGetPlace;
27
+ private handleAddPlace;
28
+ private handleSearchPlaces;
29
+ private handleUpdatePlace;
30
+ private handleGetNote;
31
+ private handleAddNote;
32
+ private handleListNotes;
33
+ private handleUpdateNote;
34
+ private handleSearchAll;
35
+ }
36
+ export declare function createToolHandler(preferenceManager: PreferenceManager, entityManager: EntityManager, searchEngine: SearchEngine): ToolHandler;
37
+ //# sourceMappingURL=tool-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOxD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAU1C,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY;IAiBtB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IA0G9E,OAAO,CAAC,kBAAkB;YAiBZ,mBAAmB;YAKnB,mBAAmB;YAQnB,qBAAqB;YAOrB,eAAe;YAQf,eAAe;YAWf,kBAAkB;YAMlB,kBAAkB;YAOlB,cAAc;YAKd,cAAc;YAWd,gBAAgB;YAQhB,iBAAiB;YAQjB,aAAa;YAKb,aAAa;YAWb,eAAe;YAQf,gBAAgB;YAQhB,cAAc;YAQd,cAAc;YAWd,kBAAkB;YAKlB,iBAAiB;YAQjB,aAAa;YAKb,aAAa;YAUb,eAAe;YAQf,gBAAgB;YAQhB,eAAe;CAQ9B;AAUD,wBAAgB,iBAAiB,CAC/B,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GACzB,WAAW,CAEb"}