infranodus-mcp-server 1.6.2 → 1.7.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.
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
- # KeywordGraph MCP Server
1
+ # InfraNodus MCP Server
2
2
 
3
- A Model Context Protocol (MCP) server that integrates KeywordGraph knowledge graph and text network analysis capabilities into LLM workflows and AI assistants like Claude Desktop.
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
5
  ## Overview
6
6
 
7
- KeywordGraph 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.
7
+ 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.
8
8
 
9
- ![KeywordGraph MCP Server](https://keywordgraph.com/images/front/keywordgraph-overview.jpg)
9
+ ![InfraNodus MCP Server](https://infranodus.com/images/front/infranodus-overview.jpg)
10
10
 
11
11
  ## Features
12
12
 
13
13
  ### You Can Use It To
14
14
 
15
- - Connect your existing KeywordGraph knowledge graphs to your LLM workflows and AI chats
15
+ - Connect your existing InfraNodus knowledge graphs to your LLM workflows and AI chats
16
16
  - Identify the main topical clusters in discourse without missing the important nuances (works better than standard LLM workflows)
17
17
  - Identify the content gaps in any discourse (helpful for content creation and research)
18
18
  - Generate new knowledge graphs from any text and use them to augment your LLM responses
@@ -28,7 +28,7 @@ KeywordGraph MCP Server enables LLM workflows and AI assistants to analyze text
28
28
  - Perform entity detection for cleaner graphs
29
29
 
30
30
  2. **analyze_existing_graph_by_name**
31
- - Retrieve and analyze existing graphs from your KeywordGraph account
31
+ - Retrieve and analyze existing graphs from your InfraNodus account
32
32
  - Access previously saved analyses
33
33
  - Export graph data with full statistics
34
34
 
@@ -55,15 +55,15 @@ KeywordGraph MCP Server enables LLM workflows and AI assistants to analyze text
55
55
  - Use it to augment prompts in your LLM workflows and AI assistants
56
56
 
57
57
  7. **generate_research_questions**
58
- - Generate research questions that bridge content gaps from text, URL, or an existing KeywordGraph graph
58
+ - Generate research questions that bridge content gaps from text, URL, or an existing InfraNodus graph
59
59
  - Use them as prompts in your LLM models and AI workflows
60
- - Use any AI model (included in KeywordGraph API)
60
+ - Use any AI model (included in InfraNodus API)
61
61
  - Content gaps are identified based on topical clustering
62
62
 
63
63
  8. **generate_research_ideas**
64
64
  - Generate innovative research ideas based on content gaps identified in the text
65
65
  - Get actionable ideas to improve the text and develop the discourse
66
- - Use any AI model (included in KeywordGraph API)
66
+ - Use any AI model (included in InfraNodus API)
67
67
  - Ideas are generated from gaps between topical clusters
68
68
 
69
69
  9. **optimize_text_structure**
@@ -73,111 +73,118 @@ KeywordGraph MCP Server enables LLM workflows and AI assistants to analyze text
73
73
  - If the text is dispersed, focus the most common gap topics to improve coherence
74
74
  - Choose response type: response, idea, question, or transcend
75
75
 
76
- 10. **generate_responses_from_graph**
77
- - Generate responses based on an existing KeywordGraph graph
76
+ 10. **optimize_reasoning**
77
+ - Applies the same bias/coherence analysis to the model's own reasoning trace or chat with the user (pass it as `text`)
78
+ - Detects whether the reasoning is biased, focused, diversified, or dispersed
79
+ - Steers the reasoning toward optimal diversity and coherence at the same time
80
+ - 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
+ - Returns a structural diagnosis (diversity stats, topical clusters, gaps) plus suggestions for how to continue thinking
82
+
83
+ 11. **generate_responses_from_graph**
84
+ - Generate responses based on an existing InfraNodus graph
78
85
  - Integrate them into your LLM workflows and AI assistants
79
- - Use any AI model (included in KeywordGraph API)
86
+ - Use any AI model (included in InfraNodus API)
80
87
  - Use any prompt
81
88
 
82
- 11. **develop_conceptual_bridges**
89
+ 12. **develop_conceptual_bridges**
83
90
  - Analyze text and develop latent ideas based on concepts that connect this text to a broader discourse
84
91
  - Discover hidden themes and patterns that link your text to wider contexts
85
- - Use any AI model (included in KeywordGraph API)
92
+ - Use any AI model (included in InfraNodus API)
86
93
  - Generate insights that help develop the discourse
87
94
 
88
- 12. **develop_latent_topics**
95
+ 13. **develop_latent_topics**
89
96
  - Analyze text and extract underdeveloped topics with ideas on how to develop them
90
97
  - Identify topics that need more attention and elaboration
91
- - Use any AI model (included in KeywordGraph API)
98
+ - Use any AI model (included in InfraNodus API)
92
99
  - Get actionable suggestions for content expansion
93
100
 
94
- 13. **develop_text_tool**
101
+ 14. **develop_text_tool**
95
102
  - Comprehensive text analysis combining content gap ideas, latent topics, and conceptual bridges
96
103
  - Executes multiple analyses in sequence with progress tracking
97
104
  - Generates research ideas based on content gaps
98
105
  - Identifies latent topics and conceptual bridges to develop
99
106
  - Finds content gaps for deeper exploration
100
107
 
101
- 14. **create_knowledge_graph**
102
- - Create a knowledge graph in KeywordGraph from text and provide a link to it
103
- - Use it to create a knowledge graph in KeywordGraph from text
108
+ 15. **create_knowledge_graph**
109
+ - Create a knowledge graph in InfraNodus from text and provide a link to it
110
+ - Use it to create a knowledge graph in InfraNodus from text
104
111
 
105
- 15. **generate_ontology_graph**
112
+ 16. **generate_ontology_graph**
106
113
  - Use AI to generate a reasoning ontology graph (entities and the relations between them) from a topic, prompt, or text — e.g. "build an ontology on AI attention mechanisms"
107
- - Saved as a persistent KeywordGraph 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)
114
+ - 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)
108
115
  - `modelToUse` defaults to `claude-opus-4.6` for richer ontologies; pick `-mini`/`-lite` variants (or `gpt-4o-mini`) for faster, cheaper generation
