blackmount-nlp-mcp
NLP without the bloat — 45 tools for sentiment, keywords, readability, summarization. Zero heavy dependencies. 42KB wheel.
README
blackmount-nlp-mcp
NLP for MCP — zero heavy dependencies. Built by Blackmount.
45 text analysis tools as a FastMCP server. No NLTK. No spaCy. No transformers. One dependency (mcp[cli]), under 50 KB of NLP code, ready in seconds. Requires Python 3.10+.
Why this exists
| blackmount-nlp-mcp | NLTK | spaCy | transformers | |
|---|---|---|---|---|
| Wheel size | 42 KB | 1.5 MB | 6 MB+ (+ models) | 10 MB+ (+ models) |
| Direct dependencies | 1 | many | many | many |
| Tokenization | ✅ | ✅ | ✅ | ✅ |
| Sentiment analysis | ✅ | ✅ | ❌ | ✅ |
| Readability scores | ✅ | ❌ | ❌ | ❌ |
| Keyword extraction | ✅ | ✅ | ❌ | ❌ |
| Text similarity | ✅ | ✅ | ✅ | ✅ |
| Language detection | ✅ (18 langs) | ❌ | ❌ | ❌ |
Everything is implemented from scratch in pure Python — Porter stemmer, TF-IDF, RAKE, Levenshtein, VADER-style sentiment, Flesch / Gunning Fog / Coleman-Liau / ARI / SMOG readability, extractive summarization, language detection — plus a built-in 2000+ word sentiment lexicon and 500+ stopword list, all baked into the package.
Quick start
pip install blackmount-nlp-mcp
Claude Desktop
Add to your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"nlp": {
"command": "blackmount-nlp-mcp"
}
}
}
Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"nlp": {
"command": "blackmount-nlp-mcp"
}
}
}
Any MCP client
The server runs over stdio. Point your client at the blackmount-nlp-mcp command:
blackmount-nlp-mcp
Restart your editor. All 45 NLP tools are now available — just ask in natural language.
Tool catalog
Tokenization (4 tools)
| Tool | Description | Try asking |
|---|---|---|
word_tokenize |
Split text into words, handling contractions and punctuation | "Tokenize this paragraph into words" |
sentence_tokenize |
Split into sentences, handling common abbreviations | "Break this text into individual sentences" |
generate_ngrams |
Generate word-level n-grams from a token list | "Generate bigrams from these tokens" |
generate_char_ngrams |
Generate character-level n-grams | "Get character trigrams for this word" |
Readability (8 tools)
| Tool | Description | Try asking |
|---|---|---|
flesch_reading_ease |
0–100 ease score (higher = easier) | "Calculate the Flesch Reading Ease score" |
flesch_kincaid_grade |
US grade level estimate | "What grade level is this written at?" |
gunning_fog_index |
Fog index based on complex word ratio | "Calculate the Fog index for this text" |
coleman_liau_index |
Coleman-Liau grade-level index | "Get the Coleman-Liau score" |
automated_readability_index |
ARI grade-level index | "What's the ARI for this document?" |
smog_grade_index |
SMOG grade (recommended for healthcare text) | "Calculate the SMOG grade for this document" |
count_syllables |
Syllable count estimation for any word | "How many syllables in 'extraordinary'?" |
get_reading_level |
All readability scores in one call with a plain-English label | "Give me a full readability report for this text" |
Sentiment Analysis (4 tools)
| Tool | Description | Try asking |
|---|---|---|
get_sentiment_score |
Compound sentiment score from −1.0 to +1.0 | "What's the sentiment of this customer review?" |
get_sentiment_label |
Returns positive, negative, or neutral |
"Is this feedback positive or negative?" |
get_sentence_sentiments |
Per-sentence sentiment breakdown | "Show me the sentiment of each sentence" |
get_aspect_sentiment |
Sentiment scoped to specific topics | "What's the sentiment around 'pricing' in these reviews?" |
Keyword Extraction (4 tools)
| Tool | Description | Try asking |
|---|---|---|
extract_tfidf_keywords |
TF-IDF keyword ranking across a corpus | "What are the key terms across these docs?" |
extract_rake_keywords |
RAKE algorithm — phrase-level keyword extraction | "Extract the key phrases from this article" |
get_word_frequency |
Top words by frequency, stopwords excluded | "What are the most common words in this text?" |
get_phrase_frequency |
Top n-gram phrases by frequency | "What two-word phrases appear most often?" |
Text Similarity (5 tools)
| Tool | Description | Try asking |
|---|---|---|
get_jaccard_similarity |
Word-set overlap, 0–1 | "How similar are these two paragraphs?" |
get_cosine_similarity |
Bag-of-words cosine similarity, 0–1 | "Calculate cosine similarity between these texts" |
get_edit_distance |
Levenshtein edit distance | "How many edits to turn 'kitten' into 'sitting'?" |
get_normalized_edit_distance |
Edit distance normalized to 0–1 | "How different are these two strings?" |
get_longest_common_subsequence |
LCS length between two strings | "What's the LCS length of these two strings?" |
Text Cleaning (10 tools)
| Tool | Description | Try asking |
|---|---|---|
clean_remove_stopwords |
Strip 500+ English stopwords | "Remove stopwords from this text" |
clean_remove_punctuation |
Remove all punctuation | "Strip the punctuation" |
clean_remove_numbers |
Remove numeric tokens | "Remove all numbers from this" |
clean_remove_urls |
Strip URLs | "Clean out the URLs" |
clean_remove_emails |
Strip email addresses | "Remove email addresses from this text" |
clean_remove_html |
Strip HTML tags | "Strip the HTML from this content" |
clean_normalize_whitespace |
Collapse and trim whitespace | "Normalize the whitespace" |
clean_lowercase |
Lowercase the text | "Convert this to lowercase" |
porter_stem |
Porter stemmer (pure Python, no NLTK) | "Stem the word 'running'" |
clean_text_pipeline |
Configurable multi-step cleaning in one call | "Clean this text: remove HTML, URLs, and stopwords" |
Detection (8 tools)
| Tool | Description | Try asking |
|---|---|---|
detect_text_language |
Identify language from 18 supported languages | "What language is this text written in?" |
detect_text_encoding_type |
Detect script: ASCII, Latin, Cyrillic, CJK, Arabic | "What script does this text use?" |
check_is_english |
English confidence score, 0–1 | "Is this text in English?" |
count_words |
Word count | "How many words are in this?" |
count_sentences |
Sentence count | "Count the sentences" |
count_paragraphs |
Paragraph count | "How many paragraphs?" |
get_avg_word_length |
Mean word length in characters | "What's the average word length?" |
get_avg_sentence_length |
Mean sentence length in words | "How long are the sentences on average?" |
Summarization (2 tools)
| Tool | Description | Try asking |
|---|---|---|
get_extractive_summary |
Select the N highest-scoring sentences from a document | "Summarize this article in 3 sentences" |
get_text_statistics |
Full document stats: words, readability, language, reading time | "Give me a statistical profile of this text" |
Use as a library
The submodules are importable directly — no MCP server required:
from blackmount_nlp_mcp.sentiment import sentiment_score, sentiment_label
from blackmount_nlp_mcp.readability import reading_level
from blackmount_nlp_mcp.keywords import rake_keywords
text = "This product is absolutely amazing! The quality is excellent."
print(sentiment_score(text))
# 0.9285
print(sentiment_label(text))
# 'positive'
print(reading_level(text))
# {'grade_level': 12.39, 'label': 'college',
# 'flesch_reading_ease': 14.27, 'flesch_kincaid_grade': 12.39,
# 'gunning_fog': 19.58, 'coleman_liau': 10.94,
# 'automated_readability': 7.51, 'smog_grade': 11.21}
print(rake_keywords(text))
# [{'phrase': 'absolutely amazing', 'score': 4.0},
# {'phrase': 'product', 'score': 1.0},
# {'phrase': 'quality', 'score': 1.0},
# {'phrase': 'excellent', 'score': 1.0}]
Development
git clone https://github.com/BlackMount-ai/blackmount-nlp-mcp
cd blackmount-nlp-mcp
pip install -e .
pytest tests/ -v
Blackmount ecosystem
blackmount-nlp-mcp is built by Blackmount — tools for people who work with AI.
blackmount-mcp — Browser memory, AI chat search, and session analytics as an MCP server. Pair it with blackmount-nlp-mcp to analyze your saved conversations: extract keywords from chat history, score readability of AI responses, detect sentiment trends across sessions.
app.blackmount.ai — The full Blackmount platform. Search, organize, and analyze everything your AI tools produce.
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。