Multilingual Dictionary MCP
An MCP server for multilingual dictionary lookups with word relations — synonyms, antonyms, hypernyms, hyponyms, meronyms, translations, etymology, definitions, rhymes, and more — covering all languages by stitching together three free public APIs:
- ConceptNet — multilingual semantic network (80+ languages, word relations: Synonym, Antonym, IsA, PartOf, RelatedTo, DerivedFrom, etc.)
- Wiktionary — definitions, etymology, and pronunciation in 4000+ languages
- Datamuse — English-only utilities (rhymes, sound-alikes, "means like", spelling patterns, contextual triggers)
No API keys. No bundled data. Just plug it into Claude (or any MCP client) and ask it about words in any language.
Installation
From npm
npm install -g multilingual-dictionary-mcp
From GitHub Packages
npm install -g @eyalm321/multilingual-dictionary-mcp --registry=https://npm.pkg.github.com
Claude Desktop / Claude Code config
{
"mcpServers": {
"multilingual-dictionary": {
"command": "npx",
"args": ["-y", "multilingual-dictionary-mcp"]
}
}
}
Tools
Multilingual word relations (ConceptNet)
All of these accept a word, an ISO 639-1 language code (defaults to en), and a limit. Works for English, Spanish, French, German, Italian, Russian, Hebrew, Arabic, Latin, Chinese, Japanese, and 70+ more.
| Tool | Description |
|---|---|
dictionary_synonyms | Words with similar meaning |
dictionary_antonyms | Opposites |
dictionary_related | Loosely associated terms (RelatedTo edges) |
dictionary_hypernyms | Broader/parent concepts (dog → mammal) |
dictionary_hyponyms | Narrower/child concepts (dog → poodle) |
dictionary_meronyms | Parts/components (car → wheel) |
dictionary_holonyms | Wholes that contain this (wheel → car) |
dictionary_derived_from | Etymological roots |
dictionary_etymologically_related | Cognates and shared roots across languages |
dictionary_used_for | Typical purposes (knife → cutting) |
dictionary_capable_of | Typical actions (dog → bark) |
dictionary_at_location | Typical locations (book → library) |
dictionary_translate | Cross-lingual synonyms — translates a word |
dictionary_all_relations | All relations for a word in one call |
Definitions & etymology (Wiktionary)
| Tool | Description |
|---|---|
dictionary_lookup | Definitions grouped by language (4000+ languages via en.wiktionary) |
dictionary_summary | Brief plain-text summary from any Wiktionary edition |
dictionary_etymology | Etymology section, plain text |
dictionary_pronunciation | Pronunciation section (typically IPA) |
dictionary_search | Search a Wiktionary edition for matching pages |
dictionary_random | Random word from any Wiktionary edition |
English-specific utilities (Datamuse)
| Tool | Description |
|---|---|
dictionary_rhymes | Perfect or near rhymes |
dictionary_sounds_like | Homophones / soundalikes |
dictionary_means_like | ML-based "means approximately" — broader than synonyms |
dictionary_spelled_like | Spelling pattern with ? and * wildcards |
dictionary_suggest | Autocomplete |
dictionary_triggers | Statistically associated terms (cow → milk, farm) |
dictionary_follows | Words that commonly follow (drink → coffee) |
dictionary_precedes | Words that commonly precede (audience → captive) |
Cache management
| Tool | Description |
|---|---|
dictionary_cache_stats | Inspect hits/misses/size of the in-memory response cache |
dictionary_cache_clear | Force fresh upstream lookups by clearing the cache |
Offline mode (v0.3+)
Set MDM_PROFILE to bundle local data and stop depending on upstream APIs:
| Profile | Size | Coverage |
|---|---|---|
online (default) | 0 | network-only, hits ConceptNet/Wiktionary/Datamuse live |
small | ~5 MB | CMU dict only — local rhymes/sounds-like, everything else still online |
medium | ~3 GB | + ConceptNet 5.7 SQLite + Numberbatch embeddings + 5 Wiktextract languages |
full | ~20 GB | + all Wiktextract languages + n-gram corpus for triggers/follows/precedes |
MDM_PROFILE=medium npx multilingual-dictionary-mcp
On first run, the server downloads the configured profile's artifacts from the public CDN at https://multilingual-dictionary-mcp-data.nyc3.cdn.digitaloceanspaces.com into ~/.cache/multilingual-dictionary-mcp/ (overridable via MDM_DATA_DIR). Subsequent runs use cached files. SHA-256 verification on every artifact.
When local data is present, tools query SQLite/binary matrices directly. When it isn't (or the profile is online), they fall back to the live APIs. So a partial install just means partial offline coverage — nothing breaks.
The better-sqlite3 package is an optionalDependencies — if it fails to compile during npm install, the package still installs but offline mode silently falls back to online.
Building the data bundle yourself
The CDN ships official builds, but the entire pipeline is in data-pipeline/ so you can rebuild from upstream sources or ship your own bucket. See data-pipeline/README.md.
Caching
Every successful upstream response is cached in memory for the lifetime of the server process, keyed by the full request URL. Identical follow-up calls within the same session return instantly without hitting ConceptNet/Wiktionary/Datamuse again.
- Default TTL: 24 hours
- Default max entries: 5000 (LRU eviction)
- Disabled for
dictionary_random(which is supposed to vary) - No disk persistence — cache is rebuilt on each server start
Tune via env vars:
MDM_DISABLE_CACHE=true # turn caching off
MDM_CACHE_TTL_MS=3600000 # 1 hour TTL
MDM_CACHE_MAX_ENTRIES=10000 # bigger cache
Examples
> What are the synonyms of "feliz" in Spanish?
[uses dictionary_synonyms with language: "es"]
> Translate "happiness" into Hebrew
[uses dictionary_translate with language: "en", targetLanguage: "he"]
> What's the etymology of the word "serendipity"?
[uses dictionary_etymology]
> Find me words that rhyme with "orange"
[uses dictionary_rhymes]
> What are the parts of a bicycle?
[uses dictionary_meronyms with word: "bicycle"]
Development
npm install
npm run build # TypeScript compile
npm test # vitest run
npm run test:watch # vitest watch
npm run dev # ts-node entry point
Project layout
src/
├── index.ts # MCP server entry
├── client.ts # HTTP wrappers for ConceptNet / Wiktionary / Datamuse
├── tools/
│ ├── relations.ts # ConceptNet-backed multilingual relation tools
│ ├── definitions.ts # Wiktionary-backed definition/etymology tools
│ └── english.ts # Datamuse-backed English utilities
└── __tests__/ # vitest specs
CI / Release
- CI runs on every push and PR against
main, on Node 20 and 22. - Publish runs when a GitHub Release is published — tests, builds, then publishes to both npm (as
multilingual-dictionary-mcp) and GitHub Packages (as@eyalm321/multilingual-dictionary-mcp).
To cut a release:
- Bump the
versioninpackage.jsonand commit. - Tag and push (e.g.
git tag v0.1.1 && git push --tags). - Create a GitHub Release pointing at the tag — the publish workflow handles the rest.
The publish workflow expects two repository secrets: NPM_TOKEN (npm automation token) and GITHUB_TOKEN (auto-provided by GitHub Actions).
License
MIT © Eyalm321