@iwo-szapar/data-mcp 0.1.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.
- package/dist/adapter/factory.d.ts +9 -0
- package/dist/adapter/factory.d.ts.map +1 -0
- package/dist/adapter/factory.js +23 -0
- package/dist/adapter/factory.js.map +1 -0
- package/dist/adapter/pocketbase.d.ts +37 -0
- package/dist/adapter/pocketbase.d.ts.map +1 -0
- package/dist/adapter/pocketbase.js +350 -0
- package/dist/adapter/pocketbase.js.map +1 -0
- package/dist/adapter/schema-map.d.ts +45 -0
- package/dist/adapter/schema-map.d.ts.map +1 -0
- package/dist/adapter/schema-map.js +75 -0
- package/dist/adapter/schema-map.js.map +1 -0
- package/dist/adapter/supabase.d.ts +32 -0
- package/dist/adapter/supabase.d.ts.map +1 -0
- package/dist/adapter/supabase.js +294 -0
- package/dist/adapter/supabase.js.map +1 -0
- package/dist/adapter/types.d.ts +67 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +9 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +62 -0
- package/dist/config.js.map +1 -0
- package/dist/errors/adapter-error.d.ts +12 -0
- package/dist/errors/adapter-error.d.ts.map +1 -0
- package/dist/errors/adapter-error.js +15 -0
- package/dist/errors/adapter-error.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/search/alias-expansion.d.ts +53 -0
- package/dist/search/alias-expansion.d.ts.map +1 -0
- package/dist/search/alias-expansion.js +131 -0
- package/dist/search/alias-expansion.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +40 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/business/blog-create.d.ts +9 -0
- package/dist/tools/business/blog-create.d.ts.map +1 -0
- package/dist/tools/business/blog-create.js +53 -0
- package/dist/tools/business/blog-create.js.map +1 -0
- package/dist/tools/business/blog-delete.d.ts +9 -0
- package/dist/tools/business/blog-delete.d.ts.map +1 -0
- package/dist/tools/business/blog-delete.js +29 -0
- package/dist/tools/business/blog-delete.js.map +1 -0
- package/dist/tools/business/blog-list.d.ts +9 -0
- package/dist/tools/business/blog-list.d.ts.map +1 -0
- package/dist/tools/business/blog-list.js +37 -0
- package/dist/tools/business/blog-list.js.map +1 -0
- package/dist/tools/business/blog-update.d.ts +9 -0
- package/dist/tools/business/blog-update.d.ts.map +1 -0
- package/dist/tools/business/blog-update.js +66 -0
- package/dist/tools/business/blog-update.js.map +1 -0
- package/dist/tools/business/content-queue-add.d.ts +9 -0
- package/dist/tools/business/content-queue-add.d.ts.map +1 -0
- package/dist/tools/business/content-queue-add.js +40 -0
- package/dist/tools/business/content-queue-add.js.map +1 -0
- package/dist/tools/business/content-queue-list.d.ts +9 -0
- package/dist/tools/business/content-queue-list.d.ts.map +1 -0
- package/dist/tools/business/content-queue-list.js +41 -0
- package/dist/tools/business/content-queue-list.js.map +1 -0
- package/dist/tools/business/email-queue-add.d.ts +9 -0
- package/dist/tools/business/email-queue-add.d.ts.map +1 -0
- package/dist/tools/business/email-queue-add.js +47 -0
- package/dist/tools/business/email-queue-add.js.map +1 -0
- package/dist/tools/business/prospect-create.d.ts +9 -0
- package/dist/tools/business/prospect-create.d.ts.map +1 -0
- package/dist/tools/business/prospect-create.js +50 -0
- package/dist/tools/business/prospect-create.js.map +1 -0
- package/dist/tools/business/prospect-list.d.ts +9 -0
- package/dist/tools/business/prospect-list.d.ts.map +1 -0
- package/dist/tools/business/prospect-list.js +37 -0
- package/dist/tools/business/prospect-list.js.map +1 -0
- package/dist/tools/business/prospect-search.d.ts +9 -0
- package/dist/tools/business/prospect-search.d.ts.map +1 -0
- package/dist/tools/business/prospect-search.js +29 -0
- package/dist/tools/business/prospect-search.js.map +1 -0
- package/dist/tools/business/prospect-update.d.ts +9 -0
- package/dist/tools/business/prospect-update.d.ts.map +1 -0
- package/dist/tools/business/prospect-update.js +68 -0
- package/dist/tools/business/prospect-update.js.map +1 -0
- package/dist/tools/memory/brain-decay.d.ts +11 -0
- package/dist/tools/memory/brain-decay.d.ts.map +1 -0
- package/dist/tools/memory/brain-decay.js +58 -0
- package/dist/tools/memory/brain-decay.js.map +1 -0
- package/dist/tools/memory/brain-stats.d.ts +11 -0
- package/dist/tools/memory/brain-stats.d.ts.map +1 -0
- package/dist/tools/memory/brain-stats.js +63 -0
- package/dist/tools/memory/brain-stats.js.map +1 -0
- package/dist/tools/memory/contact-create.d.ts +9 -0
- package/dist/tools/memory/contact-create.d.ts.map +1 -0
- package/dist/tools/memory/contact-create.js +42 -0
- package/dist/tools/memory/contact-create.js.map +1 -0
- package/dist/tools/memory/contact-list.d.ts +9 -0
- package/dist/tools/memory/contact-list.d.ts.map +1 -0
- package/dist/tools/memory/contact-list.js +30 -0
- package/dist/tools/memory/contact-list.js.map +1 -0
- package/dist/tools/memory/contact-search.d.ts +9 -0
- package/dist/tools/memory/contact-search.d.ts.map +1 -0
- package/dist/tools/memory/contact-search.js +29 -0
- package/dist/tools/memory/contact-search.js.map +1 -0
- package/dist/tools/memory/contact-update.d.ts +9 -0
- package/dist/tools/memory/contact-update.d.ts.map +1 -0
- package/dist/tools/memory/contact-update.js +59 -0
- package/dist/tools/memory/contact-update.js.map +1 -0
- package/dist/tools/memory/goal-create.d.ts +9 -0
- package/dist/tools/memory/goal-create.d.ts.map +1 -0
- package/dist/tools/memory/goal-create.js +40 -0
- package/dist/tools/memory/goal-create.js.map +1 -0
- package/dist/tools/memory/goal-list.d.ts +9 -0
- package/dist/tools/memory/goal-list.d.ts.map +1 -0
- package/dist/tools/memory/goal-list.js +41 -0
- package/dist/tools/memory/goal-list.js.map +1 -0
- package/dist/tools/memory/goal-update.d.ts +9 -0
- package/dist/tools/memory/goal-update.d.ts.map +1 -0
- package/dist/tools/memory/goal-update.js +51 -0
- package/dist/tools/memory/goal-update.js.map +1 -0
- package/dist/tools/memory/knowledge-decide.d.ts +10 -0
- package/dist/tools/memory/knowledge-decide.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-decide.js +39 -0
- package/dist/tools/memory/knowledge-decide.js.map +1 -0
- package/dist/tools/memory/knowledge-delete.d.ts +10 -0
- package/dist/tools/memory/knowledge-delete.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-delete.js +33 -0
- package/dist/tools/memory/knowledge-delete.js.map +1 -0
- package/dist/tools/memory/knowledge-learn.d.ts +10 -0
- package/dist/tools/memory/knowledge-learn.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-learn.js +39 -0
- package/dist/tools/memory/knowledge-learn.js.map +1 -0
- package/dist/tools/memory/knowledge-list.d.ts +9 -0
- package/dist/tools/memory/knowledge-list.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-list.js +43 -0
- package/dist/tools/memory/knowledge-list.js.map +1 -0
- package/dist/tools/memory/knowledge-recall.d.ts +11 -0
- package/dist/tools/memory/knowledge-recall.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-recall.js +79 -0
- package/dist/tools/memory/knowledge-recall.js.map +1 -0
- package/dist/tools/memory/knowledge-store.d.ts +10 -0
- package/dist/tools/memory/knowledge-store.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-store.js +56 -0
- package/dist/tools/memory/knowledge-store.js.map +1 -0
- package/dist/tools/memory/knowledge-update.d.ts +10 -0
- package/dist/tools/memory/knowledge-update.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-update.js +50 -0
- package/dist/tools/memory/knowledge-update.js.map +1 -0
- package/dist/tools/memory/knowledge-validate.d.ts +10 -0
- package/dist/tools/memory/knowledge-validate.d.ts.map +1 -0
- package/dist/tools/memory/knowledge-validate.js +40 -0
- package/dist/tools/memory/knowledge-validate.js.map +1 -0
- package/dist/tools/memory/session-list.d.ts +9 -0
- package/dist/tools/memory/session-list.d.ts.map +1 -0
- package/dist/tools/memory/session-list.js +30 -0
- package/dist/tools/memory/session-list.js.map +1 -0
- package/dist/tools/memory/session-log.d.ts +9 -0
- package/dist/tools/memory/session-log.d.ts.map +1 -0
- package/dist/tools/memory/session-log.js +56 -0
- package/dist/tools/memory/session-log.js.map +1 -0
- package/dist/tools/memory/task-create.d.ts +9 -0
- package/dist/tools/memory/task-create.d.ts.map +1 -0
- package/dist/tools/memory/task-create.js +38 -0
- package/dist/tools/memory/task-create.js.map +1 -0
- package/dist/tools/memory/task-list.d.ts +9 -0
- package/dist/tools/memory/task-list.d.ts.map +1 -0
- package/dist/tools/memory/task-list.js +41 -0
- package/dist/tools/memory/task-list.js.map +1 -0
- package/dist/tools/memory/task-update.d.ts +9 -0
- package/dist/tools/memory/task-update.d.ts.map +1 -0
- package/dist/tools/memory/task-update.js +50 -0
- package/dist/tools/memory/task-update.js.map +1 -0
- package/dist/tools/register.d.ts +7 -0
- package/dist/tools/register.d.ts.map +1 -0
- package/dist/tools/register.js +84 -0
- package/dist/tools/register.js.map +1 -0
- package/dist/tools/setup/setup-migrate.d.ts +10 -0
- package/dist/tools/setup/setup-migrate.d.ts.map +1 -0
- package/dist/tools/setup/setup-migrate.js +73 -0
- package/dist/tools/setup/setup-migrate.js.map +1 -0
- package/dist/tools/setup/setup-seed.d.ts +9 -0
- package/dist/tools/setup/setup-seed.d.ts.map +1 -0
- package/dist/tools/setup/setup-seed.js +133 -0
- package/dist/tools/setup/setup-seed.js.map +1 -0
- package/dist/tools/setup/setup-status.d.ts +9 -0
- package/dist/tools/setup/setup-status.d.ts.map +1 -0
- package/dist/tools/setup/setup-status.js +76 -0
- package/dist/tools/setup/setup-status.js.map +1 -0
- package/dist/tools/shared.d.ts +56 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +93 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/types/records.d.ts +163 -0
- package/dist/types/records.d.ts.map +1 -0
- package/dist/types/records.js +8 -0
- package/dist/types/records.js.map +1 -0
- package/migrations/pocketbase/001_core_schema.js +72 -0
- package/migrations/pocketbase/002_goals_tasks.js +49 -0
- package/migrations/pocketbase/003_contacts.js +29 -0
- package/migrations/pocketbase/004_entity_aliases.js +40 -0
- package/migrations/pocketbase/005_prospects.js +33 -0
- package/migrations/pocketbase/006_business.js +80 -0
- package/migrations/pocketbase/007_newsletter_affiliates.js +50 -0
- package/migrations/supabase/001_core_schema.sql +78 -0
- package/migrations/supabase/002_goals_tasks.sql +38 -0
- package/migrations/supabase/003_contacts.sql +27 -0
- package/migrations/supabase/004_entity_aliases.sql +22 -0
- package/migrations/supabase/005_prospects.sql +31 -0
- package/migrations/supabase/006_business.sql +68 -0
- package/migrations/supabase/007_seed_aliases.sql +69 -0
- package/migrations/supabase/008_newsletter_affiliates.sql +39 -0
- package/package.json +48 -0
- package/seed/entity-aliases.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-update.js","sourceRoot":"","sources":["../../../src/tools/memory/task-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registration — imports and calls all 35 register functions.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
+
import type { DataAdapter } from '../adapter/types.js';
|
|
6
|
+
export declare function registerAllTools(server: McpServer, adapter: DataAdapter): void;
|
|
7
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA4CvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA0C9E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registration — imports and calls all 35 register functions.
|
|
3
|
+
*/
|
|
4
|
+
// Memory tools (22)
|
|
5
|
+
import { registerKnowledgeStore } from './memory/knowledge-store.js';
|
|
6
|
+
import { registerKnowledgeRecall } from './memory/knowledge-recall.js';
|
|
7
|
+
import { registerKnowledgeLearn } from './memory/knowledge-learn.js';
|
|
8
|
+
import { registerKnowledgeDecide } from './memory/knowledge-decide.js';
|
|
9
|
+
import { registerKnowledgeValidate } from './memory/knowledge-validate.js';
|
|
10
|
+
import { registerKnowledgeUpdate } from './memory/knowledge-update.js';
|
|
11
|
+
import { registerKnowledgeDelete } from './memory/knowledge-delete.js';
|
|
12
|
+
import { registerKnowledgeList } from './memory/knowledge-list.js';
|
|
13
|
+
import { registerSessionLog } from './memory/session-log.js';
|
|
14
|
+
import { registerSessionList } from './memory/session-list.js';
|
|
15
|
+
import { registerGoalCreate } from './memory/goal-create.js';
|
|
16
|
+
import { registerGoalUpdate } from './memory/goal-update.js';
|
|
17
|
+
import { registerGoalList } from './memory/goal-list.js';
|
|
18
|
+
import { registerTaskCreate } from './memory/task-create.js';
|
|
19
|
+
import { registerTaskUpdate } from './memory/task-update.js';
|
|
20
|
+
import { registerTaskList } from './memory/task-list.js';
|
|
21
|
+
import { registerContactCreate } from './memory/contact-create.js';
|
|
22
|
+
import { registerContactUpdate } from './memory/contact-update.js';
|
|
23
|
+
import { registerContactList } from './memory/contact-list.js';
|
|
24
|
+
import { registerContactSearch } from './memory/contact-search.js';
|
|
25
|
+
import { registerBrainStats } from './memory/brain-stats.js';
|
|
26
|
+
import { registerBrainDecay } from './memory/brain-decay.js';
|
|
27
|
+
// Setup tools (3)
|
|
28
|
+
import { registerSetupStatus } from './setup/setup-status.js';
|
|
29
|
+
import { registerSetupMigrate } from './setup/setup-migrate.js';
|
|
30
|
+
import { registerSetupSeed } from './setup/setup-seed.js';
|
|
31
|
+
// Business tools (11)
|
|
32
|
+
import { registerProspectCreate } from './business/prospect-create.js';
|
|
33
|
+
import { registerProspectUpdate } from './business/prospect-update.js';
|
|
34
|
+
import { registerProspectList } from './business/prospect-list.js';
|
|
35
|
+
import { registerProspectSearch } from './business/prospect-search.js';
|
|
36
|
+
import { registerBlogCreate } from './business/blog-create.js';
|
|
37
|
+
import { registerBlogUpdate } from './business/blog-update.js';
|
|
38
|
+
import { registerBlogList } from './business/blog-list.js';
|
|
39
|
+
import { registerBlogDelete } from './business/blog-delete.js';
|
|
40
|
+
import { registerEmailQueueAdd } from './business/email-queue-add.js';
|
|
41
|
+
import { registerContentQueueAdd } from './business/content-queue-add.js';
|
|
42
|
+
import { registerContentQueueList } from './business/content-queue-list.js';
|
|
43
|
+
export function registerAllTools(server, adapter) {
|
|
44
|
+
// Memory tools
|
|
45
|
+
registerKnowledgeStore(server, adapter);
|
|
46
|
+
registerKnowledgeRecall(server, adapter);
|
|
47
|
+
registerKnowledgeLearn(server, adapter);
|
|
48
|
+
registerKnowledgeDecide(server, adapter);
|
|
49
|
+
registerKnowledgeValidate(server, adapter);
|
|
50
|
+
registerKnowledgeUpdate(server, adapter);
|
|
51
|
+
registerKnowledgeDelete(server, adapter);
|
|
52
|
+
registerKnowledgeList(server, adapter);
|
|
53
|
+
registerSessionLog(server, adapter);
|
|
54
|
+
registerSessionList(server, adapter);
|
|
55
|
+
registerGoalCreate(server, adapter);
|
|
56
|
+
registerGoalUpdate(server, adapter);
|
|
57
|
+
registerGoalList(server, adapter);
|
|
58
|
+
registerTaskCreate(server, adapter);
|
|
59
|
+
registerTaskUpdate(server, adapter);
|
|
60
|
+
registerTaskList(server, adapter);
|
|
61
|
+
registerContactCreate(server, adapter);
|
|
62
|
+
registerContactUpdate(server, adapter);
|
|
63
|
+
registerContactList(server, adapter);
|
|
64
|
+
registerContactSearch(server, adapter);
|
|
65
|
+
registerBrainStats(server, adapter);
|
|
66
|
+
registerBrainDecay(server, adapter);
|
|
67
|
+
// Setup tools
|
|
68
|
+
registerSetupStatus(server, adapter);
|
|
69
|
+
registerSetupMigrate(server, adapter);
|
|
70
|
+
registerSetupSeed(server, adapter);
|
|
71
|
+
// Business tools
|
|
72
|
+
registerProspectCreate(server, adapter);
|
|
73
|
+
registerProspectUpdate(server, adapter);
|
|
74
|
+
registerProspectList(server, adapter);
|
|
75
|
+
registerProspectSearch(server, adapter);
|
|
76
|
+
registerBlogCreate(server, adapter);
|
|
77
|
+
registerBlogUpdate(server, adapter);
|
|
78
|
+
registerBlogList(server, adapter);
|
|
79
|
+
registerBlogDelete(server, adapter);
|
|
80
|
+
registerEmailQueueAdd(server, adapter);
|
|
81
|
+
registerContentQueueAdd(server, adapter);
|
|
82
|
+
registerContentQueueList(server, adapter);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_migrate
|
|
3
|
+
*
|
|
4
|
+
* Apply migrations — additive only, skips existing collections.
|
|
5
|
+
* Creates all expected collections in the database.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type { DataAdapter } from '../../adapter/types.js';
|
|
9
|
+
export declare function registerSetupMigrate(server: McpServer, adapter: DataAdapter): void;
|
|
10
|
+
//# sourceMappingURL=setup-migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-migrate.d.ts","sourceRoot":"","sources":["../../../src/tools/setup/setup-migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmB1D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAwDlF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_migrate
|
|
3
|
+
*
|
|
4
|
+
* Apply migrations — additive only, skips existing collections.
|
|
5
|
+
* Creates all expected collections in the database.
|
|
6
|
+
*/
|
|
7
|
+
import { makeToolResponse, makeErrorResponse } from '../shared.js';
|
|
8
|
+
/** Collection schemas for PocketBase creation */
|
|
9
|
+
const COLLECTION_SCHEMAS = [
|
|
10
|
+
{ name: 'knowledge', description: 'Knowledge items (facts, patterns, insights, lessons, references)' },
|
|
11
|
+
{ name: 'decisions', description: 'Recorded decisions with context and rationale' },
|
|
12
|
+
{ name: 'sessions', description: 'Work session logs' },
|
|
13
|
+
{ name: 'goals', description: 'Goals with key results' },
|
|
14
|
+
{ name: 'tasks', description: 'Tasks with status and priority' },
|
|
15
|
+
{ name: 'contacts', description: 'Contact information' },
|
|
16
|
+
{ name: 'entity_aliases', description: 'Search alias mappings' },
|
|
17
|
+
{ name: 'settings', description: 'Key-value settings store' },
|
|
18
|
+
{ name: 'prospects', description: 'Sales prospects (CRM)' },
|
|
19
|
+
{ name: 'blog_posts', description: 'Blog post content' },
|
|
20
|
+
{ name: 'email_queue', description: 'Email queue for sending' },
|
|
21
|
+
{ name: 'content_calendar', description: 'Content calendar entries' },
|
|
22
|
+
];
|
|
23
|
+
export function registerSetupMigrate(server, adapter) {
|
|
24
|
+
server.tool('setup_migrate', 'Create missing database collections/tables. Additive only — existing collections are skipped. For PocketBase, creates collections via API. For Supabase, reports SQL migrations to run manually.', {}, async () => {
|
|
25
|
+
try {
|
|
26
|
+
const skipped = [];
|
|
27
|
+
const needsMigration = [];
|
|
28
|
+
for (const schema of COLLECTION_SCHEMAS) {
|
|
29
|
+
try {
|
|
30
|
+
const exists = await adapter.collectionExists(schema.name);
|
|
31
|
+
if (exists) {
|
|
32
|
+
skipped.push(schema.name);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (adapter.backend === 'supabase') {
|
|
36
|
+
needsMigration.push({
|
|
37
|
+
name: schema.name,
|
|
38
|
+
instruction: 'Run SQL migrations from migrations/supabase/ directory.',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
needsMigration.push({
|
|
43
|
+
name: schema.name,
|
|
44
|
+
instruction: 'Run PocketBase migrations from migrations/pocketbase/ directory.',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
50
|
+
console.error(`[setup_migrate] Error checking ${schema.name}:`, msg);
|
|
51
|
+
needsMigration.push({ name: schema.name, instruction: 'Failed to check — may need migration' });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return makeToolResponse({
|
|
55
|
+
backend: adapter.backend,
|
|
56
|
+
existing: skipped.length,
|
|
57
|
+
needs_migration: needsMigration.length,
|
|
58
|
+
details: {
|
|
59
|
+
existing: skipped,
|
|
60
|
+
needs_migration: needsMigration.length > 0 ? needsMigration : undefined,
|
|
61
|
+
},
|
|
62
|
+
message: adapter.backend === 'pocketbase'
|
|
63
|
+
? `Schema check complete. ${skipped.length} existing, ${needsMigration.length} need migration files. Run PocketBase migrations from migrations/pocketbase/ directory.`
|
|
64
|
+
: `Schema check complete. ${skipped.length} existing, ${needsMigration.length} need SQL migrations. Apply migrations from migrations/supabase/ directory.`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('[setup_migrate] Error:', error);
|
|
69
|
+
return makeErrorResponse('Cannot connect to the database. Check that your database is running and credentials are correct.');
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=setup-migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-migrate.js","sourceRoot":"","sources":["../../../src/tools/setup/setup-migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_seed
|
|
3
|
+
*
|
|
4
|
+
* Seed entity aliases and default settings into the database.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { DataAdapter } from '../../adapter/types.js';
|
|
8
|
+
export declare function registerSetupSeed(server: McpServer, adapter: DataAdapter): void;
|
|
9
|
+
//# sourceMappingURL=setup-seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-seed.d.ts","sourceRoot":"","sources":["../../../src/tools/setup/setup-seed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAsE1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAgE/E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_seed
|
|
3
|
+
*
|
|
4
|
+
* Seed entity aliases and default settings into the database.
|
|
5
|
+
*/
|
|
6
|
+
import { makeToolResponse, makeErrorResponse } from '../shared.js';
|
|
7
|
+
/** Entity alias seed data — embedded to avoid fs reads in packaged version */
|
|
8
|
+
const ENTITY_ALIASES = [
|
|
9
|
+
{ canonical: 'stripe', alias: 'payment' },
|
|
10
|
+
{ canonical: 'stripe', alias: 'checkout' },
|
|
11
|
+
{ canonical: 'stripe', alias: 'pricing' },
|
|
12
|
+
{ canonical: 'stripe', alias: 'invoice' },
|
|
13
|
+
{ canonical: 'stripe', alias: 'billing' },
|
|
14
|
+
{ canonical: 'stripe', alias: 'subscription' },
|
|
15
|
+
{ canonical: 'anthropic', alias: 'claude' },
|
|
16
|
+
{ canonical: 'anthropic', alias: 'ai' },
|
|
17
|
+
{ canonical: 'anthropic', alias: 'llm' },
|
|
18
|
+
{ canonical: 'anthropic', alias: 'artificial intelligence' },
|
|
19
|
+
{ canonical: 'supabase', alias: 'database' },
|
|
20
|
+
{ canonical: 'supabase', alias: 'postgres' },
|
|
21
|
+
{ canonical: 'supabase', alias: 'postgresql' },
|
|
22
|
+
{ canonical: 'supabase', alias: 'db' },
|
|
23
|
+
{ canonical: 'supabase', alias: 'auth' },
|
|
24
|
+
{ canonical: 'github', alias: 'git' },
|
|
25
|
+
{ canonical: 'github', alias: 'repository' },
|
|
26
|
+
{ canonical: 'github', alias: 'repo' },
|
|
27
|
+
{ canonical: 'github', alias: 'version control' },
|
|
28
|
+
{ canonical: 'github', alias: 'source code' },
|
|
29
|
+
{ canonical: 'vercel', alias: 'deployment' },
|
|
30
|
+
{ canonical: 'vercel', alias: 'hosting' },
|
|
31
|
+
{ canonical: 'vercel', alias: 'serverless' },
|
|
32
|
+
{ canonical: 'vercel', alias: 'edge functions' },
|
|
33
|
+
{ canonical: 'react', alias: 'frontend' },
|
|
34
|
+
{ canonical: 'react', alias: 'ui' },
|
|
35
|
+
{ canonical: 'react', alias: 'component' },
|
|
36
|
+
{ canonical: 'react', alias: 'jsx' },
|
|
37
|
+
{ canonical: 'react', alias: 'tsx' },
|
|
38
|
+
{ canonical: 'typescript', alias: 'ts' },
|
|
39
|
+
{ canonical: 'typescript', alias: 'type' },
|
|
40
|
+
{ canonical: 'typescript', alias: 'typing' },
|
|
41
|
+
{ canonical: 'javascript', alias: 'js' },
|
|
42
|
+
{ canonical: 'javascript', alias: 'node' },
|
|
43
|
+
{ canonical: 'javascript', alias: 'nodejs' },
|
|
44
|
+
{ canonical: 'css', alias: 'styling' },
|
|
45
|
+
{ canonical: 'css', alias: 'tailwind' },
|
|
46
|
+
{ canonical: 'css', alias: 'design' },
|
|
47
|
+
{ canonical: 'testing', alias: 'test' },
|
|
48
|
+
{ canonical: 'testing', alias: 'vitest' },
|
|
49
|
+
{ canonical: 'testing', alias: 'unit test' },
|
|
50
|
+
{ canonical: 'testing', alias: 'integration test' },
|
|
51
|
+
{ canonical: 'api', alias: 'endpoint' },
|
|
52
|
+
{ canonical: 'api', alias: 'rest' },
|
|
53
|
+
{ canonical: 'api', alias: 'http' },
|
|
54
|
+
{ canonical: 'api', alias: 'route' },
|
|
55
|
+
{ canonical: 'mcp', alias: 'model context protocol' },
|
|
56
|
+
{ canonical: 'mcp', alias: 'tools' },
|
|
57
|
+
{ canonical: 'mcp', alias: 'server' },
|
|
58
|
+
{ canonical: 'email', alias: 'resend' },
|
|
59
|
+
{ canonical: 'email', alias: 'newsletter' },
|
|
60
|
+
{ canonical: 'email', alias: 'mail' },
|
|
61
|
+
{ canonical: 'pocketbase', alias: 'pb' },
|
|
62
|
+
{ canonical: 'pocketbase', alias: 'local database' },
|
|
63
|
+
{ canonical: 'pocketbase', alias: 'sqlite' },
|
|
64
|
+
];
|
|
65
|
+
const DEFAULT_SETTINGS = [
|
|
66
|
+
{ key: 'schema_version', value: '1' },
|
|
67
|
+
{ key: 'business_name', value: '' },
|
|
68
|
+
{ key: 'support_email', value: '' },
|
|
69
|
+
{ key: 'timezone', value: 'UTC' },
|
|
70
|
+
{ key: 'currency', value: 'USD' },
|
|
71
|
+
];
|
|
72
|
+
export function registerSetupSeed(server, adapter) {
|
|
73
|
+
server.tool('setup_seed', 'Seed the database with entity aliases (for search expansion) and default settings. Safe to run multiple times — uses upsert.', {}, async () => {
|
|
74
|
+
try {
|
|
75
|
+
let aliasesSeeded = 0;
|
|
76
|
+
let aliasesSkipped = 0;
|
|
77
|
+
let settingsSeeded = 0;
|
|
78
|
+
let settingsSkipped = 0;
|
|
79
|
+
// Seed entity aliases
|
|
80
|
+
const aliasesExist = await adapter.collectionExists('entity_aliases');
|
|
81
|
+
if (aliasesExist) {
|
|
82
|
+
for (const alias of ENTITY_ALIASES) {
|
|
83
|
+
try {
|
|
84
|
+
await adapter.upsert('entity_aliases', alias, ['canonical', 'alias']);
|
|
85
|
+
aliasesSeeded++;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
aliasesSkipped++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
aliasesSkipped = ENTITY_ALIASES.length;
|
|
94
|
+
}
|
|
95
|
+
// Seed default settings
|
|
96
|
+
const settingsExist = await adapter.collectionExists('settings');
|
|
97
|
+
if (settingsExist) {
|
|
98
|
+
for (const setting of DEFAULT_SETTINGS) {
|
|
99
|
+
try {
|
|
100
|
+
// Only seed if not already set (don't overwrite user settings)
|
|
101
|
+
const existing = await adapter.list('settings', {
|
|
102
|
+
filter: [[{ field: 'key', op: 'eq', value: setting.key }]],
|
|
103
|
+
page: { limit: 1, offset: 0 },
|
|
104
|
+
});
|
|
105
|
+
if (existing.items.length === 0) {
|
|
106
|
+
await adapter.create('settings', setting);
|
|
107
|
+
settingsSeeded++;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
settingsSkipped++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
settingsSkipped++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
settingsSkipped = DEFAULT_SETTINGS.length;
|
|
120
|
+
}
|
|
121
|
+
return makeToolResponse({
|
|
122
|
+
entity_aliases: { seeded: aliasesSeeded, skipped: aliasesSkipped, total: ENTITY_ALIASES.length },
|
|
123
|
+
settings: { seeded: settingsSeeded, skipped: settingsSkipped, total: DEFAULT_SETTINGS.length },
|
|
124
|
+
message: `Seeded ${aliasesSeeded} aliases and ${settingsSeeded} settings.`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error('[setup_seed] Error:', error);
|
|
129
|
+
return makeErrorResponse('Failed to seed database. Check that the database is running and collections exist.');
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=setup-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-seed.js","sourceRoot":"","sources":["../../../src/tools/setup/setup-seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_status
|
|
3
|
+
*
|
|
4
|
+
* Check backend connection, list existing/missing collections, report status.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { DataAdapter } from '../../adapter/types.js';
|
|
8
|
+
export declare function registerSetupStatus(server: McpServer, adapter: DataAdapter): void;
|
|
9
|
+
//# sourceMappingURL=setup-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-status.d.ts","sourceRoot":"","sources":["../../../src/tools/setup/setup-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmB1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAgEjF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: setup_status
|
|
3
|
+
*
|
|
4
|
+
* Check backend connection, list existing/missing collections, report status.
|
|
5
|
+
*/
|
|
6
|
+
import { makeToolResponse, makeErrorResponse } from '../shared.js';
|
|
7
|
+
const EXPECTED_COLLECTIONS = [
|
|
8
|
+
'knowledge',
|
|
9
|
+
'decisions',
|
|
10
|
+
'sessions',
|
|
11
|
+
'goals',
|
|
12
|
+
'tasks',
|
|
13
|
+
'contacts',
|
|
14
|
+
'entity_aliases',
|
|
15
|
+
'settings',
|
|
16
|
+
'prospects',
|
|
17
|
+
'blog_posts',
|
|
18
|
+
'email_queue',
|
|
19
|
+
'content_calendar',
|
|
20
|
+
];
|
|
21
|
+
export function registerSetupStatus(server, adapter) {
|
|
22
|
+
server.tool('setup_status', 'Check database connection status, list existing and missing collections, and report schema readiness.', {}, { readOnlyHint: true }, async () => {
|
|
23
|
+
try {
|
|
24
|
+
// Test connection by listing collections
|
|
25
|
+
const existing = await adapter.listCollections();
|
|
26
|
+
const existingSet = new Set(existing);
|
|
27
|
+
const present = [];
|
|
28
|
+
const missing = [];
|
|
29
|
+
for (const collection of EXPECTED_COLLECTIONS) {
|
|
30
|
+
if (existingSet.has(collection)) {
|
|
31
|
+
present.push(collection);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
missing.push(collection);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Check for settings table and schema version
|
|
38
|
+
let schemaVersion = null;
|
|
39
|
+
if (existingSet.has('settings')) {
|
|
40
|
+
try {
|
|
41
|
+
const results = await adapter.list('settings', {
|
|
42
|
+
filter: [[{ field: 'key', op: 'eq', value: 'schema_version' }]],
|
|
43
|
+
page: { limit: 1, offset: 0 },
|
|
44
|
+
});
|
|
45
|
+
if (results.items.length > 0) {
|
|
46
|
+
schemaVersion = results.items[0].value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// settings table might exist but not have schema_version
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const isReady = missing.length === 0;
|
|
54
|
+
return makeToolResponse({
|
|
55
|
+
connected: true,
|
|
56
|
+
backend: adapter.backend,
|
|
57
|
+
schema_version: schemaVersion,
|
|
58
|
+
ready: isReady,
|
|
59
|
+
collections: {
|
|
60
|
+
present,
|
|
61
|
+
missing,
|
|
62
|
+
total_expected: EXPECTED_COLLECTIONS.length,
|
|
63
|
+
total_present: present.length,
|
|
64
|
+
},
|
|
65
|
+
message: isReady
|
|
66
|
+
? 'Database is fully set up and ready.'
|
|
67
|
+
: `Database is missing ${missing.length} collection(s). Run setup_migrate to create them.`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error('[setup_status] Connection error:', error);
|
|
72
|
+
return makeErrorResponse('Cannot connect to the database. Check that your database is running and credentials are correct.');
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=setup-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-status.js","sourceRoot":"","sources":["../../../src/tools/setup/setup-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,oBAAoB,GAAG;IAC3B,WAAW;IACX,WAAW;IACX,UAAU;IACV,OAAO;IACP,OAAO;IACP,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,YAAY;IACZ,aAAa;IACb,kBAAkB;CACnB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,OAAoB;IACzE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,uGAAuG,EACvG,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtC,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE,CAAC;gBAC9C,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,IAAI,aAAa,GAAkB,IAAI,CAAC;YACxC,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAiB,UAAU,EAAE;wBAC7D,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;wBAC/D,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;qBAC9B,CAAC,CAAC;oBACH,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;oBACnD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,yDAAyD;gBAC3D,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;YAErC,OAAO,gBAAgB,CAAC;gBACtB,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,cAAc,EAAE,aAAa;gBAC7B,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE;oBACX,OAAO;oBACP,OAAO;oBACP,cAAc,EAAE,oBAAoB,CAAC,MAAM;oBAC3C,aAAa,EAAE,OAAO,CAAC,MAAM;iBAC9B;gBACD,OAAO,EAAE,OAAO;oBACd,CAAC,CAAC,qCAAqC;oBACvC,CAAC,CAAC,uBAAuB,OAAO,CAAC,MAAM,mDAAmD;aAC7F,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,iBAAiB,CACtB,kGAAkG,CACnG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool utilities — response builders, error handling, graceful degradation.
|
|
3
|
+
*
|
|
4
|
+
* Every tool uses withGracefulDegradation to handle missing collections.
|
|
5
|
+
* Error responses never leak raw error messages to the MCP client.
|
|
6
|
+
*/
|
|
7
|
+
import type { DataAdapter } from '../adapter/types.js';
|
|
8
|
+
/** Build a successful MCP tool response */
|
|
9
|
+
export declare function makeToolResponse(data: unknown): {
|
|
10
|
+
content: Array<{
|
|
11
|
+
type: 'text';
|
|
12
|
+
text: string;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
/** Build an MCP error response (never leaks raw error details) */
|
|
16
|
+
export declare function makeErrorResponse(message: string): {
|
|
17
|
+
content: Array<{
|
|
18
|
+
type: 'text';
|
|
19
|
+
text: string;
|
|
20
|
+
}>;
|
|
21
|
+
isError: true;
|
|
22
|
+
};
|
|
23
|
+
/** Convert an AdapterError to a safe MCP error response */
|
|
24
|
+
export declare function handleAdapterError(error: unknown, toolName: string): {
|
|
25
|
+
content: Array<{
|
|
26
|
+
type: 'text';
|
|
27
|
+
text: string;
|
|
28
|
+
}>;
|
|
29
|
+
isError: true;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Wrap a tool handler with graceful degradation.
|
|
33
|
+
*
|
|
34
|
+
* Before executing the handler, checks if the required collection exists.
|
|
35
|
+
* If not, returns a helpful message instead of crashing.
|
|
36
|
+
* Caches positive results to avoid an extra DB round-trip on every call.
|
|
37
|
+
*/
|
|
38
|
+
export declare function withGracefulDegradation<TParams>(collection: string, adapter: DataAdapter, handler: (params: TParams) => Promise<{
|
|
39
|
+
content: Array<{
|
|
40
|
+
type: 'text';
|
|
41
|
+
text: string;
|
|
42
|
+
}>;
|
|
43
|
+
isError?: boolean;
|
|
44
|
+
}>): (params: TParams) => Promise<{
|
|
45
|
+
content: Array<{
|
|
46
|
+
type: 'text';
|
|
47
|
+
text: string;
|
|
48
|
+
}>;
|
|
49
|
+
isError?: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Auto-generate a summary from content, truncating at a sentence boundary within ~200 chars.
|
|
53
|
+
* Returns content as-is if it's 200 chars or shorter.
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateSummary(content: string): string;
|
|
56
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAIlG;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAKpH;AAaD,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAStI;AAKD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAC7C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC3G,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBrG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsBvD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool utilities — response builders, error handling, graceful degradation.
|
|
3
|
+
*
|
|
4
|
+
* Every tool uses withGracefulDegradation to handle missing collections.
|
|
5
|
+
* Error responses never leak raw error messages to the MCP client.
|
|
6
|
+
*/
|
|
7
|
+
import { AdapterError } from '../errors/adapter-error.js';
|
|
8
|
+
/** Build a successful MCP tool response */
|
|
9
|
+
export function makeToolResponse(data) {
|
|
10
|
+
return {
|
|
11
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Build an MCP error response (never leaks raw error details) */
|
|
15
|
+
export function makeErrorResponse(message) {
|
|
16
|
+
return {
|
|
17
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
|
|
18
|
+
isError: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** User-friendly messages per error code */
|
|
22
|
+
const ERROR_MESSAGES = {
|
|
23
|
+
COLLECTION_NOT_FOUND: 'This feature requires a database table that has not been set up yet. Run setup_migrate to create it.',
|
|
24
|
+
RECORD_NOT_FOUND: 'The requested record was not found.',
|
|
25
|
+
VALIDATION_ERROR: 'The data provided is invalid. Check fields and try again.',
|
|
26
|
+
UNIQUE_VIOLATION: 'A record with these values already exists.',
|
|
27
|
+
CONNECTION_ERROR: 'Cannot connect to the database. Check that your database is running.',
|
|
28
|
+
AUTH_ERROR: 'Database authentication failed. Check your credentials.',
|
|
29
|
+
UNKNOWN: 'An unexpected error occurred. Please try again.',
|
|
30
|
+
};
|
|
31
|
+
/** Convert an AdapterError to a safe MCP error response */
|
|
32
|
+
export function handleAdapterError(error, toolName) {
|
|
33
|
+
if (error instanceof AdapterError) {
|
|
34
|
+
console.error(`[${toolName}] AdapterError(${error.code}): ${error.message}`);
|
|
35
|
+
return makeErrorResponse(ERROR_MESSAGES[error.code]);
|
|
36
|
+
}
|
|
37
|
+
// Unknown error — never leak the message
|
|
38
|
+
console.error(`[${toolName}] Unexpected error:`, error);
|
|
39
|
+
return makeErrorResponse(ERROR_MESSAGES.UNKNOWN);
|
|
40
|
+
}
|
|
41
|
+
// Cache of confirmed-existing collections (persists for process lifetime)
|
|
42
|
+
const confirmedCollections = new Set();
|
|
43
|
+
/**
|
|
44
|
+
* Wrap a tool handler with graceful degradation.
|
|
45
|
+
*
|
|
46
|
+
* Before executing the handler, checks if the required collection exists.
|
|
47
|
+
* If not, returns a helpful message instead of crashing.
|
|
48
|
+
* Caches positive results to avoid an extra DB round-trip on every call.
|
|
49
|
+
*/
|
|
50
|
+
export function withGracefulDegradation(collection, adapter, handler) {
|
|
51
|
+
return async (params) => {
|
|
52
|
+
try {
|
|
53
|
+
// Skip existence check if we've already confirmed this collection exists
|
|
54
|
+
if (!confirmedCollections.has(collection)) {
|
|
55
|
+
const exists = await adapter.collectionExists(collection);
|
|
56
|
+
if (!exists) {
|
|
57
|
+
return makeErrorResponse(`The '${collection}' table does not exist yet. Run setup_migrate to create the database schema.`);
|
|
58
|
+
}
|
|
59
|
+
confirmedCollections.add(collection);
|
|
60
|
+
}
|
|
61
|
+
return await handler(params);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof AdapterError && error.code === 'COLLECTION_NOT_FOUND') {
|
|
65
|
+
// Remove from cache — table may have been dropped
|
|
66
|
+
confirmedCollections.delete(collection);
|
|
67
|
+
return makeErrorResponse(`The '${collection}' table does not exist yet. Run setup_migrate to create the database schema.`);
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Auto-generate a summary from content, truncating at a sentence boundary within ~200 chars.
|
|
75
|
+
* Returns content as-is if it's 200 chars or shorter.
|
|
76
|
+
*/
|
|
77
|
+
export function generateSummary(content) {
|
|
78
|
+
if (content.length <= 200)
|
|
79
|
+
return content;
|
|
80
|
+
const truncated = content.substring(0, 200);
|
|
81
|
+
// Try to break at a sentence boundary (. ! ?)
|
|
82
|
+
const sentenceEnd = Math.max(truncated.lastIndexOf('. '), truncated.lastIndexOf('! '), truncated.lastIndexOf('? '));
|
|
83
|
+
if (sentenceEnd > 80) {
|
|
84
|
+
return truncated.substring(0, sentenceEnd + 1);
|
|
85
|
+
}
|
|
86
|
+
// Fall back to word boundary
|
|
87
|
+
const lastSpace = truncated.lastIndexOf(' ');
|
|
88
|
+
if (lastSpace > 0) {
|
|
89
|
+
return truncated.substring(0, lastSpace) + '...';
|
|
90
|
+
}
|
|
91
|
+
return truncated + '...';
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"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"}
|