109
116
  - 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
110
117
 
111
- 16. **analyze_llm_results**
118
+ 17. **analyze_llm_results**
112
119
  - 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
113
120
  - 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
114
121
  - `modelToUse` defaults to `claude-opus-4.6`; pick the model you actually want to study
115
122
  - `modifyAnalyzedText` controls how the LLM output is parsed: `'detectEntities'` (default — mixed entities + words), `'extractEntitiesOnly'` (entity-only graph), or `'none'` (plain co-occurrence)
116
123
  - 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
117
124
 
118
- 17. **overlap_between_texts**
125
+ 18. **overlap_between_texts**
119
126
  - Create knowledge graphs from two or more texts and find the overlap (similarities) between them
120
127
  - Use it to find similar topics and keywords across different texts
121
128
 
122
- 18. **merged_graph_from_texts**
129
+ 19. **merged_graph_from_texts**
123
130
  - 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
124
131
  - Use it to combine multiple sources into one graph and see clusters and content gaps across the merged content
125
132
 
126
- 19. **difference_between_texts**
133
+ 20. **difference_between_texts**
127
134
  - Compare knowledge graphs from two or more texts and find what's not present in the first graph that's present in the others
128
135
  - Use it to find how one text can be enriched with the others
129
136
 
130
- 20. **analyze_google_search_results**
137
+ 21. **analyze_google_search_results**
131
138
  - Generate a graph with keywords and topics for Google search results for a certain query
132
139
  - Use it to understand the current informational supply (what people find)
133
140
 
134
- 21. **analyze_youtube_search_results**
141
+ 22. **analyze_youtube_results**
135
142
  - Generate a graph with keywords and topics from YouTube results for a query, channel, or playlist
136
143
  - 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)
137
144
  - Control results with `limit` (default 100, max 2000), `sortBy` (`Popular` / `Oldest` / `Latest`), `excludeDescriptions`, `importLanguage`, and `importRegion`
138
145
  - Use it to understand the topics, clusters, and content gaps in the discourse around a video, channel, playlist, or search term on YouTube
139
146
 
140
- 22. **analyze_related_search_queries**
147
+ 23. **analyze_related_search_queries**
141
148
  - Generate a graph from the search queries suggested by Google for a certain query
142
149
  - Use it to understand the current informational demand (what people are looking for)
143
150
 
144
- 23. **search_queries_vs_search_results**
151
+ 24. **search_queries_vs_search_results**
145
152
  - 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
146
153
  - Use it to understand what people search for but don't yet find
147
154
 
148
- 24. **generate_seo_report**
155
+ 25. **generate_seo_report**
149
156
  - Analyze content for SEO optimization by comparing it with Google search results and search queries
