Connects Claude to InfraNodus's network analysis API for turning text into knowledge graphs. You get 25 tools covering graph generation, topical clustering, content gap detection, and SEO analysis. The real utility is in operations like generate_knowledge_graph for visualizing concept relationships, analyze_text for extracting topics from URLs or transcripts, and develop_text_tool which chains multiple analyses together. Memory operations let you store and retrieve entity relations across conversations. The SEO toolkit compares your content against Google search results and queries to find optimization opportunities. Reach for this when you need structured topic extraction that goes beyond basic summarization, or when building research workflows that identify conceptual gaps and generate questions from unstructured text.
Public tool metadata for what this MCP can expose to an agent.
generate_knowledge_graphGenerate a knowledge graph with main topics, topical clusters, concepts, concepts (nodes) relations (edges) and structural gaps. Only use when explicitly asked to analyze a text or generate a knowledge graph. Do not use for short clarifying questions that you already have an a...7 paramsGenerate a knowledge graph with main topics, topical clusters, concepts, concepts (nodes) relations (edges) and structural gaps. Only use when explicitly asked to analyze a text or generate a knowledge graph. Do not use for short clarifying questions that you already have an a...
urlstringtextstringcontextstringincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: nonecreate_knowledge_graphCreate a knowledge graph in InfraNodus from text or from a URL, save it, and provide its name and a link to it for future use.8 paramsCreate a knowledge graph in InfraNodus from text or from a URL, save it, and provide its name and a link to it for future use.
urlstringtextstringcontextstringgraphNamestringincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: nonememory_add_relationsAdd relations to the InfraNodus memory from text, save it, and provide its name and a link to it for future use.7 paramsAdd relations to the InfraNodus memory from text, save it, and provide its name and a link to it for future use.
textstringcontextstringgraphNamestringincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: extractEntitiesOnlymemory_get_relationsProvide a list of relations from the InfraNodus memory for a given concept or entity3 paramsProvide a list of relations from the InfraNodus memory for a given concept or entity
contextstringentityNamestringmemoryContextNamestringanalyze_existing_graph_by_nameExtract and analyze the content of an existing InfraNodus graph from your account.7 paramsExtract and analyze the content of an existing InfraNodus graph from your account.
contextstringgraphNamestringincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: noneincludeGraphSummarybooleananalyze_textExtract and analyze a graph from text, URL, YouTube video transcript, or an existing InfraNodus graph.8 paramsExtract and analyze a graph from text, URL, YouTube video transcript, or an existing InfraNodus graph.
urlstringtextstringcontextstringincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: noneincludeGraphSummarybooleangenerate_content_gapsGenerate content gaps from text, URL, or an existing graph using knowledge graph analysis.4 paramsGenerate content gaps from text, URL, or an existing graph using knowledge graph analysis.
urlstringtextstringcontextstringgraphNamestringgenerate_topical_clustersGenerate topics and clusters of keywords from text, URL, or an existing graph using knowledge graph analysis.4 paramsGenerate topics and clusters of keywords from text, URL, or an existing graph using knowledge graph analysis.
urlstringtextstringcontextstringgraphNamestringgenerate_research_questionsAnalyze text or an existing graph and generate innovative research questions based on the content gaps identified between the topical clusters. Provide either text, url, or graphName. Can be used to improve the text and the discourse it relates to7 paramsAnalyze text or an existing graph and generate innovative research questions based on the content gaps identified between the topical clusters. Provide either text, url, or graphName. Can be used to improve the text and the discourse it relates to
urlstringtextstringcontextstringgapDepthnumbergraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4ouseSeveralGapsbooleangenerate_research_ideasAnalyze text or an existing graph and generate innovative research ideas based on the content gaps identified between the topical clusters inside the text that can be used to improve the text and the discourse it relates to.9 paramsAnalyze text or an existing graph and generate innovative research ideas based on the content gaps identified between the topical clusters inside the text that can be used to improve the text and the discourse it relates to.
urlstringtextstringcontextstringgapDepthnumbergraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4oresponseTypestringresponse · ideadefault: responseuseSeveralGapsbooleanshouldTranscendbooleanoptimize_text_structureAnalyze the level of bias and coherence in text. If it's too biased, develop the represented topics, if it's focused or diversified, develop the content gaps. If it's dispersed, focus the most common gap topics.6 paramsAnalyze the level of bias and coherence in text. If it's too biased, develop the represented topics, if it's focused or diversified, develop the content gaps. If it's dispersed, focus the most common gap topics.
urlstringtextstringcontextstringgraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4oresponseTypestringresponse · idea · question · transcenddefault: responsegenerate_responses_from_graphUse text, URL, or an existing InfraNodus knowledge graph and generate responses and expert advice based on a prompt provided.6 paramsUse text, URL, or an existing InfraNodus knowledge graph and generate responses and expert advice based on a prompt provided.
urlstringtextstringpromptstringcontextstringgraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4odevelop_conceptual_bridgesAnalyze text or an existing graph and get ideas on how to develop conceptual bridges in this text to link it to a broader discourse. Provide either text, url, or graphName.6 paramsAnalyze text or an existing graph and get ideas on how to develop conceptual bridges in this text to link it to a broader discourse. Provide either text, url, or graphName.
urlstringtextstringcontextstringgraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4orequestModestringquestion · transcenddefault: transcenddevelop_latent_topicsAnalyze text or an existing graph, extract underdeveloped topics and get an idea on how to develop them. Provide either text, url, or graphName.6 paramsAnalyze text or an existing graph, extract underdeveloped topics and get an idea on how to develop them. Provide either text, url, or graphName.
urlstringtextstringcontextstringgraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4orequestModestringquestion · transcenddefault: transcenddevelop_text_toolAnalyze text or an existing graph to extract research questions, develop latent topics, and identify content gaps in a single workflow with progress tracking. Provide either text, url, or graphName.8 paramsAnalyze text or an existing graph to extract research questions, develop latent topics, and identify content gaps in a single workflow with progress tracking. Provide either text, url, or graphName.
urlstringtextstringcontextstringgapDepthnumbergraphNamestringmodelToUsestringclaude-opus-4.1 · claude-opus-4.5 · claude-sonnet-4 · claude-sonnet-4.5 · gemini-2.5-pro · gemini-2.5-flashdefault: gpt-4ouseSeveralGapsbooleantranscendDiscoursebooleangenerate_contextual_hintGenerate information about the main topics and concepts in a text to augment RAG retrieval and text analysis.4 paramsGenerate information about the main topics and concepts in a text to augment RAG retrieval and text analysis.
urlstringtextstringcontextstringgraphNamestringoverlap_between_textsExtract the common relationships and similarities between texts and generate an overlap graph6 paramsExtract the common relationships and similarities between texts and generate an overlap graph
contextstringcontextsarrayincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: nonemerged_graph_from_textsBuild a graph of all the texts, URLs, and existing InfraNodus graphs provided, providing topical clusters and gaps present in the merged graph generated from all the texts.6 paramsBuild a graph of all the texts, URLs, and existing InfraNodus graphs provided, providing topical clusters and gaps present in the merged graph generated from all the texts.
contextstringcontextsarrayincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: nonedifference_between_textsExtract the conceptial relations that are missing in the first text, url, or InfraNodus graph but are present in the other texts6 paramsExtract the conceptial relations that are missing in the first text, url, or InfraNodus graph but are present in the other texts
contextstringcontextsarrayincludeGraphbooleanaddNodesAndEdgesbooleanincludeStatementsbooleanmodifyAnalyzedTextstringnone · detectEntities · extractEntitiesOnlydefault: noneanalyze_google_search_resultsGenerate a knowledge graph and topical clusters from Google search results for provided search queries9 paramsGenerate a knowledge graph and topical clusters from Google search results for provided search queries
contextstringqueriesarrayincludeGraphbooleanimportCountrystringAR · AU · BR · CA · CH · CNdefault: USimportLanguagestringEN · DE · FR · ES · IT · PTdefault: ENincludeNodesAndEdgesbooleanincludeSearchResultsbooleanshowExtendedGraphInfobooleanincludeSearchResultsOnlybooleananalyze_related_search_queriesGenerate a knowledge graph and identifymain topical clusters in the search requests related to the search queries provided10 paramsGenerate a knowledge graph and identifymain topical clusters in the search requests related to the search queries provided
contextstringqueriesarrayincludeGraphbooleanimportCountrystringAR · AU · BR · CA · CH · CNdefault: USimportLanguagestringEN · DE · FR · ES · IT · PTdefault: ENkeywordsSourcestringrelated · adwordsdefault: relatedincludeNodesAndEdgesbooleanincludeSearchQueriesbooleanshowExtendedGraphInfobooleanincludeSearchQueriesOnlybooleansearch_queries_vs_search_resultsFind the combinations of keywords and topics people search for that don't appear in the search results for the same queries8 paramsFind the combinations of keywords and topics people search for that don't appear in the search results for the same queries
contextstringqueriesarrayincludeGraphbooleanimportCountrystringAR · AU · BR · CA · CH · CNdefault: USimportLanguagestringEN · DE · FR · ES · IT · PTdefault: ENincludeSearchQueriesbooleanshowExtendedGraphInfobooleanincludeSearchQueriesOnlybooleangenerate_seo_reportAnalyze content for SEO optimization by comparing its knowledge graph with the graphs of Google search results and search queries to identify content gaps and opportunities based on the differences9 paramsAnalyze content for SEO optimization by comparing its knowledge graph with the graphs of Google search results and search queries to identify content gaps and opportunities based on the differences
urlstringtextstringcontextstringuseProxybooleanimportCountrystringAR · AU · BR · CA · CH · CNdefault: USimportLanguagestringEN · DE · FR · ES · IT · PTdefault: ENcontentToExtractstringall · header tags · link tagsdefault: allnumberOfTopicsToExtractnumbernumberOfKeywordsToExtractnumberretrieve_from_knowledge_baseRetrieve the statements and general overview of an existing InfraNodus knowledge graph based on the user's prompt for GraphRAG based retrieval.7 paramsRetrieve the statements and general overview of an existing InfraNodus knowledge graph based on the user's prompt for GraphRAG based retrieval.
promptstringcontextstringgraphNamestringincludeGraphbooleancompactStatementsbooleanincludeGraphSummarybooleanextendedGraphSummarybooleanlist_graphsList all graphs (contexts) for the currently logged in user with optional filtering by name, type, date, language, or favorite status. Use this to discover available graphs before analyzing or searching them.7 paramsList all graphs (contexts) for the currently logged in user with optional filtering by name, type, date, language, or favorite status. Use this to discover available graphs before analyzing or searching them.
typestringtoDatestringcontextstringfavoritebooleanfromDatestringlanguagestringnameContainsstringsearchFind the concepts and terms in existing InfraNodus graphs4 paramsFind the concepts and terms in existing InfraNodus graphs
querystringcontextstringcontextNamesarraycontextTypesarrayfetchFetch a specific search result for an InfraNodus knowledge graph2 paramsFetch a specific search result for an InfraNodus knowledge graph
idstringcontextstringget_more_toolsCheck for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.1 paramsCheck for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.
contextstringA Model Context Protocol (MCP) server that integrates InfraNodus knowledge graph and text network analysis capabilities into LLM workflows and AI assistants like Claude Desktop.
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.

