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 +108 -101
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +8 -2
- package/dist/api/client.js.map +1 -1
- package/dist/api/config-store.d.ts +2 -0
- package/dist/api/config-store.d.ts.map +1 -1
- package/dist/api/config-store.js +7 -0
- package/dist/api/config-store.js.map +1 -1
- package/dist/http-server.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/index.js.map +1 -1
- package/dist/instructions.js +1 -1
- package/dist/resources/about.d.ts.map +1 -1
- package/dist/resources/about.js +15 -14
- package/dist/resources/about.js.map +1 -1
- package/dist/schemas/index.d.ts +20 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +29 -6
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/generateYoutubeSearchResultsGraph.d.ts.map +1 -1
- package/dist/tools/generateYoutubeSearchResultsGraph.js +2 -2
- package/dist/tools/generateYoutubeSearchResultsGraph.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/optimizeReasoning.d.ts +32 -0
- package/dist/tools/optimizeReasoning.d.ts.map +1 -0
- package/dist/tools/optimizeReasoning.js +72 -0
- package/dist/tools/optimizeReasoning.js.map +1 -0
- package/dist/tools/optimizeTextStructure.js +2 -2
- package/dist/tools/optimizeTextStructure.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# InfraNodus MCP Server
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol (MCP) server that integrates
|
|
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
|
-
|
|
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
|
-

|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
13
|
### You Can Use It To
|
|
14
14
|
|
|
15
|
-
- Connect your existing
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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. **
|
|
77
|
-
-
|
|
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
|
|
86
|
+
- Use any AI model (included in InfraNodus API)
|
|
80
87
|
- Use any prompt
|
|
81
88
|
|
|
82
|
-
|
|
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
|
|
92
|
+
- Use any AI model (included in InfraNodus API)
|
|
86
93
|
- Generate insights that help develop the discourse
|
|
87
94
|
|
|
88
|
-
|
|
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
|
|
98
|
+
- Use any AI model (included in InfraNodus API)
|
|
92
99
|
- Get actionable suggestions for content expansion
|
|
93
100
|
|
|
94
|
-
|
|
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
|
-
|
|
102
|
-
- Create a knowledge graph in
|
|
103
|
-
- Use it to create a knowledge graph in
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
155
|
-
- Add relations to the
|
|
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
|
-
|
|
162
|
-
- Retrieve relations from
|
|
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
|
-
|
|
169
|
-
- Retrieve context from an existing
|
|
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
|
-
|
|
176
|
-
- Search through existing
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
212
|
+
Save all memories in the `my-memories` graph in InfraNodus.
|
|
206
213
|
```
|
|
207
214
|
|
|
208
|
-
Or you can ask
|
|
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
|
|
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 [
|
|
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
|
|
227
|
+
Below we describe the two different ways to set up your InfraNodus MCP server.
|
|
221
228
|
|
|
222
|
-
### 1. Easiest Setup:
|
|
229
|
+
### 1. Easiest Setup: InfraNodus MCP Server (via HTTP/SSE)
|
|
223
230
|
|
|
224
231
|
0. **Prerequisites**
|
|
225
232
|
|
|
226
|
-
- Create an account on [
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
247
|
+
4. **Using InfraNodus Tools in Your Calls**
|
|
241
248
|
|
|
242
|
-
- To use
|
|
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
|
|
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
|
|
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
|
|
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
|
-
"
|
|
266
|
+
"infranodus": {
|
|
260
267
|
"command": "npx",
|
|
261
|
-
"args": ["-y", "
|
|
268
|
+
"args": ["-y", "infranodus-mcp-server"],
|
|
262
269
|
"env": {
|
|
263
|
-
"
|
|
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
|
|
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
|
|
276
|
-
-- env
|
|
277
|
-
npx -y
|
|
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
|
-
-
|
|
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-
|
|
291
|
-
cd mcp-server-
|
|
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
|
-
|
|
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
|
|
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
|
-
"
|
|
335
|
+
"infranodus": {
|
|
329
336
|
"command": "npx",
|
|
330
|
-
"args": ["-y", "
|
|
337
|
+
"args": ["-y", "infranodus-mcp-server"],
|
|
331
338
|
"env": {
|
|
332
|
-
"
|
|
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
|
-
"
|
|
351
|
+
"infranodus": {
|
|
345
352
|
"command": "node",
|
|
346
|
-
"args": ["/absolute/path/to/mcp-server-
|
|
353
|
+
"args": ["/absolute/path/to/mcp-server-infranodus/dist/index.js"],
|
|
347
354
|
"env": {
|
|
348
|
-
"
|
|
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 `
|
|
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
|
|
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
|
-
"
|
|
381
|
+
"infranodus": {
|
|
375
382
|
"command": "npx",
|
|
376
|
-
"args": ["-y", "
|
|
383
|
+
"args": ["-y", "infranodus-mcp-server"],
|
|
377
384
|
"env": {
|
|
378
|
-
"
|
|
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
|
-
"
|
|
397
|
+
"infranodus": {
|
|
391
398
|
"command": "node",
|
|
392
|
-
"args": ["C:\\path\\to\\mcp-server-
|
|
399
|
+
"args": ["C:\\path\\to\\mcp-server-infranodus\\dist\\index.js"],
|
|
393
400
|
"env": {
|
|
394
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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-
|
|
445
|
+
"mcp-server-infranodus": {
|
|
439
446
|
"type": "http",
|
|
440
|
-
"url": "https://server.smithery.ai/@
|
|
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-
|
|
459
|
+
"mcp-server-infranodus": {
|
|
453
460
|
"command": "npx",
|
|
454
461
|
"args": [
|
|
455
462
|
"-y",
|
|
456
463
|
"@smithery/cli@latest",
|
|
457
464
|
"run",
|
|
458
|
-
"@
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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://
|
|
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
|
-
- [
|
|
620
|
-
- [
|
|
621
|
-
- [
|
|
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
|
-
-
|
|
641
|
+
- InfraNodus API: Contact support@infranodus.com
|
|
635
642
|
- MCP Protocol: Visit the [MCP community](https://modelcontextprotocol.io)
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/api/client.js
CHANGED
|
@@ -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
|
|
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: {
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,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;
|
|
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"}
|
package/dist/api/config-store.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/http-server.js
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|