← Back to Dictionary page

Dictionary Suite Manual

Desktop Manual CLI Manual

Dictionary for Desktop

Click any screenshot to view a larger version with detailed explanation.

Search for word

Word lookup by language

History View

Save Note

Notes

Settings

UI Language Change

Download More Dictionary

CLI Manual (dictcli)

An offline SQLite dictionary CLI with two optional runtime modes: REST API server (rest) and MCP stdio server (mcp).

1) Features

  • SQLite DB file/directory based dictionary queries
  • Search flow: default --term and meaning search --query
  • Runtime modes: local CLI / HTTP REST API / MCP (stdio)

2) Requirements

  • Go 1.25+
  • A dictionary DB path (built separately)
  • Unified DB file: /path/to/dictionary_fts5.db
  • Or per-dictionary DB directory: /path/to/dicts

3) CLI Run Examples

dictcli --db /absolute/path/to/dictionary-data/dictionary_fts5.db groups
dictcli --db /absolute/path/to/dictionary-data/dicts --term 사전
dictcli --db /absolute/path/to/dictionary-data/dicts --term 'dict*'
dictcli --db /absolute/path/to/dictionary-data/dicts --term 'com*uter'
dictcli --db /absolute/path/to/dictionary-data/dicts --query dictionary

Wildcard patterns:

*  : any sequence (example: '*ter', 'com*uter')
?  : any single character (example: c?mputer)

Release dictionary list/download:

dictcli download --list
dictcli download-list
dictcli download --name lingoes-naver-english-korean --out /absolute/path/to/dictionary-data/dicts
dictcli download --name cc-kedict.zip --out ./downloads --extract=false

Output modes:

dictcli --db /absolute/path/to/dictionary-data/dicts --term 옥편 --output rich
dictcli --db /absolute/path/to/dictionary-data/dicts --term 옥편 --output plain
dictcli --db /absolute/path/to/dictionary-data/dicts --term 옥편 --output md
dictcli --db /absolute/path/to/dictionary-data/dicts --term 옥편 --output json
dictcli --db /absolute/path/to/dictionary-data/dicts --term 옥편 --output xml

4) Configuration

The config file is optional (see config.example.ini).

DB path resolution priority:

  1. --db <path>
  2. DICTCLI_DB_PATH
  3. [database] path in config.ini

Config file path priority:

  1. --config <path>
  2. DICTCLI_CONFIG
  3. ./config.ini in current directory

5) REST API (Full Usage)

Start server:

dictcli \
  --db /absolute/path/to/dictionary-data/dicts \
  --limit 20 \
  --timeout 60 \
  rest --host 127.0.0.1 --port 8080

Endpoints:

  • GET /healthz
  • GET /groups
  • GET /search

Common query params: limit, timeout, source_prefix.

/search params:

  • Provide exactly one of term or query
  • term: headword search (wildcards *, ?)
  • query: meaning/full-text FTS search
  • ranking=true|false (default false, applies to query search)
curl -s "http://127.0.0.1:8080/healthz"
curl -s "http://127.0.0.1:8080/groups"
curl -s --get --data-urlencode "term=가게" --data-urlencode "limit=3" "http://127.0.0.1:8080/search"
curl -s --get --data-urlencode "term=*ter" --data-urlencode "limit=5" "http://127.0.0.1:8080/search"
curl -s --get --data-urlencode "query=dictionary" --data-urlencode "limit=5" --data-urlencode "ranking=false" "http://127.0.0.1:8080/search"

6) MCP Server (Detailed)

Start MCP server:

dictcli \
  --db /absolute/path/to/dictionary-data/dicts \
  --limit 20 \
  --timeout 60 \
  mcp --name dictcli

Exposed MCP tools:

  • groups (no args, response { "groups": [...] })
  • search (one of term or query, response { "results": [...] })

7) Ubuntu systemd Service

  • Service unit: deploy/systemd/dictcli-api.service
  • Launcher script: scripts/run_dictcli_api.sh
sudo mkdir -p /opt/dictcli/bin /opt/dictcli/scripts
sudo cp dictcli /opt/dictcli/bin/dictcli
sudo cp ./scripts/run_dictcli_api.sh /opt/dictcli/scripts/run_dictcli_api.sh
sudo chmod +x /opt/dictcli/scripts/run_dictcli_api.sh

sudo useradd --system --no-create-home --shell /usr/sbin/nologin dictcli || true
sudo chown -R dictcli:dictcli /opt/dictcli

# /etc/default/dictcli
DICTCLI_BIN=/opt/dictcli/bin/dictcli
DICTCLI_DB_PATH=/absolute/path/to/dictionary-data/dicts
DICTCLI_HOST=127.0.0.1
DICTCLI_PORT=8080
DICTCLI_GROUP=ko-en
DICTCLI_LIMIT=20
DICTCLI_TIMEOUT=60

sudo cp ./deploy/systemd/dictcli-api.service /etc/systemd/system/dictcli-api.service
sudo systemctl daemon-reload
sudo systemctl enable --now dictcli-api
sudo systemctl status dictcli-api