cursor-recursive-rag 0.2.0-alpha.1

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 (144) hide show
  1. package/README.md +354 -0
  2. package/bin/cursor-rag.js +18 -0
  3. package/dist/adapters/embeddings/index.d.ts +5 -0
  4. package/dist/adapters/embeddings/index.d.ts.map +1 -0
  5. package/dist/adapters/embeddings/index.js +16 -0
  6. package/dist/adapters/embeddings/index.js.map +1 -0
  7. package/dist/adapters/embeddings/ollama.d.ts +11 -0
  8. package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
  9. package/dist/adapters/embeddings/ollama.js +30 -0
  10. package/dist/adapters/embeddings/ollama.js.map +1 -0
  11. package/dist/adapters/embeddings/openai.d.ts +11 -0
  12. package/dist/adapters/embeddings/openai.d.ts.map +1 -0
  13. package/dist/adapters/embeddings/openai.js +28 -0
  14. package/dist/adapters/embeddings/openai.js.map +1 -0
  15. package/dist/adapters/embeddings/types.d.ts +6 -0
  16. package/dist/adapters/embeddings/types.d.ts.map +1 -0
  17. package/dist/adapters/embeddings/types.js +2 -0
  18. package/dist/adapters/embeddings/types.js.map +1 -0
  19. package/dist/adapters/embeddings/xenova.d.ts +11 -0
  20. package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
  21. package/dist/adapters/embeddings/xenova.js +26 -0
  22. package/dist/adapters/embeddings/xenova.js.map +1 -0
  23. package/dist/adapters/vector/chroma.d.ts +23 -0
  24. package/dist/adapters/vector/chroma.d.ts.map +1 -0
  25. package/dist/adapters/vector/chroma.js +91 -0
  26. package/dist/adapters/vector/chroma.js.map +1 -0
  27. package/dist/adapters/vector/index.d.ts +5 -0
  28. package/dist/adapters/vector/index.d.ts.map +1 -0
  29. package/dist/adapters/vector/index.js +22 -0
  30. package/dist/adapters/vector/index.js.map +1 -0
  31. package/dist/adapters/vector/memory.d.ts +22 -0
  32. package/dist/adapters/vector/memory.d.ts.map +1 -0
  33. package/dist/adapters/vector/memory.js +105 -0
  34. package/dist/adapters/vector/memory.js.map +1 -0
  35. package/dist/adapters/vector/qdrant.d.ts +14 -0
  36. package/dist/adapters/vector/qdrant.d.ts.map +1 -0
  37. package/dist/adapters/vector/qdrant.js +120 -0
  38. package/dist/adapters/vector/qdrant.js.map +1 -0
  39. package/dist/adapters/vector/redis.d.ts +31 -0
  40. package/dist/adapters/vector/redis.d.ts.map +1 -0
  41. package/dist/adapters/vector/redis.js +164 -0
  42. package/dist/adapters/vector/redis.js.map +1 -0
  43. package/dist/adapters/vector/vectorize.d.ts +10 -0
  44. package/dist/adapters/vector/vectorize.d.ts.map +1 -0
  45. package/dist/adapters/vector/vectorize.js +22 -0
  46. package/dist/adapters/vector/vectorize.js.map +1 -0
  47. package/dist/cli/commands/dashboard.d.ts +3 -0
  48. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  49. package/dist/cli/commands/dashboard.js +23 -0
  50. package/dist/cli/commands/dashboard.js.map +1 -0
  51. package/dist/cli/commands/ingest.d.ts +3 -0
  52. package/dist/cli/commands/ingest.d.ts.map +1 -0
  53. package/dist/cli/commands/ingest.js +133 -0
  54. package/dist/cli/commands/ingest.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +39 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/commands/setup.d.ts +3 -0
  60. package/dist/cli/commands/setup.d.ts.map +1 -0
  61. package/dist/cli/commands/setup.js +311 -0
  62. package/dist/cli/commands/setup.js.map +1 -0
  63. package/dist/cli/commands/status.d.ts +3 -0
  64. package/dist/cli/commands/status.d.ts.map +1 -0
  65. package/dist/cli/commands/status.js +39 -0
  66. package/dist/cli/commands/status.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +34 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/dashboard/public/index.html +819 -0
  72. package/dist/dashboard/server.d.ts +10 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +397 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/integrations/index.d.ts +3 -0
  77. package/dist/integrations/index.d.ts.map +1 -0
  78. package/dist/integrations/index.js +3 -0
  79. package/dist/integrations/index.js.map +1 -0
  80. package/dist/integrations/mcp-gateway.d.ts +91 -0
  81. package/dist/integrations/mcp-gateway.d.ts.map +1 -0
  82. package/dist/integrations/mcp-gateway.js +128 -0
  83. package/dist/integrations/mcp-gateway.js.map +1 -0
  84. package/dist/integrations/openskills.d.ts +67 -0
  85. package/dist/integrations/openskills.d.ts.map +1 -0
  86. package/dist/integrations/openskills.js +223 -0
  87. package/dist/integrations/openskills.js.map +1 -0
  88. package/dist/proxy/index.d.ts +29 -0
  89. package/dist/proxy/index.d.ts.map +1 -0
  90. package/dist/proxy/index.js +124 -0
  91. package/dist/proxy/index.js.map +1 -0
  92. package/dist/server/index.d.ts +2 -0
  93. package/dist/server/index.d.ts.map +1 -0
  94. package/dist/server/index.js +43 -0
  95. package/dist/server/index.js.map +1 -0
  96. package/dist/server/tools/crawl.d.ts +15 -0
  97. package/dist/server/tools/crawl.d.ts.map +1 -0
  98. package/dist/server/tools/crawl.js +97 -0
  99. package/dist/server/tools/crawl.js.map +1 -0
  100. package/dist/server/tools/gateway.d.ts +27 -0
  101. package/dist/server/tools/gateway.d.ts.map +1 -0
  102. package/dist/server/tools/gateway.js +58 -0
  103. package/dist/server/tools/gateway.js.map +1 -0
  104. package/dist/server/tools/index.d.ts +10 -0
  105. package/dist/server/tools/index.d.ts.map +1 -0
  106. package/dist/server/tools/index.js +302 -0
  107. package/dist/server/tools/index.js.map +1 -0
  108. package/dist/server/tools/ingest.d.ts +15 -0
  109. package/dist/server/tools/ingest.d.ts.map +1 -0
  110. package/dist/server/tools/ingest.js +84 -0
  111. package/dist/server/tools/ingest.js.map +1 -0
  112. package/dist/server/tools/list-sources.d.ts +9 -0
  113. package/dist/server/tools/list-sources.d.ts.map +1 -0
  114. package/dist/server/tools/list-sources.js +63 -0
  115. package/dist/server/tools/list-sources.js.map +1 -0
  116. package/dist/server/tools/recursive-query.d.ts +16 -0
  117. package/dist/server/tools/recursive-query.d.ts.map +1 -0
  118. package/dist/server/tools/recursive-query.js +65 -0
  119. package/dist/server/tools/recursive-query.js.map +1 -0
  120. package/dist/server/tools/search.d.ts +15 -0
  121. package/dist/server/tools/search.d.ts.map +1 -0
  122. package/dist/server/tools/search.js +20 -0
  123. package/dist/server/tools/search.js.map +1 -0
  124. package/dist/server/tools/skills.d.ts +30 -0
  125. package/dist/server/tools/skills.d.ts.map +1 -0
  126. package/dist/server/tools/skills.js +85 -0
  127. package/dist/server/tools/skills.js.map +1 -0
  128. package/dist/services/chunker.d.ts +3 -0
  129. package/dist/services/chunker.d.ts.map +1 -0
  130. package/dist/services/chunker.js +75 -0
  131. package/dist/services/chunker.js.map +1 -0
  132. package/dist/services/config.d.ts +8 -0
  133. package/dist/services/config.d.ts.map +1 -0
  134. package/dist/services/config.js +66 -0
  135. package/dist/services/config.js.map +1 -0
  136. package/dist/services/query-decomposer.d.ts +44 -0
  137. package/dist/services/query-decomposer.d.ts.map +1 -0
  138. package/dist/services/query-decomposer.js +79 -0
  139. package/dist/services/query-decomposer.js.map +1 -0
  140. package/dist/types/index.d.ts +93 -0
  141. package/dist/types/index.d.ts.map +1 -0
  142. package/dist/types/index.js +2 -0
  143. package/dist/types/index.js.map +1 -0
  144. package/package.json +56 -0