generate_knowledge_graph
analyze_existing_graph_by_name
analyze_text
generate_content_gaps
generate_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 failsgenerate_contextual_hint
generate_research_questions
generate_research_ideas
optimize_text_structure
optimize_reasoning
text)generate_responses_from_graph
develop_conceptual_bridges
develop_latent_topics
develop_text_tool
create_knowledge_graph
generate_ontology_graph
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)modelToUse defaults to claude-opus-4.6 for richer ontologies; pick -mini/-lite variants (or gpt-4o-mini) for faster, cheaper generationknowledgeGraph) 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 conceptsanalyze_llm_results
modelToUse defaults to claude-opus-4.6; pick the model you actually want to studymodifyAnalyzedText controls how the LLM output is parsed: 'detectEntities' (default — mixed entities + words), 'extractEntitiesOnly' (entity-only graph), or 'none' (plain co-occurrence)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/edgesoverlap_between_texts
merged_graph_from_texts
difference_between_texts
analyze_google_search_results
analyze_youtube_results
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)limit (default 100, max 2000), sortBy (Popular / Oldest / Latest), excludeDescriptions, importLanguage, and importRegionanalyze_related_search_queries
search_queries_vs_search_results
generate_seo_report
memory_add_relations
memory_get_relations
retrieve_from_knowledge_base
search
fetch
More capabilites coming soon!
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.
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.
Specifically you can specify to always use a speciic knowlege graph for memories to store everything in one place:
Save all memories in the `my-memories` graph in InfraNodus.
Or you can ask InfraNodus to only save certain entities, e.g. for building social networks:
When generating entities, only extract people, companies, and organizations. Ignore everything else.
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.
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.
Below we describe the two different ways to set up your InfraNodus MCP server.
https://mcp.infranodus.com
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")
If your client is not using InfraNodus for some actions, add the instruction to use InfraNodus explicitly.
You can deploy the InfraNodus server manually via npx — a package that allows to execute local and remote Node.Js packages on your computer.
The InfraNodus MCP server is available as an npm package at 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
Just add this in your Claude's configuration file (Settings > Developer > Edit Config), inside the "mcpServers" object where the different servers are listed:
{
"mcpServers": {
"infranodus": {
"command": "npx",
"args": ["-y", "infranodus-mcp-server"],
"env": {
"INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
}
}
}
}
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:
claude mcp add infranodus -s user \
-- env INFRANODUS_API_KEY=YOUR_INRANODUS_KEY \
npx -y infranodus-mcp-server
Clone and build the server:
git clone https://github.com/yourusername/mcp-server-infranodus.git
cd mcp-server-infranodus
npm install
npm run build:inspect
npm run inspect
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.
Set up your API key:
Create a .env file in the project root:
INFRANODUS_API_KEY=your-api-key-here
Inspect the MCP:
npm run inspect
Open your Claude Desktop configuration file:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the InfraNodus server configuration:
a. remote launch via npx:
{
"mcpServers": {
"infranodus": {
"command": "npx",
"args": ["-y", "infranodus-mcp-server"],
"env": {
"INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
}
}
}
}
b. launch this repo with node, specify the absolute path to the repo + /dist/index.js:
{
"mcpServers": {
"infranodus": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-infranodus/dist/index.js"],
"env": {
"INFRANODUS_API_KEY": "your-api-key-here"
}
}
}
}
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.
Open your Claude Desktop configuration file:
%APPDATA%\Claude\claude_desktop_config.json
Add the InfraNodus server configuration:
a. remote launch via npx:
{
"mcpServers": {
"infranodus": {
"command": "npx",
"args": ["-y", "infranodus-mcp-server"],
"env": {
"INFRANODUS_API_KEY": "YOUR_INFRANODUS_API_KEY"
}
}
}
}
b. launch this repo with node:
{
"mcpServers": {
"infranodus": {
"command": "node",
"args": ["C:\\path\\to\\mcp-server-infranodus\\dist\\index.js"],
"env": {
"INFRANODUS_API_KEY": "your-api-key-here"
}
}
}
}
For other applications supporting MCP, use the following command to start the server via npx:
INFRANODUS_API_KEY=your-api-key npx -y infranodus-mcp-server
or locally
INFRANODUS_API_KEY=your-api-key node /path/to/mcp-server-infranodus/dist/index.js
The server communicates via stdio, so configure your application to run this command and communicate through standard input/output.
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.
Create an account on Smithery.Ai (it's free and you can use your Google or GitHub login)
Then go to the Smithery InfraNodus Server, click "Configure" at the top right, and add your InfraNodus API key there.
Go to Smithery InfraNodus Server and get the URL link from Smithery https://server.smithery.ai/@infranodus/mcp-server-infranodus/mcp for the server or use one of their automatic setup tools for Claude or Cursor.
You may need to get your separate Smithery API key and Smithery proile link to make this work.
// e.g. Cursor will access directly the server via Smithery
"mcpServers": {
"mcp-server-infranodus": {
"type": "http",
"url": "https://server.smithery.ai/@infranodus/mcp-server-infranodus/mcp?api_key=YOUR_SMITHERY_KEY&profile=YOUR_SMITHERY_PROFILE",
"headers": {}
}
}
// Claude uses a slightly different implementation
// Fot this, it launches the MCP server on your local machine
"mcpServers": {
"mcp-server-infranodus": {
"command": "npx",
"args": [
"-y",
"@smithery/cli@latest",
"run",
"@infranodus/mcp-server-infranodus",
"--key",
"YOUR_SMITHERY_KEY",
"--profile",
"YOUR_SMITHERY_PROFILE"
]
}
}
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.
Once installed, you can ask Claude to:
npm run dev
Test the server with the MCP Inspector:
npm run build:inspect
npm run inspect
npm run build
npm run watch
Analyzes text and generates a knowledge graph.
Parameters:
text (string, required): The text to analyzeincludeStatements (boolean): Include original statements in responsemodifyAnalyzedText (string): Text modification options ("none", "entities", "lemmatize")Retrieves and analyzes an existing graph from your InfraNodus account.
Parameters:
graphName (string, required): Name of the existing graphincludeStatements (boolean): Include statements in responseincludeGraphSummary (boolean): Include graph summaryAnalyze a text, URL, or YouTube transcript. Extract and analyze a graph from text or URL; provide either text or url.
Parameters:
text (string, optional): Text to analyze. Provide either this or url.url (string, optional): URL to fetch content from (e.g. webpage or YouTube transcript). Provide either this or text.includeStatements (boolean): Include processed statements in responseincludeGraph (boolean): Include full graph structure in responseaddNodesAndEdges (boolean): Include nodes and edges in responseincludeGraphSummary (boolean): Include AI-generated graph summary for RAG prompt augmentationmodifyAnalyzedText (string): Entity detection — "none", "detectEntities", or "extractEntitiesOnly"Identifies content gaps and missing connections in text.
Parameters:
text (string, required): The text to analyze for gapsFor long-running operations (like SEO analysis), the MCP server supports real-time progress notifications that provide intermediary feedback to AI agents. This allows agents to:
The server implements MCP progress notifications using:
import { ProgressReporter } from "../utils/progress.js";
import { ToolHandlerContext } from "../types/index.js";
handler: async (params: ParamType, context: ToolHandlerContext = {}) => {
const progress = new ProgressReporter(context);
await progress.report(25, "Fetching data from API...");
// Do work
await progress.report(75, "Analyzing results...");
// More work
await progress.report(100, "Complete!");
return results;
};
The generate_seo_report tool demonstrates this pattern with 6 major progress checkpoints that provide detailed status updates throughout the multi-step analysis process.
# Clean install
rm -rf node_modules package-lock.json
npm install
npm run build
MIT
For issues related to:
csoai-org/pdf-document-mcp
xt765/mcp-document-converter
io.github.xjtlumedia/markdown-formatter
io.github.ai-aviate/better-notion
suekou/mcp-notion-server
meterlong/mcp-doc