infranodus-mcp-server 1.6.1 → 1.6.2
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 +113 -118
- package/bin/infranodus-mcp-server.js +7 -53
- package/bin/keywordgraph-mcp-server.js +8 -0
- package/bin/mcp-server.js +56 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +2 -1
- package/dist/api/client.js.map +1 -1
- package/dist/api/config-store.d.ts.map +1 -1
- package/dist/api/config-store.js +3 -2
- package/dist/api/config-store.js.map +1 -1
- package/dist/auth/oauth-provider.d.ts +3 -3
- package/dist/auth/oauth-provider.d.ts.map +1 -1
- package/dist/auth/oauth-provider.js +7 -6
- package/dist/auth/oauth-provider.js.map +1 -1
- package/dist/config/brand.d.ts +71 -0
- package/dist/config/brand.d.ts.map +1 -0
- package/dist/config/brand.js +118 -0
- package/dist/config/brand.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -5
- package/dist/config/index.js.map +1 -1
- package/dist/http-server.d.ts +1 -1
- package/dist/http-server.js +17 -16
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -33
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +3 -2
- package/dist/instructions.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +10 -9
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/about.d.ts.map +1 -1
- package/dist/resources/about.js +28 -35
- package/dist/resources/about.js.map +1 -1
- package/dist/resources/llms-txt.d.ts.map +1 -1
- package/dist/resources/llms-txt.js +21 -10
- package/dist/resources/llms-txt.js.map +1 -1
- package/dist/schemas/index.d.ts +122 -21
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +192 -21
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/addMemory.d.ts.map +1 -1
- package/dist/tools/addMemory.js +3 -2
- package/dist/tools/addMemory.js.map +1 -1
- package/dist/tools/analyzeExistingGraph.d.ts.map +1 -1
- package/dist/tools/analyzeExistingGraph.js +3 -2
- package/dist/tools/analyzeExistingGraph.js.map +1 -1
- package/dist/tools/analyzeLlmResults.d.ts +37 -0
- package/dist/tools/analyzeLlmResults.d.ts.map +1 -0
- package/dist/tools/analyzeLlmResults.js +192 -0
- package/dist/tools/analyzeLlmResults.js.map +1 -0
- package/dist/tools/analyzeText.d.ts.map +1 -1
- package/dist/tools/analyzeText.js +2 -1
- package/dist/tools/analyzeText.js.map +1 -1
- package/dist/tools/createKnowledgeGraph.d.ts.map +1 -1
- package/dist/tools/createKnowledgeGraph.js +3 -2
- package/dist/tools/createKnowledgeGraph.js.map +1 -1
- package/dist/tools/generateDifferenceGraphFromTexts.d.ts.map +1 -1
- package/dist/tools/generateDifferenceGraphFromTexts.js +2 -1
- package/dist/tools/generateDifferenceGraphFromTexts.js.map +1 -1
- package/dist/tools/generateMergedGraphFromTexts.d.ts.map +1 -1
- package/dist/tools/generateMergedGraphFromTexts.js +2 -1
- package/dist/tools/generateMergedGraphFromTexts.js.map +1 -1
- package/dist/tools/generateOntologyGraph.d.ts +36 -0
- package/dist/tools/generateOntologyGraph.d.ts.map +1 -0
- package/dist/tools/generateOntologyGraph.js +194 -0
- package/dist/tools/generateOntologyGraph.js.map +1 -0
- package/dist/tools/generateResponses.d.ts.map +1 -1
- package/dist/tools/generateResponses.js +2 -1
- package/dist/tools/generateResponses.js.map +1 -1
- package/dist/tools/generateTopicalClusters.d.ts +1 -0
- package/dist/tools/generateTopicalClusters.d.ts.map +1 -1
- package/dist/tools/generateTopicalClusters.js +36 -1
- package/dist/tools/generateTopicalClusters.js.map +1 -1
- package/dist/tools/generateYoutubeSearchResultsGraph.d.ts +42 -0
- package/dist/tools/generateYoutubeSearchResultsGraph.d.ts.map +1 -0
- package/dist/tools/generateYoutubeSearchResultsGraph.js +97 -0
- package/dist/tools/generateYoutubeSearchResultsGraph.js.map +1 -0
- package/dist/tools/getMemory.d.ts.map +1 -1
- package/dist/tools/getMemory.js +3 -2
- package/dist/tools/getMemory.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/listGraphs.d.ts.map +1 -1
- package/dist/tools/listGraphs.js +2 -1
- package/dist/tools/listGraphs.js.map +1 -1
- package/dist/tools/retrieveContextForPromptFromGraph.d.ts.map +1 -1
- package/dist/tools/retrieveContextForPromptFromGraph.js +3 -2
- package/dist/tools/retrieveContextForPromptFromGraph.js.map +1 -1
- package/dist/tools/searchGraphs.d.ts.map +1 -1
- package/dist/tools/searchGraphs.js +3 -2
- package/dist/tools/searchGraphs.js.map +1 -1
- package/dist/tools/searchGraphsFetch.d.ts.map +1 -1
- package/dist/tools/searchGraphsFetch.js +2 -1
- package/dist/tools/searchGraphsFetch.js.map +1 -1
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/transformers.d.ts +3 -1
- package/dist/utils/transformers.d.ts.map +1 -1
- package/dist/utils/transformers.js +36 -1
- package/dist/utils/transformers.js.map +1 -1
- package/dist/utils/urlContent.d.ts +1 -1
- package/dist/utils/urlContent.js +1 -1
- package/llms-full.infranodus.txt +469 -0
- package/llms-full.keywordgraph.txt +469 -0
- package/llms.infranodus.txt +64 -0
- package/llms.keywordgraph.txt +64 -0
- package/package.json +14 -3
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# KeywordGraph MCP Server
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol (MCP) server that integrates
|
|
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.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
|
|
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.
|
|
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 KeywordGraph 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
|
|
@@ -21,7 +21,6 @@ InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text us
|
|
|
21
21
|
### Available Tools
|
|
22
22
|
|
|
23
23
|
1. **generate_knowledge_graph**
|
|
24
|
-
|
|
25
24
|
- Convert any text into a visual knowledge graph
|
|
26
25
|
- Extract topics, concepts, and their relationships
|
|
27
26
|
- Identify structural patterns and clusters
|
|
@@ -29,52 +28,45 @@ InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text us
|
|
|
29
28
|
- Perform entity detection for cleaner graphs
|
|
30
29
|
|
|
31
30
|
2. **analyze_existing_graph_by_name**
|
|
32
|
-
|
|
33
|
-
- Retrieve and analyze existing graphs from your InfraNodus account
|
|
31
|
+
- Retrieve and analyze existing graphs from your KeywordGraph account
|
|
34
32
|
- Access previously saved analyses
|
|
35
33
|
- Export graph data with full statistics
|
|
36
34
|
|
|
37
35
|
3. **analyze_text**
|
|
38
|
-
|
|
39
36
|
- Analyze a text, URL, or YouTube transcript
|
|
40
37
|
- Extract and analyze a graph from text or URL; provide either text or url
|
|
41
38
|
- Get topics, clusters, statements, graph structure, and AI summary as requested
|
|
42
39
|
|
|
43
40
|
4. **generate_content_gaps**
|
|
44
|
-
|
|
45
41
|
- Detect missing connections in discourse
|
|
46
42
|
- Identify underexplored topics
|
|
47
43
|
- Generate research questions
|
|
48
44
|
- Suggest content development opportunities
|
|
49
45
|
|
|
50
46
|
5. **generate_topical_clusters**
|
|
51
|
-
|
|
52
47
|
- Generate topics and clusters of keywords from text using knowledge graph analysis
|
|
53
48
|
- Make sure to beyond genetic insights and detect smaller topics
|
|
54
49
|
- Use the topical clusters to establish topical authority for SEO
|
|
50
|
+
- 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
|
|
55
51
|
|
|
56
52
|
6. **generate_contextual_hint**
|
|
57
|
-
|
|
58
53
|
- Generate a topical overview of a text and provide insights for LLMs to generate better responses
|
|
59
54
|
- Use it to get a high-level understanding of a text
|
|
60
55
|
- Use it to augment prompts in your LLM workflows and AI assistants
|
|
61
56
|
|
|
62
57
|
7. **generate_research_questions**
|
|
63
|
-
|
|
64
|
-
- Generate research questions that bridge content gaps from text, URL, or an existing InfraNodus graph
|
|
58
|
+
- Generate research questions that bridge content gaps from text, URL, or an existing KeywordGraph graph
|
|
65
59
|
- Use them as prompts in your LLM models and AI workflows
|
|
66
|
-
- Use any AI model (included in
|
|
60
|
+
- Use any AI model (included in KeywordGraph API)
|
|
67
61
|
- Content gaps are identified based on topical clustering
|
|
68
62
|
|
|
69
63
|
8. **generate_research_ideas**
|
|
70
|
-
|
|
71
64
|
- Generate innovative research ideas based on content gaps identified in the text
|
|
72
65
|
- Get actionable ideas to improve the text and develop the discourse
|
|
73
|
-
- Use any AI model (included in
|
|
66
|
+
- Use any AI model (included in KeywordGraph API)
|
|
74
67
|
- Ideas are generated from gaps between topical clusters
|
|
75
68
|
|
|
76
69
|
9. **optimize_text_structure**
|
|
77
|
-
|
|
78
70
|
- Analyze the level of bias and coherence in text using knowledge graph analysis
|
|
79
71
|
- If the text is too biased, develop the represented topics to balance the discourse
|
|
80
72
|
- If the text is focused or diversified, develop the content gaps to deepen the analysis
|
|
@@ -82,28 +74,24 @@ InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text us
|
|
|
82
74
|
- Choose response type: response, idea, question, or transcend
|
|
83
75
|
|
|
84
76
|
10. **generate_responses_from_graph**
|
|
85
|
-
|
|
86
|
-
- Generate responses based on an existing InfraNodus graph
|
|
77
|
+
- Generate responses based on an existing KeywordGraph graph
|
|
87
78
|
- Integrate them into your LLM workflows and AI assistants
|
|
88
|
-
- Use any AI model (included in
|
|
79
|
+
- Use any AI model (included in KeywordGraph API)
|
|
89
80
|
- Use any prompt
|
|
90
81
|
|
|
91
82
|
11. **develop_conceptual_bridges**
|
|
92
|
-
|
|
93
83
|
- Analyze text and develop latent ideas based on concepts that connect this text to a broader discourse
|
|
94
84
|
- Discover hidden themes and patterns that link your text to wider contexts
|
|
95
|
-
- Use any AI model (included in
|
|
85
|
+
- Use any AI model (included in KeywordGraph API)
|
|
96
86
|
- Generate insights that help develop the discourse
|
|
97
87
|
|
|
98
88
|
12. **develop_latent_topics**
|
|
99
|
-
|
|
100
89
|
- Analyze text and extract underdeveloped topics with ideas on how to develop them
|
|
101
90
|
- Identify topics that need more attention and elaboration
|
|
102
|
-
- Use any AI model (included in
|
|
91
|
+
- Use any AI model (included in KeywordGraph API)
|
|
103
92
|
- Get actionable suggestions for content expansion
|
|
104
93
|
|
|
105
94
|
13. **develop_text_tool**
|
|
106
|
-
|
|
107
95
|
- Comprehensive text analysis combining content gap ideas, latent topics, and conceptual bridges
|
|
108
96
|
- Executes multiple analyses in sequence with progress tracking
|
|
109
97
|
- Generates research ideas based on content gaps
|
|
@@ -111,79 +99,85 @@ InfraNodus MCP Server enables LLM workflows and AI assistants to analyze text us
|
|
|
111
99
|
- Finds content gaps for deeper exploration
|
|
112
100
|
|
|
113
101
|
14. **create_knowledge_graph**
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
104
|
+
|
|
105
|
+
15. **generate_ontology_graph**
|
|
106
|
+
- 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)
|
|
108
|
+
- `modelToUse` defaults to `claude-opus-4.6` for richer ontologies; pick `-mini`/`-lite` variants (or `gpt-4o-mini`) for faster, cheaper generation
|
|
109
|
+
- 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
|
+
|
|
111
|
+
16. **analyze_llm_results**
|
|
112
|
+
- 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
|
+
- 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
|
+
- `modelToUse` defaults to `claude-opus-4.6`; pick the model you actually want to study
|
|
115
|
+
- `modifyAnalyzedText` controls how the LLM output is parsed: `'detectEntities'` (default — mixed entities + words), `'extractEntitiesOnly'` (entity-only graph), or `'none'` (plain co-occurrence)
|
|
116
|
+
- 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
|
+
|
|
118
|
+
17. **overlap_between_texts**
|
|
120
119
|
- Create knowledge graphs from two or more texts and find the overlap (similarities) between them
|
|
121
120
|
- Use it to find similar topics and keywords across different texts
|
|
122
121
|
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
18. **merged_graph_from_texts**
|
|
125
123
|
- 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
|
|
126
124
|
- Use it to combine multiple sources into one graph and see clusters and content gaps across the merged content
|
|
127
125
|
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
19. **difference_between_texts**
|
|
130
127
|
- Compare knowledge graphs from two or more texts and find what's not present in the first graph that's present in the others
|
|
131
128
|
- Use it to find how one text can be enriched with the others
|
|
132
129
|
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
20. **analyze_google_search_results**
|
|
135
131
|
- Generate a graph with keywords and topics for Google search results for a certain query
|
|
136
132
|
- Use it to understand the current informational supply (what people find)
|
|
137
133
|
|
|
138
|
-
|
|
134
|
+
21. **analyze_youtube_search_results**
|
|
135
|
+
- Generate a graph with keywords and topics from YouTube results for a query, channel, or playlist
|
|
136
|
+
- 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
|
+
- Control results with `limit` (default 100, max 2000), `sortBy` (`Popular` / `Oldest` / `Latest`), `excludeDescriptions`, `importLanguage`, and `importRegion`
|
|
138
|
+
- Use it to understand the topics, clusters, and content gaps in the discourse around a video, channel, playlist, or search term on YouTube
|
|
139
139
|
|
|
140
|
+
22. **analyze_related_search_queries**
|
|
140
141
|
- Generate a graph from the search queries suggested by Google for a certain query
|
|
141
142
|
- Use it to understand the current informational demand (what people are looking for)
|
|
142
143
|
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
23. **search_queries_vs_search_results**
|
|
145
145
|
- 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
146
|
- Use it to understand what people search for but don't yet find
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
24. **generate_seo_report**
|
|
150
149
|
- Analyze content for SEO optimization by comparing it with Google search results and search queries
|
|
151
150
|
- Identify content gaps and opportunities for better search visibility
|
|
152
151
|
- Get comprehensive analysis of what's in search results but not in your text
|
|
153
152
|
- Discover what people search for but don't find in current results
|
|
154
153
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
- Add relations to the InfraNodus memory from text
|
|
154
|
+
25. **memory_add_relations**
|
|
155
|
+
- Add relations to the KeywordGraph memory from text
|
|
158
156
|
- Automatically detect entities or use [[wikilinks]] syntax to mark them
|
|
159
157
|
- Save memory to a specified graph name for future retrieval
|
|
160
158
|
- Support automatic entity extraction or manual entity marking
|
|
161
159
|
- Provide links to created memory graphs for easy access
|
|
162
160
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
- Retrieve relations from InfraNodus memory for specific entities
|
|
161
|
+
26. **memory_get_relations**
|
|
162
|
+
- Retrieve relations from KeywordGraph memory for specific entities
|
|
166
163
|
- Search for entity relations using [[wikilinks]] syntax
|
|
167
164
|
- Query specific memory contexts or search across all memory graphs
|
|
168
165
|
- Extract statements and relationships from stored knowledge graphs
|
|
169
166
|
- Support both entity-specific searches and full context retrieval
|
|
170
167
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
- Retrieve context from an existing InfraNodus knowledge graph using GraphRAG
|
|
168
|
+
27. **retrieve_from_knowledge_base**
|
|
169
|
+
- Retrieve context from an existing KeywordGraph knowledge graph using GraphRAG
|
|
174
170
|
- Query your knowledge base with a natural language prompt to get relevant statements
|
|
175
171
|
- Include graph summaries for quick overviews of the knowledge structure
|
|
176
172
|
- Optionally retrieve the full graph, statements, or extended analysis
|
|
177
173
|
- Ideal for augmenting LLM responses with domain-specific knowledge
|
|
178
174
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
- Search through existing InfraNodus graphs
|
|
175
|
+
28. **search**
|
|
176
|
+
- Search through existing KeywordGraph graphs
|
|
182
177
|
- Also use it to search through the public graphs of a specific user
|
|
183
178
|
- Compatible with ChatGPT Deep Research mode via Developer Mode > Connectors
|
|
184
179
|
|
|
185
|
-
|
|
186
|
-
|
|
180
|
+
29. **fetch**
|
|
187
181
|
- Fetch a specific search result for a graph
|
|
188
182
|
- Can be used in ChatGPT Deep Research mode via Developer Mode > Connectors
|
|
189
183
|
|
|
@@ -201,17 +195,17 @@ _More capabilites coming soon!_
|
|
|
201
195
|
|
|
202
196
|
## Knowledge Graph Memory Use Advice
|
|
203
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
199
|
|
|
206
|
-
However, you can also easily use
|
|
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
201
|
|
|
208
202
|
Specifically you can specify to always use a speciic knowlege graph for memories to store everything in one place:
|
|
209
203
|
|
|
210
204
|
```
|
|
211
|
-
Save all memories in the `my-memories` graph in
|
|
205
|
+
Save all memories in the `my-memories` graph in KeywordGraph.
|
|
212
206
|
```
|
|
213
207
|
|
|
214
|
-
Or you can ask
|
|
208
|
+
Or you can ask KeywordGraph to only save certain entities, e.g. for building social networks:
|
|
215
209
|
|
|
216
210
|
```
|
|
217
211
|
When generating entities, only extract people, companies, and organizations. Ignore everything else.
|
|
@@ -219,41 +213,41 @@ When generating entities, only extract people, companies, and organizations. Ign
|
|
|
219
213
|
|
|
220
214
|
## Installation
|
|
221
215
|
|
|
222
|
-
The easiest and the fastest way to launch the
|
|
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
217
|
|
|
224
|
-
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 [
|
|
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
219
|
|
|
226
|
-
Below we describe the two different ways to set up your
|
|
220
|
+
Below we describe the two different ways to set up your KeywordGraph MCP server.
|
|
227
221
|
|
|
228
|
-
### 1. Easiest Setup:
|
|
222
|
+
### 1. Easiest Setup: KeywordGraph MCP Server (via HTTP/SSE)
|
|
229
223
|
|
|
230
224
|
0. **Prerequisites**
|
|
231
225
|
|
|
232
|
-
- Create an account on [
|
|
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
227
|
|
|
234
228
|
1. **Get the URL**
|
|
235
229
|
|
|
236
230
|
- We currently use the following URL for our MCP server deployed in our infrastructure:
|
|
237
231
|
|
|
238
232
|
```bash
|
|
239
|
-
https://mcp.
|
|
233
|
+
https://mcp.keywordgraph.com
|
|
240
234
|
```
|
|
241
235
|
|
|
242
|
-
2. **Add the MCP server URL to the Client Tool Where You Want to Use
|
|
236
|
+
2. **Add the MCP server URL to the Client Tool Where You Want to Use KeywordGraph**
|
|
243
237
|
|
|
244
|
-
- 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
|
|
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
239
|
|
|
246
|
-
4. **Using
|
|
240
|
+
4. **Using KeywordGraph Tools in Your Calls**
|
|
247
241
|
|
|
248
|
-
- To use
|
|
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
243
|
|
|
250
|
-
- If your client is not using
|
|
244
|
+
- If your client is not using KeywordGraph for some actions, add the instruction to use KeywordGraph explicitly.
|
|
251
245
|
|
|
252
246
|
### 2. Manual Setup: via NPX
|
|
253
247
|
|
|
254
|
-
You can deploy the
|
|
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
249
|
|
|
256
|
-
The
|
|
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
251
|
|
|
258
252
|
#### For Claude Desktop / Cursor IDE:
|
|
259
253
|
|
|
@@ -262,11 +256,11 @@ Just add this in your Claude's configuration file (Settings > Developer > Edit C
|
|
|
262
256
|
```json
|
|
263
257
|
{
|
|
264
258
|
"mcpServers": {
|
|
265
|
-
"
|
|
259
|
+
"keywordgraph": {
|
|
266
260
|
"command": "npx",
|
|
267
|
-
"args": ["-y", "
|
|
261
|
+
"args": ["-y", "keywordgraph-mcp-server"],
|
|
268
262
|
"env": {
|
|
269
|
-
"
|
|
263
|
+
"KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
|
|
270
264
|
}
|
|
271
265
|
}
|
|
272
266
|
}
|
|
@@ -275,12 +269,12 @@ Just add this in your Claude's configuration file (Settings > Developer > Edit C
|
|
|
275
269
|
|
|
276
270
|
#### For Claude Code
|
|
277
271
|
|
|
278
|
-
To connect the
|
|
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
273
|
|
|
280
274
|
```bash
|
|
281
|
-
claude mcp add
|
|
282
|
-
-- env
|
|
283
|
-
npx -y
|
|
275
|
+
claude mcp add keywordgraph -s user \
|
|
276
|
+
-- env KEYWORDGRAPH_API_KEY=YOUR_INRANODUS_KEY \
|
|
277
|
+
npx -y keywordgraph-mcp-server
|
|
284
278
|
```
|
|
285
279
|
|
|
286
280
|
### 3. Manual Setup: Launching MCP as a Local Server (for inspection & development)
|
|
@@ -288,15 +282,16 @@ claude mcp add infranodus -s user \
|
|
|
288
282
|
0. **Prerequisites**
|
|
289
283
|
|
|
290
284
|
- Node.js 18+ installed
|
|
291
|
-
-
|
|
285
|
+
- KeywordGraph API key (get yours at [https://keywordgraph.com/api-access](https://keywordgraph.com/api-access))
|
|
292
286
|
|
|
293
287
|
1. **Clone and build the server:**
|
|
294
288
|
|
|
295
289
|
```bash
|
|
296
|
-
git clone https://github.com/yourusername/mcp-server-
|
|
297
|
-
cd mcp-server-
|
|
290
|
+
git clone https://github.com/yourusername/mcp-server-keywordgraph.git
|
|
291
|
+
cd mcp-server-keywordgraph
|
|
298
292
|
npm install
|
|
299
293
|
npm run build:inspect
|
|
294
|
+
npm run inspect
|
|
300
295
|
```
|
|
301
296
|
|
|
302
297
|
Note that `build:inspect` will generate the `dist/index.js` file which you will then use in your server setup. The standard `npm run build` command will only build a Smithery file.
|
|
@@ -306,7 +301,7 @@ Note that `build:inspect` will generate the `dist/index.js` file which you will
|
|
|
306
301
|
Create a `.env` file in the project root:
|
|
307
302
|
|
|
308
303
|
```
|
|
309
|
-
|
|
304
|
+
KEYWORDGRAPH_API_KEY=your-api-key-here
|
|
310
305
|
```
|
|
311
306
|
|
|
312
307
|
3. **Inspect the MCP:**
|
|
@@ -323,18 +318,18 @@ Note that `build:inspect` will generate the `dist/index.js` file which you will
|
|
|
323
318
|
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
|
|
324
319
|
```
|
|
325
320
|
|
|
326
|
-
2. Add the
|
|
321
|
+
2. Add the KeywordGraph server configuration:
|
|
327
322
|
|
|
328
323
|
a. remote launch via `npx`:
|
|
329
324
|
|
|
330
325
|
```json
|
|
331
326
|
{
|
|
332
327
|
"mcpServers": {
|
|
333
|
-
"
|
|
328
|
+
"keywordgraph": {
|
|
334
329
|
"command": "npx",
|
|
335
|
-
"args": ["-y", "
|
|
330
|
+
"args": ["-y", "keywordgraph-mcp-server"],
|
|
336
331
|
"env": {
|
|
337
|
-
"
|
|
332
|
+
"KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
|
|
338
333
|
}
|
|
339
334
|
}
|
|
340
335
|
}
|
|
@@ -346,18 +341,18 @@ b. launch this repo with `node`, specify the absolute path to the repo + `/dist/
|
|
|
346
341
|
```json
|
|
347
342
|
{
|
|
348
343
|
"mcpServers": {
|
|
349
|
-
"
|
|
344
|
+
"keywordgraph": {
|
|
350
345
|
"command": "node",
|
|
351
|
-
"args": ["/absolute/path/to/mcp-server-
|
|
346
|
+
"args": ["/absolute/path/to/mcp-server-keywordgraph/dist/index.js"],
|
|
352
347
|
"env": {
|
|
353
|
-
"
|
|
348
|
+
"KEYWORDGRAPH_API_KEY": "your-api-key-here"
|
|
354
349
|
}
|
|
355
350
|
}
|
|
356
351
|
}
|
|
357
352
|
}
|
|
358
353
|
```
|
|
359
354
|
|
|
360
|
-
**Note:** you can leave the `
|
|
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.
|
|
361
356
|
|
|
362
357
|
3. Restart Claude Desktop to load the new server.
|
|
363
358
|
|
|
@@ -369,18 +364,18 @@ b. launch this repo with `node`, specify the absolute path to the repo + `/dist/
|
|
|
369
364
|
%APPDATA%\Claude\claude_desktop_config.json
|
|
370
365
|
```
|
|
371
366
|
|
|
372
|
-
2. Add the
|
|
367
|
+
2. Add the KeywordGraph server configuration:
|
|
373
368
|
|
|
374
369
|
a. remote launch via `npx`:
|
|
375
370
|
|
|
376
371
|
```json
|
|
377
372
|
{
|
|
378
373
|
"mcpServers": {
|
|
379
|
-
"
|
|
374
|
+
"keywordgraph": {
|
|
380
375
|
"command": "npx",
|
|
381
|
-
"args": ["-y", "
|
|
376
|
+
"args": ["-y", "keywordgraph-mcp-server"],
|
|
382
377
|
"env": {
|
|
383
|
-
"
|
|
378
|
+
"KEYWORDGRAPH_API_KEY": "YOUR_KEYWORDGRAPH_API_KEY"
|
|
384
379
|
}
|
|
385
380
|
}
|
|
386
381
|
}
|
|
@@ -392,11 +387,11 @@ b. launch this repo with `node`:
|
|
|
392
387
|
```json
|
|
393
388
|
{
|
|
394
389
|
"mcpServers": {
|
|
395
|
-
"
|
|
390
|
+
"keywordgraph": {
|
|
396
391
|
"command": "node",
|
|
397
|
-
"args": ["C:\\path\\to\\mcp-server-
|
|
392
|
+
"args": ["C:\\path\\to\\mcp-server-keywordgraph\\dist\\index.js"],
|
|
398
393
|
"env": {
|
|
399
|
-
"
|
|
394
|
+
"KEYWORDGRAPH_API_KEY": "your-api-key-here"
|
|
400
395
|
}
|
|
401
396
|
}
|
|
402
397
|
}
|
|
@@ -412,26 +407,26 @@ b. launch this repo with `node`:
|
|
|
412
407
|
For other applications supporting MCP, use the following command to start the server via npx:
|
|
413
408
|
|
|
414
409
|
```bash
|
|
415
|
-
|
|
410
|
+
KEYWORDGRAPH_API_KEY=your-api-key npx -y keywordgraph-mcp-server
|
|
416
411
|
```
|
|
417
412
|
|
|
418
413
|
or locally
|
|
419
414
|
|
|
420
415
|
```bash
|
|
421
|
-
|
|
416
|
+
KEYWORDGRAPH_API_KEY=your-api-key node /path/to/mcp-server-keywordgraph/dist/index.js
|
|
422
417
|
```
|
|
423
418
|
|
|
424
419
|
The server communicates via stdio, so configure your application to run this command and communicate through standard input/output.
|
|
425
420
|
|
|
426
421
|
### Legacy Setup via Smithery
|
|
427
422
|
|
|
428
|
-
|
|
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.
|
|
429
424
|
|
|
430
425
|
- Create an account on [Smithery.Ai](https://smithery.ai/) (it's free and you can use your Google or GitHub login)
|
|
431
426
|
|
|
432
|
-
- Then go to the [Smithery
|
|
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.
|
|
433
428
|
|
|
434
|
-
- Go to [Smithery
|
|
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.
|
|
435
430
|
|
|
436
431
|
- You may need to get your separate Smithery API key and Smithery proile link to make this work.
|
|
437
432
|
|
|
@@ -440,9 +435,9 @@ InfraNodus server is also available through Smithery: a repository of MCP server
|
|
|
440
435
|
```json
|
|
441
436
|
// e.g. Cursor will access directly the server via Smithery
|
|
442
437
|
"mcpServers": {
|
|
443
|
-
"mcp-server-
|
|
438
|
+
"mcp-server-keywordgraph": {
|
|
444
439
|
"type": "http",
|
|
445
|
-
"url": "https://server.smithery.ai/@
|
|
440
|
+
"url": "https://server.smithery.ai/@keywordgraph/mcp-server-keywordgraph/mcp?api_key=YOUR_SMITHERY_KEY&profile=YOUR_SMITHERY_PROFILE",
|
|
446
441
|
"headers": {}
|
|
447
442
|
}
|
|
448
443
|
}
|
|
@@ -454,13 +449,13 @@ InfraNodus server is also available through Smithery: a repository of MCP server
|
|
|
454
449
|
// Claude uses a slightly different implementation
|
|
455
450
|
// Fot this, it launches the MCP server on your local machine
|
|
456
451
|
"mcpServers": {
|
|
457
|
-
"mcp-server-
|
|
452
|
+
"mcp-server-keywordgraph": {
|
|
458
453
|
"command": "npx",
|
|
459
454
|
"args": [
|
|
460
455
|
"-y",
|
|
461
456
|
"@smithery/cli@latest",
|
|
462
457
|
"run",
|
|
463
|
-
"@
|
|
458
|
+
"@keywordgraph/mcp-server-keywordgraph",
|
|
464
459
|
"--key",
|
|
465
460
|
"YOUR_SMITHERY_KEY",
|
|
466
461
|
"--profile",
|
|
@@ -470,16 +465,16 @@ InfraNodus server is also available through Smithery: a repository of MCP server
|
|
|
470
465
|
}
|
|
471
466
|
```
|
|
472
467
|
|
|
473
|
-
**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
|
|
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.
|
|
474
469
|
|
|
475
470
|
## Usage Examples
|
|
476
471
|
|
|
477
472
|
Once installed, you can ask Claude to:
|
|
478
473
|
|
|
479
|
-
- "Use
|
|
474
|
+
- "Use KeywordGraph to analyze this text and show me the main topics"
|
|
480
475
|
- "Generate a knowledge graph from this document"
|
|
481
476
|
- "Find content gaps in this article"
|
|
482
|
-
- "Retrieve my existing graph called 'Research Notes' from
|
|
477
|
+
- "Retrieve my existing graph called 'Research Notes' from KeywordGraph"
|
|
483
478
|
- "What are the structural gaps in this text?"
|
|
484
479
|
- "Identify the most influential concepts in this content"
|
|
485
480
|
|
|
@@ -527,7 +522,7 @@ Analyzes text and generates a knowledge graph.
|
|
|
527
522
|
|
|
528
523
|
### analyze_existing_graph_by_name
|
|
529
524
|
|
|
530
|
-
Retrieves and analyzes an existing graph from your
|
|
525
|
+
Retrieves and analyzes an existing graph from your KeywordGraph account.
|
|
531
526
|
|
|
532
527
|
**Parameters:**
|
|
533
528
|
|
|
@@ -606,7 +601,7 @@ The `generate_seo_report` tool demonstrates this pattern with 6 major progress c
|
|
|
606
601
|
|
|
607
602
|
### API Key Issues
|
|
608
603
|
|
|
609
|
-
- Get your API key at: [https://
|
|
604
|
+
- Get your API key at: [https://keywordgraph.com/api-access](https://keywordgraph.com/api-access)
|
|
610
605
|
- Ensure the key is correctly set in the configuration
|
|
611
606
|
- Check that the key has not expired
|
|
612
607
|
|
|
@@ -621,9 +616,9 @@ npm run build
|
|
|
621
616
|
|
|
622
617
|
## Resources
|
|
623
618
|
|
|
624
|
-
- [
|
|
625
|
-
- [
|
|
626
|
-
- [
|
|
619
|
+
- [KeywordGraph Website](https://keywordgraph.com)
|
|
620
|
+
- [KeywordGraph MCP](https://keywordgraph.com/mcp)
|
|
621
|
+
- [KeywordGraph API Documentation](https://keywordgraph.com/api-access)
|
|
627
622
|
- [MCP Protocol Documentation](https://modelcontextprotocol.io)
|
|
628
623
|
- [Graph Theory Concepts](https://noduslabs.com/research/)
|
|
629
624
|
|
|
@@ -636,5 +631,5 @@ MIT
|
|
|
636
631
|
For issues related to:
|
|
637
632
|
|
|
638
633
|
- This MCP server: Open an issue in this repository
|
|
639
|
-
-
|
|
634
|
+
- KeywordGraph API: Contact support@keywordgraph.com
|
|
640
635
|
- MCP Protocol: Visit the [MCP community](https://modelcontextprotocol.io)
|
|
@@ -1,54 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Load environment variables
|
|
10
|
-
dotenv.config();
|
|
11
|
-
|
|
12
|
-
const config = {
|
|
13
|
-
apiKey: process.env.INFRANODUS_API_KEY || "",
|
|
14
|
-
apiBase: process.env.INFRANODUS_API_BASE || "https://infranodus.com/api/v1",
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
// Validate config
|
|
18
|
-
if (!config.apiKey) {
|
|
19
|
-
console.error(
|
|
20
|
-
"WARNING: Set INFRANODUS_API_KEY in environment variables to ensure you don't hit the rate limit"
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Create server with config
|
|
25
|
-
const server = createServer({ config });
|
|
26
|
-
|
|
27
|
-
// Create STDIO transport
|
|
28
|
-
const transport = new StdioServerTransport();
|
|
29
|
-
|
|
30
|
-
// Handle graceful shutdown
|
|
31
|
-
process.on("SIGINT", async () => {
|
|
32
|
-
await server.close();
|
|
33
|
-
process.exit(0);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
process.on("SIGTERM", async () => {
|
|
37
|
-
await server.close();
|
|
38
|
-
process.exit(0);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
await server.connect(transport);
|
|
43
|
-
// Server is running - no console output to avoid protocol interference
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.error("ERROR: MCP server failed to connect", error);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Run the main function
|
|
51
|
-
main().catch((error) => {
|
|
52
|
-
console.error("ERROR: Fatal error of MCP server", error);
|
|
53
|
-
process.exit(1);
|
|
54
|
-
});
|
|
2
|
+
// Brand-specific entry for the published `infranodus-mcp-server` package.
|
|
3
|
+
// Bakes in BRAND so `npx infranodus-mcp-server` runs as InfraNodus without
|
|
4
|
+
// the caller needing to set any env var. An explicit BRAND still wins.
|
|
5
|
+
// NOTE: must use dynamic import — a static import would be hoisted and run
|
|
6
|
+
// before this assignment, so brand.js would read BRAND too early.
|
|
7
|
+
process.env.BRAND ||= "infranodus";
|
|
8
|
+
await import("./mcp-server.js");
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Brand-specific entry for the published `keywordgraph-mcp-server` package.
|
|
3
|
+
// Bakes in BRAND so `npx keywordgraph-mcp-server` runs as KeywordGraph without
|
|
4
|
+
// the caller needing to set any env var. An explicit BRAND still wins.
|
|
5
|
+
// NOTE: must use dynamic import — a static import would be hoisted and run
|
|
6
|
+
// before this assignment, so brand.js would read BRAND too early.
|
|
7
|
+
process.env.BRAND ||= "keywordgraph";
|
|
8
|
+
await import("./mcp-server.js");
|