Skip to main content

kbbi-mcp

CI PyPI Python License

An MCP server for querying KBBI (Kamus Besar Bahasa Indonesia / KBBI Daring).

Python: 3.13+

This project exposes a single, stable JSON tool output so LLM clients can decide how to format, translate, or summarize results.

Relationship to KBBI Daring

This project is unofficial and is not affiliated with or endorsed by the official KBBI Daring service.

Features

  • MCP tool: kbbi_lookup(query: str)

  • MCP resource: kbbi://{query} (same payload as kbbi_lookup)

  • No login/auth flow required

  • Uses official KBBI VI Daring by default

Configure in an MCP client (JSON)

Most MCP clients (including Claude Desktop) use a JSON config with a top-level mcpServers object. This mcpServers format is an emergent standard across the MCP ecosystem (see: https://gofastmcp.com/integrations/mcp-json-configuration.md).

mcpServers-based clients (Claude Desktop / Cursor / Windsurf)

This matches the convention used by many Python MCP servers.

Where to put it:

  • Claude Desktop: ~/.claude/claude_desktop_config.json

  • Cursor: .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)

  • Windsurf: ~/.codeium/windsurf/mcp_config.json

{
    "mcpServers": {
        "kbbi": {
            "command": "uvx",
            "args": ["kbbi-mcp"]
        }
    }
}

Note: this example uses uvx (part of uv) to run the server. Install uv here: https://docs.astral.sh/uv/getting-started/installation/

If you don’t want to depend on uv, install kbbi-mcp into an environment and point your client to that environment’s executable. For example:

  • Use the console script (recommended when available): kbbi-mcp

  • Or run the module: python -m kbbi_mcp

The server performs direct lookups to the official KBBI VI Daring site.

Local development (run from this repo)

You’ll need uv installed: https://docs.astral.sh/uv/getting-started/installation/

To run the server over stdio directly from this checkout:

uv run kbbi-mcp

To point an MCP client at this checkout, use an mcpServers entry like this (replace the path with the absolute path of your clone):

{
    "mcpServers": {
        "kbbi-dev": {
            "command": "uv",
            "args": ["--directory", "/path/to/kbbi-mcp", "run", "kbbi-mcp"]
        }
    }
}

Tool: kbbi_lookup

Input

  • query (string): a word or phrase

Example tool arguments:

{
    "query": "makan"
}

Output

Returns a JSON object:

  • found (bool): whether entries is non-empty

  • query (string): the trimmed query

  • url (string): the KBBI page that was read

  • entries (list): one item per headword; homographs such as makan¹ and makan² are separate entries

  • suggestions (list of strings): similar headwords, only when nothing was found

Each entry has:

  • headword (string): syllable dots removed (ma.kan → makan)

  • homograph (int | null): the superscript number, if any

  • pronunciation (string | null): e.g. /gêmas/

  • root_words (list of strings): e.g. ["punya"] for mempunyai

  • senses (list), in page order, each with:

    • labels: {code, name, description} for word classes (v, n, …) and usage labels (ki, Tas, …)

    • gloss (string): the definition text

    • examples: {text, meaning}; -- or ~ in text stands for the headword, and meaning (string | null) explains idiomatic examples

Every key is always present (null or an empty list when absent), so the output shape is stable.

An empty query or a failed lookup (e.g. KBBI unreachable) is reported as an MCP tool error (isError: true) with a message, not as a JSON payload.

Example tool output:

{
    "found": true,
    "query": "gemas",
    "url": "https://kbbi.kemendikdasmen.go.id/entri/gemas",
    "entries": [
        {
            "headword": "gemas",
            "homograph": null,
            "pronunciation": "/gêmas/",
            "root_words": [],
            "senses": [
                {
                    "labels": [
                        {
                            "code": "a",
                            "name": "Adjektiva",
                            "description": "kata yang menjelaskan nomina atau pronomina"
                        }
                    ],
                    "gloss": "sangat jengkel (marah) dalam hati",
                    "examples": [
                        {
                            "text": "saya sangat -- pada anak itu karena selalu mengotori lantai",
                            "meaning": null
                        }
                    ]
                },
                {
                    "labels": [
                        {
                            "code": "a",
                            "name": "Adjektiva",
                            "description": "kata yang menjelaskan nomina atau pronomina"
                        }
                    ],
                    "gloss": "sangat suka (cinta) bercampur jengkel; jengkel-jengkel cinta",
                    "examples": [
                        {
                            "text": "-- aku melihat anak ini",
                            "meaning": null
                        }
                    ]
                }
            ]
        }
    ],
    "suggestions": []
}

Resource: kbbi://{query}

This server also exposes the same payload as a read-only MCP resource (application/json).

  • kbbi://makan

For low-level debugging, a client would read it using resources/read with {"uri": "kbbi://makan"}.

Data source

Lookup behavior:

  • Official source: https://kbbi.kemendikdasmen.go.id/entri/{query}

Optional environment variables:

  • KBBI_BASE_URL (default: https://kbbi.kemendikdasmen.go.id)

  • KBBI_TIMEOUT_SECONDS (default: 10.0)

  • KBBI_LOG_LEVEL (default: INFO): level of the server’s logs, written to stderr

Metadata

Release files for kbbi-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kbbi-mcp 0.2.0
File Size Uploaded Provenance
kbbi_mcp-0.2.0.tar.gz 10.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for kbbi-mcp 0.2.0
File Interpreter ABI Platform
kbbi_mcp-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.8 kB

Release files / kbbi_mcp-0.2.0.tar.gz

Download URL kbbi_mcp-0.2.0.tar.gz
Size 10.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fe54995bc5ae801773f59ec27e03ea734f64b0c0470fe2f3dd9dd5d6e3f97e4a
BLAKE2b-256 checksum
How to use checksums
f73278ab6ade85d822db53738d173735a75117f0f89c569a0ab161332b7621ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / kbbi_mcp-0.2.0-py3-none-any.whl

Download URL kbbi_mcp-0.2.0-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1c3830c8b62484b02c8154703e4d4814179432ba628814b5f7a4818660d4b999
BLAKE2b-256 checksum
How to use checksums
d7c591f53b903c1b590d3589e4e538836005d3a107a84be5a5c71dc27013910e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for kbbi-mcp 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page