No description
  • TypeScript 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-04 14:31:48 -04:00
src Initial commit 2026-06-20 17:34:56 +07:00
tests Initial commit 2026-06-20 17:34:56 +07:00
.gitignore Add README with install, MCP config, and tool reference 2026-06-20 03:51:52 -07:00
package-lock.json Initial commit 2026-06-20 17:34:56 +07:00
package.json Initial commit 2026-06-20 17:34:56 +07:00
README.md Add README with install, MCP config, and tool reference 2026-06-20 03:51:52 -07:00
tsconfig.json Initial commit 2026-06-20 17:34:56 +07:00
tsup.config.ts Initial commit 2026-06-20 17:34:56 +07:00

aksara-mcp

MCP server that gives AI agents bidirectional transliteration between Latin-script Javanese and Aksara Jawa (Hanacaraka), powered by aksara-ts.

lamun sira nginguk ucing   →  ꦭꦩꦸꦤ꧀ꦱꦶꦫꦔꦶꦔꦸꦏꦸꦕꦶꦁ
ꦲꦤꦕꦫꦏ                  →  hanacaraka

Aksara Jawa is essentially absent from LLM training data. This server lets agents read manuscript OCR output, transliterate user input, and work with Javanese script in both directions without guessing at rare Unicode codepoints.

Tools

Tool Direction Description
to_aksara Latin → Aksara Convert Latin-script Javanese to Hanacaraka
from_aksara Aksara → Latin Decode Aksara Jawa back to Latin script

to_aksara

Parameter Type Default Description
text string — Latin-script Javanese text
spaces boolean false Preserve spaces in the output
explicit_vowels boolean false Use standalone vowel letters (ꦄ ꦆ ꦈ ꦌ ꦎ) for vowels without a preceding consonant

from_aksara

Parameter Type Description
text string Aksara Jawa text to decode

Decoding handles murda consonants, retroflex letters (ṭ, ḍ), cakra (medial r), pengkal (medial y), and standalone vowel letters.

Install

npm install aksara-mcp

Or clone and build locally:

git clone https://github.com/thesimonharms/aksara-mcp.git
cd aksara-mcp
npm install
npm run build

Requires Node.js 18+.

MCP configuration

Cursor / Claude Desktop

{
  "mcpServers": {
    "aksara": {
      "command": "node",
      "args": ["/absolute/path/to/aksara-mcp/dist/index.js"]
    }
  }
}

If installed globally or via npx:

{
  "mcpServers": {
    "aksara": {
      "command": "npx",
      "args": ["aksara-mcp"]
    }
  }
}

Examples

Latin → Aksara

{ "text": "hanacaraka" }

→ ꦲꦤꦕꦫꦏ

{ "text": "aji saka", "spaces": true }

→ ꦲꦗꦶ ꦱꦏ

{ "text": "aksara", "explicit_vowels": true }

→ ꦄꦏ꧀ꦱꦫ

Aksara → Latin

{ "text": "ꦲꦤꦕꦫꦏ" }

→ hanacaraka

{ "text": "ꦧꦸꦟ꧀ꦝꦼꦭ꧀" }

→ bunḍel

Development

npm run build   # bundle server to dist/
npm start       # run on stdio
npm test        # build + run cobasaja tests

Tests live in tests/ and use cobasaja to spawn the server over stdio and assert tool behaviour end-to-end.

Known limitations

Inherited from aksara-ts:

  • ꦲ ambiguity — the glyph is both consonant h and the carrier for standalone vowels. from_aksara on ꦲꦗꦶ returns haji, not aji. Use explicit_vowels: true when encoding if disambiguation matters.
  • Spaces — Aksara Jawa traditionally omits word boundaries. Pass spaces: true to to_aksara if you need spaces preserved for round-tripping.

License

MIT © Simon Harms