150
157
  - Identify content gaps and opportunities for better search visibility
151
158
  - Get comprehensive analysis of what's in search results but not in your text
152
159
  - Discover what people search for but don't find in current results
153
160
 
154
- 25. **memory_add_relations**
155
- - Add relations to the KeywordGraph memory from text
161
+ 26. **memory_add_relations**
162
+ - Add relations to the InfraNodus memory from text
156
163
  - Automatically detect entities or use [[wikilinks]] syntax to mark them
157
164
  - Save memory to a specified graph name for future retrieval
158
165
  - Support automatic entity extraction or manual entity marking
159
166
  - Provide links to created memory graphs for easy access
160
167
 
161
- 26. **memory_get_relations**
162
- - Retrieve relations from KeywordGraph memory for specific entities
168
+ 27. **memory_get_relations**
169
+ - Retrieve relations from InfraNodus memory for specific entities
163
170
  - Search for entity relations using [[wikilinks]] syntax
164
171
  - Query specific memory contexts or search across all memory graphs
165
172
  - Extract statements and relationships from stored knowledge graphs
166
173
  - Support both entity-specific searches and full context retrieval
167
174
 
168
- 27. **retrieve_from_knowledge_base**
169
- - Retrieve context from an existing KeywordGraph knowledge graph using GraphRAG
175
+ 28. **retrieve_from_knowledge_base**
176
+ - Retrieve context from an existing InfraNodus knowledge graph using GraphRAG
170
177
  - Query your knowledge base with a natural language prompt to get relevant statements
171
178
  - Include graph summaries for quick overviews of the knowledge structure
172
179
  - Optionally retrieve the full graph, statements, or extended analysis
173
180
  - Ideal for augmenting LLM responses with domain-specific knowledge
174
181
 
175
- 28. **search**
176
- - Search through existing KeywordGraph graphs
182
+ 29. **search**
183
+ - Search through existing InfraNodus graphs
177
184
  - Also use it to search through the public graphs of a specific user
178
185
  - Compatible with ChatGPT Deep Research mode via Developer Mode > Connectors
179
186
 
180
- 29. **fetch**
187
+ 30. **fetch**
181
188
  - Fetch a specific search result for a graph
182
189
  - Can be used in ChatGPT Deep Research mode via Developer Mode > Connectors
183
190
 
@@ -195,17 +202,17 @@ _More capabilites coming soon!_
195
202
 
196
203
  ## Knowledge Graph Memory Use Advice
197
204
 
198
- KeywordGraph represents any text as a network graph in order to identify the main clusters of ideas and gaps between them. This helps generate advanced insights based on the text's structure. The network is effectively a knowledge graph that can also be used to retrieve complex ontological relations between different entities and concepts. This process is automated in KeywordGraph using the `search` and `fetch` tools along with the other tools that analyze the underlying network.
205
+ InfraNodus represents any text as a network graph in order to identify the main clusters of ideas and gaps between them. This helps generate advanced insights based on the text's structure. The network is effectively a knowledge graph that can also be used to retrieve complex ontological relations between different entities and concepts. This process is automated in InfraNodus using the `search` and `fetch` tools along with the other tools that analyze the underlying network.
199
206
 
200
- However, you can also easily use KeywordGraph as a more traditional memory server to save and retrieve relations. We use [[wikilinks]] to highlight entities in your text to make your content and graphs compatible with markup syntax and PKM tools such as Obsidian. By default, KeywordGraph will generate the name of the memory graph for you based on the context of the conversation. However, you can modify this default behavior by adding a **system prompt** or **project instruction** into your LLM client.
207
+ However, you can also easily use InfraNodus as a more traditional memory server to save and retrieve relations. We use [[wikilinks]] to highlight entities in your text to make your content and graphs compatible with markup syntax and PKM tools such as Obsidian. By default, InfraNodus will generate the name of the memory graph for you based on the context of the conversation. However, you can modify this default behavior by adding a **system prompt** or **project instruction** into your LLM client.
201
208
 
202
209
  Specifically you can specify to always use a speciic knowlege graph for memories to store everything in one place:
203
210
 
204
211
  ```
205
- Save all memories in the `my-memories` graph in KeywordGraph.
212
+ Save all memories in the `my-memories` graph in InfraNodus.
206
213
  ```
207
214
 
208
- Or you can ask KeywordGraph to only save certain entities, e.g. for building social networks:
215
+ Or you can ask InfraNodus to only save certain entities, e.g. for building social networks:
209
216
 
