noverload-mcp 0.6.0 → 0.7.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 (125) hide show
  1. package/dist/client.d.ts +8 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +77 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/llm-instructions.d.ts +87 -0
  6. package/dist/llm-instructions.d.ts.map +1 -0
  7. package/dist/llm-instructions.js +257 -0
  8. package/dist/llm-instructions.js.map +1 -0
  9. package/dist/tools/helpers/connections.d.ts +7 -0
  10. package/dist/tools/helpers/connections.d.ts.map +1 -0
  11. package/dist/tools/helpers/connections.js +85 -0
  12. package/dist/tools/helpers/connections.js.map +1 -0
  13. package/dist/tools/helpers/content-processing.d.ts +7 -0
  14. package/dist/tools/helpers/content-processing.d.ts.map +1 -0
  15. package/dist/tools/helpers/content-processing.js +136 -0
  16. package/dist/tools/helpers/content-processing.js.map +1 -0
  17. package/dist/tools/helpers/insights.d.ts +2 -0
  18. package/dist/tools/helpers/insights.d.ts.map +1 -0
  19. package/dist/tools/helpers/insights.js +62 -0
  20. package/dist/tools/helpers/insights.js.map +1 -0
  21. package/dist/tools/implementations/actions.d.ts +4 -0
  22. package/dist/tools/implementations/actions.d.ts.map +1 -0
  23. package/dist/tools/implementations/actions.js +73 -0
  24. package/dist/tools/implementations/actions.js.map +1 -0
  25. package/dist/tools/implementations/batch-get.d.ts +3 -0
  26. package/dist/tools/implementations/batch-get.d.ts.map +1 -0
  27. package/dist/tools/implementations/batch-get.js +102 -0
  28. package/dist/tools/implementations/batch-get.js.map +1 -0
  29. package/dist/tools/implementations/build-narrative.d.ts +3 -0
  30. package/dist/tools/implementations/build-narrative.d.ts.map +1 -0
  31. package/dist/tools/implementations/build-narrative.js +352 -0
  32. package/dist/tools/implementations/build-narrative.js.map +1 -0
  33. package/dist/tools/implementations/estimate-tokens.d.ts +3 -0
  34. package/dist/tools/implementations/estimate-tokens.d.ts.map +1 -0
  35. package/dist/tools/implementations/estimate-tokens.js +54 -0
  36. package/dist/tools/implementations/estimate-tokens.js.map +1 -0
  37. package/dist/tools/implementations/expand-search.d.ts +3 -0
  38. package/dist/tools/implementations/expand-search.d.ts.map +1 -0
  39. package/dist/tools/implementations/expand-search.js +223 -0
  40. package/dist/tools/implementations/expand-search.js.map +1 -0
  41. package/dist/tools/implementations/explore-topic.d.ts +3 -0
  42. package/dist/tools/implementations/explore-topic.d.ts.map +1 -0
  43. package/dist/tools/implementations/explore-topic.js +137 -0
  44. package/dist/tools/implementations/explore-topic.js.map +1 -0
  45. package/dist/tools/implementations/extract-frameworks.d.ts +3 -0
  46. package/dist/tools/implementations/extract-frameworks.d.ts.map +1 -0
  47. package/dist/tools/implementations/extract-frameworks.js +192 -0
  48. package/dist/tools/implementations/extract-frameworks.js.map +1 -0
  49. package/dist/tools/implementations/extract-insights.d.ts +3 -0
  50. package/dist/tools/implementations/extract-insights.d.ts.map +1 -0
  51. package/dist/tools/implementations/extract-insights.js +130 -0
  52. package/dist/tools/implementations/extract-insights.js.map +1 -0
  53. package/dist/tools/implementations/find-connections.d.ts +3 -0
  54. package/dist/tools/implementations/find-connections.d.ts.map +1 -0
  55. package/dist/tools/implementations/find-connections.js +106 -0
  56. package/dist/tools/implementations/find-connections.js.map +1 -0
  57. package/dist/tools/implementations/find-examples.d.ts +3 -0
  58. package/dist/tools/implementations/find-examples.d.ts.map +1 -0
  59. package/dist/tools/implementations/find-examples.js +242 -0
  60. package/dist/tools/implementations/find-examples.js.map +1 -0
  61. package/dist/tools/implementations/get-content.d.ts +3 -0
  62. package/dist/tools/implementations/get-content.d.ts.map +1 -0
  63. package/dist/tools/implementations/get-content.js +96 -0
  64. package/dist/tools/implementations/get-content.js.map +1 -0
  65. package/dist/tools/implementations/goals.d.ts +3 -0
  66. package/dist/tools/implementations/goals.d.ts.map +1 -0
  67. package/dist/tools/implementations/goals.js +22 -0
  68. package/dist/tools/implementations/goals.js.map +1 -0
  69. package/dist/tools/implementations/instructions.d.ts +3 -0
  70. package/dist/tools/implementations/instructions.d.ts.map +1 -0
  71. package/dist/tools/implementations/instructions.js +88 -0
  72. package/dist/tools/implementations/instructions.js.map +1 -0
  73. package/dist/tools/implementations/knowledge-graph.d.ts +3 -0
  74. package/dist/tools/implementations/knowledge-graph.d.ts.map +1 -0
  75. package/dist/tools/implementations/knowledge-graph.js +278 -0
  76. package/dist/tools/implementations/knowledge-graph.js.map +1 -0
  77. package/dist/tools/implementations/list-content.d.ts +3 -0
  78. package/dist/tools/implementations/list-content.d.ts.map +1 -0
  79. package/dist/tools/implementations/list-content.js +87 -0
  80. package/dist/tools/implementations/list-content.js.map +1 -0
  81. package/dist/tools/implementations/plan-query.d.ts +3 -0
  82. package/dist/tools/implementations/plan-query.d.ts.map +1 -0
  83. package/dist/tools/implementations/plan-query.js +63 -0
  84. package/dist/tools/implementations/plan-query.js.map +1 -0
  85. package/dist/tools/implementations/raw-content.d.ts +3 -0
  86. package/dist/tools/implementations/raw-content.d.ts.map +1 -0
  87. package/dist/tools/implementations/raw-content.js +208 -0
  88. package/dist/tools/implementations/raw-content.js.map +1 -0
  89. package/dist/tools/implementations/save-content.d.ts +3 -0
  90. package/dist/tools/implementations/save-content.d.ts.map +1 -0
  91. package/dist/tools/implementations/save-content.js +33 -0
  92. package/dist/tools/implementations/save-content.js.map +1 -0
  93. package/dist/tools/implementations/search.d.ts +3 -0
  94. package/dist/tools/implementations/search.d.ts.map +1 -0
  95. package/dist/tools/implementations/search.js +245 -0
  96. package/dist/tools/implementations/search.js.map +1 -0
  97. package/dist/tools/implementations/similar-content.d.ts +3 -0
  98. package/dist/tools/implementations/similar-content.d.ts.map +1 -0
  99. package/dist/tools/implementations/similar-content.js +64 -0
  100. package/dist/tools/implementations/similar-content.js.map +1 -0
  101. package/dist/tools/implementations/smart-sections.d.ts +3 -0
  102. package/dist/tools/implementations/smart-sections.d.ts.map +1 -0
  103. package/dist/tools/implementations/smart-sections.js +347 -0
  104. package/dist/tools/implementations/smart-sections.js.map +1 -0
  105. package/dist/tools/implementations/synthesize.d.ts +3 -0
  106. package/dist/tools/implementations/synthesize.d.ts.map +1 -0
  107. package/dist/tools/implementations/synthesize.js +148 -0
  108. package/dist/tools/implementations/synthesize.js.map +1 -0
  109. package/dist/tools/implementations/timeline.d.ts +3 -0
  110. package/dist/tools/implementations/timeline.d.ts.map +1 -0
  111. package/dist/tools/implementations/timeline.js +191 -0
  112. package/dist/tools/implementations/timeline.js.map +1 -0
  113. package/dist/tools/index-old.d.ts +16 -0
  114. package/dist/tools/index-old.d.ts.map +1 -0
  115. package/dist/tools/index-old.js +2176 -0
  116. package/dist/tools/index-old.js.map +1 -0
  117. package/dist/tools/index.d.ts +25 -14
  118. package/dist/tools/index.d.ts.map +1 -1
  119. package/dist/tools/index.js +57 -1079
  120. package/dist/tools/index.js.map +1 -1
  121. package/dist/tools/types.d.ts +22 -0
  122. package/dist/tools/types.d.ts.map +1 -0
  123. package/dist/tools/types.js +2 -0
  124. package/dist/tools/types.js.map +1 -0
  125. package/package.json +5 -5