@@ -0,0 +1,15 @@
1
+ import type { VectorStore } from '../../adapters/vector/index.js';
2
+ import type { Embedder } from '../../adapters/embeddings/index.js';
3
+ import type { RAGConfig } from '../../types/index.js';
4
+ interface CrawlAndIngestArgs {
5
+ url: string;
6
+ maxPages?: number;
7
+ maxDepth?: number;
8
+ }
9
+ export declare function crawlAndIngestTool(args: CrawlAndIngestArgs, deps: {
10
+ vectorStore: VectorStore;
11
+ embedder: Embedder;
12
+ config: RAGConfig;
13
+ }): Promise<any>;
14
+ export {};
15
+ //# sourceMappingURL=crawl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../../src/server/tools/crawl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAGtE,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAsGd"}
@@ -0,0 +1,97 @@
1
+ import { randomUUID } from 'crypto';
2
+ import FirecrawlApp from '@mendable/firecrawl-js';
3
+ import { chunkDocument } from '../../services/chunker.js';
4
+ export async function crawlAndIngestTool(args, deps) {
5
+ const { url, maxPages = 100, maxDepth = 3 } = args;
6
+ const { vectorStore, embedder, config } = deps;
7
+ const firecrawlApiKey = config.apiKeys?.firecrawl;
8
+ if (!firecrawlApiKey) {
9
+ return {
10
+ content: [
11
+ {
12
+ type: 'text',
13
+ text: 'Firecrawl API key not configured. Run "cursor-rag setup" and provide a Firecrawl API key to enable web crawling.'
14
+ }
15
+ ],
16
+ isError: true
17
+ };
18
+ }
19
+ try {
20
+ const app = new FirecrawlApp({ apiKey: firecrawlApiKey });
21
+ // Crawl the site
22
+ const result = await app.crawlUrl(url, {
23
+ limit: maxPages,
24
+ maxDepth,
25
+ scrapeOptions: {
26
+ formats: ['markdown'],
27
+ onlyMainContent: true
28
+ }
29
+ });
30
+ // Check if crawl was successful
31
+ if (!result.success || !('data' in result) || !result.data || result.data.length === 0) {
32
+ const errorMsg = 'error' in result ? result.error : 'No pages were retrieved';
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: `Crawl completed but no pages were retrieved from ${url}: ${errorMsg}`
38
+ }
39
+ ]
40
+ };
41
+ }
42
+ // Process each page
43
+ let totalChunks = 0;
44
+ const documents = [];
45
+ for (const page of result.data) {
46
+ if (!page.markdown)
47
+ continue;
48
+ const chunks = chunkDocument(page.markdown, {
49
+ chunkSize: 512,
50
+ chunkOverlap: 50,
51
+ respectBoundaries: true
52
+ });
53
+ // Generate embeddings for chunks
54
+ const embeddings = await embedder.embedBatch(chunks.map(c => c.text));
55
+ // Create vector documents
56
+ for (let i = 0; i < chunks.length; i++) {
57
+ documents.push({
58
+ id: randomUUID(),
59
+ embedding: embeddings[i],
60
+ content: chunks[i].text,
61
+ metadata: {
62
+ source: page.url || url,
63
+ title: page.metadata?.title || 'Untitled',
64
+ chunkIndex: chunks[i].index
65
+ }
66
+ });
67
+ }
68
+ totalChunks += chunks.length;
69
+ }
70
+ // Add all documents to vector store in batches
71
+ const batchSize = 100;
72
+ for (let i = 0; i < documents.length; i += batchSize) {
73
+ const batch = documents.slice(i, i + batchSize);
74
+ await vectorStore.add(batch);
75
+ }
76
+ return {
77
+ content: [
78
+ {
79
+ type: 'text',
80
+ text: `Successfully crawled and ingested ${result.data.length} pages from ${url}. Created ${totalChunks} chunks.`
81
+ }
82
+ ]
83
+ };
84
+ }
85
+ catch (error) {
86
+ return {
87
+ content: [
88
+ {
89
+ type: 'text',
90
+ text: `Error crawling ${url}: ${error instanceof Error ? error.message : 'Unknown error'}`
91
+ }
92
+ ],
93
+ isError: true
94
+ };
95
+ }
96
+ }
97
+ //# sourceMappingURL=crawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../../src/server/tools/crawl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { RAGConfig } from '../../types/index.js';
2
+ export declare function gatewaySearchToolsTool(config: RAGConfig, params: {
3
+ query: string;
4
+ backend?: string;
5
+ }): Promise<{
6
+ tools: Array<{
7
+ name: string;
8
+ description: string;
9
+ backend: string;
10
+ }>;
11
+ }>;
12
+ export declare function gatewayCallToolTool(config: RAGConfig, params: {
13
+ toolName: string;
14
+ args: Record<string, any>;
15
+ maxRows?: number;
16
+ fields?: string[];
17
+ }): Promise<any>;
18
+ export declare function gatewayExecuteSkillTool(config: RAGConfig, params: {
19
+ name: string;
20
+ inputs?: Record<string, any>;
21
+ }): Promise<any>;
22
+ export declare function gatewayHealthTool(config: RAGConfig): Promise<{
23
+ status: string;
24
+ backends: number;
25
+ tools: number;
26
+ }>;
27
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/server/tools/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiBnF;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GACA,OAAO,CAAC,GAAG,CAAC,CAgBd;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GACrD,OAAO,CAAC,GAAG,CAAC,CAQd;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB9D"}
@@ -0,0 +1,58 @@
1
+ import { createMCPGatewayClient } from '../../integrations/mcp-gateway.js';
2
+ export async function gatewaySearchToolsTool(config, params) {
3
+ const client = createMCPGatewayClient(config);
4
+ if (!client.isEnabled()) {
5
+ return { tools: [] };
6
+ }
7
+ try {
8
+ const result = await client.searchTools(params.query, {
9
+ backend: params.backend,
10
+ detailLevel: 'name_description'
11
+ });
12
+ return result;
13
+ }
14
+ catch (error) {
15
+ console.error('Gateway search error:', error);
16
+ return { tools: [] };
17
+ }
18
+ }
19
+ export async function gatewayCallToolTool(config, params) {
20
+ const client = createMCPGatewayClient(config);
21
+ if (!client.isEnabled()) {
22
+ throw new Error('MCP Gateway integration is not enabled');
23
+ }
24
+ return client.callTool({
25
+ toolName: params.toolName,
26
+ args: params.args,
27
+ filter: {
28
+ maxRows: params.maxRows,
29
+ fields: params.fields,
30
+ format: 'summary'
31
+ }
32
+ });
33
+ }
34
+ export async function gatewayExecuteSkillTool(config, params) {
35
+ const client = createMCPGatewayClient(config);
36
+ if (!client.isEnabled()) {
37
+ throw new Error('MCP Gateway integration is not enabled');
38
+ }
39
+ return client.executeSkill(params.name, params.inputs || {});
40
+ }
41
+ export async function gatewayHealthTool(config) {
42
+ const client = createMCPGatewayClient(config);
43
+ if (!client.isEnabled()) {
44
+ return { status: 'disabled', backends: 0, tools: 0 };
45
+ }
46
+ try {
47
+ const health = await client.getHealth();
48
+ return {
49
+ status: health.status,
50
+ backends: health.backends.connected,
51
+ tools: health.tools
52
+ };
53
+ }
54
+ catch (error) {
55
+ return { status: 'error', backends: 0, tools: 0 };
56
+ }
57
+ }
58
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/server/tools/gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAiB,EACjB,MAA2C;IAE3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE;YACpD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiB,EACjB,MAKC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAiB,EACjB,MAAsD;IAEtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB;IAEjB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import type { VectorStore } from '../../adapters/vector/index.js';
3
+ import type { Embedder } from '../../adapters/embeddings/index.js';
4
+ import type { RAGConfig } from '../../types/index.js';
5
+ export declare function registerTools(server: Server, dependencies: {
6
+ vectorStore: VectorStore;
7
+ embedder: Embedder;
8
+ config: RAGConfig;
9
+ }): void;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAStD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE;IACZ,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;CACnB,GACA,IAAI,CAqSN"}
@@ -0,0 +1,302 @@
1
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
2
+ import { recursiveQueryTool } from './recursive-query.js';
3
+ import { searchKnowledgeTool } from './search.js';
4
+ import { ingestDocumentTool } from './ingest.js';
5
+ import { crawlAndIngestTool } from './crawl.js';
6
+ import { listSourcesTool } from './list-sources.js';
7
+ import { gatewaySearchToolsTool, gatewayCallToolTool, gatewayExecuteSkillTool, gatewayHealthTool } from './gateway.js';
8
+ import { listOpenSkillsTool, readOpenSkillTool, ingestSkillsTool, searchSkillsTool } from './skills.js';
9
+ export function registerTools(server, dependencies) {
10
+ // List available tools
11
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
12
+ tools: [
13
+ {
14
+ name: 'recursive_query',
15
+ description: 'Perform recursive multi-hop retrieval across knowledge base. Decomposes complex queries into sub-questions, iteratively retrieves relevant chunks, and synthesizes a comprehensive answer.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ query: {
20
+ type: 'string',
21
+ description: 'The question or query to answer'
22
+ },
23
+ maxIterations: {
24
+ type: 'number',
25
+ description: 'Maximum number of retrieval iterations (default: 5)',
26
+ default: 5
27
+ },
28
+ minConfidence: {
29
+ type: 'number',
30
+ description: 'Minimum confidence threshold to stop iterating (default: 0.7)',
31
+ default: 0.7
32
+ },
33
+ sources: {
34
+ type: 'array',
35
+ items: { type: 'string' },
36
+ description: 'Filter to specific document sources (optional)'
37
+ }
38
+ },
39
+ required: ['query']
40
+ }
41
+ },
42
+ {
43
+ name: 'search_knowledge',
44
+ description: 'Direct vector similarity search in the knowledge base. Use for simple queries that don\'t require recursive retrieval.',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ query: {
49
+ type: 'string',
50
+ description: 'Search query'
51
+ },
52
+ topK: {
53
+ type: 'number',
54
+ description: 'Number of results to return (default: 10)',
55
+ default: 10
56
+ },
57
+ sources: {
58
+ type: 'array',
59
+ items: { type: 'string' },
60
+ description: 'Filter to specific document sources (optional)'
61
+ }
62
+ },
63
+ required: ['query']
64
+ }
65
+ },
66
+ {
67
+ name: 'ingest_document',
68
+ description: 'Add a single document to the knowledge base. Accepts URL, file path, or raw text.',
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {
72
+ source: {
73
+ type: 'string',
74
+ description: 'URL, file path, or text content'
75
+ },
76
+ title: {
77
+ type: 'string',
78
+ description: 'Optional title for the document'
79
+ },
80
+ metadata: {
81
+ type: 'object',
82
+ description: 'Optional metadata to attach to chunks'
83
+ }
84
+ },
85
+ required: ['source']
86
+ }
87
+ },
88
+ {
89
+ name: 'crawl_and_ingest',
90
+ description: 'Crawl a website using Firecrawl and add all pages to the knowledge base.',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ url: {
95
+ type: 'string',
96
+ description: 'Starting URL to crawl'
97
+ },
98
+ maxPages: {
99
+ type: 'number',
100
+ description: 'Maximum number of pages to crawl (default: 100)',
101
+ default: 100
102
+ },
103
+ maxDepth: {
104
+ type: 'number',
105
+ description: 'Maximum crawl depth (default: 3)',
106
+ default: 3
107
+ }
108
+ },
109
+ required: ['url']
110
+ }
111
+ },
112
+ {
113
+ name: 'list_sources',
114
+ description: 'List all document sources indexed in the knowledge base.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {}
118
+ }
119
+ },
120
+ // MCP Gateway integration tools (optional)
121
+ {
122
+ name: 'gateway_search_tools',
123
+ description: 'Search available tools in MCP Gateway. Requires mcpGateway integration to be enabled.',
124
+ inputSchema: {
125
+ type: 'object',
126
+ properties: {
127
+ query: {
128
+ type: 'string',
129
+ description: 'Search query for tools'
130
+ },
131
+ backend: {
132
+ type: 'string',
133
+ description: 'Filter to specific backend (optional)'
134
+ }
135
+ },
136
+ required: ['query']
137
+ }
138
+ },
139
+ {
140
+ name: 'gateway_call_tool',
141
+ description: 'Call a tool through MCP Gateway with result filtering. Requires mcpGateway integration to be enabled.',
142
+ inputSchema: {
143
+ type: 'object',
144
+ properties: {
145
+ toolName: {
146
+ type: 'string',
147
+ description: 'Name of the gateway tool to call'
148
+ },
149
+ args: {
150
+ type: 'object',
151
+ description: 'Arguments to pass to the tool'
152
+ },
153
+ maxRows: {
154
+ type: 'number',
155
+ description: 'Limit result rows (optional)'
156
+ },
157
+ fields: {
158
+ type: 'array',
159
+ items: { type: 'string' },
160
+ description: 'Select specific fields (optional)'
161
+ }
162
+ },
163
+ required: ['toolName', 'args']
164
+ }
165
+ },
166
+ {
167
+ name: 'gateway_execute_skill',
168
+ description: 'Execute a skill from MCP Gateway. Requires mcpGateway integration to be enabled.',
169
+ inputSchema: {
170
+ type: 'object',
171
+ properties: {
172
+ name: {
173
+ type: 'string',
174
+ description: 'Name of the skill to execute'
175
+ },
176
+ inputs: {
177
+ type: 'object',
178
+ description: 'Inputs for the skill (optional)'
179
+ }
180
+ },
181
+ required: ['name']
182
+ }
183
+ },
184
+ {
185
+ name: 'gateway_health',
186
+ description: 'Check MCP Gateway health and status.',
187
+ inputSchema: {
188
+ type: 'object',
189
+ properties: {}
190
+ }
191
+ },
192
+ // OpenSkills integration tools (optional)
193
+ {
194
+ name: 'list_openskills',
195
+ description: 'List all installed OpenSkills. Requires openSkills integration to be enabled.',
196
+ inputSchema: {
197
+ type: 'object',
198
+ properties: {}
199
+ }
200
+ },
201
+ {
202
+ name: 'read_openskill',
203
+ description: 'Read a specific OpenSkill by name. Requires openSkills integration to be enabled.',
204
+ inputSchema: {
205
+ type: 'object',
206
+ properties: {
207
+ name: {
208
+ type: 'string',
209
+ description: 'Name of the skill to read'
210
+ }
211
+ },
212
+ required: ['name']
213
+ }
214
+ },
215
+ {
216
+ name: 'ingest_openskills',
217
+ description: 'Ingest all installed OpenSkills into the RAG knowledge base for semantic search.',
218
+ inputSchema: {
219
+ type: 'object',
220
+ properties: {}
221
+ }
222
+ },
223
+ {
224
+ name: 'search_openskills',
225
+ description: 'Semantic search across ingested OpenSkills.',
226
+ inputSchema: {
227
+ type: 'object',
228
+ properties: {
229
+ query: {
230
+ type: 'string',
231
+ description: 'Search query'
232
+ },
233
+ topK: {
234
+ type: 'number',
235
+ description: 'Number of results (default: 5)',
236
+ default: 5
237
+ }
238
+ },
239
+ required: ['query']
240
+ }
241
+ }
242
+ ]
243
+ }));
244
+ // Handle tool calls
245
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
246
+ const { name, arguments: args } = request.params;
247
+ try {
248
+ switch (name) {
249
+ case 'recursive_query':
250
+ return await recursiveQueryTool(args, dependencies);
251
+ case 'search_knowledge':
252
+ return await searchKnowledgeTool(args, dependencies);
253
+ case 'ingest_document':
254
+ return await ingestDocumentTool(args, dependencies);
255
+ case 'crawl_and_ingest':
256
+ return await crawlAndIngestTool(args, dependencies);
257
+ case 'list_sources':
258
+ return await listSourcesTool(args, dependencies);
259
+ // MCP Gateway tools
260
+ case 'gateway_search_tools':
261
+ const gatewaySearchResult = await gatewaySearchToolsTool(dependencies.config, args);
262
+ return { content: [{ type: 'text', text: JSON.stringify(gatewaySearchResult, null, 2) }] };
263
+ case 'gateway_call_tool':
264
+ const gatewayCallResult = await gatewayCallToolTool(dependencies.config, args);
265
+ return { content: [{ type: 'text', text: JSON.stringify(gatewayCallResult, null, 2) }] };
266
+ case 'gateway_execute_skill':
267
+ const gatewaySkillResult = await gatewayExecuteSkillTool(dependencies.config, args);
268
+ return { content: [{ type: 'text', text: JSON.stringify(gatewaySkillResult, null, 2) }] };
269
+ case 'gateway_health':
270
+ const healthResult = await gatewayHealthTool(dependencies.config);
271
+ return { content: [{ type: 'text', text: JSON.stringify(healthResult, null, 2) }] };
272
+ // OpenSkills tools
273
+ case 'list_openskills':
274
+ const skillsList = await listOpenSkillsTool(dependencies.config);
275
+ return { content: [{ type: 'text', text: JSON.stringify(skillsList, null, 2) }] };
276
+ case 'read_openskill':
277
+ const skillContent = await readOpenSkillTool(dependencies.config, args);
278
+ return { content: [{ type: 'text', text: JSON.stringify(skillContent, null, 2) }] };
279
+ case 'ingest_openskills':
280
+ const ingestResult = await ingestSkillsTool(dependencies.config);
281
+ return { content: [{ type: 'text', text: JSON.stringify(ingestResult, null, 2) }] };
282
+ case 'search_openskills':
283
+ const searchResult = await searchSkillsTool(dependencies.config, args);
284
+ return { content: [{ type: 'text', text: JSON.stringify(searchResult, null, 2) }] };
285
+ default:
286
+ throw new Error(`Unknown tool: ${name}`);
287
+ }
288
+ }
289
+ catch (error) {
290
+ return {
291
+ content: [
292
+ {
293
+ type: 'text',
294
+ text: `Error executing tool ${name}: ${error instanceof Error ? error.message : 'Unknown error'}`
295
+ }
296
+ ],
297
+ isError: true
298
+ };
299
+ }
300
+ });
301
+ }
302
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { VectorStore } from '../../adapters/vector/index.js';
2
+ import type { Embedder } from '../../adapters/embeddings/index.js';
3
+ import type { RAGConfig } from '../../types/index.js';
4
+ interface IngestDocumentArgs {
5
+ source: string;
6
+ title?: string;
7
+ metadata?: Record<string, any>;
8
+ }
9
+ export declare function ingestDocumentTool(args: IngestDocumentArgs, deps: {
10
+ vectorStore: VectorStore;
11
+ embedder: Embedder;
12
+ config: RAGConfig;
13
+ }): Promise<any>;
14
+ export {};
15
+ //# sourceMappingURL=ingest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/server/tools/ingest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAGtE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAkFd"}
@@ -0,0 +1,84 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import { chunkDocument } from '../../services/chunker.js';
4
+ export async function ingestDocumentTool(args, deps) {
5
+ const { source, title, metadata = {} } = args;
6
+ const { vectorStore, embedder } = deps;
7
+ let content;
8
+ let docSource;
9
+ // Determine if source is URL, file path, or text
10
+ if (source.startsWith('http://') || source.startsWith('https://')) {
11
+ // Fetch URL content using fetch API
12
+ try {
13
+ const response = await fetch(source);
14
+ if (!response.ok) {
15
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
16
+ }
17
+ content = await response.text();
18
+ docSource = title || source;
19
+ }
20
+ catch (error) {
21
+ return {
22
+ content: [
23
+ {
24
+ type: 'text',
25
+ text: `Failed to fetch URL ${source}: ${error instanceof Error ? error.message : 'Unknown error'}. Use crawl_and_ingest for better web content extraction.`
26
+ }
27
+ ],
28
+ isError: true
29
+ };
30
+ }
31
+ }
32
+ else if (source.startsWith('/') || source.startsWith('./') || source.includes('\\') || existsSync(source)) {
33
+ // File path - read file
34
+ try {
35
+ content = readFileSync(source, 'utf-8');
36
+ docSource = title || source;
37
+ }
38
+ catch (error) {
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text',
43
+ text: `Failed to read file ${source}: ${error instanceof Error ? error.message : 'Unknown error'}`
44
+ }
45
+ ],
46
+ isError: true
47
+ };
48
+ }
49
+ }
50
+ else {
51
+ // Assume it's text content
52
+ content = source;
53
+ docSource = title || 'manual-input';
54
+ }
55
+ // Chunk the document
56
+ const chunks = chunkDocument(content, {
57
+ chunkSize: 512,
58
+ chunkOverlap: 50,
59
+ respectBoundaries: true
60
+ });
61
+ // Generate embeddings and add to vector store
62
+ const embeddings = await embedder.embedBatch(chunks.map(c => c.text));
63
+ const documents = chunks.map((chunk, idx) => ({
64
+ id: randomUUID(),
65
+ embedding: embeddings[idx],
66
+ content: chunk.text,
67
+ metadata: {
68
+ ...metadata,
69
+ source: docSource,
70
+ title: title || docSource,
71
+ chunkIndex: chunk.index
72
+ }
73
+ }));
74
+ await vectorStore.add(documents);
75
+ return {
76
+ content: [
77
+ {
78
+ type: 'text',
79
+ text: `Successfully ingested document "${title || docSource}". Created ${documents.length} chunks.`
80
+ }
81
+ ]
82
+ };
83
+ }
84
+ //# sourceMappingURL=ingest.js.map