infranodus-mcp-server 1.8.4 → 1.9.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 (220) hide show
  1. package/README.md +118 -55
  2. package/dist/api/client.d.ts +10 -0
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +42 -0
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/config/brand.d.ts.map +1 -1
  7. package/dist/config/brand.js +2 -0
  8. package/dist/config/brand.js.map +1 -1
  9. package/dist/config/index.d.ts +1 -1
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +4 -1
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/http-server.js +66 -10
  14. package/dist/http-server.js.map +1 -1
  15. package/dist/index.d.ts +9 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +43 -9
  18. package/dist/index.js.map +1 -1
  19. package/dist/instructions.d.ts.map +1 -1
  20. package/dist/instructions.js +13 -4
  21. package/dist/instructions.js.map +1 -1
  22. package/dist/resources/about.d.ts.map +1 -1
  23. package/dist/resources/about.js +1 -0
  24. package/dist/resources/about.js.map +1 -1
  25. package/dist/schemas/index.d.ts +338 -22
  26. package/dist/schemas/index.d.ts.map +1 -1
  27. package/dist/schemas/index.js +182 -5
  28. package/dist/schemas/index.js.map +1 -1
  29. package/dist/tools/addMemory.d.ts +11 -8
  30. package/dist/tools/addMemory.d.ts.map +1 -1
  31. package/dist/tools/addMemory.js +54 -3
  32. package/dist/tools/addMemory.js.map +1 -1
  33. package/dist/tools/addProjectLearnings.d.ts +1 -0
  34. package/dist/tools/addProjectLearnings.d.ts.map +1 -1
  35. package/dist/tools/addProjectLearnings.js +19 -168
  36. package/dist/tools/addProjectLearnings.js.map +1 -1
  37. package/dist/tools/analyzeExistingGraph.d.ts +2 -0
  38. package/dist/tools/analyzeExistingGraph.d.ts.map +1 -1
  39. package/dist/tools/analyzeExistingGraph.js +3 -1
  40. package/dist/tools/analyzeExistingGraph.js.map +1 -1
  41. package/dist/tools/analyzeLlmResults.d.ts +2 -0
  42. package/dist/tools/analyzeLlmResults.d.ts.map +1 -1
  43. package/dist/tools/analyzeLlmResults.js +2 -0
  44. package/dist/tools/analyzeLlmResults.js.map +1 -1
  45. package/dist/tools/analyzeText.d.ts +3 -0
  46. package/dist/tools/analyzeText.d.ts.map +1 -1
  47. package/dist/tools/analyzeText.js +3 -1
  48. package/dist/tools/analyzeText.js.map +1 -1
  49. package/dist/tools/analyzeTextSignature.d.ts +39 -0
  50. package/dist/tools/analyzeTextSignature.d.ts.map +1 -0
  51. package/dist/tools/analyzeTextSignature.js +83 -0
  52. package/dist/tools/analyzeTextSignature.js.map +1 -0
  53. package/dist/tools/createKnowledgeGraph.d.ts +3 -0
  54. package/dist/tools/createKnowledgeGraph.d.ts.map +1 -1
  55. package/dist/tools/createKnowledgeGraph.js +3 -1
  56. package/dist/tools/createKnowledgeGraph.js.map +1 -1
  57. package/dist/tools/developConceptualBridges.d.ts +2 -0
  58. package/dist/tools/developConceptualBridges.d.ts.map +1 -1
  59. package/dist/tools/developConceptualBridges.js +1 -0
  60. package/dist/tools/developConceptualBridges.js.map +1 -1
  61. package/dist/tools/developLatentTopics.d.ts +2 -0
  62. package/dist/tools/developLatentTopics.d.ts.map +1 -1
  63. package/dist/tools/developLatentTopics.js +1 -0
  64. package/dist/tools/developLatentTopics.js.map +1 -1
  65. package/dist/tools/developTextTool.d.ts +2 -0
  66. package/dist/tools/developTextTool.d.ts.map +1 -1
  67. package/dist/tools/developTextTool.js +1 -0
  68. package/dist/tools/developTextTool.js.map +1 -1
  69. package/dist/tools/enableMemory.d.ts +29 -0
  70. package/dist/tools/enableMemory.d.ts.map +1 -0
  71. package/dist/tools/enableMemory.js +35 -0
  72. package/dist/tools/enableMemory.js.map +1 -0
  73. package/dist/tools/enableProjectLearnings.d.ts +1 -0
  74. package/dist/tools/enableProjectLearnings.d.ts.map +1 -1
  75. package/dist/tools/enableProjectLearnings.js +7 -40
  76. package/dist/tools/enableProjectLearnings.js.map +1 -1
  77. package/dist/tools/generateContentGaps.d.ts +2 -0
  78. package/dist/tools/generateContentGaps.d.ts.map +1 -1
  79. package/dist/tools/generateContentGaps.js +1 -0
  80. package/dist/tools/generateContentGaps.js.map +1 -1
  81. package/dist/tools/generateContextualHint.d.ts +2 -0
  82. package/dist/tools/generateContextualHint.d.ts.map +1 -1
  83. package/dist/tools/generateContextualHint.js +1 -0
  84. package/dist/tools/generateContextualHint.js.map +1 -1
  85. package/dist/tools/generateDifferenceGraphFromTexts.d.ts +3 -0
  86. package/dist/tools/generateDifferenceGraphFromTexts.d.ts.map +1 -1
  87. package/dist/tools/generateDifferenceGraphFromTexts.js +3 -1
  88. package/dist/tools/generateDifferenceGraphFromTexts.js.map +1 -1
  89. package/dist/tools/generateGoogleResultsVsQueriesGraph.d.ts +1 -0
  90. package/dist/tools/generateGoogleResultsVsQueriesGraph.d.ts.map +1 -1
  91. package/dist/tools/generateGoogleResultsVsQueriesGraph.js +1 -0
  92. package/dist/tools/generateGoogleResultsVsQueriesGraph.js.map +1 -1
  93. package/dist/tools/generateGoogleSearchQueriesGraph.d.ts +1 -0
  94. package/dist/tools/generateGoogleSearchQueriesGraph.d.ts.map +1 -1
  95. package/dist/tools/generateGoogleSearchQueriesGraph.js +1 -0
  96. package/dist/tools/generateGoogleSearchQueriesGraph.js.map +1 -1
  97. package/dist/tools/generateGoogleSearchResultsGraph.d.ts +1 -0
  98. package/dist/tools/generateGoogleSearchResultsGraph.d.ts.map +1 -1
  99. package/dist/tools/generateGoogleSearchResultsGraph.js +1 -0
  100. package/dist/tools/generateGoogleSearchResultsGraph.js.map +1 -1
  101. package/dist/tools/generateKnowledgeGraph.d.ts +3 -0
  102. package/dist/tools/generateKnowledgeGraph.d.ts.map +1 -1
  103. package/dist/tools/generateKnowledgeGraph.js +3 -1
  104. package/dist/tools/generateKnowledgeGraph.js.map +1 -1
  105. package/dist/tools/generateMergedGraphFromTexts.d.ts +3 -0
  106. package/dist/tools/generateMergedGraphFromTexts.d.ts.map +1 -1
  107. package/dist/tools/generateMergedGraphFromTexts.js +3 -1
  108. package/dist/tools/generateMergedGraphFromTexts.js.map +1 -1
  109. package/dist/tools/generateOntologyGraph.d.ts +2 -0
  110. package/dist/tools/generateOntologyGraph.d.ts.map +1 -1
  111. package/dist/tools/generateOntologyGraph.js +3 -1
  112. package/dist/tools/generateOntologyGraph.js.map +1 -1
  113. package/dist/tools/generateOverlapGraphFromTexts.d.ts +3 -0
  114. package/dist/tools/generateOverlapGraphFromTexts.d.ts.map +1 -1
  115. package/dist/tools/generateOverlapGraphFromTexts.js +3 -1
  116. package/dist/tools/generateOverlapGraphFromTexts.js.map +1 -1
  117. package/dist/tools/generateResearchIdeas.d.ts +2 -0
  118. package/dist/tools/generateResearchIdeas.d.ts.map +1 -1
  119. package/dist/tools/generateResearchIdeas.js +1 -0
  120. package/dist/tools/generateResearchIdeas.js.map +1 -1
  121. package/dist/tools/generateResearchQuestions.d.ts +2 -0
  122. package/dist/tools/generateResearchQuestions.d.ts.map +1 -1
  123. package/dist/tools/generateResearchQuestions.js +1 -0
  124. package/dist/tools/generateResearchQuestions.js.map +1 -1
  125. package/dist/tools/generateResponses.d.ts +2 -0
  126. package/dist/tools/generateResponses.d.ts.map +1 -1
  127. package/dist/tools/generateResponses.js +1 -0
  128. package/dist/tools/generateResponses.js.map +1 -1
  129. package/dist/tools/generateSEOGraphTool.d.ts +2 -0
  130. package/dist/tools/generateSEOGraphTool.d.ts.map +1 -1
  131. package/dist/tools/generateSEOGraphTool.js +2 -1
  132. package/dist/tools/generateSEOGraphTool.js.map +1 -1
  133. package/dist/tools/generateTopicalClusters.d.ts +2 -0
  134. package/dist/tools/generateTopicalClusters.d.ts.map +1 -1
  135. package/dist/tools/generateTopicalClusters.js +1 -0
  136. package/dist/tools/generateTopicalClusters.js.map +1 -1
  137. package/dist/tools/generateYoutubeSearchResultsGraph.d.ts +1 -0
  138. package/dist/tools/generateYoutubeSearchResultsGraph.d.ts.map +1 -1
  139. package/dist/tools/generateYoutubeSearchResultsGraph.js +1 -0
  140. package/dist/tools/generateYoutubeSearchResultsGraph.js.map +1 -1
  141. package/dist/tools/getMemory.d.ts +8 -7
  142. package/dist/tools/getMemory.d.ts.map +1 -1
  143. package/dist/tools/getMemory.js +19 -2
  144. package/dist/tools/getMemory.js.map +1 -1
  145. package/dist/tools/getNodeNeighborhood.d.ts +30 -0
  146. package/dist/tools/getNodeNeighborhood.d.ts.map +1 -0
  147. package/dist/tools/getNodeNeighborhood.js +68 -0
  148. package/dist/tools/getNodeNeighborhood.js.map +1 -0
  149. package/dist/tools/getProjectLearnings.d.ts +2 -0
  150. package/dist/tools/getProjectLearnings.d.ts.map +1 -1
  151. package/dist/tools/getProjectLearnings.js +12 -125
  152. package/dist/tools/getProjectLearnings.js.map +1 -1
  153. package/dist/tools/index.d.ts +3 -0
  154. package/dist/tools/index.d.ts.map +1 -1
  155. package/dist/tools/index.js +3 -0
  156. package/dist/tools/index.js.map +1 -1
  157. package/dist/tools/listGraphs.d.ts +1 -0
  158. package/dist/tools/listGraphs.d.ts.map +1 -1
  159. package/dist/tools/listGraphs.js +1 -0
  160. package/dist/tools/listGraphs.js.map +1 -1
  161. package/dist/tools/optimizeKnowledgeBase.d.ts +1 -0
  162. package/dist/tools/optimizeKnowledgeBase.d.ts.map +1 -1
  163. package/dist/tools/optimizeKnowledgeBase.js +19 -6
  164. package/dist/tools/optimizeKnowledgeBase.js.map +1 -1
  165. package/dist/tools/optimizeReasoning.d.ts +2 -0
  166. package/dist/tools/optimizeReasoning.d.ts.map +1 -1
  167. package/dist/tools/optimizeReasoning.js +1 -0
  168. package/dist/tools/optimizeReasoning.js.map +1 -1
  169. package/dist/tools/optimizeTextStructure.d.ts +2 -0
  170. package/dist/tools/optimizeTextStructure.d.ts.map +1 -1
  171. package/dist/tools/optimizeTextStructure.js +1 -0
  172. package/dist/tools/optimizeTextStructure.js.map +1 -1
  173. package/dist/tools/retrieveContextForPromptFromGraph.d.ts +3 -0
  174. package/dist/tools/retrieveContextForPromptFromGraph.d.ts.map +1 -1
  175. package/dist/tools/retrieveContextForPromptFromGraph.js +4 -1
  176. package/dist/tools/retrieveContextForPromptFromGraph.js.map +1 -1
  177. package/dist/tools/searchGraphs.d.ts +1 -0
  178. package/dist/tools/searchGraphs.d.ts.map +1 -1
  179. package/dist/tools/searchGraphs.js +1 -0
  180. package/dist/tools/searchGraphs.js.map +1 -1
  181. package/dist/tools/searchGraphsFetch.d.ts +1 -0
  182. package/dist/tools/searchGraphsFetch.d.ts.map +1 -1
  183. package/dist/tools/searchGraphsFetch.js +2 -1
  184. package/dist/tools/searchGraphsFetch.js.map +1 -1
  185. package/dist/tools/updateStatements.d.ts +2 -2
  186. package/dist/types/index.d.ts +97 -0
  187. package/dist/types/index.d.ts.map +1 -1
  188. package/dist/utils/elicitApproval.d.ts +42 -0
  189. package/dist/utils/elicitApproval.d.ts.map +1 -0
  190. package/dist/utils/elicitApproval.js +83 -0
  191. package/dist/utils/elicitApproval.js.map +1 -0
  192. package/dist/utils/graphInput.d.ts +5 -1
  193. package/dist/utils/graphInput.d.ts.map +1 -1
  194. package/dist/utils/graphInput.js +4 -3
  195. package/dist/utils/graphInput.js.map +1 -1
  196. package/dist/utils/learnings.d.ts +4 -2
  197. package/dist/utils/learnings.d.ts.map +1 -1
  198. package/dist/utils/learnings.js +4 -2
  199. package/dist/utils/learnings.js.map +1 -1
  200. package/dist/utils/memoryResult.d.ts +23 -0
  201. package/dist/utils/memoryResult.d.ts.map +1 -0
  202. package/dist/utils/memoryResult.js +27 -0
  203. package/dist/utils/memoryResult.js.map +1 -0
  204. package/dist/utils/textSignature.d.ts +231 -0
  205. package/dist/utils/textSignature.d.ts.map +1 -0
  206. package/dist/utils/textSignature.js +738 -0
  207. package/dist/utils/textSignature.js.map +1 -0
  208. package/dist/utils/transformers.d.ts +3 -2
  209. package/dist/utils/transformers.d.ts.map +1 -1
  210. package/dist/utils/transformers.js +29 -1
  211. package/dist/utils/transformers.js.map +1 -1
  212. package/dist/utils/wikilinksMode.d.ts +12 -2
  213. package/dist/utils/wikilinksMode.d.ts.map +1 -1
  214. package/dist/utils/wikilinksMode.js +18 -5
  215. package/dist/utils/wikilinksMode.js.map +1 -1
  216. package/llms-full.infranodus.txt +30 -9
  217. package/llms-full.txt +30 -9
  218. package/llms.infranodus.txt +6 -2
  219. package/llms.txt +6 -2
  220. package/package.json +4 -2
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  A Model Context Protocol (MCP) server that integrates InfraNodus knowledge graph and text network analysis capabilities into LLM workflows and AI assistants like Claude Desktop.
4
4
 