@@ -0,0 +1,208 @@
1
+ import { z } from "zod";
2
+ import { chunkContent, detectSections } from "../helpers/content-processing.js";
3
+ export const getRawContentTool = {
4
+ name: "get_raw_content",
5
+ description: "Access full raw text of saved content with smart chunking for large documents. Requires confirmation for content >10k tokens. Returns complete unprocessed text or intelligently chunked sections.",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {
9
+ contentId: {
10
+ type: "string",
11
+ description: "The ID of the content to retrieve raw text for",
12
+ },
13
+ format: {
14
+ type: "string",
15
+ enum: ["full", "chunks", "sections"],
16
+ description: "Format: 'full' (complete text), 'chunks' (semantic chunks), 'sections' (logical sections)",
17
+ default: "chunks",
18
+ },
19
+ maxTokens: {
20
+ type: "number",
21
+ description: "Maximum tokens to return (only for chunks/sections format)",
22
+ default: 50000,
23
+ },
24
+ chunkSize: {
25
+ type: "number",
26
+ description: "Target size for each chunk in tokens (for chunks format)",
27
+ default: 4000,
28
+ },
29
+ includeMetadata: {
30
+ type: "boolean",
31
+ description: "Include metadata about sections/chunks",
32
+ default: true,
33
+ },
34
+ confirmLargeContent: {
35
+ type: "boolean",
36
+ description: "Confirm retrieval of large content (>10k tokens)",
37
+ default: false,
38
+ },
39
+ },
40
+ required: ["contentId"],
41
+ },
42
+ modifies: false,
43
+ handler: async (client, args) => {
44
+ const schema = z.object({
45
+ contentId: z.string(),
46
+ format: z.enum(["full", "chunks", "sections"]).optional().default("chunks"),
47
+ maxTokens: z.number().optional().default(50000),
48
+ chunkSize: z.number().optional().default(4000),
49
+ includeMetadata: z.boolean().optional().default(true),
50
+ confirmLargeContent: z.boolean().optional().default(false),
51
+ });
52
+ const params = schema.parse(args);
53
+ // First get content metadata to check size
54
+ const content = await client.getContent(params.contentId);
55
+ if (!content.rawText) {
56
+ // Try to get raw content through v2 API with enrichment
57
+ const enrichedResult = await client.getEnrichedContent([params.contentId], true);
58
+ if (!enrichedResult || enrichedResult.length === 0 || !enrichedResult[0].rawText) {
59
+ return {
60
+ content: [
61
+ {
62
+ type: "text",
63
+ text: `No raw text available for content ID: ${params.contentId}. Content may still be processing or does not contain extractable text.`,
64
+ },
65
+ ],
66
+ data: null,
67
+ };
68
+ }
69
+ // Use the enriched content
70
+ content.rawText = enrichedResult[0].rawText;
71
+ content.tokenCount = enrichedResult[0].tokenCount;
72
+ }
73
+ const wordCount = content.rawText ? content.rawText.split(/\s+/).length : 0;
74
+ const estimatedTokens = content.tokenCount || Math.ceil(wordCount * 1.3);
75
+ // Check if confirmation is needed for large content
76
+ if (params.format === "full" && estimatedTokens > 10000 && !params.confirmLargeContent) {
77
+ let warningText = `# ⚠️ Large Content Warning\n\n`;
78
+ warningText += `**Content:** ${content.title || 'Untitled'}\n`;
79
+ warningText += `**Size:** ${wordCount.toLocaleString()} words (~${estimatedTokens.toLocaleString()} tokens)\n\n`;
80
+ if (estimatedTokens > 100000) {
81
+ warningText += `## 🚨 CRITICAL: Extremely Large Content\n`;
82
+ warningText += `This content contains ${estimatedTokens.toLocaleString()} tokens and will **exceed most LLM context windows**.\n\n`;
83
+ warningText += `**Recommendations:**\n`;
84
+ warningText += `1. Use format='chunks' to process in smaller pieces\n`;
85
+ warningText += `2. Use format='sections' to get logical divisions\n`;
86
+ warningText += `3. Use search_content to find specific information\n`;
87
+ warningText += `4. Use synthesize_content to get key insights without full text\n\n`;
88
+ }
89
+ else if (estimatedTokens > 50000) {
90
+ warningText += `## ⚠️ Very Large Content\n`;
91
+ warningText += `This content contains ${estimatedTokens.toLocaleString()} tokens and will use **most of your context window**.\n\n`;
92
+ warningText += `**Consider:**\n`;
93
+ warningText += `- Using format='chunks' for manageable pieces\n`;
94
+ warningText += `- Using search or synthesis tools instead\n\n`;
95
+ }
96
+ else {
97
+ warningText += `## Large Content Notice\n`;
98
+ warningText += `This content will use ${estimatedTokens.toLocaleString()} tokens of your context.\n\n`;
99
+ }
100
+ warningText += `**To proceed with full text retrieval:**\n`;
101
+ warningText += `Call get_raw_content again with:\n`;
102
+ warningText += `- contentId: "${params.contentId}"\n`;
103
+ warningText += `- format: "full"\n`;
104
+ warningText += `- confirmLargeContent: true\n\n`;
105
+ warningText += `**Alternative approaches:**\n`;
106
+ warningText += `- format: "chunks" - Get content in ${Math.ceil(estimatedTokens / params.chunkSize)} chunks of ~${params.chunkSize} tokens\n`;
107
+ warningText += `- format: "sections" - Get logical sections with headers\n`;
108
+ return {
109
+ content: [
110
+ {
111
+ type: "text",
112
+ text: warningText,
113
+ },
114
+ ],
115
+ data: {
116
+ requiresConfirmation: true,
117
+ contentId: params.contentId,
118
+ title: content.title,
119
+ estimatedTokens,
120
+ suggestedFormat: estimatedTokens > 50000 ? "chunks" : "sections",
121
+ chunkCount: Math.ceil(estimatedTokens / params.chunkSize),
122
+ },
123
+ };
124
+ }
125
+ let responseText = `# Raw Content: ${content.title || 'Untitled'}\n\n`;
126
+ responseText += `**Content Type:** ${content.contentType}\n`;
127
+ responseText += `**URL:** ${content.url}\n`;
128
+ responseText += `**Size:** ${wordCount.toLocaleString()} words (~${estimatedTokens.toLocaleString()} tokens)\n`;
129
+ // Add appropriate warning based on size
130
+ if (estimatedTokens > 50000 && params.format === "full") {
131
+ responseText += `\n⚠️ **Large content confirmed** - Returning ${estimatedTokens.toLocaleString()} tokens\n\n`;
132
+ }
133
+ let resultData = {
134
+ id: content.id,
135
+ title: content.title,
136
+ contentType: content.contentType,
137
+ totalTokens: estimatedTokens,
138
+ format: params.format,
139
+ };
140
+ if (params.format === "full") {
141
+ // Return full text (with confirmation)
142
+ responseText += `\n## Full Text Content\n`;
143
+ responseText += `*Complete raw text (${estimatedTokens.toLocaleString()} tokens) is available in the data field.*\n`;
144
+ resultData.text = content.rawText;
145
+ resultData.metadata = params.includeMetadata ? {
146
+ wordCount,
147
+ estimatedTokens,
148
+ contentType: content.contentType,
149
+ extractedAt: content.createdAt,
150
+ } : undefined;
151
+ }
152
+ else if (params.format === "chunks") {
153
+ // Smart chunking based on token size
154
+ const chunks = chunkContent(content.rawText || "", params.chunkSize, params.maxTokens);
155
+ responseText += `\n## Content Chunks\n`;
156
+ responseText += `**Total Chunks:** ${chunks.length}\n`;
157
+ responseText += `**Chunk Size:** ~${params.chunkSize} tokens each\n`;
158
+ if (chunks.length * params.chunkSize > params.maxTokens) {
159
+ responseText += `**Note:** Showing first ${chunks.length} chunks (limited by maxTokens: ${params.maxTokens})\n`;
160
+ }
161
+ responseText += `\n`;
162
+ // Show chunk previews
163
+ chunks.slice(0, 3).forEach((chunk, idx) => {
164
+ responseText += `### Chunk ${idx + 1}/${chunks.length}\n`;
165
+ responseText += `**Tokens:** ~${chunk.tokenCount}\n`;
166
+ responseText += `**Preview:** ${chunk.text.slice(0, 200)}...\n\n`;
167
+ });
168
+ if (chunks.length > 3) {
169
+ responseText += `*... and ${chunks.length - 3} more chunks*\n\n`;
170
+ }
171
+ responseText += `💡 **Tip:** To get a specific chunk, note the chunk index and request it directly.\n`;
172
+ resultData.chunks = chunks;
173
+ resultData.totalChunks = chunks.length;
174
+ }
175
+ else if (params.format === "sections") {
176
+ // Logical section detection (headers, paragraphs, etc.)
177
+ const sections = detectSections(content.rawText || "", content.contentType);
178
+ responseText += `\n## Content Sections\n`;
179
+ responseText += `**Total Sections:** ${sections.length}\n\n`;
180
+ // Show section outline
181
+ let totalSectionTokens = 0;
182
+ sections.forEach((section, idx) => {
183
+ responseText += `${idx + 1}. **${section.title || `Section ${idx + 1}`}**`;
184
+ if (section.type) {
185
+ responseText += ` (${section.type})`;
186
+ }
187
+ responseText += ` - ~${section.tokenCount} tokens\n`;
188
+ totalSectionTokens += section.tokenCount;
189
+ if (totalSectionTokens > params.maxTokens) {
190
+ responseText += ` *[Exceeds maxTokens limit]*\n`;
191
+ }
192
+ });
193
+ responseText += `\n*Full section content available in data field*\n`;
194
+ resultData.sections = sections;
195
+ resultData.totalSections = sections.length;
196
+ }
197
+ return {
198
+ content: [
199
+ {
200
+ type: "text",
201
+ text: responseText,
202
+ },
203
+ ],
204
+ data: resultData,
205
+ };
206
+ },
207
+ };
208
+ //# sourceMappingURL=raw-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/raw-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Tool } from "../types.js";
2
+ export declare const saveContentTool: Tool;
3
+ //# sourceMappingURL=save-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,IA8B7B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ export const saveContentTool = {
3
+ name: "save_content",
4
+ description: "Save a new URL to Noverload for processing",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ url: {
9
+ type: "string",
10
+ description: "URL to save (YouTube, X/Twitter, Reddit, article, or PDF)",
11
+ },
12
+ },
13
+ required: ["url"],
14
+ },
15
+ modifies: true,
16
+ handler: async (client, args) => {
17
+ const schema = z.object({
18
+ url: z.string().url(),
19
+ });
20
+ const { url } = schema.parse(args);
21
+ const content = await client.saveContent(url);
22
+ return {
23
+ content: [
24
+ {
25
+ type: "text",
26
+ text: content.title ? `Saved: ${content.title}` : `Saved content from: ${new URL(url).hostname}`,
27
+ },
28
+ ],
29
+ data: content,
30
+ };
31
+ },
32
+ };
33
+ //# sourceMappingURL=save-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,4CAA4C;IACzD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;IACD,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;iBACjG;aACF;YACD,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Tool } from "../types.js";
2
+ export declare const searchContentTool: Tool;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,iBAAiB,EAAE,IAiQ/B,CAAC"}
@@ -0,0 +1,245 @@
1
+ import { z } from "zod";
2
+ export const searchContentTool = {
3
+ name: "search_content",
4
+ description: "Advanced search with OR/ANY logic, fuzzy matching, and smart filters. Supports multiple search modes, content type filtering, date ranges, and relevance explanations.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ query: {
9
+ type: "string",
10
+ description: "Search query (supports 'term1 OR term2' for any match, quotes for exact phrases)",
11
+ },
12
+ searchMode: {
13
+ type: "string",
14
+ enum: ["any", "all", "phrase"],
15
+ description: "Search logic: 'any' (OR logic), 'all' (AND logic), 'phrase' (exact phrase)",
16
+ default: "any",
17
+ },
18
+ fuzzyMatch: {
19
+ type: "boolean",
20
+ description: "Enable fuzzy/typo-tolerant matching",
21
+ default: true,
22
+ },
23
+ tags: {
24
+ type: "array",
25
+ items: {
26
+ type: "string",
27
+ },
28
+ description: "Filter by tags",
29
+ },
30
+ limit: {
31
+ type: "number",
32
+ description: "Maximum results (default: 10)",
33
+ default: 10,
34
+ },
35
+ includeFullContent: {
36
+ type: "boolean",
37
+ description: "Include full text (WARNING: 10k-100k+ tokens)",
38
+ default: false,
39
+ },
40
+ contentTypes: {
41
+ type: "array",
42
+ items: {
43
+ type: "string",
44
+ enum: ["youtube", "x_twitter", "reddit", "article", "pdf"],
45
+ },
46
+ description: "Filter by content types",
47
+ },
48
+ dateFrom: {
49
+ type: "string",
50
+ description: "Content saved after this date (ISO 8601)",
51
+ },
52
+ dateTo: {
53
+ type: "string",
54
+ description: "Content saved before this date (ISO 8601)",
55
+ },
56
+ excludeDomains: {
57
+ type: "array",
58
+ items: {
59
+ type: "string",
60
+ },
61
+ description: "Domains to exclude",
62
+ },
63
+ showRelevanceExplanation: {
64
+ type: "boolean",
65
+ description: "Show why each result matched",
66
+ default: true,
67
+ },
68
+ },
69
+ required: ["query"],
70
+ },
71
+ modifies: false,
72
+ handler: async (client, args) => {
73
+ const schema = z.object({
74
+ query: z.string(),
75
+ searchMode: z.enum(["any", "all", "phrase"]).optional().default("any"),
76
+ fuzzyMatch: z.boolean().optional().default(true),
77
+ tags: z.array(z.string()).optional(),
78
+ limit: z.number().optional().default(10),
79
+ includeFullContent: z.boolean().optional().default(false),
80
+ contentTypes: z.array(z.enum(["youtube", "x_twitter", "reddit", "article", "pdf"])).optional(),
81
+ dateFrom: z.string().optional(),
82
+ dateTo: z.string().optional(),
83
+ excludeDomains: z.array(z.string()).optional(),
84
+ showRelevanceExplanation: z.boolean().optional().default(true),
85
+ });
86
+ const params = schema.parse(args);
87
+ // Enhance search query based on mode
88
+ let enhancedQuery = params.query;
89
+ if (params.searchMode === "any" && !params.query.includes("OR")) {
90
+ // Convert space-separated terms to OR query for broader matching
91
+ const terms = params.query.split(/\s+/).filter(t => t.length > 2);
92
+ if (terms.length > 1) {
93
+ enhancedQuery = terms.join(" OR ");
94
+ }
95
+ }
96
+ const results = await client.searchContent(enhancedQuery, {
97
+ ...params,
98
+ enableConceptExpansion: params.fuzzyMatch, // Use fuzzy matching as concept expansion
99
+ });
100
+ // Format response with visual indicators
101
+ let responseText = `# 🔍 Search Results: "${params.query}"\n`;
102
+ responseText += `**Mode:** ${params.searchMode.toUpperCase()}${params.fuzzyMatch ? " with fuzzy matching" : ""}\n`;
103
+ responseText += `**Found:** ${results.length} results`;
104
+ // Show active filters
105
+ const filters = [];
106
+ if (params.tags?.length)
107
+ filters.push(`📌 tags: ${params.tags.join(", ")}`);
108
+ if (params.contentTypes?.length)
109
+ filters.push(`📁 types: ${params.contentTypes.join(", ")}`);
110
+ if (params.dateFrom || params.dateTo)
111
+ filters.push(`📅 date range`);
112
+ if (params.excludeDomains?.length)
113
+ filters.push(`🚫 excluded: ${params.excludeDomains.join(", ")}`);
114
+ if (filters.length > 0) {
115
+ responseText += `\n**Filters:** ${filters.join(" | ")}`;
116
+ }
117
+ if (params.includeFullContent) {
118
+ responseText += `\n⚠️ **Full content included** - consuming significant tokens`;
119
+ }
120
+ responseText += `\n\n`;
121
+ if (results.length > 0) {
122
+ // Add search suggestions if no perfect matches
123
+ if (results.length < 3) {
124
+ responseText += `💡 **Tip:** Try broader search with 'any' mode or disable filters for more results\n\n`;
125
+ }
126
+ results.forEach((result, idx) => {
127
+ // Visual indicators for content type
128
+ const typeIcons = {
129
+ youtube: "📺",
130
+ x_twitter: "𝕏",
131
+ reddit: "🔗",
132
+ article: "📄",
133
+ pdf: "📑"
134
+ };
135
+ const typeIcon = typeIcons[result.contentType] || "📄";
136
+ // Relevance indicator
137
+ let relevanceIcon = "";
138
+ if (result.relevanceScore) {
139
+ if (result.relevanceScore > 0.8)
140
+ relevanceIcon = "🎯";
141
+ else if (result.relevanceScore > 0.6)
142
+ relevanceIcon = "✅";
143
+ else if (result.relevanceScore > 0.4)
144
+ relevanceIcon = "➡️";
145
+ }
146
+ responseText += `## ${idx + 1}. ${typeIcon} ${result.title || 'Untitled'} ${relevanceIcon}\n`;
147
+ responseText += `**ID:** \`${result.id}\`\n`;
148
+ responseText += `**URL:** ${result.url}\n`;
149
+ // Show relevance explanation if available
150
+ if (params.showRelevanceExplanation) {
151
+ if (result.matchReason && Array.isArray(result.matchReason)) {
152
+ responseText += `**Why matched:** Matched in ${result.matchReason.join(", ")}\n`;
153
+ }
154
+ else if (result.relevanceScore) {
155
+ const percentage = (result.relevanceScore * 100).toFixed(0);
156
+ responseText += `**Relevance:** ${percentage}% match\n`;
157
+ }
158
+ }
159
+ // Content size indicator with better formatting
160
+ if (result.tokenCount) {
161
+ const sizeIcon = result.tokenCount > 50000 ? "🚨" :
162
+ result.tokenCount > 10000 ? "⚠️" :
163
+ result.tokenCount > 5000 ? "📊" : "📝";
164
+ responseText += `**Size:** ${sizeIcon} ~${result.tokenCount.toLocaleString()} tokens`;
165
+ if (params.includeFullContent) {
166
+ responseText += ` (full content included)`;
167
+ }
168
+ responseText += `\n`;
169
+ }
170
+ // Tags with better formatting
171
+ if (result.tags && result.tags.length > 0) {
172
+ responseText += `**Tags:** ${result.tags.map((t) => `\`${t}\``).join(' ')}\n`;
173
+ }
174
+ // Summary section with structure
175
+ if (result.summary) {
176
+ const summaryObj = typeof result.summary === 'string'
177
+ ? { text: result.summary }
178
+ : result.summary;
179
+ if (summaryObj.one_sentence) {
180
+ responseText += `\n📝 **Summary:** ${summaryObj.one_sentence}\n`;
181
+ }
182
+ // Key insights with bullets
183
+ if (summaryObj.key_insights && Array.isArray(summaryObj.key_insights) && summaryObj.key_insights.length > 0) {
184
+ responseText += `\n💡 **Key Insights:**\n`;
185
+ summaryObj.key_insights.slice(0, 3).forEach((insight) => {
186
+ responseText += ` • ${insight}\n`;
187
+ });
188
+ }
189
+ // Actionable takeaways
190
+ if (summaryObj.actionable_takeaways && Array.isArray(summaryObj.actionable_takeaways) && summaryObj.actionable_takeaways.length > 0) {
191
+ responseText += `\n🎯 **Actions:**\n`;
192
+ summaryObj.actionable_takeaways.slice(0, 2).forEach((action) => {
193
+ responseText += ` → ${action}\n`;
194
+ });
195
+ }
196
+ }
197
+ responseText += '\n---\n\n';
198
+ });
199
+ // Smart token usage summary
200
+ if (!params.includeFullContent) {
201
+ let totalAvailable = 0;
202
+ results.forEach((r) => {
203
+ if (r.tokenCount)
204
+ totalAvailable += r.tokenCount;
205
+ });
206
+ if (totalAvailable > 0) {
207
+ responseText += `\n📊 **Content Overview:**\n`;
208
+ responseText += `- Showing: Summaries and metadata (minimal tokens)\n`;
209
+ responseText += `- Available: ~${totalAvailable.toLocaleString()} tokens of full content\n`;
210
+ responseText += `- To access: Use \`get_content_details\` for specific items\n`;
211
+ }
212
+ }
213
+ // Search quality feedback
214
+ if (results.length === params.limit) {
215
+ responseText += `\n💡 **Note:** Showing top ${params.limit} results. More may be available.\n`;
216
+ }
217
+ }
218
+ else {
219
+ // No results - provide helpful suggestions
220
+ responseText += "## No Results Found 😔\n\n";
221
+ responseText += "**Try these approaches:**\n";
222
+ responseText += "1. 🔄 Switch to `searchMode: 'any'` for broader matching\n";
223
+ responseText += "2. ✏️ Check spelling or use simpler terms\n";
224
+ responseText += "3. 🎯 Remove filters (dates, types, domains)\n";
225
+ responseText += "4. 🔍 Use more general keywords\n";
226
+ // Suggest alternative queries
227
+ const terms = params.query.split(/\s+/);
228
+ if (terms.length > 1) {
229
+ responseText += `\n**Alternative queries:**\n`;
230
+ responseText += `- "${terms[0]}" (single term)\n`;
231
+ responseText += `- "${terms.slice(0, 2).join(' ')}" (first two terms)\n`;
232
+ }
233
+ }
234
+ return {
235
+ content: [
236
+ {
237
+ type: "text",
238
+ text: responseText,
239
+ },
240
+ ],
241
+ data: results,
242
+ };
243
+ },
244
+ };
245
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/implementations/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Tool } from "../types.js";
2
+ export declare const findSimilarContentTool: Tool;
3
+ //# sourceMappingURL=similar-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/similar-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,sBAAsB,EAAE,IA+DpC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ export const findSimilarContentTool = {
3
+ name: "find_similar_content",
4
+ description: "Find content similar to a specific saved item using semantic similarity.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ contentId: {
9
+ type: "string",
10
+ description: "ID of the content to find similar items for",
11
+ },
12
+ limit: {
13
+ type: "number",
14
+ description: "Maximum number of similar items to return",
15
+ default: 5,
16
+ },
17
+ minSimilarity: {
18
+ type: "number",
19
+ description: "Minimum similarity score (0-1)",
20
+ default: 0.7,
21
+ },
22
+ },
23
+ required: ["contentId"],
24
+ },
25
+ modifies: false,
26
+ handler: async (client, args) => {
27
+ const schema = z.object({
28
+ contentId: z.string(),
29
+ limit: z.number().optional().default(5),
30
+ minSimilarity: z.number().optional().default(0.7),
31
+ });
32
+ const params = schema.parse(args);
33
+ const result = await client.findSimilarContent(params.contentId, {
34
+ limit: params.limit,
35
+ minSimilarity: params.minSimilarity,
36
+ });
37
+ let responseText = `# Similar Content to: ${result.source?.title || "Unknown"}\n\n`;
38
+ if (result.similarContent && result.similarContent.length > 0) {
39
+ responseText += `Found ${result.similarContent.length} similar items:\n\n`;
40
+ result.similarContent.forEach((item, idx) => {
41
+ responseText += `## ${idx + 1}. ${item.title || "Untitled"}\n`;
42
+ responseText += `**Similarity:** ${(item.similarity * 100).toFixed(1)}%\n`;
43
+ responseText += `**Type:** ${item.type || item.contentType || "unknown"} | **URL:** ${item.url}\n`;
44
+ if (item.summary) {
45
+ responseText += `**Summary:** ${item.summary}\n`;
46
+ }
47
+ responseText += `\n`;
48
+ });
49
+ }
50
+ else {
51
+ responseText += `No similar content found with similarity >= ${params.minSimilarity}`;
52
+ }
53
+ return {
54
+ content: [
55
+ {
56
+ type: "text",
57
+ text: responseText,
58
+ },
59
+ ],
60
+ data: result,
61
+ };
62
+ },
63
+ };
64
+ //# sourceMappingURL=similar-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/similar-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,0EAA0E;IACvF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE,CAAC;aACX;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;gBAC7C,OAAO,EAAE,GAAG;aACb;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;SAClD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE;YAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,yBAAyB,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS,MAAM,CAAC;QAEpF,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,YAAY,IAAI,SAAS,MAAM,CAAC,cAAc,CAAC,MAAM,qBAAqB,CAAC;YAC3E,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,GAAW,EAAE,EAAE;gBACvD,YAAY,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC;gBAC/D,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3E,YAAY,IAAI,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC;gBACnG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,YAAY,IAAI,gBAAgB,IAAI,CAAC,OAAO,IAAI,CAAC;gBACnD,CAAC;gBACD,YAAY,IAAI,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,+CAA+C,MAAM,CAAC,aAAa,EAAE,CAAC;QACxF,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY;iBACnB;aACF;YACD,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Tool } from "../types.js";
2
+ export declare const smartSectionsTool: Tool;
3
+ //# sourceMappingURL=smart-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-sections.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/smart-sections.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAsPnC,eAAO,MAAM,iBAAiB,EAAE,IAoK/B,CAAC"}