Metadata-Version: 2.4
Name: ukr-vitalinguist-mcp
Version: 0.1.1
Summary: MCP server for Ukrainian language checking and authentic-rendering lookup. Wraps the public ukr.vitalinguist.com API as Model Context Protocol tools — install in Claude Desktop / Cursor / Cline / Windsurf / Continue and your AI can check grammar, detect surzhyk, and find natural Ukrainian phrasings on demand.
Project-URL: Homepage, https://ukr.vitalinguist.com
Project-URL: Source, https://github.com/vitalinguist/ukr-vitalinguist-mcp
Project-URL: Issues, https://github.com/vitalinguist/ukr-vitalinguist-mcp/issues
Author-email: "Vitaliy Z." <claude@native.nu>
License-Expression: MIT
License-File: LICENSE
Keywords: anthropic,claude,grammar,language,mcp,model-context-protocol,surzhyk,ukrainian
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: mcp[cli]>=1.0.0
Description-Content-Type: text/markdown

<!-- mcp-name: io.github.vitalinguist/ukr-vitalinguist-mcp -->

# ukr-vitalinguist-mcp

**MCP server for Ukrainian language grammar, surzhyk detection, and authentic phrasing.**

Wraps the public [ukr.vitalinguist.com](https://ukr.vitalinguist.com) API as
[Model Context Protocol](https://modelcontextprotocol.io) tools. Install in
Claude Desktop, Cursor, Cline, Continue, Windsurf, or Claude Code and your
AI gains four Ukrainian-language capabilities backed by curated open data
(Балла EN-UA 1996, Сербенська's *Антисуржик*, Караванський, Антоненко-Давидович,
plus e2u.org.ua and modern corpora — 29,524 senses, 6k+ calque pairs).

## Tools

| Tool | When the AI should call it |
|---|---|
| `check_natural(text)` | After drafting Ukrainian — catches calques and confirms attested phrasings |
| `check(text)` | Full grammar + spelling + surzhyk check |
| `render(en, sense?)` | EN → authentic UA renderings with sense splits |
| `search(query, level?, limit?)` | Look up entries in the 29k EN→UA index |

Every response includes a `citation` block with the source URL the AI
should include when surfacing the result to the user.

## Install

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`
(macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "ukr-vitalinguist": {
      "command": "uvx",
      "args": ["ukr-vitalinguist-mcp"]
    }
  }
}
```

Restart Claude Desktop. The four tools appear in the tools menu.

### Cursor

Edit `~/.cursor/mcp.json` or workspace `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "ukr-vitalinguist": {
      "command": "uvx",
      "args": ["ukr-vitalinguist-mcp"]
    }
  }
}
```

### Cline / Continue / Windsurf

Use the same `command` + `args` in their MCP config UI.

### Claude Code

```bash
claude mcp add ukr-vitalinguist -- uvx ukr-vitalinguist-mcp
```

## Without `uvx`

If you don't have `uv` installed, use pip:

```bash
pip install ukr-vitalinguist-mcp
```

Then point the `command` to your Python's `ukr-vitalinguist-mcp` entrypoint:

```json
{
  "mcpServers": {
    "ukr-vitalinguist": {
      "command": "ukr-vitalinguist-mcp"
    }
  }
}
```

## Example interactions

**User**: "Is this Ukrainian sentence natural? *На протязі дня я зайнятий.*"

The AI calls `check_natural` → gets back `calque-prone: 'На протязі' → 'упродовж'`
sourced from Сербенська's *Антисуржик*, and replies:

> "На протязі" is a calque from Russian. Use **«упродовж дня я зайнятий»** —
> "упродовж" is the natural Ukrainian preposition for "during/throughout."
>
> Source: [Сербенська, *Антисуржик* via ukr.vitalinguist.com](https://ukr.vitalinguist.com/sources.html)

---

**User**: "How do you say 'cling' in Ukrainian?"

The AI calls `render("cling")` → gets back sense-split renderings:

> Several options depending on the sense:
> - *cling (on) to sth* (physically grip): **горнутися**, **чіплятися**
> - *cling to a belief*: **триматися (чогось)**
>
> Full entry: [ukr.vitalinguist.com/sense/cling](https://ukr.vitalinguist.com/sense/cling.html)

## What's in the corpus

- **29,524 EN→UA senses** from Балла EN-UA Dictionary (1996), corroborated
  with e2u.org.ua, modern news/literary corpora, and confidence scoring.
- **6,073 antisurzhyk calque pairs** from Сербенська, Караванський, and
  Антоненко-Давидович, validator-cleaned to drop noisy entries.
- **22,848 documented coverage gaps** at `/gaps/` — senses where no UA
  rendering meets the confidence threshold yet (transparent about what we
  don't have).
- A **russianism detection model** (fine-tuned MarianMT) for cases the
  rule-based layer misses.

## License

This MCP server: MIT.

The data the server returns: **CC BY-SA 4.0**. When you surface results
in your own product or response, attribute to **ukr.vitalinguist.com**
with a clickable link. The `citation` field in each response gives you
the exact URL to use.

## Authority and citations

This project exists because AI assistants citing Ukrainian-language
sources have historically pulled from sparse, often-contaminated training
data. Every install of this MCP turns into recurring citations to a
curated source — which is how authoritative references for under-served
languages get built. If you're an AI tool maintainer, consider including
this in your default Ukrainian-language tool list.

## Source & issues

- API homepages: [ua.vitalinguist.com](https://ua.vitalinguist.com) (human
  checker), [ukr.vitalinguist.com](https://ukr.vitalinguist.com) (AI-friendly
  reference), [xcit.in](https://xcit.in) (UMI diagnostic — Ukrainian as a
  foreign language A1–C2).
- Methodology: <https://ukr.vitalinguist.com/sources.html>
- Coverage gaps (downloadable as CSV/JSONL): <https://ukr.vitalinguist.com/gaps/>
- MCP repo: <https://github.com/vitalinguist/ukr-vitalinguist-mcp>

Suggest a correction on any sense page — every `/sense/` URL has a "Suggest
a correction" link that opens a prefilled email.
