MCP Hub
Back to servers

multilingual-dictionary-mcp

An MCP server for multilingual dictionary lookups with word relations such as synonyms, antonyms, and definitions, leveraging ConceptNet, Wiktionary, and Datamuse APIs.

glama
Updated
May 3, 2026

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.

ToolDescription
dictionary_synonymsWords with similar meaning
dictionary_antonymsOpposites
dictionary_relatedLoosely associated terms (RelatedTo edges)
dictionary_hypernymsBroader/parent concepts (dog → mammal)
dictionary_hyponymsNarrower/child concepts (dog → poodle)
dictionary_meronymsParts/components (car → wheel)
dictionary_holonymsWholes that contain this (wheel → car)
dictionary_derived_fromEtymological roots
dictionary_etymologically_relatedCognates and shared roots across languages
dictionary_used_forTypical purposes (knife → cutting)
dictionary_capable_ofTypical actions (dog → bark)
dictionary_at_locationTypical locations (book → library)
dictionary_translateCross-lingual synonyms — translates a word
dictionary_all_relationsAll relations for a word in one call

Definitions & etymology (Wiktionary)

ToolDescription
dictionary_lookupDefinitions grouped by language (4000+ languages via en.wiktionary)
dictionary_summaryBrief plain-text summary from any Wiktionary edition
dictionary_etymologyEtymology section, plain text
dictionary_pronunciationPronunciation section (typically IPA)
dictionary_searchSearch a Wiktionary edition for matching pages
dictionary_randomRandom word from any Wiktionary edition

English-specific utilities (Datamuse)

ToolDescription
dictionary_rhymesPerfect or near rhymes
dictionary_sounds_likeHomophones / soundalikes
dictionary_means_likeML-based "means approximately" — broader than synonyms
dictionary_spelled_likeSpelling pattern with ? and * wildcards
dictionary_suggestAutocomplete
dictionary_triggersStatistically associated terms (cow → milk, farm)
dictionary_followsWords that commonly follow (drink → coffee)
dictionary_precedesWords that commonly precede (audience → captive)

Cache management

ToolDescription
dictionary_cache_statsInspect hits/misses/size of the in-memory response cache
dictionary_cache_clearForce fresh upstream lookups by clearing the cache

Offline mode (v0.3+)

Set MDM_PROFILE to bundle local data and stop depending on upstream APIs:

ProfileSizeCoverage
online (default)0network-only, hits ConceptNet/Wiktionary/Datamuse live
small~5 MBCMU 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:

  1. Bump the version in package.json and commit.
  2. Tag and push (e.g. git tag v0.1.1 && git push --tags).
  3. 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

Reviews

No reviews yet

Sign in to write a review