Skip to main content
Glama
Eyalm321

multilingual-dictionary-mcp

by Eyalm321
README.md
# Multilingual Dictionary MCP

An **offline-first** MCP server for multilingual dictionary lookups — definitions, synonyms, antonyms, hypernyms, hyponyms, meronyms, translations, etymology, pronunciation, semantic neighbors, rhymes, and more — across **4,755 languages**.

No third-party APIs. No rate limits. No outages. The server downloads its data from a CDN once on first run and never goes online again.

## What's bundled

| Source | Size | What it covers |
| --- | --- | --- |
| **Wiktextract** (Kaikki.org) | 6.6 GB | 10.5M dictionary entries across 4,755 languages — definitions, etymology, IPA, translations |
| **ConceptNet 5.7** | 5.6 GB | 24.3M semantic edges across 80+ languages — Synonym, Antonym, IsA, PartOf, RelatedTo, UsedFor, CapableOf, AtLocation, DerivedFrom, EtymologicallyRelatedTo |
| **Numberbatch embeddings** | 3 GB | 9.16M concepts × 300d multilingual embeddings — semantic neighbors via cosine similarity |
| **CMU Pronouncing Dictionary** | 19 MB | English rhymes, soundalikes, autocomplete, spell patterns |

Total bundle: **~21 GB** (medium profile, default).

## One bundle, one download

The whole bundle ships in 6 artifacts. Total **5.4 GB on the wire** (gzip-compressed where it helps), **15.6 GB on disk** after extraction. Everything downloads on first run; no profiles, no opt-ins.

## Installation

```bash
npm install -g multilingual-dictionary-mcp
```

### Claude Desktop / Claude Code

```json
{
  "mcpServers": {
    "multilingual-dictionary": {
      "command": "npx",
      "args": ["-y", "multilingual-dictionary-mcp"]
    }
  }
}
```

On first run, the server downloads its data bundle (~5.4 GB compressed → ~15.6 GB on disk) from `multilingual-dictionary-mcp-data.nyc3.cdn.digitaloceanspaces.com` into `~/.cache/multilingual-dictionary-mcp/` (overridable via `MDM_DATA_DIR`). Each artifact is gzip-decompressed during the stream and SHA-256 verified. Subsequent runs are instant.

## Tools

### Multilingual word relations (ConceptNet — 80+ languages)

`dictionary_synonyms`, `dictionary_antonyms`, `dictionary_hypernyms`, `dictionary_hyponyms`, `dictionary_meronyms`, `dictionary_holonyms`, `dictionary_derived_from`, `dictionary_etymologically_related`, `dictionary_used_for`, `dictionary_capable_of`, `dictionary_at_location`, `dictionary_translate`, `dictionary_all_relations`

### Embedding-based semantic search (Numberbatch — 78 languages)

| Tool | What it does |
| --- | --- |
| `dictionary_related` | Semantic neighbors via cosine similarity — much denser than ConceptNet RelatedTo |
| `dictionary_semantic_neighbors` | Explicit embedding lookup with optional cross-lingual filter |
| `dictionary_means_like` | Multilingual "means approximately" via Numberbatch (works in any of the 78 covered languages) |

### Definitions & etymology (Wiktextract — 4,755 languages)

| Tool | What it does |
| --- | --- |
| `dictionary_lookup` | Definitions + IPA + etymology grouped by language |
| `dictionary_summary` | Concatenated short definition |
| `dictionary_etymology` | Etymology text |
| `dictionary_pronunciation` | IPA pronunciations |
| `dictionary_search` | Prefix-search the corpus |
| `dictionary_random` | Random word entry |

### English-specific (CMU Pronouncing Dictionary)

| Tool | What it does |
| --- | --- |
| `dictionary_rhymes` | Perfect or near rhymes |
| `dictionary_sounds_like` | Homophones / soundalikes |
| `dictionary_spelled_like` | Spelling pattern (`?` and `*` wildcards) |
| `dictionary_suggest` | Autocomplete prefix |

---

## 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 "serendipity"?
[uses dictionary_etymology]

> Find words semantically similar to "café" across languages
[uses dictionary_semantic_neighbors]

> What rhymes with "orange"?
[uses dictionary_rhymes with perfect: false]
```

---

## Development

```bash
npm install
npm run build
npm test           # 42 tests, all run without local data
```

Source layout:

```
src/
├── index.ts            # MCP server entry, blocks on first-run install
├── data/
│   ├── paths.ts        # CDN base, profile selection, data dir
│   ├── installer.ts    # First-run downloader + SHA-256 verification
│   └── local-store.ts  # SQLite + Numberbatch matrix wrappers
└── tools/
    ├── relations.ts    # 13 ConceptNet relation tools + 1 embedding tool
    ├── definitions.ts  # 6 Wiktextract definition tools
    └── english.ts      # 5 CMU dict + Numberbatch tools
```

Total: **24 tools**.

---

## Building the data bundle yourself

The CDN ships official builds, but the entire pipeline is in [`data-pipeline/`](data-pipeline/) — see its [README](data-pipeline/README.md). You can rebuild from upstream sources, ship to your own bucket, and override `MDM_CDN_BASE`.

---

## CI / Release

- **CI** runs build + tests on Node 20 & 22 for every push and PR.
- **Publish** runs on GitHub Release publish, pushes to npm and GitHub Packages.

---

## License

MIT © Eyalm321

TDQS

A3.5/5.0

Scored across 28 tools

Disambiguation5/5

Each tool targets a specific linguistic relation or operation with clear, distinct descriptions. Even potentially overlapping tools like synonyms, means_like, and related are differentiated by their underlying data sources (ConceptNet vs Numberbatch embeddings).

Naming Consistency5/5

All tools follow a consistent 'dictionary_' prefix followed by a descriptive snake_case name. The pattern is uniform with no mixing of conventions or styles.

Tool Count4/5

28 tools is on the higher end but justified by the comprehensive coverage of dictionary features (definitions, etymology, pronunciation, semantic relations, search, data management). It remains manageable and focused.

Completeness5/5

The tool surface covers a wide range of dictionary and lexical relations: definitions, pronunciations, etymology, synonyms, antonyms, hypernyms, hyponyms, meronyms, holonyms, translations, rhymes, spelling, autocomplete, random access, and data installation status. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessUnresponsive