keywordgraph-mcp-server 1.6.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 (228) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +629 -0
  3. package/bin/infranodus-mcp-server.js +8 -0
  4. package/bin/keywordgraph-mcp-server.js +8 -0
  5. package/bin/mcp-server.js +56 -0
  6. package/dist/api/client.d.ts +3 -0
  7. package/dist/api/client.d.ts.map +1 -0
  8. package/dist/api/client.js +30 -0
  9. package/dist/api/client.js.map +1 -0
  10. package/dist/api/config-store.d.ts +4 -0
  11. package/dist/api/config-store.d.ts.map +1 -0
  12. package/dist/api/config-store.js +12 -0
  13. package/dist/api/config-store.js.map +1 -0
  14. package/dist/auth/oauth-provider.d.ts +56 -0
  15. package/dist/auth/oauth-provider.d.ts.map +1 -0
  16. package/dist/auth/oauth-provider.js +295 -0
  17. package/dist/auth/oauth-provider.js.map +1 -0
  18. package/dist/auth/types.d.ts +93 -0
  19. package/dist/auth/types.d.ts.map +1 -0
  20. package/dist/auth/types.js +5 -0
  21. package/dist/auth/types.js.map +1 -0
  22. package/dist/config/brand.d.ts +58 -0
  23. package/dist/config/brand.d.ts.map +1 -0
  24. package/dist/config/brand.js +97 -0
  25. package/dist/config/brand.js.map +1 -0
  26. package/dist/config/index.d.ts +26 -0
  27. package/dist/config/index.d.ts.map +1 -0
  28. package/dist/config/index.js +20 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/http-server.d.ts +6 -0
  31. package/dist/http-server.d.ts.map +1 -0
  32. package/dist/http-server.js +907 -0
  33. package/dist/http-server.js.map +1 -0
  34. package/dist/index.d.ts +29 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +136 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/instructions.d.ts +11 -0
  39. package/dist/instructions.d.ts.map +1 -0
  40. package/dist/instructions.js +38 -0
  41. package/dist/instructions.js.map +1 -0
  42. package/dist/prompts/index.d.ts +24 -0
  43. package/dist/prompts/index.d.ts.map +1 -0
  44. package/dist/prompts/index.js +394 -0
  45. package/dist/prompts/index.js.map +1 -0
  46. package/dist/resources/about.d.ts +17 -0
  47. package/dist/resources/about.d.ts.map +1 -0
  48. package/dist/resources/about.js +64 -0
  49. package/dist/resources/about.js.map +1 -0
  50. package/dist/resources/llms-txt.d.ts +33 -0
  51. package/dist/resources/llms-txt.d.ts.map +1 -0
  52. package/dist/resources/llms-txt.js +65 -0
  53. package/dist/resources/llms-txt.js.map +1 -0
  54. package/dist/schemas/index.d.ts +1178 -0
  55. package/dist/schemas/index.d.ts.map +1 -0
  56. package/dist/schemas/index.js +1121 -0
  57. package/dist/schemas/index.js.map +1 -0
  58. package/dist/tools/addMemory.d.ts +36 -0
  59. package/dist/tools/addMemory.d.ts.map +1 -0
  60. package/dist/tools/addMemory.js +82 -0
  61. package/dist/tools/addMemory.js.map +1 -0
  62. package/dist/tools/analyzeExistingGraph.d.ts +37 -0
  63. package/dist/tools/analyzeExistingGraph.d.ts.map +1 -0
  64. package/dist/tools/analyzeExistingGraph.js +85 -0
  65. package/dist/tools/analyzeExistingGraph.js.map +1 -0
  66. package/dist/tools/analyzeLlmResults.d.ts +37 -0
  67. package/dist/tools/analyzeLlmResults.d.ts.map +1 -0
  68. package/dist/tools/analyzeLlmResults.js +165 -0
  69. package/dist/tools/analyzeLlmResults.js.map +1 -0
  70. package/dist/tools/analyzeText.d.ts +36 -0
  71. package/dist/tools/analyzeText.d.ts.map +1 -0
  72. package/dist/tools/analyzeText.js +97 -0
  73. package/dist/tools/analyzeText.js.map +1 -0
  74. package/dist/tools/createKnowledgeGraph.d.ts +36 -0
  75. package/dist/tools/createKnowledgeGraph.d.ts.map +1 -0
  76. package/dist/tools/createKnowledgeGraph.js +105 -0
  77. package/dist/tools/createKnowledgeGraph.js.map +1 -0
  78. package/dist/tools/developConceptualBridges.d.ts +34 -0
  79. package/dist/tools/developConceptualBridges.d.ts.map +1 -0
  80. package/dist/tools/developConceptualBridges.js +107 -0
  81. package/dist/tools/developConceptualBridges.js.map +1 -0
  82. package/dist/tools/developLatentConcepts copy.d.ts +27 -0
  83. package/dist/tools/developLatentConcepts copy.d.ts.map +1 -0
  84. package/dist/tools/developLatentConcepts copy.js +68 -0
  85. package/dist/tools/developLatentConcepts copy.js.map +1 -0
  86. package/dist/tools/developLatentConcepts.d.ts +27 -0
  87. package/dist/tools/developLatentConcepts.d.ts.map +1 -0
  88. package/dist/tools/developLatentConcepts.js +68 -0
  89. package/dist/tools/developLatentConcepts.js.map +1 -0
  90. package/dist/tools/developLatentTopics.d.ts +34 -0
  91. package/dist/tools/developLatentTopics.d.ts.map +1 -0
  92. package/dist/tools/developLatentTopics.js +107 -0
  93. package/dist/tools/developLatentTopics.js.map +1 -0
  94. package/dist/tools/developTextTool.d.ts +39 -0
  95. package/dist/tools/developTextTool.d.ts.map +1 -0
  96. package/dist/tools/developTextTool.js +210 -0
  97. package/dist/tools/developTextTool.js.map +1 -0
  98. package/dist/tools/generateContentGaps.d.ts +32 -0
  99. package/dist/tools/generateContentGaps.d.ts.map +1 -0
  100. package/dist/tools/generateContentGaps.js +96 -0
  101. package/dist/tools/generateContentGaps.js.map +1 -0
  102. package/dist/tools/generateContextualHint.d.ts +33 -0
  103. package/dist/tools/generateContextualHint.d.ts.map +1 -0
  104. package/dist/tools/generateContextualHint.js +99 -0
  105. package/dist/tools/generateContextualHint.js.map +1 -0
  106. package/dist/tools/generateDifferenceGraphFromTexts.d.ts +52 -0
  107. package/dist/tools/generateDifferenceGraphFromTexts.d.ts.map +1 -0
  108. package/dist/tools/generateDifferenceGraphFromTexts.js +160 -0
  109. package/dist/tools/generateDifferenceGraphFromTexts.js.map +1 -0
  110. package/dist/tools/generateGoogleResultsVsQueriesGraph.d.ts +37 -0
  111. package/dist/tools/generateGoogleResultsVsQueriesGraph.d.ts.map +1 -0
  112. package/dist/tools/generateGoogleResultsVsQueriesGraph.js +84 -0
  113. package/dist/tools/generateGoogleResultsVsQueriesGraph.js.map +1 -0
  114. package/dist/tools/generateGoogleSearchQueriesGraph.d.ts +39 -0
  115. package/dist/tools/generateGoogleSearchQueriesGraph.d.ts.map +1 -0
  116. package/dist/tools/generateGoogleSearchQueriesGraph.js +88 -0
  117. package/dist/tools/generateGoogleSearchQueriesGraph.js.map +1 -0
  118. package/dist/tools/generateGoogleSearchResultsGraph.d.ts +38 -0
  119. package/dist/tools/generateGoogleSearchResultsGraph.d.ts.map +1 -0
  120. package/dist/tools/generateGoogleSearchResultsGraph.js +88 -0
  121. package/dist/tools/generateGoogleSearchResultsGraph.js.map +1 -0
  122. package/dist/tools/generateKnowledgeGraph.d.ts +35 -0
  123. package/dist/tools/generateKnowledgeGraph.d.ts.map +1 -0
  124. package/dist/tools/generateKnowledgeGraph.js +105 -0
  125. package/dist/tools/generateKnowledgeGraph.js.map +1 -0
  126. package/dist/tools/generateMergedGraphFromTexts.d.ts +52 -0
  127. package/dist/tools/generateMergedGraphFromTexts.d.ts.map +1 -0
  128. package/dist/tools/generateMergedGraphFromTexts.js +160 -0
  129. package/dist/tools/generateMergedGraphFromTexts.js.map +1 -0
  130. package/dist/tools/generateOntologyGraph.d.ts +36 -0
  131. package/dist/tools/generateOntologyGraph.d.ts.map +1 -0
  132. package/dist/tools/generateOntologyGraph.js +171 -0
  133. package/dist/tools/generateOntologyGraph.js.map +1 -0
  134. package/dist/tools/generateOverlapGraphFromTexts.d.ts +52 -0
  135. package/dist/tools/generateOverlapGraphFromTexts.d.ts.map +1 -0
  136. package/dist/tools/generateOverlapGraphFromTexts.js +159 -0
  137. package/dist/tools/generateOverlapGraphFromTexts.js.map +1 -0
  138. package/dist/tools/generateResearchIdeas.d.ts +39 -0
  139. package/dist/tools/generateResearchIdeas.d.ts.map +1 -0
  140. package/dist/tools/generateResearchIdeas.js +117 -0
  141. package/dist/tools/generateResearchIdeas.js.map +1 -0
  142. package/dist/tools/generateResearchQuestions.d.ts +37 -0
  143. package/dist/tools/generateResearchQuestions.d.ts.map +1 -0
  144. package/dist/tools/generateResearchQuestions.js +111 -0
  145. package/dist/tools/generateResearchQuestions.js.map +1 -0
  146. package/dist/tools/generateResearchQuestionsFromGraph.d.ts +34 -0
  147. package/dist/tools/generateResearchQuestionsFromGraph.d.ts.map +1 -0
  148. package/dist/tools/generateResearchQuestionsFromGraph.js +75 -0
  149. package/dist/tools/generateResearchQuestionsFromGraph.js.map +1 -0
  150. package/dist/tools/generateResponses.d.ts +35 -0
  151. package/dist/tools/generateResponses.d.ts.map +1 -0
  152. package/dist/tools/generateResponses.js +112 -0
  153. package/dist/tools/generateResponses.js.map +1 -0
  154. package/dist/tools/generateResponsesFromGraph.d.ts +33 -0
  155. package/dist/tools/generateResponsesFromGraph.d.ts.map +1 -0
  156. package/dist/tools/generateResponsesFromGraph.js +74 -0
  157. package/dist/tools/generateResponsesFromGraph.js.map +1 -0
  158. package/dist/tools/generateSEOGraphTool.d.ts +39 -0
  159. package/dist/tools/generateSEOGraphTool.d.ts.map +1 -0
  160. package/dist/tools/generateSEOGraphTool.js +235 -0
  161. package/dist/tools/generateSEOGraphTool.js.map +1 -0
  162. package/dist/tools/generateTextOverview.d.ts +31 -0
  163. package/dist/tools/generateTextOverview.d.ts.map +1 -0
  164. package/dist/tools/generateTextOverview.js +68 -0
  165. package/dist/tools/generateTextOverview.js.map +1 -0
  166. package/dist/tools/generateTopicalClusters.d.ts +34 -0
  167. package/dist/tools/generateTopicalClusters.d.ts.map +1 -0
  168. package/dist/tools/generateTopicalClusters.js +134 -0
  169. package/dist/tools/generateTopicalClusters.js.map +1 -0
  170. package/dist/tools/getMemory.d.ts +32 -0
  171. package/dist/tools/getMemory.d.ts.map +1 -0
  172. package/dist/tools/getMemory.js +121 -0
  173. package/dist/tools/getMemory.js.map +1 -0
  174. package/dist/tools/index.d.ts +30 -0
  175. package/dist/tools/index.d.ts.map +1 -0
  176. package/dist/tools/index.js +30 -0
  177. package/dist/tools/index.js.map +1 -0
  178. package/dist/tools/listGraphs.d.ts +37 -0
  179. package/dist/tools/listGraphs.d.ts.map +1 -0
  180. package/dist/tools/listGraphs.js +127 -0
  181. package/dist/tools/listGraphs.js.map +1 -0
  182. package/dist/tools/optimizeTextStructure.d.ts +34 -0
  183. package/dist/tools/optimizeTextStructure.d.ts.map +1 -0
  184. package/dist/tools/optimizeTextStructure.js +108 -0
  185. package/dist/tools/optimizeTextStructure.js.map +1 -0
  186. package/dist/tools/retrieveContextForPromptFromGraph.d.ts +37 -0
  187. package/dist/tools/retrieveContextForPromptFromGraph.d.ts.map +1 -0
  188. package/dist/tools/retrieveContextForPromptFromGraph.js +80 -0
  189. package/dist/tools/retrieveContextForPromptFromGraph.js.map +1 -0
  190. package/dist/tools/searchGraph.d.ts +27 -0
  191. package/dist/tools/searchGraph.d.ts.map +1 -0
  192. package/dist/tools/searchGraph.js +57 -0
  193. package/dist/tools/searchGraph.js.map +1 -0
  194. package/dist/tools/searchGraphs.d.ts +33 -0
  195. package/dist/tools/searchGraphs.d.ts.map +1 -0
  196. package/dist/tools/searchGraphs.js +67 -0
  197. package/dist/tools/searchGraphs.js.map +1 -0
  198. package/dist/tools/searchGraphsFetch.d.ts +31 -0
  199. package/dist/tools/searchGraphsFetch.d.ts.map +1 -0
  200. package/dist/tools/searchGraphsFetch.js +78 -0
  201. package/dist/tools/searchGraphsFetch.js.map +1 -0
  202. package/dist/tools/sequentialThinking.d.ts +71 -0
  203. package/dist/tools/sequentialThinking.d.ts.map +1 -0
  204. package/dist/tools/sequentialThinking.js +218 -0
  205. package/dist/tools/sequentialThinking.js.map +1 -0
  206. package/dist/types/index.d.ts +378 -0
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/types/index.js +2 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/utils/progress.d.ts +21 -0
  211. package/dist/utils/progress.d.ts.map +1 -0
  212. package/dist/utils/progress.js +50 -0
  213. package/dist/utils/progress.js.map +1 -0
  214. package/dist/utils/transformers.d.ts +31 -0
  215. package/dist/utils/transformers.d.ts.map +1 -0
  216. package/dist/utils/transformers.js +484 -0
  217. package/dist/utils/transformers.js.map +1 -0
  218. package/dist/utils/urlContent.d.ts +35 -0
  219. package/dist/utils/urlContent.d.ts.map +1 -0
  220. package/dist/utils/urlContent.js +87 -0
  221. package/dist/utils/urlContent.js.map +1 -0
  222. package/llms-full.infranodus.txt +469 -0
  223. package/llms-full.keywordgraph.txt +469 -0
  224. package/llms-full.txt +469 -0
  225. package/llms.infranodus.txt +64 -0
  226. package/llms.keywordgraph.txt +64 -0
  227. package/llms.txt +64 -0
  228. package/package.json +78 -0
