datuma_k

Official registry Other

Query, validate, preview, and generate source from *.dtct data contracts and *.ngin templates.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package @marthvon/datuma-k-mcp
Claude Code
claude mcp add datuma-k -e 'DATUMA_K=<DATUMA_K>' -- npx -y @marthvon/datuma-k-mcp@1.0.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "datuma-k": {
            "command": "npx",
            "args": [
                "-y",
                "@marthvon/datuma-k-mcp@1.0.0"
            ],
            "env": {
                "DATUMA_K": "<DATUMA_K>"
            }
        }
    }
}

Environment variables

  • DATUMA_K Absolute path to the datuma_k binary. Omit if datuma_k is already on PATH.

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. datuma_k
  2. Install
  3. Quick start
  4. Commands
  5. What run does
  6. Example
  7. Developers
  8. License

datuma_k

A data contract (*.dtct) plus templates (*.ngin) that generate source. Declare the shape once; each platform gets its own types, validation, and UI instead of copying fields by hand.

An API backend and a React client both need the same records: capacity 1–500, starts_at a datetime, title required. Without a shared contract those rules are rewritten in Pydantic, Zod, forms, and serializers, and they drift. datuma_k keeps the shape in *.dtct. Shared attributes (min, max, local, required) mean the same thing everywhere. ngin turns them into different code on purpose: Pydantic Field(ge=, le=) on Python, Zod .min().max() on TypeScript.

Guide: guide/README.md — getting started, contracts, templates, the scripting language, dk queries, and generation.

Install

The command is datuma_k. The package name is datuma-k. The Homebrew tap and Scoop bucket use datuma_k (underscore) — brew tap marthvon/datuma-k clones a repo that does not exist.

More detail: guide/getting-started.md.

macOS (and Linux with Homebrew) — Homebrew 6 ignores untrusted taps, so brew install datuma-k after a bare brew tap will not find it:

brew install marthvon/datuma_k/datuma-k

If that still fails after an earlier brew tap, run brew untap marthvon/datuma_k first.

Fedora

sudo dnf copr enable marthvon/datuma-k
sudo dnf install datuma-k

Debian / Ubuntu — no apt repo:

# x86_64
curl -fsSL -o /tmp/datuma-k.deb https://github.com/marthvon/datuma_k/releases/download/v1.0.0/datuma-k_1.0.0_amd64.deb && sudo apt install /tmp/datuma-k.deb && rm -f /tmp/datuma-k.deb

# arm64
curl -fsSL -o /tmp/datuma-k.deb https://github.com/marthvon/datuma_k/releases/download/v1.0.0/datuma-k_1.0.0_arm64.deb && sudo apt install /tmp/datuma-k.deb && rm -f /tmp/datuma-k.deb

Alpine — musl .apk (unsigned). On Docker Alpine, install curl first; skip sudo if you are root. If a previous glibc apk is installed, apk del datuma-k first.

apk add --no-cache curl
curl -fsSL -o /tmp/datuma-k.apk https://github.com/marthvon/datuma_k/releases/download/v1.0.0/datuma-k_1.0.0_x86_64.apk && apk add --allow-untrusted /tmp/datuma-k.apk && rm -f /tmp/datuma-k.apk

aarch64: datuma-k_1.0.0_aarch64.apk. The command is datuma_k.

Windows

scoop bucket add datuma_k https://github.com/marthvon/scoop-datuma_k
scoop install datuma-k

Direct binary — download a binary or .rpm from the same release page, rename to datuma_k (or datuma_k.exe on Windows), and put it on PATH. On Fedora without Copr: sudo dnf install ./datuma-k-*-1.x86_64.rpm.

From source: cargo build --release → target/release/datuma_k.

Quick start

datuma_k start myapp
cd myapp

start creates data/, engine/, definition/, a .env, data/keywords.md, and a starter definition/cases.def.ngin. The .env is:

ROOT_DIRECTORY=.
DTCT_DIRECTORY=data
NGIN_DIRECTORY=engine
DEF_DIRECTORY=definition

Add *.dtct under data/, *.ngin under engine/, and extra *.def.ngin under definition/ as needed. Document every contract name in data/keywords.md. Then generate from this project directory (not $HOME or / — if a command asks, type yes):

datuma_k run

Commands

datuma_k start <project-name>
datuma_k check
datuma_k catalog [--trait NAME] [--model NAME] [--field NAME] [--attribute NAME] [--type NAME]
datuma_k preview
datuma_k run

start takes a single directory name (no / or \). check, catalog, and preview print JSON and do not write generated files. catalog filters match dk include filters. run commits planned files through dkcache.

check also requires data/keywords.md: every model, trait, type, attribute, and field name needs a table row with kind, description, purpose, and platforms (api_server, web_frontend, mobile_frontend). See mcp/resources/keywords.md.

Agents: install the MCP in mcp/ instead of wrapping these commands by hand.

What run does

  1. Load directory paths from .env (ROOT_DIRECTORY, DTCT_DIRECTORY, NGIN_DIRECTORY, DEF_DIRECTORY).
  2. Parse every *.dtct, *.def.ngin, and *.ngin under those trees.
  3. Plan generated files from the templates.
  4. Commit them through dkcache.

A .dkcache file sits next to generated output. Text between generated spans is kept across runs. Edits inside a generated snippet are overwritten the next time you run.

Example

tests/example is a FastAPI + Vite React app generated from one contract (Event and Venue). How to generate and start those servers: tests/example/README.md.

cargo test regenerates the example and checks the emitted files. It does not start uvicorn or npm.

Developers

Crate areaRole
src/coreLanguage, parser, interpreter
src/dtctData contracts (*.dtct)
src/nginTemplates (*.ngin, *.def.ngin)
src/dkcacheReconcile and commit generated files
src/projectLoad, plan, catalog, check, preview
cargo test

Parser internals and module notes: docs/README.md.

MCP (stdio, calls this binary): mcp/README.md.

License

Copyright (C) 2026 mamertvonn

datuma_k (the engine, MCP, grammars, and helpers shipped with this repository) is licensed under the GNU Affero General Public License v3.0. See LICENSE.md.

Your own *.dtct and *.ngin files, and the source datuma_k run generates from them, are yours. AGPL does not apply to that output just because you used the binary.

Distributing a modified datuma_k, including offering it as a network service, must stay under AGPL.

Frequently asked questions

What is datuma_k?

Query, validate, preview, and generate source from *.dtct data contracts and *.ngin templates.

How do I install datuma_k?

It runs on your machine. In Claude Code: claude mcp add datuma-k -e 'DATUMA_K=<DATUMA_K>' -- npx -y @marthvon/datuma-k-mcp@1.0.0. For other clients, paste the JSON configuration from this page into their MCP settings.

Does datuma_k need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is datuma_k open source?

Yes. Its code is on GitHub under the AGPL-3.0 license.

Who maintains datuma_k?

It is published by marthvon. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.