5
+ [![npm version](https://img.shields.io/npm/v/infranodus-mcp-server.svg)](https://www.npmjs.com/package/infranodus-mcp-server)
6
+
7
+ Available on npm: [https://www.npmjs.com/package/infranodus-mcp-server](https://www.npmjs.com/package/infranodus-mcp-server)
8
+
5
9
  ## Overview
6
10
 
7
11
  InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text using advanced network science algorithms, generate knowledge graphs, detect content gaps, and identify key topics and concepts. It transforms unstructured text into structured insights using graph theory and network analysis.
@@ -37,202 +41,221 @@ InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text us
37
41
  - Extract and analyze a graph from text or URL; provide either text or url
38
42
  - Get topics, clusters, statements, graph structure, and AI summary as requested
39
43
 
40
- 4. **generate_content_gaps**
44
+ 4. **analyze_text_signature**
45
+ - Structural and rhythmic signature of a text, URL, or YouTube transcript
46
+ - Every measure with a plain-language reading, a named profile (essay, digest, anthology...), and a hedged AI-likeness estimate
47
+ - Use to compare writing styles, characterise an author or genre, or flag flat, uniformly paced text
48
+
49
+ 5. **generate_content_gaps**
41
50
  - Detect missing connections in discourse
42
51
  - Identify underexplored topics
43
52
  - Generate research questions
44
53
  - Suggest content development opportunities
45
54
 
46
- 5. **generate_topical_clusters**
55
+ 6. **generate_topical_clusters**
47
56
  - Generate topics and clusters of keywords from text using knowledge graph analysis
48
57
  - Make sure to beyond genetic insights and detect smaller topics
49
58
  - Use the topical clusters to establish topical authority for SEO
50
59
  - Returns AI-generated overviews of the topical clusters (`topicalClusterSummaries`), summarizing the discourse each cluster represents — useful for SEO-optimized content creation. Enabled by default; set `generateTopicalSummaries: false` to increase processing speed or if the summary request fails
51
60
 
52
- 6. **generate_contextual_hint**
61
+ 7. **generate_contextual_hint**
53
62
  - Generate a topical overview of a text and provide insights for LLMs to generate better responses
54
63
  - Use it to get a high-level understanding of a text
55
64
  - Use it to augment prompts in your LLM workflows and AI assistants
56
65
 
57
- 7. **generate_research_questions**
66
+ 8. **generate_research_questions**
58
67
  - Generate research questions that bridge content gaps from text, URL, or an existing InfraNodus graph
59
68
  - Use them as prompts in your LLM models and AI workflows
60
69
  - Use any AI model (included in InfraNodus API)
61
70
  - Content gaps are identified based on topical clustering
62
71
 
63
- 8. **generate_research_ideas**
72
+ 9. **generate_research_ideas**
64
73
  - Generate innovative research ideas based on content gaps identified in the text
65
74
  - Get actionable ideas to improve the text and develop the discourse
66
75
  - Use any AI model (included in InfraNodus API)
67
76
  - Ideas are generated from gaps between topical clusters
68
77
 
69
- 9. **optimize_text_structure**
70
- - Analyze the level of bias and coherence in text using knowledge graph analysis
71
- - If the text is too biased, develop the represented topics to balance the discourse
72
- - If the text is focused or diversified, develop the content gaps to deepen the analysis
73
- - If the text is dispersed, focus the most common gap topics to improve coherence
74
- - Choose response type: response, idea, question, or transcend
78
+ 10. **optimize_text_structure**
79
+ - Analyze the level of bias and coherence in text using knowledge graph analysis
80
+ - If the text is too biased, develop the represented topics to balance the discourse
81
+ - If the text is focused or diversified, develop the content gaps to deepen the analysis
82
+ - If the text is dispersed, focus the most common gap topics to improve coherence
83
+ - Choose response type: response, idea, question, or transcend
75
84
 
76
- 10. **optimize_reasoning**
85
+ 11. **optimize_reasoning**
77
86
  - Applies the same bias/coherence analysis to the model's own reasoning trace or chat with the user (pass it as `text`)
78
87
  - Detects whether the reasoning is biased, focused, diversified, or dispersed
79
88
  - Steers the reasoning toward optimal diversity and coherence at the same time
80
89
  - If too biased, develop the under-represented topics; if focused or diversified, bridge the content gaps; if dispersed, focus the most common gap topics
81
90
  - Returns a structural diagnosis (diversity stats, topical clusters, gaps) plus suggestions for how to continue thinking
82
91
 
83
- 11. **generate_responses_from_graph**
92
+ 12. **generate_responses_from_graph**
84
93
  - Generate responses based on an existing InfraNodus graph
85
94
  - Integrate them into your LLM workflows and AI assistants
86
95
  - Use any AI model (included in InfraNodus API)
87
96
  - Use any prompt
88
97
 
89
- 12. **develop_conceptual_bridges**
98
+ 13. **develop_conceptual_bridges**
90
99
  - Analyze text and develop latent ideas based on concepts that connect this text to a broader discourse
91
100
  - Discover hidden themes and patterns that link your text to wider contexts
92
101
  - Use any AI model (included in InfraNodus API)
93
102
  - Generate insights that help develop the discourse
94
103
 
95
- 13. **develop_latent_topics**
104
+ 14. **develop_latent_topics**
96
105
  - Analyze text and extract underdeveloped topics with ideas on how to develop them
97
106
  - Identify topics that need more attention and elaboration
98
107
  - Use any AI model (included in InfraNodus API)
99
108
  - Get actionable suggestions for content expansion
100
109
 
101
- 14. **develop_text_tool**
110
+ 15. **develop_text_tool**
102
111
  - Comprehensive text analysis combining content gap ideas, latent topics, and conceptual bridges
103
112
  - Executes multiple analyses in sequence with progress tracking
104
113
  - Generates research ideas based on content gaps
105
114
  - Identifies latent topics and conceptual bridges to develop
106
115
  - Finds content gaps for deeper exploration
107
116
 
108
- 15. **create_knowledge_graph**
117
+ 16. **create_knowledge_graph**
109
118
  - Create a knowledge graph in InfraNodus from text and provide a link to it
110
119
  - Use it to create a knowledge graph in InfraNodus from text
120
+ - Also accepts `statements` (discrete items) with parallel `categories` and `timestamps`. Categories are stored as metadata on each statement (filter, group, delete, or relabel by them) and stay out of the graph unless `categoriesAsNodes: true`, which turns each label into a `[[label]]` node — meant for large knowledge bases and Obsidian vaults where the connections between pages are the point. The parent modes of `wikilinksMode` (`obsidianStyle`, `parentAndConcepts`) always make the parent page a node
111
121
 
112
- 16. **generate_ontology_graph**
122
+ 17. **generate_ontology_graph**
113
123
  - Use AI to generate a reasoning ontology graph (entities and the relations between them) from one of three sources: a `prompt` (a topic — e.g. "build an ontology on AI attention mechanisms"), a `text` (a long document or a structural digest of a project, chunked server-side), or a `sourceGraphName` (an existing graph — e.g. a fully ingested repo or corpus — whose statements are read back, chunked, and condensed into an ontology)
114
124
  - `ontologyMode: 'codebase'` frames the extraction around modules, functions, data stores, services, and the concepts they implement; `ontologyMode: 'procedural'` writes a **digest** instead — prose statements on how the project works with `[[wikilinks]]`, each typed as `[principles]`, `[rules]`, `[procedures]`, `[handoffs]`, `[main_ideas]` or `[gaps]` (saved as the statement's category), from an already-uploaded docs/structure graph; save it as `repo-<project>-digest` for `optimize_knowledge_base`; `chunkSize` (default 12000 chars) controls granularity; every chunk appends to the same graph and the response reports `chunksProcessed` / `chunksTotal`
115
125
  - Saved as a persistent InfraNodus graph by default and a link is returned; set `saveGraph: false` if the user asks not to save, or when you only need a one-off AI ontology overview of a topic for the current context that won't be reused later (the generated statements are returned directly without persisting)
116
126
  - `modelToUse` defaults to `claude-opus-5` for richer ontologies (also `claude-fable-5`, `gpt-5.6-terra`); pick `-mini`/`-lite` variants (or `gpt-4o-mini`) for faster, cheaper generation
117
127
  - Returns the compact graph structure (`knowledgeGraph`) and analytics (main topical clusters, content gaps, top influential nodes, top relations, statistics) by default. Set `includeGraph: false` to save context space when only the ontology statements or insights are needed. Set `includeAnalytics: false` if you just need the raw ontology without graph-derived insights — keep it on whenever you want to understand the structure, gaps, or key concepts
118
128
 
119
- 17. **analyze_llm_results**
129
+ 18. **analyze_llm_results**
120
130
  - Ask an LLM to describe a topic and turn its response into a knowledge graph that reveals how the model frames it — main concepts, clusters, content gaps, and the relations between them
121
131
  - Use it to probe model bias, surface the implicit structure of an LLM's view on a subject, or compare how different models describe the same topic
122
132
  - `modelToUse` defaults to `claude-opus-5`; pick the model you actually want to study
123
133
  - `modifyAnalyzedText` controls how the LLM output is parsed: `'detectEntities'` (default — mixed entities + words), `'extractEntitiesOnly'` (entity-only graph), or `'none'` (plain co-occurrence)
124
134
  - Saves the graph by default; set `saveGraph: false` for a one-off probe. Returns analytics by default and omits the raw graph (`includeGraph: false`) to keep responses compact — enable `includeGraph` when you also need nodes/edges
125
135
 
126
- 18. **overlap_between_texts**
136
+ 19. **overlap_between_texts**
127
137
  - Create knowledge graphs from two or more texts and find the overlap (similarities) between them
128
138
  - Use it to find similar topics and keywords across different texts
129
139
 
130
- 19. **merged_graph_from_texts**
140
+ 20. **merged_graph_from_texts**
131
141
  - Build a graph of all the texts and URLs provided, providing topical clusters and gaps present in the merged graph generated from all the texts
132
142
  - Use it to combine multiple sources into one graph and see clusters and content gaps across the merged content
133
143
 
134
- 20. **difference_between_texts**
144
+ 21. **difference_between_texts**
135
145
  - Compare knowledge graphs from two or more texts and find what's not present in the first graph that's present in the others
136
146
  - Use it to find how one text can be enriched with the others
137
147
 
138
- 21. **analyze_google_search_results**
148
+ 22. **analyze_google_search_results**
139
149
  - Generate a graph with keywords and topics for Google search results for a certain query
140
150
  - Use it to understand the current informational supply (what people find)
141
151
 
142
- 22. **analyze_youtube_results**
152
+ 23. **analyze_youtube_results**
143
153
  - Generate a graph with keywords and topics from YouTube results for a query, channel, or playlist
144
154
  - Choose what to pull via `searchMode`: `search` (video metadata for a search term), `comments` (comments on a video), `channel` (a channel's videos — pass a username, URL, or @handle), `playlist` (a playlist's videos — pass a playlist ID or a URL with `list=`), `subtitles` / `subtitlesChannel` / `subtitlesPlaylist` (transcribed subtitles of a video / channel / playlist), or `searchVideos` (analyzes the content of the videos found — limit hard-capped to 20)
145
155
  - Control results with `limit` (default 100, max 2000), `sortBy` (`Popular` / `Oldest` / `Latest`), `excludeDescriptions`, `importLanguage`, and `importRegion`
146
156
  - Use it to understand the topics, clusters, and content gaps in the discourse around a video, channel, playlist, or search term on YouTube
147
157
 
148
- 23. **analyze_related_search_queries**
158
+ 24. **analyze_related_search_queries**
149
159
  - Generate a graph from the search queries suggested by Google for a certain query
150
160
  - Use it to understand the current informational demand (what people are looking for)
151
161
 
152
- 24. **search_queries_vs_search_results**
162
+ 25. **search_queries_vs_search_results**
153
163
  - Generate a graph of keyword combinations and topics people tend to search for that do not readily appear in the search results for the same queries
154
164
  - Use it to understand what people search for but don't yet find
155
165
 
156
- 25. **generate_seo_report**
166
+ 26. **generate_seo_report**
157
167
  - Analyze content for SEO optimization by comparing it with Google search results and search queries
158
168
  - Identify content gaps and opportunities for better search visibility
159
169
  - Get comprehensive analysis of what's in search results but not in your text
160
170
  - Discover what people search for but don't find in current results
161
171
 
162
- 26. **memory_add_relations**
163
- - Add relations to the InfraNodus memory from text
164
- - Automatically detect entities or use [[wikilinks]] syntax to mark them
165
- - Save memory to a specified graph name for future retrieval
166
- - Support automatic entity extraction or manual entity marking
167
- - Provide links to created memory graphs for easy access
168
-
169
- 27. **memory_get_relations**
170
- - Retrieve relations from InfraNodus memory for specific entities
171
- - Search for entity relations using [[wikilinks]] syntax
172
- - Query specific memory contexts or search across all memory graphs
173
- - Extract statements and relationships from stored knowledge graphs
174
- - Support both entity-specific searches and full context retrieval
175
-
176
- 28. **retrieve_from_knowledge_base**
172
+ 27. **memory_add_relations** (Save to InfraNodus Memory)
173
+ - Save statements to a named persistent memory graph and get back its name and URL
174
+ - For "remember this", "save this to memory", or ideas, plans, and decisions worth keeping
175
+ - With `graphName`: writes immediately to that graph, no opt-in, no dry run; reuse the name to append
176
+ - With `scope` instead: `topic` (+ `topic`, graph `memory-<topic>`) for an outside subject, client or case, or `personal` (graph `personal-<user>`) for your own preferences and setup. These must be enabled once with `enable_memory`, and each batch is a dry run until approved, like project learnings
177
+ - Mark entities with [[wikilinks]] (at least two per statement); pass categories and timestamps for later filtering
178
+
179
+ 28. **memory_get_relations** (Recall from InfraNodus Memory)
180
+ - Recall what was previously saved to memory about a concept or entity
181
+ - For "what do I have on X", "did we decide X", "check memory"
182
+ - Query one memory graph by name or search across all memory graphs
183
+ - Returns the statements and relationships that mention the entity
184
+ - With `scope` (`topic` + `topic`, or `personal`): reads that kept memory by entity, by `prompt` (GraphRAG), or as an overview
185
+
186
+ 29. **enable_memory**
187
+ - Create your topic memory (`memory-<topic>`) or personal memory (`personal-<user>`) graph so the memory tools can use it with `scope`
188
+ - Called only when you explicitly ask to keep that kind of memory; idempotent
189
+
190
+ 30. **retrieve_from_knowledge_base**
177
191
  - Retrieve context from an existing InfraNodus knowledge graph using GraphRAG
178
192
  - Query your knowledge base with a natural language prompt to get relevant statements
179
193
  - Include graph summaries for quick overviews of the knowledge structure
180
194
  - Optionally retrieve the full graph, statements, or extended analysis
181
195
  - Ideal for augmenting LLM responses with domain-specific knowledge
182
196
 
183
- 29. **search**
197
+ 31. **search**
184
198
  - Search through existing InfraNodus graphs
185
199
  - Also use it to search through the public graphs of a specific user
186
200
  - Compatible with ChatGPT Deep Research mode via Developer Mode > Connectors
187
201
 
188
- 30. **fetch**
202
+ 32. **fetch**
189
203
  - Fetch a specific search result for a graph
190
204
  - Can be used in ChatGPT Deep Research mode via Developer Mode > Connectors
191
205
 
192
- 31. **enable_project_learnings**
206
+ 33. **list_graphs**
207
+ - List the graphs (contexts) in your InfraNodus account, with optional filters by name, type, date, language, or favorite status
208
+ - Use it to discover which graphs exist before analyzing them with `analyze_existing_graph_by_name`, searching them, or writing to them
209
+
210
+ 34. **enable_project_learnings**
193
211
  - Create the opt-in, per-project, append-only learnings graph (`learn-<project>`) in your account — the place where the assistant saves what it learned about operating in a project
194
212
  - Called only when you explicitly ask to start saving learnings for a project; idempotent, so calling it again just returns the existing graph
195
213
  - The assistant tells you first what will be stored (project knowledge only, never anything about you), where (a private graph you can delete at any time), and that batches are shown before saving
196
214
 
197
- 32. **add_project_learnings**
215
+ 35. **add_project_learnings**
198
216
  - Save learnings about a project — where things live, traps, conventions, decisions, workflows, and a self-assessment of what worked well and what should be done differently next time — as statements with a `type` category each, for later sessions on any client
199
217
  - Refuses (without error) when the project has not been enabled and never creates the graph itself
200
218
  - Dry run by default: returns what would be written, marking near-duplicates as `reinforced`; writes only with `confirm: true` — or in the same call when your client supports MCP elicitation and you approve the form
201
219
  - Rejects statements with secret-like content server-side (indices only, never the content)
202
220
 
203
- 33. **get_project_learnings**
221
+ 36. **get_project_learnings**
204
222
  - Retrieve learnings for a project: by `prompt` (GraphRAG — most relevant statements plus an overview of what is known), by `entity` (a file path, module, or concept), or a structural overview with neither
205
223
  - Call with no `project` to list the projects that have learnings in your account
206
224
  - Returns `enabled: false` with an empty list when a project has no learnings graph — not an error
207
225
 
208
226
  _Also available as the `save-learnings` prompt in clients that expose MCP prompts. Set `INFRANODUS_LEARNINGS=0` to remove these three tools from the server entirely (see [Project learnings](#project-learnings))._
209
227
 
210
- 34. **optimize_knowledge_base**
228
+ 37. **optimize_knowledge_base**
211
229
  - Structural feedback on a whole code base, document vault, or body of procedural knowledge (rules, frameworks, principles) from its digest graph (`repo-<project>-digest` / `vault-<project>-digest`) — or from a digest you write and pass as text, saved with `saveAs`
212
230
  - Diagnoses the structure (biased / focused / diversified / dispersed) and reads it for the chosen `focus` (`codebase`, `vault`, `procedural`, `general`): what dominates, which areas are under-developed (with latent-topic ideas), which clusters never connect — missing integrations, missing bridge notes, missing hand-offs between frameworks — plus AI suggestions for what to develop next
213
231
  - `compareWith` up to two other layers of the same project (e.g. digest vs structure map, docs vs code) and get what each has that the other lacks: rules without code, code without documentation, features described but not built
214
232
  - Two ways to get the digest: the assistant reads the project and writes it (the infranodus skill's **digest** build mode, or `text` + `saveAs` here), or `generate_ontology_graph` with `ontologyMode: 'procedural'` writes it server-side from an uploaded docs/structure graph
215
233
  - Pairs with the infranodus skill's build modes: full ingestion, digest, structure map, ontology
216
234
 
217
- 35. **submit_workflow_feedback**
235
+ 38. **submit_workflow_feedback**
218
236
  - Internal telemetry: after a workflow of InfraNodus calls, the assistant reports what it actually did with the output — how much it used, whether it contained anything new, whether it was the right tool, how many calls it took, concrete defects — as observations rather than a score; a rating is derived from them server-side
219
237
  - Autonomous: it never asks you anything and never surfaces in the conversation
220
238
  - The report contains short paraphrases of what you were working on (capped at 200 characters), the same policy as the prompts InfraNodus already logs; `MCPCAT_ANONYMOUS=1` skips the per-user log entirely
221
239
  - Set `INFRANODUS_FEEDBACK=0` to remove the tool (and the one-line nudge appended to workflow-ending results) from the server
222
240
 
223
- 36. **delete_statements**
241
+ 39. **get_more_tools**
242
+ - Added by the [mcpcat](https://mcpcat.io) analytics library: the assistant calls it when a task would benefit from a capability none of the tools above provides, describing what it needed (not offered on the `/openai` endpoint used by the ChatGPT / Codex plugin)
243
+ - The server has no hidden tools, so the call only records the request as feedback for future tool development; the assistant does not need to ask you before calling it
244
+ - Its logs follow the same privacy rules as the usage analytics below (`MCPCAT_ANONYMOUS=1` keeps them unlinked from your account)
245
+
246
+ 40. **delete_statements**
224
247
  - Delete statements from a graph in your own account by a filter the server resolves — exactly one of `categories` (everything uploaded under a source label: a file path, a page name, a `[[label]]` parent), `statements` (exact text), `query` (substring or `/regex/`), `before`/`after` (ISO 8601 window), `deleteAll` (empties the graph but keeps its name, URL, and settings), or `statementIds`
225
248
  - Dry run by default: returns the matched count, a sample of the statements, and a per-category breakdown; nothing is removed until the same filter is sent again with `confirm: true` — or, on clients with MCP elicitation, until you accept the form in the same call. A filter that matches nothing returns `deleted: 0` without asking
226
249
  - The per-source replace path: `delete_statements` with the source's category, then `create_knowledge_graph` to the same graph name. `deleteAll` then `create_knowledge_graph` rebuilds a graph in place
227
250
  - Irreversible, own-account only (no `userName`), never creates a graph, and the assistant is instructed never to call it on its own initiative. Set `INFRANODUS_DELETE=0` to remove the tool from the server
228
251
 
229
- 37. **update_statements**
252
+ 41. **update_statements**
230
253
  - Edit statements of a graph in your own account **in place** — content, categories, or timestamp — keeping each statement's id, date, and position (unlike deleting and re-creating it)
231
254
  - Two modes: `edits` rewrites specific statements, each named by its exact current text (`match`, e.g. from `analyze_existing_graph_by_name` with `includeStatements`) or `statementId`; or one selector (the same as `delete_statements`, with `all` instead of `deleteAll`) plus `set` (`addCategories`, `removeCategories`, `categories`, `timestamp`) and/or `replace` (`{ pattern, with }`, substring or `/regex/flags`) for bulk relabelling or a find-and-replace across the graph — renaming a `[[concept]]` or a source path everywhere
232
255
  - Dry run by default: returns the matched count and the before → after of every change; nothing is written until the same arguments are sent again with `confirm: true` — or, on clients with MCP elicitation, until you accept the form in the same call. A request that matches nothing returns `updated: 0` without asking
233
256
  - New content is capped at 1000 characters; for longer text use `delete_statements` then `create_knowledge_graph`. Irreversible (the old text survives only in the dry-run output), own-account only, never creates a graph, and the assistant is instructed never to call it on its own initiative. `INFRANODUS_DELETE=0` removes it together with `delete_statements`
234
257
 
235
- 38. **delete_graph**
258
+ 42. **delete_graph**
236
259
  - Delete one graph from your own account entirely — its statements, revisions, settings, and URL; the name becomes free again. `delete_statements` with `deleteAll` is the alternative that keeps the graph for a rebuild in place
237
260
  - Dry run by default: confirms the graph exists and reports its URL and whether it is a live graph; nothing is removed until the same `graphName` is sent again with `confirm: true`. Clients that support elicitation ask you directly and delete in the same call
238
261
  - Irreversible, own-account only (no `userName`; the graph is resolved from your API key's own graph list and the backend scopes the delete to the same user), and the assistant is instructed never to call it on its own initiative. `INFRANODUS_DELETE=0` removes it together with the other two mutation tools
@@ -247,6 +270,8 @@ _More capabilites coming soon!_
247
270
  - **AI Enhancement**: Optional AI-powered topic naming and analysis
248
271
  - **Structural Analysis**: Identify influential nodes and community structures
249
272
  - **Network Structure Statistics**: Modularity, centrality, betweenness, and other graph metrics
273
+ - **Fractal Variability**: DFA scaling exponents (alpha) of the discourse at three path levels (statements, words, and n-grams of 4 consecutive words), by step length and radial distance, plus the sentence length level (words per sentence, in order) and the influence level (betweenness, degree, and betweenness rank of the current word; read the rank series), with multifractal spectra — returned as `fractal_variability` next to `diversity_stats` whenever the graph statistics are included
274
+ - **Degree Distribution**: `degree_distribution` on every graph — nodes, edges, a `[degree, count]` histogram (first 40 rows unless `fullGraph`), gini of degree, and a power-law tail exponent over the top nodes (null under 50 nodes) — descriptors of how concentrated connectivity is in the whole co-occurrence network before the node cap; never a scale-free verdict
250
275
  - **Knowledge Graph Memory**: Save and retrieve knowledge graph memories and analyze them to retrieve key nodes, clusters, and connectors
251
276
 
252
277
  ## Knowledge Graph Memory Use Advice
@@ -564,6 +589,20 @@ npm run build
564
589
  npm run watch
565
590
  ```
566
591
 
592
+ ### Running the Tests
593
+
594
+ ```bash
595
+ npm test
596
+ ```
597
+
598
+ Offline tests, no network: they compile the server and drive every tool handler through an intercepted `fetch`. `test/statsSurface.test.mjs` covers the network-statistics surface of all tools that return `diversity_stats` and `fractal_variability` (request flags and response shape). CI runs this on every pull request and on every push to `master`.
599
+
600
+ ```bash
601
+ INFRANODUS_API_KEY=... npm run test:live
602
+ ```
603
+
604
+ Live tests against the real API (`test/live/`): the same tools, checked for the actual data surface, including a computed multifractal spectrum on a long text. Set `INFRANODUS_API_BASE` to point at another API root, and `LIVE_SKIP_AI=1` to skip the tools that call an LLM. The saving tools create one throwaway graph and delete it afterwards. CI runs this after a merge into `master` and on demand from the Actions tab (workflow "Tests" → "Run workflow"); it needs the `INFRANODUS_API_KEY` repository secret and skips itself when the secret is absent.
605
+
567
606
  ## API Documentation
568
607
 
569
608
  ### generate_knowledge_graph
@@ -572,9 +611,12 @@ Analyzes text and generates a knowledge graph.
572
611
 
573
612
  **Parameters:**
574
613
 
575
- - `text` (string, required): The text to analyze
614
+ - `text` (string): The text to analyze. Provide this, `url`, or `statements`
615
+ - `statements` (string[]): Already-separated statements, with optional parallel `categories` (string[][]) and `timestamps` (ISO 8601 strings)
616
+ - `categoriesAsNodes` (boolean, default false): Show category labels as `[[label]]` nodes. Only for large knowledge bases and Obsidian vaults where the connections between pages matter; otherwise the labels stay metadata
617
+ - `wikilinksMode` (string): How `[[wikilinks]]` become nodes — "default", "wikilinksOnly", "obsidianStyle", "parentAndConcepts", or "plainText"
576
618
  - `includeStatements` (boolean): Include original statements in response
577
- - `modifyAnalyzedText` (string): Text modification options ("none", "entities", "lemmatize")
619
+ - `modifyAnalyzedText` (string): Entity detection — "none", "detectEntities", or "extractEntitiesOnly"
578
620
 
579
621
  ### analyze_existing_graph_by_name
580
622
 
@@ -597,9 +639,30 @@ Analyze a text, URL, or YouTube transcript. Extract and analyze a graph from tex
597
639
  - `includeStatements` (boolean): Include processed statements in response
598
640
  - `includeGraph` (boolean): Include full graph structure in response
599
641
  - `addNodesAndEdges` (boolean): Include nodes and edges in response
642
+ - `multifractal` (boolean): Also compute the multifractal spectrum inside `fractal_variability` (off by default, ~0.5 s per graph; only returned together with the graph statistics)
600
643
  - `includeGraphSummary` (boolean): Include AI-generated graph summary for RAG prompt augmentation
601
644
  - `modifyAnalyzedText` (string): Entity detection — "none", "detectEntities", or "extractEntitiesOnly"
602
645
 
646
+ ### analyze_text_signature
647
+
648
+ Returns the structural and rhythmic signature of one text: how the discourse moves through its concept network, how its topics are distributed, and the sentence-length rhythm of the source. Every number comes with a one-sentence reading. Not a detector on its own.
649
+
650
+ **Parameters:**
651
+
652
+ - `text` / `url` / `statements`: the content, as in `analyze_text`
653
+ - `multifractal` (boolean, default true): compute the multifractal spectrum of the topic path (adds ~0.5–1 s)
654
+ - `maxNodes` (number): concepts kept in the graph (default 150); raise for long texts so the word path is complete
655
+ - `modifyAnalyzedText` (string): entity detection, as in `analyze_text`
656
+
657
+ **Response:**
658
+
659
+ - `signature`: a named profile from structure x rhythm (biased / focused / diversified / dispersed x alternating / random / fractal / blocks), e.g. `essay`, `report`, `narrative`, `digest`, `anthology`, `notes`, with a one-line summary
660
+ - `structure`: `modularity`, `diversity_stats` and their readings
661
+ - `rhythm`: `fractal_variability` (statements, words, ngrams x step length, radial distance; sentence length (words per sentence, in order) x byWords) and per-level readings of the DFA exponents, the short-vs-long-scale contrast, the multifractal label, and a confidence from the series length
662
+ - `amplitude`: measured on the same paths, in units of the graph radius — mean / median / p95 step, step-length CV (burstiness of movement), lag-1 autocorrelation, share of steps crossing a topic cluster and the regularity of those crossings, radial distance stats
663
+ - `sentence_rhythm`: sentence count, mean length, length CV (classic burstiness), lag-1 autocorrelation, share of short and long sentences, computed on prose-like statements only (fragments such as headings and menu items are skipped and counted); plus `scaling`, a summary of the backend's DFA on the sentence-length series (`fractal_variability.sentenceLength.byWords`, null under 64 sentences) with its own reading
664
+ - `ai_likeness`: `verdict` (leans generated / leans human / inconclusive), `score` (−1 human-like to +1 generated-like), `confidence`, the weighted `evidence` behind it, and `caveats`. It is a stylistic tendency: on a 50-page check against a commercial detector it caught uniformly paced template text but read AI-drafted pages that had been edited as human.
665
+
603
666
  ### generate_content_gaps
604
667
 
605
668
  Identifies content gaps and missing connections in text.
@@ -667,7 +730,7 @@ If you prefer these usage stats not to be linked to your InfraNodus account, set
667
730
  }
668
731
  ```
669
732
 
670
- With `MCPCAT_ANONYMOUS=1` set, tool usage is still recorded but stays anonymous — it is not tied to your user account. It also disables the per-user `submit_workflow_feedback` log described under tool 34 (the report includes duration / error / retry of the call it rates).
733
+ With `MCPCAT_ANONYMOUS=1` set, tool usage is still recorded but stays anonymous — it is not tied to your user account. It also disables the per-user `submit_workflow_feedback` log described under tool 37 (the report includes duration / error / retry of the call it rates).
671
734
 
672
735
  ### Project learnings
673
736
 
@@ -2,4 +2,14 @@ import { GraphResponse } from "../types/index.js";
2
2
  export declare function makeInfraNodusRequest(endpoint: string, body: any, method?: string, options?: {
3
3
  signal?: AbortSignal;
4
4
  }): Promise<GraphResponse>;
5
+ /**
6
+ * Call one of the app's memory endpoints (/learnings/*, /memory/*). Unlike
7
+ * makeInfraNodusRequest, a 4xx answer with a JSON body is returned, not
8
+ * thrown: those endpoints answer refusals (422 redaction, 400 validation,
9
+ * 403 anonymous) with a payload the tools pass on to the model.
10
+ */
11
+ export declare function callMemoryEndpoint(endpoint: string, body: Record<string, unknown>): Promise<{
12
+ status: number;
13
+ body: Record<string, any>;
14
+ }>;
5
15
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,qBAAqB,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,MAAM,GAAE,MAAe,EACvB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpC,OAAO,CAAC,aAAa,CAAC,CAuCxB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,qBAAqB,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,MAAM,GAAE,MAAe,EACvB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpC,OAAO,CAAC,aAAa,CAAC,CAyCxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,CAkCxD"}
@@ -15,6 +15,8 @@ export async function makeInfraNodusRequest(endpoint, body, method = "POST", opt
15
15
  headers: {
16
16
  "Content-Type": "application/json",
17
17
  Authorization: `Bearer ${config.apiKey}`,
18
+ // Lets the app attribute the call to the MCP surface (lib/clientApplication.js).
19
+ "X-Infranodus-Client": "mcp-server",
18
20
  },
19
21
  ...(method !== "GET" && { body: JSON.stringify(requestBody) }),
20
22
  ...(options.signal && { signal: options.signal }),
@@ -35,4 +37,44 @@ export async function makeInfraNodusRequest(endpoint, body, method = "POST", opt
35
37
  throw error;
36
38
  }
37
39
  }
40
+ /**
41
+ * Call one of the app's memory endpoints (/learnings/*, /memory/*). Unlike
42
+ * makeInfraNodusRequest, a 4xx answer with a JSON body is returned, not
43
+ * thrown: those endpoints answer refusals (422 redaction, 400 validation,
44
+ * 403 anonymous) with a payload the tools pass on to the model.
45
+ */
46
+ export async function callMemoryEndpoint(endpoint, body) {
47
+ const config = getConfig();
48
+ const tool = getCurrentTool();
49
+ const response = await fetch(`${config.apiBase}${endpoint}`, {
50
+ method: "POST",
51
+ headers: {
52
+ "Content-Type": "application/json",
53
+ Authorization: `Bearer ${config.apiKey}`,
54
+ "X-Infranodus-Client": "mcp-server",
55
+ },
56
+ body: JSON.stringify({
57
+ ...body,
58
+ modal: "mcp_server",
59
+ source: brandSource(),
60
+ ...(tool && { tool }),
61
+ }),
62
+ });
63
+ const text = await response.text();
64
+ let parsed;
65
+ try {
66
+ parsed = JSON.parse(text);
67
+ }
68
+ catch {
69
+ parsed = undefined;
70
+ }
71
+ const json = parsed && typeof parsed === "object" && !Array.isArray(parsed)
72
+ ? parsed
73
+ : null;
74
+ if (json && response.status < 500) {
75
+ return { status: response.status, body: json };
76
+ }
77
+ const detail = json && typeof json.error === "string" ? json.error : text.slice(0, 500);
78
+ throw new Error(`API request failed (${response.status}): ${detail}`);
79
+ }
38
80
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,QAAgB,EAChB,IAAS,EACT,SAAiB,MAAM,EACvB,UAAoC,EAAE;IAEtC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG;YACnB,GAAG,IAAI;YACP,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,WAAW,EAAE;YACrB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;YAC5D,MAAM;YACN,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;aACxC;YACD,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,iCAAiC;QACjC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,0DAA0D;QAC1D,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,cAAc,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,GAAG,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACF;AAiFD,eAAO,MAAM,KAAK,EAAE,QAAyB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAOpC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,cAAc,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,GAAG,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACF;AAmFD,eAAO,MAAM,KAAK,EAAE,QAAyB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAOpC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -47,6 +47,7 @@ const BRANDS = {
47
47
  "generate_ontology_graph",
48
48
  "memory_add_relations",
49
49
  "memory_get_relations",
50
+ "enable_memory",
50
51
  "generate_research_questions",
51
52
  "generate_research_ideas",
52
53
  "generate_responses_from_graph",
@@ -54,6 +55,7 @@ const BRANDS = {
54
55
  "develop_latent_topics",
55
56
  "generate_contextual_hint",
56
57
  "retrieve_from_knowledge_base",
58
+ "get_node_neighborhood",
57
59
  // Project learnings are for people operating in repos/projects,
58
60
  // not the SEO/keyword audience.
59
61
  "enable_project_learnings",
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsCH,MAAM,MAAM,GAA8B;IACzC,UAAU,EAAE;QACX,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,+BAA+B;QACxC,SAAS,EAAE,YAAY;QACvB,UAAU,EAAE,uBAAuB;QACnC,aAAa,EAAE,EAAE;QACjB,GAAG,EAAE;YACJ,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,uBAAuB;YAChC,WAAW,EACV,iGAAiG;YAClG,UAAU,EAAE,yDAAyD;YACrE,QAAQ,EAAE;gBACT,KAAK;gBACL,wBAAwB;gBACxB,YAAY;gBACZ,iBAAiB;gBACjB,kBAAkB;aAClB;SACD;KACD;IACD,YAAY,EAAE;QACb,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,iCAAiC;QAC1C,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,yBAAyB;QACrC,kEAAkE;QAClE,yEAAyE;QACzE,aAAa,EAAE;YACd,0BAA0B;YAC1B,yBAAyB;YACzB,sBAAsB;YACtB,sBAAsB;YACtB,eAAe;YACf,6BAA6B;YAC7B,yBAAyB;YACzB,+BAA+B;YAC/B,4BAA4B;YAC5B,uBAAuB;YACvB,0BAA0B;YAC1B,8BAA8B;YAC9B,uBAAuB;YACvB,gEAAgE;YAChE,gCAAgC;YAChC,0BAA0B;YAC1B,uBAAuB;YACvB,uBAAuB;YACvB,yBAAyB;YACzB,4DAA4D;YAC5D,qCAAqC;YACrC,mBAAmB;YACnB,mBAAmB;YACnB,cAAc;SACd;QACD,GAAG,EAAE;YACJ,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,yBAAyB;YAClC,WAAW,EACV,mGAAmG;YACpG,UAAU,EAAE,6DAA6D;YACzE,QAAQ,EAAE;gBACT,KAAK;gBACL,wBAAwB;gBACxB,cAAc;gBACd,iBAAiB;gBACjB,kBAAkB;aAClB;SACD;KACD;CACD,CAAC;AAEF,SAAS,YAAY;IACpB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAA4B,CAAC;IACpD,OAAO,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAa,YAAY,EAAE,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,WAAW;IAC1B,OAAO,CACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,UAAU,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,EAAE,CACF,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAEtD,OAAO,KAAK,CAAC,EAAE,CAAC;AACjB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -19,7 +19,7 @@ export declare const configSchema: z.ZodObject<{
19
19
  export type Config = z.infer<typeof configSchema>;
20
20
  export declare const serverInfo: {
21
21
  name: string;
22
- version: string;
22
+ version: any;
23
23
  description: string;
24
24
  };
25
25
  export { brand };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAQvB,CAAC;AAGH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAQvB,CAAC;AAGH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAQlD,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { readFileSync } from "fs";
1
2
  import { z } from "zod";
2
3
  import { brand } from "./brand.js";
3
4
  // Define the configuration schema for Smithery
@@ -10,10 +11,12 @@ export const configSchema = z.object({
10
11
  userId: z.number().optional().describe("Authenticated user ID"),
11
12
  userName: z.string().optional().describe("Authenticated user name"),
12
13
  });
14
+ // Single source of truth for the version: package.json (bumped by `npm version`)
15
+ const { version } = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
13
16
  // Server metadata
14
17
  export const serverInfo = {
15
18
  name: brand.serverName,
16
- version: "1.1.0",
19
+ version,
17
20
  description: `MCP server for ${brand.name} knowledge graph generation, comparison, entity extraction, content gap, and SEO analysis.`,
18
21
  };
19
22
  export { brand };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI,UAAU,CAAC;IACpE,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SACtB,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,eAAe,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACnE,CAAC,CAAC;AAKH,kBAAkB;AAClB,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC,UAAU;IACtB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,kBAAkB,KAAK,CAAC,IAAI,4FAA4F;CACrI,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI,UAAU,CAAC;IACpE,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SACtB,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,eAAe,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACnE,CAAC,CAAC;AAKH,iFAAiF;AACjF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC7B,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CACpE,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC,UAAU;IACtB,OAAO;IACP,WAAW,EAAE,kBAAkB,KAAK,CAAC,IAAI,4FAA4F;CACrI,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}