@@ -0,0 +1,112 @@
1
+ import { brand } from "../config/brand.js";
2
+ import { GenerateResponsesFromGraphSchemaBase, } from "../schemas/index.js";
3
+ import { makeInfraNodusRequest } from "../api/client.js";
4
+ import { fetchUrlContentAsText } from "../utils/urlContent.js";
5
+ import { generateResponses } from "../utils/transformers.js";
6
+ function errorContent(message) {
7
+ return {
8
+ content: [
9
+ { type: "text", text: JSON.stringify({ error: message }) },
10
+ ],
11
+ isError: true,
12
+ };
13
+ }
14
+ export const generateResponsesFromGraphTool = {
15
+ name: "generate_responses_from_graph",
16
+ definition: {
17
+ title: "Generate Responses and Expert Advice from Text or Graph",
18
+ description: `Use text, URL, or an existing ${brand.name} knowledge graph and generate responses and expert advice based on a prompt provided.`,
19
+ inputSchema: GenerateResponsesFromGraphSchemaBase.shape,
20
+ annotations: {
21
+ readOnlyHint: true,
22
+ idempotentHint: true,
23
+ destructiveHint: false,
24
+ },
25
+ },
26
+ handler: async (params) => {
27
+ try {
28
+ // Build query parameters
29
+ const queryParams = new URLSearchParams({
30
+ doNotSave: "true",
31
+ addStats: "true",
32
+ optimize: "gap",
33
+ includeStatements: "false",
34
+ includeGraphSummary: "false",
35
+ extendedGraphSummary: "false",
36
+ includeGraph: "false",
37
+ aiTopics: "true",
38
+ });
39
+ const endpoint = `/graphAndAdvice?${queryParams.toString()}`;
40
+ let requestBody;
41
+ if (params.graphName?.trim()) {
42
+ requestBody = {
43
+ name: params.graphName,
44
+ userName: params.userName ?? "",
45
+ aiTopics: "true",
46
+ requestMode: "response",
47
+ prompt: params.prompt ?? "",
48
+ modelToUse: params.modelToUse ?? "gpt-4o",
49
+ };
50
+ }
51
+ else {
52
+ let contentText;
53
+ if (params.url) {
54
+ const result = await fetchUrlContentAsText(params.url);
55
+ if (!result.ok)
56
+ return errorContent(result.error);
57
+ contentText = result.contentText;
58
+ if (!contentText?.trim())
59
+ return errorContent("URL did not return any text content");
60
+ }
61
+ else if (params.text?.trim()) {
62
+ contentText = params.text;
63
+ }
64
+ else {
65
+ return errorContent("Provide either text, url, or graphName for analysis");
66
+ }
67
+ requestBody = {
68
+ text: contentText,
69
+ aiTopics: "true",
70
+ requestMode: "response",
71
+ prompt: params.prompt ?? "",
72
+ modelToUse: params.modelToUse ?? "gpt-4o",
73
+ };
74
+ }
75
+ const response = await makeInfraNodusRequest(endpoint, requestBody);
76
+ const responses = generateResponses(response);
77
+ if (response.error) {
78
+ return {
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: `Error: ${response.error}`,
83
+ },
84
+ ],
85
+ isError: true,
86
+ };
87
+ }
88
+ return {
89
+ content: [
90
+ {
91
+ type: "text",
92
+ text: JSON.stringify(responses, null, 2),
93
+ },
94
+ ],
95
+ };
96
+ }
97
+ catch (error) {
98
+ return {
99
+ content: [
100
+ {
101
+ type: "text",
102
+ text: JSON.stringify({
103
+ error: error instanceof Error ? error.message : String(error),
104
+ }),
105
+ },
106
+ ],
107
+ isError: true,
108
+ };
109
+ }
110
+ },
111
+ };
112
+ //# sourceMappingURL=generateResponses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateResponses.js","sourceRoot":"","sources":["../../src/tools/generateResponses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAEN,oCAAoC,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,SAAS,YAAY,CAAC,OAAe;IACpC,OAAO;QACN,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;SACnE;QACD,OAAO,EAAE,IAAI;KACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,IAAI,EAAE,+BAA+B;IACrC,UAAU,EAAE;QACX,KAAK,EAAE,yDAAyD;QAChE,WAAW,EACV,iCAAiC,KAAK,CAAC,IAAI,uFAAuF;QACnI,WAAW,EAAE,oCAAoC,CAAC,KAAK;QACvD,WAAW,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,KAAK;SACtB;KACD;IACD,OAAO,EAAE,KAAK,EAAE,MAAwD,EAAE,EAAE;QAC3E,IAAI,CAAC;YACJ,yBAAyB;YACzB,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;gBACvC,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,KAAK;gBACf,iBAAiB,EAAE,OAAO;gBAC1B,mBAAmB,EAAE,OAAO;gBAC5B,oBAAoB,EAAE,OAAO;gBAC7B,YAAY,EAAE,OAAO;gBACrB,QAAQ,EAAE,MAAM;aAChB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,mBAAmB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAE7D,IAAI,WAQH,CAAC;YACF,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC9B,WAAW,GAAG;oBACb,IAAI,EAAE,MAAM,CAAC,SAAS;oBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;oBAC/B,QAAQ,EAAE,MAAM;oBAChB,WAAW,EAAE,UAAU;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ;iBACzC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,IAAI,WAAmB,CAAC;gBACxB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAClD,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oBACjC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;wBACvB,OAAO,YAAY,CAAC,qCAAqC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;oBAChC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACP,OAAO,YAAY,CAClB,qDAAqD,CACrD,CAAC;gBACH,CAAC;gBACD,WAAW,GAAG;oBACb,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,MAAM;oBAChB,WAAW,EAAE,UAAU;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ;iBACzC,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAEpE,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAE9C,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,UAAU,QAAQ,CAAC,KAAK,EAAE;yBAChC;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;iBACD;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACpB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D,CAAC;qBACF;iBACD;gBACD,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { GenerateResponsesFromGraphSchema } from "../schemas/index.js";
3
+ export declare const generateResponsesFromGraphTool: {
4
+ name: string;
5
+ definition: {
6
+ title: string;
7
+ description: string;
8
+ inputSchema: {
9
+ graphName: z.ZodString;
10
+ prompt: z.ZodString;
11
+ modelToUse: z.ZodDefault<z.ZodEnum<["claude-opus-4.1", "claude-opus-4.5", "claude-sonnet-4", "claude-sonnet-4.5", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "grok-4.1-fast-non-reasoning", "grok-4.1-fast-reasoning", "gpt-4o", "gpt-4o-mini", "gpt-5", "gpt-5-mini"]>>;
12
+ };
13
+ annotations: {
14
+ readOnlyHint: boolean;
15
+ idempotentHint: boolean;
16
+ destructiveHint: boolean;
17
+ };
18
+ };
19
+ handler: (params: z.infer<typeof GenerateResponsesFromGraphSchema>) => Promise<{
20
+ content: {
21
+ type: "text";
22
+ text: string;
23
+ }[];
24
+ isError: boolean;
25
+ } | {
26
+ content: {
27
+ type: "text";
28
+ text: string;
29
+ }[];
30
+ isError?: undefined;
31
+ }>;
32
+ };
33
+ //# sourceMappingURL=generateResponsesFromGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateResponsesFromGraph.d.ts","sourceRoot":"","sources":["../../src/tools/generateResponsesFromGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAIvE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;sBAalB,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC;;;;;;;;;;;;;CA8DxE,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { GenerateResponsesFromGraphSchema } from "../schemas/index.js";
2
+ import { makeInfraNodusRequest } from "../api/client.js";
3
+ import { generateResponses } from "../utils/transformers.js";
4
+ export const generateResponsesFromGraphTool = {
5
+ name: "generate_responses_from_graph",
6
+ definition: {
7
+ title: "Generate Responses and Expert Advice from an InfraNodus Graph",
8
+ description: "Retrieve an existing InfraNodus knowledge graph and use the relations extracted to generate responses and expert advice based on a prompt provided",
9
+ inputSchema: GenerateResponsesFromGraphSchema.shape,
10
+ annotations: {
11
+ "readOnlyHint": true,
12
+ "idempotentHint": true,
13
+ "destructiveHint": false
14
+ },
15
+ },
16
+ handler: async (params) => {
17
+ try {
18
+ // Build query parameters
19
+ const queryParams = new URLSearchParams({
20
+ doNotSave: "true",
21
+ addStats: "true",
22
+ optimize: "gap",
23
+ includeStatements: "false",
24
+ includeGraphSummary: "false",
25
+ extendedGraphSummary: "false",
26
+ includeGraph: "false",
27
+ aiTopics: "true",
28
+ });
29
+ const endpoint = `/graphAndAdvice?${queryParams.toString()}`;
30
+ const requestBody = {
31
+ name: params.graphName,
32
+ aiTopics: "true",
33
+ requestMode: "response",
34
+ prompt: params.prompt ? params.prompt : "",
35
+ modelToUse: params.modelToUse ? params.modelToUse : "gpt-4o",
36
+ };
37
+ const response = await makeInfraNodusRequest(endpoint, requestBody);
38
+ const responses = generateResponses(response);
39
+ if (response.error) {
40
+ return {
41
+ content: [
42
+ {
43
+ type: "text",
44
+ text: `Error: ${response.error}`,
45
+ },
46
+ ],
47
+ isError: true,
48
+ };
49
+ }
50
+ return {
51
+ content: [
52
+ {
53
+ type: "text",
54
+ text: JSON.stringify(responses, null, 2),
55
+ },
56
+ ],
57
+ };
58
+ }
59
+ catch (error) {
60
+ return {
61
+ content: [
62
+ {
63
+ type: "text",
64
+ text: JSON.stringify({
65
+ error: error instanceof Error ? error.message : String(error),
66
+ }),
67
+ },
68
+ ],
69
+ isError: true,
70
+ };
71
+ }
72
+ },
73
+ };
74
+ //# sourceMappingURL=generateResponsesFromGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateResponsesFromGraph.js","sourceRoot":"","sources":["../../src/tools/generateResponsesFromGraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,IAAI,EAAE,+BAA+B;IACrC,UAAU,EAAE;QACX,KAAK,EAAE,+DAA+D;QACtE,WAAW,EACV,oJAAoJ;QACrJ,WAAW,EAAE,gCAAgC,CAAC,KAAK;QACnD,WAAW,EAAE;YACV,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,KAAK;SAC1B;KACD;IACD,OAAO,EAAE,KAAK,EAAE,MAAwD,EAAE,EAAE;QAC3E,IAAI,CAAC;YACJ,yBAAyB;YACzB,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;gBACvC,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,KAAK;gBACf,iBAAiB,EAAE,OAAO;gBAC1B,mBAAmB,EAAE,OAAO;gBAC5B,oBAAoB,EAAE,OAAO;gBAC7B,YAAY,EAAE,OAAO;gBACrB,QAAQ,EAAE,MAAM;aAChB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,mBAAmB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAE7D,MAAM,WAAW,GAAQ;gBACxB,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC1C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;aAC5D,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAEpE,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAE9C,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,UAAU,QAAQ,CAAC,KAAK,EAAE;yBAChC;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;iBACD;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACpB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D,CAAC;qBACF;iBACD;gBACD,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { GenerateSEOGraphSchema } from "../schemas/index.js";
3
+ import { ToolHandlerContext } from "../types/index.js";
4
+ export declare const generateSEOGraphTool: {
5
+ name: string;
6
+ definition: {
7
+ title: string;
8
+ description: string;
9
+ inputSchema: {
10
+ text: z.ZodOptional<z.ZodString>;
11
+ url: z.ZodOptional<z.ZodString>;
12
+ contentToExtract: z.ZodDefault<z.ZodEnum<["all", "header tags", "link tags"]>>;
13
+ numberOfKeywordsToExtract: z.ZodDefault<z.ZodNumber>;
14
+ numberOfTopicsToExtract: z.ZodDefault<z.ZodNumber>;
15
+ importLanguage: z.ZodDefault<z.ZodEnum<["EN", "DE", "FR", "ES", "IT", "PT", "RU", "CN", "JP", "NL", "TW", "KO", "AR", "HE"]>>;
16
+ importCountry: z.ZodDefault<z.ZodEnum<["AR", "AU", "BR", "CA", "CH", "CN", "DE", "ES", "FR", "GB", "HK", "IN", "IT", "JP", "MX", "NL", "NO", "NZ", "PT", "RU", "SV", "TW", "US", "SG", "SA", "AE", "EG", "IR", "IL", "KR"]>>;
17
+ useProxy: z.ZodDefault<z.ZodBoolean>;
18
+ };
19
+ annotations: {
20
+ readOnlyHint: boolean;
21
+ idempotentHint: boolean;
22
+ destructiveHint: boolean;
23
+ };
24
+ };
25
+ handler: (params: z.infer<typeof GenerateSEOGraphSchema>, context?: ToolHandlerContext) => Promise<{
26
+ content: {
27
+ type: "text";
28
+ text: string;
29
+ }[];
30
+ isError: boolean;
31
+ } | {
32
+ content: {
33
+ type: "text";
34
+ text: string;
35
+ }[];
36
+ isError?: undefined;
37
+ }>;
38
+ };
39
+ //# sourceMappingURL=generateSEOGraphTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateSEOGraphTool.d.ts","sourceRoot":"","sources":["../../src/tools/generateSEOGraphTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAUvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;sBAcvB,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,YACrC,kBAAkB;;;;;;;;;;;;;CAiT5B,CAAC"}
@@ -0,0 +1,235 @@
1
+ import { GenerateSEOGraphSchema } from "../schemas/index.js";
2
+ import { makeInfraNodusRequest } from "../api/client.js";
3
+ import { generateKeywordsFromBigrams, generateTopicNames, generateSummaryFromTopicsAndGaps, extractInsightsFromExtendedGraphSummary, extractStatementStrings, } from "../utils/transformers.js";
4
+ import { fetchUrlContentAsText } from "../utils/urlContent.js";
5
+ import { ProgressReporter } from "../utils/progress.js";
6
+ export const generateSEOGraphTool = {
7
+ name: "generate_seo_report",
8
+ definition: {
9
+ title: "Generate SEO Analysis Report",
10
+ description: "Analyze content for SEO optimization by comparing its knowledge graph with the graphs of Google search results and search queries to identify content gaps and opportunities based on the differences",
11
+ inputSchema: GenerateSEOGraphSchema.shape,
12
+ annotations: {
13
+ readOnlyHint: true,
14
+ idempotentHint: true,
15
+ destructiveHint: false,
16
+ },
17
+ },
18
+ handler: async (params, context = {}) => {
19
+ try {
20
+ const numberOfKeywordsToExtract = Math.min(Number.isFinite(params.numberOfKeywordsToExtract)
21
+ ? params.numberOfKeywordsToExtract
22
+ : 2, 4);
23
+ const numberOfTopicsToExtract = Math.min(Number.isFinite(params.numberOfTopicsToExtract)
24
+ ? params.numberOfTopicsToExtract
25
+ : 2, 4);
26
+ // Initialize progress reporter
27
+ const progress = new ProgressReporter(context);
28
+ // Step 1: Generate topical clusters from the original text
29
+ await progress.report(5, "🔍 Extracting content from URL or text...");
30
+ // Resolve content: from URL (convert/url) if provided, otherwise use text
31
+ let contentText;
32
+ if (params.url) {
33
+ const result = await fetchUrlContentAsText(params.url, {
34
+ contentToExtract: params.contentToExtract ?? "all",
35
+ useProxy: params.useProxy === true,
36
+ });
37
+ if (!result.ok) {
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: JSON.stringify({ error: result.error }),
43
+ },
44
+ ],
45
+ isError: true,
46
+ };
47
+ }
48
+ contentText = result.contentText;
49
+ if (!contentText?.trim()) {
50
+ return {
51
+ content: [
52
+ {
53
+ type: "text",
54
+ text: JSON.stringify({
55
+ error: "URL did not return any text content",
56
+ }),
57
+ },
58
+ ],
59
+ isError: true,
60
+ };
61
+ }
62
+ }
63
+ else {
64
+ contentText = params.text ?? "";
65
+ }
66
+ if (!contentText.trim()) {
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify({
72
+ error: "Provide either url or text for SEO analysis",
73
+ }),
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ // Step 2: Generate topical clusters from the original text
80
+ await progress.report(10, "🔍 Analyzing your text to identify main topics and keywords...");
81
+ const topicalClustersResponse = await makeInfraNodusRequest("/graphAndStatements?doNotSave=true&addStats=true&includeGraphSummary=false&extendedGraphSummary=true&includeGraph=false&includeStatements=false&aiTopics=true", {
82
+ text: contentText,
83
+ });
84
+ if (topicalClustersResponse.error) {
85
+ return {
86
+ content: [
87
+ {
88
+ type: "text",
89
+ text: JSON.stringify({ error: topicalClustersResponse.error }),
90
+ },
91
+ ],
92
+ isError: true,
93
+ };
94
+ }
95
+ const keywords = generateKeywordsFromBigrams(topicalClustersResponse);
96
+ const topicNames = generateTopicNames(topicalClustersResponse);
97
+ // Combine both keywords and topic names, removing duplicates
98
+ const combinedQueries = [
99
+ ...(keywords.keywords?.slice(0, numberOfKeywordsToExtract) || []),
100
+ ...(topicNames.topicNames?.slice(0, numberOfTopicsToExtract) || []),
101
+ ];
102
+ const queries = [...new Set(combinedQueries)];
103
+ await progress.report(15, `📊 Identified ${queries.length} key search queries from your text`);
104
+ if (queries.length === 0) {
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: JSON.stringify({
110
+ error: "No keywords found in the text for SEO analysis",
111
+ }),
112
+ },
113
+ ],
114
+ isError: true,
115
+ };
116
+ }
117
+ // Step 2: Get Google search results for the main keywords
118
+ await progress.report(25, `🌐 Fetching Google search results for: ${queries
119
+ .slice(0, 2)
120
+ .join(", ")}${queries.length > 2 ? "..." : ""}`);
121
+ const searchResultsResponse = await makeInfraNodusRequest("/import/googleSearchResultsGraph?doNotSave=true&addStats=true&includeGraphSummary=true&extendedGraphSummary=true&includeGraph=false&includeStatements=false&compactGraph=true&compactStatements=true&aiTopics=true", {
122
+ searchQuery: queries.join(","),
123
+ aiTopics: "true",
124
+ importLanguage: params.importLanguage,
125
+ importCountry: params.importCountry,
126
+ });
127
+ if (searchResultsResponse.error) {
128
+ return {
129
+ content: [
130
+ {
131
+ type: "text",
132
+ text: JSON.stringify({ error: searchResultsResponse.error }),
133
+ },
134
+ ],
135
+ isError: true,
136
+ };
137
+ }
138
+ const searchResultsTopicsAndClusters = generateSummaryFromTopicsAndGaps(searchResultsResponse);
139
+ await progress.report(40, "🔎 Analyzing what people are searching for...");
140
+ // Step 3: Get Google search queries for the main keywords
141
+ const searchQueriesResponse = await makeInfraNodusRequest("/import/googleSearchIntentGraph?doNotSave=true&addStats=true&includeGraphSummary=true&extendedGraphSummary=true&includeGraph=false&includeStatements=false&compactGraph=true&compactStatements=true&aiTopics=true", {
142
+ searchQuery: queries.join(","),
143
+ aiTopics: "true",
144
+ keywordsSource: "related",
145
+ importLanguage: params.importLanguage,
146
+ importCountry: params.importCountry,
147
+ });
148
+ if (searchQueriesResponse.error) {
149
+ return {
150
+ content: [
151
+ {
152
+ type: "text",
153
+ text: JSON.stringify({ error: searchQueriesResponse.error }),
154
+ },
155
+ ],
156
+ isError: true,
157
+ };
158
+ }
159
+ const searchQueriesTopicsAndClusters = generateSummaryFromTopicsAndGaps(searchQueriesResponse);
160
+ await progress.report(55, "📝 Comparing your content with top search results...");
161
+ // Step 4: Compare original text vs search results
162
+ const textVsSearchResultsResponse = await makeInfraNodusRequest("/graphsAndStatements?doNotSave=true&addStats=true&includeStatements=false&includeGraphSummary=false&extendedGraphSummary=true&includeGraph=false&compactGraph=true&compactStatements=true&aiTopics=true&compareMode=difference", {
163
+ contexts: [
164
+ {
165
+ text: contentText,
166
+ modifyAnalyzedText: "none",
167
+ },
168
+ {
169
+ text: searchResultsTopicsAndClusters.summary || "",
170
+ modifyAnalyzedText: "none",
171
+ },
172
+ ],
173
+ aiTopics: "true",
174
+ });
175
+ const textVsSearchResultsInsights = extractInsightsFromExtendedGraphSummary(textVsSearchResultsResponse);
176
+ await progress.report(70, "🎯 Comparing your content with the top search queries...");
177
+ // Step 5: Compare original text vs search queries
178
+ const textVsSearchQueriesResponse = await makeInfraNodusRequest("/graphsAndStatements?doNotSave=true&addStats=true&includeStatements=false&includeGraphSummary=false&extendedGraphSummary=true&includeGraph=false&compactGraph=true&compactStatements=true&aiTopics=true&compareMode=difference", {
179
+ contexts: [
180
+ {
181
+ text: contentText,
182
+ modifyAnalyzedText: "none",
183
+ },
184
+ {
185
+ text: searchQueriesTopicsAndClusters.summary || "",
186
+ modifyAnalyzedText: "none",
187
+ },
188
+ ],
189
+ aiTopics: "true",
190
+ });
191
+ const textVsSearchQueriesInsights = extractInsightsFromExtendedGraphSummary(textVsSearchQueriesResponse);
192
+ await progress.report(85, "💡 Finding what people search for but do not find...");
193
+ // Step 6: Compare search queries vs search results
194
+ const queriesVsResultsResponse = await makeInfraNodusRequest("/import/googleSearchVsIntentGraph?doNotSave=true&addStats=true&includeGraphSummary=false&extendedGraphSummary=true&includeGraph=false&includeStatements=true&compactGraph=true&compactStatements=true&aiTopics=true", {
195
+ searchQuery: queries.join(","),
196
+ aiTopics: "true",
197
+ importLanguage: params.importLanguage,
198
+ importCountry: params.importCountry,
199
+ });
200
+ const queriesVsResultsInsights = extractInsightsFromExtendedGraphSummary(queriesVsResultsResponse);
201
+ const topMissingQueries = extractStatementStrings(queriesVsResultsResponse);
202
+ await progress.report(95, "✅ Preparing comprehensive SEO analysis report...");
203
+ // Prepare the final results
204
+ const seoResults = {
205
+ inSearchResultsNotInText: textVsSearchResultsInsights,
206
+ inSearchQueriesNotInText: textVsSearchQueriesInsights,
207
+ inSearchQueriesNotInResults: queriesVsResultsInsights,
208
+ topMissingQueries: topMissingQueries.statements,
209
+ };
210
+ await progress.report(100, "🎉 SEO analysis complete!");
211
+ return {
212
+ content: [
213
+ {
214
+ type: "text",
215
+ text: JSON.stringify(seoResults, null, 2),
216
+ },
217
+ ],
218
+ };
219
+ }
220
+ catch (error) {
221
+ return {
222
+ content: [
223
+ {
224
+ type: "text",
225
+ text: JSON.stringify({
226
+ error: error instanceof Error ? error.message : String(error),
227
+ }),
228
+ },
229
+ ],
230
+ isError: true,
231
+ };
232
+ }
233
+ },
234
+ };
235
+ //# sourceMappingURL=generateSEOGraphTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateSEOGraphTool.js","sourceRoot":"","sources":["../../src/tools/generateSEOGraphTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { GenerateTextOverviewSchema } from "../schemas/index.js";
3
+ export declare const generateTextOverviewTool: {
4
+ name: string;
5
+ definition: {
6
+ title: string;
7
+ description: string;
8
+ inputSchema: {
9
+ text: z.ZodString;
10
+ };
11
+ annotations: {
12
+ readOnlyHint: boolean;
13
+ idempotentHint: boolean;
14
+ destructiveHint: boolean;
15
+ };
16
+ };
17
+ handler: (params: z.infer<typeof GenerateTextOverviewSchema>) => Promise<{
18
+ content: {
19
+ type: "text";
20
+ text: string;
21
+ }[];
22
+ isError: boolean;
23
+ } | {
24
+ content: {
25
+ type: "text";
26
+ text: string;
27
+ }[];
28
+ isError?: undefined;
29
+ }>;
30
+ };
31
+ //# sourceMappingURL=generateTextOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateTextOverview.d.ts","sourceRoot":"","sources":["../../src/tools/generateTextOverview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAIjE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;sBAaZ,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC;;;;;;;;;;;;;CAuDlE,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { GenerateTextOverviewSchema } from "../schemas/index.js";
2
+ import { makeInfraNodusRequest } from "../api/client.js";
3
+ import { generateTextOverview } from "../utils/transformers.js";
4
+ export const generateTextOverviewTool = {
5
+ name: "generate_text_overview",
6
+ definition: {
7
+ title: "Generate an Overview of a Text",
8
+ description: "Generate a topical overview of a text based on its knowledge base and topical structure and provide insights for LLMs to generate better responses",
9
+ inputSchema: GenerateTextOverviewSchema.shape,
10
+ annotations: {
11
+ "readOnlyHint": true,
12
+ "idempotentHint": true,
13
+ "destructiveHint": false
14
+ },
15
+ },
16
+ handler: async (params) => {
17
+ try {
18
+ // First generate the graph with focus on insights
19
+ const queryParams = new URLSearchParams({
20
+ doNotSave: "true",
21
+ addStats: "true",
22
+ includeGraphSummary: "true",
23
+ extendedGraphSummary: "false",
24
+ includeGraph: "false",
25
+ includeStatements: "false",
26
+ aiTopics: "true",
27
+ });
28
+ const endpoint = `/graphAndStatements?${queryParams.toString()}`;
29
+ const response = await makeInfraNodusRequest(endpoint, {
30
+ text: params.text,
31
+ });
32
+ if (response.error) {
33
+ return {
34
+ content: [
35
+ {
36
+ type: "text",
37
+ text: JSON.stringify({ error: response.error }),
38
+ },
39
+ ],
40
+ isError: true,
41
+ };
42
+ }
43
+ const textOverview = generateTextOverview(response);
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: JSON.stringify(textOverview, null, 2),
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ catch (error) {
54
+ return {
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: JSON.stringify({
59
+ error: error instanceof Error ? error.message : String(error),
60
+ }),
61
+ },
62
+ ],
63
+ isError: true,
64
+ };
65
+ }
66
+ },
67
+ };
68
+ //# sourceMappingURL=generateTextOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateTextOverview.js","sourceRoot":"","sources":["../../src/tools/generateTextOverview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC,IAAI,EAAE,wBAAwB;IAC9B,UAAU,EAAE;QACX,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACV,oJAAoJ;QACrJ,WAAW,EAAE,0BAA0B,CAAC,KAAK;QAC7C,WAAW,EAAE;YACV,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,KAAK;SAC1B;KACD;IACD,OAAO,EAAE,KAAK,EAAE,MAAkD,EAAE,EAAE;QACrE,IAAI,CAAC;YACJ,kDAAkD;YAClD,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;gBACvC,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,MAAM;gBAChB,mBAAmB,EAAE,MAAM;gBAC3B,oBAAoB,EAAE,OAAO;gBAC7B,YAAY,EAAE,OAAO;gBACrB,iBAAiB,EAAE,OAAO;gBAC1B,QAAQ,EAAE,MAAM;aAChB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,uBAAuB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAEjE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE;gBACtD,IAAI,EAAE,MAAM,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;yBAC/C;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAEpD,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC3C;iBACD;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACpB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D,CAAC;qBACF;iBACD;gBACD,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC"}