210
217
  ```
211
218
  When generating entities, only extract people, companies, and organizations. Ignore everything else.
@@ -213,41 +220,41 @@ When generating entities, only extract people, companies, and organizations. Ign
213
220
 
214
221
  ## Installation
215
222
 
216
- The easiest and the fastest way to launch the KeywordGraph MCP server is to either use our server URL `https://mcp.keywordgraph.com` for the remote / web applications or to add a manual configuration to your LLM apps if you're running them locally.
223
+ The easiest and the fastest way to launch the InfraNodus MCP server is to either use our server URL `https://mcp.infranodus.com` for the remote / web applications or to add a manual configuration to your LLM apps if you're running them locally.
217
224
 
218
- You can also install the server locally, so you have more control over it. In this case, you can also edit the source files and even create your tools based on the [KeywordGraph API](https://keywordgraph.com/api).
225
+ You can also install the server locally, so you have more control over it. In this case, you can also edit the source files and even create your tools based on the [InfraNodus API](https://infranodus.com/api).
219
226
 
220
- Below we describe the two different ways to set up your KeywordGraph MCP server.
227
+ Below we describe the two different ways to set up your InfraNodus MCP server.
221
228
 
222
- ### 1. Easiest Setup: KeywordGraph MCP Server (via HTTP/SSE)
229
+ ### 1. Easiest Setup: InfraNodus MCP Server (via HTTP/SSE)
223
230
 
224
231
  0. **Prerequisites**
225
232
 
226
- - Create an account on [KeywordGraph](https://keywordgraph.com) if you don't have it already and get your [KeywordGraph API Key](https://keywordgraph.com/api-access). We offer 14-day free trials.
233
+ - Create an account on [InfraNodus](https://infranodus.com) if you don't have it already and get your [InfraNodus API Key](https://infranodus.com/api-access). We offer 14-day free trials.
227
234
 
228
235
  1. **Get the URL**
229
236
 
230
237
  - We currently use the following URL for our MCP server deployed in our infrastructure:
231
238
 
232
239
  ```bash
233
- https://mcp.keywordgraph.com
240
+ https://mcp.infranodus.com
234
241
  ```
235
242
 
236
- 2. **Add the MCP server URL to the Client Tool Where You Want to Use KeywordGraph**
243
+ 2. **Add the MCP server URL to the Client Tool Where You Want to Use InfraNodus**
237
244
 
238
- - Once you add the URL above to your tool, it will automatically prompt you to authenticate using OAuth in order to be able to access the KeywordGraph MCP hosted on it.
245
+ - Once you add the URL above to your tool, it will automatically prompt you to authenticate using OAuth in order to be able to access the InfraNodus MCP hosted on it.
239
246
 
240
- 4. **Using KeywordGraph Tools in Your Calls**
247
+ 4. **Using InfraNodus Tools in Your Calls**
241
248
 
242
- - To use KeywordGraph, see the tools available and simply call them through the chat interface (e.g. "show me the graphs where I talk about this topic" or "get the content gaps from the document I uploaded")
249
+ - To use InfraNodus, see the tools available and simply call them through the chat interface (e.g. "show me the graphs where I talk about this topic" or "get the content gaps from the document I uploaded")
243
250
 
244
- - If your client is not using KeywordGraph for some actions, add the instruction to use KeywordGraph explicitly.
251
+ - If your client is not using InfraNodus for some actions, add the instruction to use InfraNodus explicitly.
245
252
 
246
253
  ### 2. Manual Setup: via NPX
247
254
 
248
- You can deploy the KeywordGraph server manually via `npx` — a package that allows to execute local and remote Node.Js packages on your computer.
255
+ You can deploy the InfraNodus server manually via `npx` — a package that allows to execute local and remote Node.Js packages on your computer.
249
256
 
250
- The KeywordGraph MCP server is available as an npm package at [https://www.npmjs.com/package/keywordgraph-mcp-server](https://www.npmjs.com/package/keywordgraph-mcp-server) from where you can launch it remotely on your local computer with npx. It will expose its tools to the MCP client that will be using this command to launch the server
257
+ The InfraNodus MCP server is available as an npm package at [https://www.npmjs.com/package/infranodus-mcp-server](https://www.npmjs.com/package/infranodus-mcp-server) from where you can launch it remotely on your local computer with npx. It will expose its tools to the MCP client that will be using this command to launch the server
251
258
 
252
259
  #### For Claude Desktop / Cursor IDE:
253
260
 
@@ -256,11 +263,11 @@ Just add this in your Claude's configuration file (Settings > Developer > Edit C
256
263
  ```json
257
264
  {
258
265
  "mcpServers": {
259
- "keywordgraph": {
266
+ "infranodus": {
260
267
  "command": "npx",
261
- "args": ["-y", "keywordgraph-mcp-server"],
268
+ "args": ["-y", "infranodus-mcp-server"],
262
269
  "env": {
263
- "KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
270
+ "INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
264
271
  }
265
272
  }
266
273
  }
@@ -269,12 +276,12 @@ Just add this in your Claude's configuration file (Settings > Developer > Edit C
269
276
 
270
277
  #### For Claude Code
271
278
 
272
- To connect the KeywordGraph MCP server to your Claude code, you can use this command. Make sure to provide the correct KeywordGraph API key for your account:
279
+ To connect the InfraNodus MCP server to your Claude code, you can use this command. Make sure to provide the correct InfraNodus API key for your account:
273
280
 
274
281
  ```bash
275
- claude mcp add keywordgraph -s user \
276
- -- env KEYWORDGRAPH_API_KEY=YOUR_INRANODUS_KEY \
277
- npx -y keywordgraph-mcp-server
282
+ claude mcp add infranodus -s user \
283
+ -- env INFRANODUS_API_KEY=YOUR_INRANODUS_KEY \
284
+ npx -y infranodus-mcp-server
278
285
  ```
279
286
 
280
287
  ### 3. Manual Setup: Launching MCP as a Local Server (for inspection & development)
@@ -282,13 +289,13 @@ claude mcp add keywordgraph -s user \
282
289
  0. **Prerequisites**
283
290
 
284
291
  - Node.js 18+ installed
285
- - KeywordGraph API key (get yours at [https://keywordgraph.com/api-access](https://keywordgraph.com/api-access))
292
+ - InfraNodus API key (get yours at [https://infranodus.com/api-access](https://infranodus.com/api-access))
286
293
 
287
294
  1. **Clone and build the server:**
288
295
 
289
296
  ```bash
290
- git clone https://github.com/yourusername/mcp-server-keywordgraph.git
291
- cd mcp-server-keywordgraph
297
+ git clone https://github.com/yourusername/mcp-server-infranodus.git
298
+ cd mcp-server-infranodus
292
299
  npm install
293
300
  npm run build:inspect
294
301
  npm run inspect
@@ -301,7 +308,7 @@ Note that `build:inspect` will generate the `dist/index.js` file which you will
301
308
  Create a `.env` file in the project root:
302
309
 
303
310
  ```
304
- KEYWORDGRAPH_API_KEY=your-api-key-here
311
+ INFRANODUS_API_KEY=your-api-key-here
305
312
  ```
306
313
 
307
314
  3. **Inspect the MCP:**
@@ -318,18 +325,18 @@ Note that `build:inspect` will generate the `dist/index.js` file which you will
318
325
  open ~/Library/Application\ Support/Claude/claude_desktop_config.json
319
326
  ```
320
327
 
321
- 2. Add the KeywordGraph server configuration:
328
+ 2. Add the InfraNodus server configuration:
322
329
 
323
330
  a. remote launch via `npx`:
324
331
 
325
332
  ```json
326
333
  {
327
334
  "mcpServers": {
328
- "keywordgraph": {
335
+ "infranodus": {
329
336
  "command": "npx",
330
- "args": ["-y", "keywordgraph-mcp-server"],
337
+ "args": ["-y", "infranodus-mcp-server"],
331
338
  "env": {
332
- "KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
339
+ "INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
333
340
  }
334
341
  }
335
342
  }
@@ -341,18 +348,18 @@ b. launch this repo with `node`, specify the absolute path to the repo + `/dist/
341
348
  ```json
342
349
  {
343
350
  "mcpServers": {
344
- "keywordgraph": {
351
+ "infranodus": {
345
352
  "command": "node",
346
- "args": ["/absolute/path/to/mcp-server-keywordgraph/dist/index.js"],
353
+ "args": ["/absolute/path/to/mcp-server-infranodus/dist/index.js"],
347
354
  "env": {
348
- "KEYWORDGRAPH_API_KEY": "your-api-key-here"
355
+ "INFRANODUS_API_KEY": "your-api-key-here"
349
356
  }
350
357
  }
351
358
  }
352
359
  }
353
360
  ```
354
361
 
355
- **Note:** you can leave the `KEYWORDGRAPH_API_KEY` empty in which case you can make 70 free requests after which you will hit quota and will need to add your API key.
362
+ **Note:** you can leave the `INFRANODUS_API_KEY` empty in which case you can make 70 free requests after which you will hit quota and will need to add your API key.
356
363
 
357
364
  3. Restart Claude Desktop to load the new server.
358
365
 
@@ -364,18 +371,18 @@ b. launch this repo with `node`, specify the absolute path to the repo + `/dist/
364
371
  %APPDATA%\Claude\claude_desktop_config.json
365
372
  ```
366
373
 
367
- 2. Add the KeywordGraph server configuration:
374
+ 2. Add the InfraNodus server configuration:
368
375
 
369
376
  a. remote launch via `npx`:
370
377
 
371
378
  ```json
372
379
  {
373
380
  "mcpServers": {
374
- "keywordgraph": {
381
+ "infranodus": {
375
382
  "command": "npx",
376
- "args": ["-y", "keywordgraph-mcp-server"],
383
+ "args": ["-y", "infranodus-mcp-server"],
377
384
  "env": {
378
- "KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
385
+ "INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
379
386
  }
380
387
  }
381
388
  }
@@ -387,11 +394,11 @@ b. launch this repo with `node`:
387
394
  ```json
388
395
  {
389
396
  "mcpServers": {
390
- "keywordgraph": {
397
+ "infranodus": {
391
398
  "command": "node",
392
- "args": ["C:\\path\\to\\mcp-server-keywordgraph\\dist\\index.js"],
399
+ "args": ["C:\\path\\to\\mcp-server-infranodus\\dist\\index.js"],
393
400
  "env": {
394
- "KEYWORDGRAPH_API_KEY": "your-api-key-here"
401
+ "INFRANODUS_API_KEY": "your-api-key-here"
395
402
  }
396
403
  }
397
404
  }
@@ -407,26 +414,26 @@ b. launch this repo with `node`:
407
414
  For other applications supporting MCP, use the following command to start the server via npx:
408
415
 
409
416
  ```bash
410
- KEYWORDGRAPH_API_KEY=your-api-key npx -y keywordgraph-mcp-server
417
+ INFRANODUS_API_KEY=your-api-key npx -y infranodus-mcp-server
411
418
  ```
412
419
 
413
420
  or locally
414
421
 
415
422
  ```bash
416
- KEYWORDGRAPH_API_KEY=your-api-key node /path/to/mcp-server-keywordgraph/dist/index.js
423
+ INFRANODUS_API_KEY=your-api-key node /path/to/mcp-server-infranodus/dist/index.js
417
424
  ```
418
425
 
419
426
  The server communicates via stdio, so configure your application to run this command and communicate through standard input/output.
420
427
 
421
428
  ### Legacy Setup via Smithery
422
429
 
423
- KeywordGraph server is also available through Smithery: a repository of MCP servers that has an easy-to-follow installation process for most LLM clients. You will need a separate accout at Smithery though.
430
+ InfraNodus server is also available through Smithery: a repository of MCP servers that has an easy-to-follow installation process for most LLM clients. You will need a separate accout at Smithery though.
424
431
 
425
432
  - Create an account on [Smithery.Ai](https://smithery.ai/) (it's free and you can use your Google or GitHub login)
426
433
 
427
- - Then go to the [Smithery KeywordGraph Server](https://smithery.ai/server/@keywordgraph/mcp-server-keywordgraph), click "Configure" at the top right, and add your KeywordGraph API key there.
434
+ - Then go to the [Smithery InfraNodus Server](https://smithery.ai/server/@infranodus/mcp-server-infranodus), click "Configure" at the top right, and add your InfraNodus API key there.
428
435
 
429
- - Go to [Smithery KeywordGraph Server](https://smithery.ai/server/@keywordgraph/mcp-server-keywordgraph) and get the URL link from Smithery [https://server.smithery.ai/@keywordgraph/mcp-server-keywordgraph/mcp](https://server.smithery.ai/@keywordgraph/mcp-server-keywordgraph/mcp) for the server or use one of their automatic setup tools for Claude or Cursor.
436
+ - Go to [Smithery InfraNodus Server](https://smithery.ai/server/@infranodus/mcp-server-infranodus) and get the URL link from Smithery [https://server.smithery.ai/@infranodus/mcp-server-infranodus/mcp](https://server.smithery.ai/@infranodus/mcp-server-infranodus/mcp) for the server or use one of their automatic setup tools for Claude or Cursor.
430
437
 
431
438
  - You may need to get your separate Smithery API key and Smithery proile link to make this work.
432
439
 
@@ -435,9 +442,9 @@ KeywordGraph server is also available through Smithery: a repository of MCP serv
435
442
  ```json
436
443
  // e.g. Cursor will access directly the server via Smithery
437
444
  "mcpServers": {
438
- "mcp-server-keywordgraph": {
445
+ "mcp-server-infranodus": {
439
446
  "type": "http",
440
- "url": "https://server.smithery.ai/@keywordgraph/mcp-server-keywordgraph/mcp?api_key=YOUR_SMITHERY_KEY&profile=YOUR_SMITHERY_PROFILE",
447
+ "url": "https://server.smithery.ai/@infranodus/mcp-server-infranodus/mcp?api_key=YOUR_SMITHERY_KEY&profile=YOUR_SMITHERY_PROFILE",
441
448
  "headers": {}
442
449
  }
443
450
  }
@@ -449,13 +456,13 @@ KeywordGraph server is also available through Smithery: a repository of MCP serv
449
456
  // Claude uses a slightly different implementation
450
457
  // Fot this, it launches the MCP server on your local machine
451
458
  "mcpServers": {
452
- "mcp-server-keywordgraph": {
459
+ "mcp-server-infranodus": {
453
460
  "command": "npx",
454
461
  "args": [
455
462
  "-y",
456
463
  "@smithery/cli@latest",
457
464
  "run",
458
- "@keywordgraph/mcp-server-keywordgraph",
465
+ "@infranodus/mcp-server-infranodus",
459
466
  "--key",
460
467
  "YOUR_SMITHERY_KEY",
461
468
  "--profile",
@@ -465,16 +472,16 @@ KeywordGraph server is also available through Smithery: a repository of MCP serv
465
472
  }
466
473
  ```
467
474
 
468
- **Note**, in both cases, you'll automatically get the `YOUR_SMITHERY_KEY` and `YOUR_SMITHERY_PROFILE` values from Smithery when you copy the URL with credentials. These are not your KeywordGraph API keys. You can use the KeywordGraph API server without the API for the first 70 calls. Then you can add it to your Smithery profile and it will automatically connect to your account using the link above.
475
+ **Note**, in both cases, you'll automatically get the `YOUR_SMITHERY_KEY` and `YOUR_SMITHERY_PROFILE` values from Smithery when you copy the URL with credentials. These are not your InfraNodus API keys. You can use the InfraNodus API server without the API for the first 70 calls. Then you can add it to your Smithery profile and it will automatically connect to your account using the link above.
469
476
 
470
477
  ## Usage Examples
471
478
 
472
479
  Once installed, you can ask Claude to:
473
480
 
474
- - "Use KeywordGraph to analyze this text and show me the main topics"
481
+ - "Use InfraNodus to analyze this text and show me the main topics"
475
482
  - "Generate a knowledge graph from this document"
476
483
  - "Find content gaps in this article"
477
- - "Retrieve my existing graph called 'Research Notes' from KeywordGraph"
484
+ - "Retrieve my existing graph called 'Research Notes' from InfraNodus"
478
485
  - "What are the structural gaps in this text?"
479
486
  - "Identify the most influential concepts in this content"
480
487
 
@@ -522,7 +529,7 @@ Analyzes text and generates a knowledge graph.
522
529
 
523
530
  ### analyze_existing_graph_by_name
524
531
 
525
- Retrieves and analyzes an existing graph from your KeywordGraph account.
532
+ Retrieves and analyzes an existing graph from your InfraNodus account.
526
533
 
527
534
  **Parameters:**
528
535
 
@@ -601,7 +608,7 @@ The `generate_seo_report` tool demonstrates this pattern with 6 major progress c
601
608
 
602
609
  ### API Key Issues
603
610
 
604
- - Get your API key at: [https://keywordgraph.com/api-access](https://keywordgraph.com/api-access)
611
+ - Get your API key at: [https://infranodus.com/api-access](https://infranodus.com/api-access)
605
612
  - Ensure the key is correctly set in the configuration
606
613
  - Check that the key has not expired
607
614
 
@@ -616,9 +623,9 @@ npm run build
616
623
 
617
624
  ## Resources
618
625
 
619
- - [KeywordGraph Website](https://keywordgraph.com)
620
- - [KeywordGraph MCP](https://keywordgraph.com/mcp)
621
- - [KeywordGraph API Documentation](https://keywordgraph.com/api-access)
626
+ - [InfraNodus Website](https://infranodus.com)
627
+ - [InfraNodus MCP](https://infranodus.com/mcp)
628
+ - [InfraNodus API Documentation](https://infranodus.com/api-access)
622
629
  - [MCP Protocol Documentation](https://modelcontextprotocol.io)
623
630
  - [Graph Theory Concepts](https://noduslabs.com/research/)
624
631
 
@@ -631,5 +638,5 @@ MIT
631
638
  For issues related to:
632
639
 
633
640
  - This MCP server: Open an issue in this repository
634
- - KeywordGraph API: Contact support@keywordgraph.com
641
+ - InfraNodus API: Contact support@infranodus.com
635
642
  - MCP Protocol: Visit the [MCP community](https://modelcontextprotocol.io)
@@ -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,GACrB,OAAO,CAAC,aAAa,CAAC,CAgCxB"}
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,GACrB,OAAO,CAAC,aAAa,CAAC,CAsCxB"}
@@ -1,9 +1,15 @@
1
- import { getConfig } from "./config-store.js";
1
+ import { getConfig, getCurrentTool } from "./config-store.js";
2
2
  import { brandSource } from "../config/brand.js";
3
3
  export async function makeInfraNodusRequest(endpoint, body, method = "POST") {
4
4
  try {
5
5
  const config = getConfig();
6
- const requestBody = { ...body, modal: "mcp_server", source: brandSource() };
6
+ const tool = getCurrentTool();
7
+ const requestBody = {
8
+ ...body,
9
+ modal: "mcp_server",
10
+ source: brandSource(),
11
+ ...(tool && { tool }),
12
+ };
7
13
  const response = await fetch(`${config.apiBase}${endpoint}`, {
8
14
  method,
9
15
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,QAAgB,EAChB,IAAS,EACT,SAAiB,MAAM;IAEvB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QAE5E,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;SAC9D,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":"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;IAEvB,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;SAC9D,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,4 +1,6 @@
1
1
  import { Config } from "../config/index.js";
2
2
  export declare function runWithConfig<T>(config: Config, fn: () => T): T;
3
+ export declare function runWithTool<T>(toolName: string, fn: () => T): T;
4
+ export declare function getCurrentTool(): string | undefined;
3
5
  export declare function getConfig(): Config;
4
6
  //# sourceMappingURL=config-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/api/config-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAK5C,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE/D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/api/config-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE/D;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
@@ -1,9 +1,16 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  import { brandApiBase } from "../config/brand.js";
3
3
  const configStorage = new AsyncLocalStorage();
4
+ const toolStorage = new AsyncLocalStorage();
4
5
  export function runWithConfig(config, fn) {
5
6
  return configStorage.run(config, fn);
6
7
  }
8
+ export function runWithTool(toolName, fn) {
9
+ return toolStorage.run(toolName, fn);
10
+ }
11
+ export function getCurrentTool() {
12
+ return toolStorage.getStore();
13
+ }
7
14
  export function getConfig() {
8
15
  return (configStorage.getStore() ??
9
16
  global.brandConfig ??
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/api/config-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAEtD,MAAM,UAAU,aAAa,CAAI,MAAc,EAAE,EAAW;IAC3D,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,OAAO,CACN,aAAa,CAAC,QAAQ,EAAE;QACvB,MAAc,CAAC,WAAW;QAC3B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CACvC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/api/config-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAU,CAAC;AACtD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAI,MAAc,EAAE,EAAW;IAC3D,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,QAAgB,EAAE,EAAW;IAC3D,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,OAAO,CACN,aAAa,CAAC,QAAQ,EAAE;QACvB,MAAc,CAAC,WAAW;QAC3B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CACvC,CAAC;AACH,CAAC"}
@@ -793,7 +793,7 @@ app.get("/", (req, res, next) => {
793
793
  }
794
794
  res.json({
795
795
  name: `${brand.name} MCP Server`,
796
- version: "1.6.2",
796
+ version: "1.7.1",
797
797
  description: `MCP server for ${brand.name} knowledge graph analysis`,
798
798
  endpoints: {
799
799
  oauth: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAc,MAAM,mBAAmB,CAAC;AAgD7D,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACpC,MAAM,GACN,EAAE;IACF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;CACrC;;;;;;;;;;;;;;;;;;;;;;GAyGA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAc,MAAM,mBAAmB,CAAC;AAiD7D,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACpC,MAAM,GACN,EAAE;IACF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;CACrC;;;;;;;;;;;;;;;;;;;;;;GA8GA"}