Back to the catalog

Bareun — Korean NLP & Spell/Grammar Checking

Korean NLP MCP server: morphological analysis, tokenization, spell & grammar checking (Bareun)

Open source Repository Open in the app JSON README (API)

About

Korean NLP MCP server: morphological analysis, tokenization, spell & grammar checking (Bareun)

Details

Kind
MCP servers
Topic
No topic detected
Publisher
ai.bareun
Origin
official
Category
ferramentas
Transport
http
Version
3.0.0
Last push
2026-08-21T14:11:26Z
Repository state
ativo
License
MIT
Added
2026-08-29 02:00:44
Updated
2026-08-29 03:00:09
Origin id
ai.bareun/bareun

README

# Bareun MCP Server — Korean NLP & Spell/Grammar Checking

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
[![smithery badge](https://smithery.ai/badge/gih2yun/bareunai)](https://smithery.ai/servers/gih2yun/bareunai)

> **바른(Bareun)** is a Korean natural-language platform. This is its **MCP (Model
> Context Protocol)** server — it lets any MCP-compatible AI tool (Claude, Cursor,
> VS Code, Claude Desktop, …) perform **Korean morphological analysis** and
> **spell/grammar correction** by calling Bareun as a tool.

Large language models still miss the subtle spacing, particle agreement, and
confusable-word rules of Korean. Plug Bareun in as an MCP tool and your agent can
hand off analysis and proofreading to a dedicated Korean engine, then use the
result to produce more accurate Korean output.

- **Hosted endpoint:** `https://api.bareun.ai/mcp`
- **Transport:** Streamable HTTP (JSON-RPC 2.0) — no SSE, no extra port, no install
- **Auth:** API key (`api-key` header or `Authorization: Bearer <key>`)
- **Get an API key:** https://bareun.ai

> The `/mcp` endpoint is available on the **spell-checker–included** build of Bareun
> (the morphological-analysis-only build does not expose `/mcp`). The same endpoint
> works on self-hosted/on-prem installs — just swap the host.

---

## What it looks like

**Spelling & spacing — `correct_grammar`** (real output from `https://api.bareun.ai/mcp`):

| | |
|---|---|
| **In** | 회의결과를 정리해서 내일까지 보내주시기 바람니다. |
| **Out** | 회의 결과를 정리해서 내일까지 보내 주시기 바랍니다. |

Every fix comes back as a block, so an agent can explain the edit instead of silently
rewriting the sentence:

| Original | Corrected | Category | Rule |
|---|---|---|---|
| 회의결과를 | 회의 결과를 | `SPACING` | compound noun spacing |
| 보내주시기 | 보내 주시기 | `SPACING` | auxiliary-verb spacing |
| 바람니다. | 바랍니다. | `TYPO` | misspelling |

**Morphological analysis — `analyze_syntax`** (`format: compact`):

| | |
|---|---|
| **In** | 나는 학교에 간다. |
| **Out** | `나/NP 는/JX 학교/NNG 에/JKB 가/VV ㄴ다/EF ./SF` |

**Homograph senses — `analyze_syntax` with `with_sense: true`** (_beta_): 배 in 배가 아프다
comes back with `senseNo: 1` and its dictionary definition — 사람이나 동물의 몸에서 …
가슴과 엉덩이 사이의 부위 (*belly*, probability 0.87), plus the Urimalsaem entry id — so the
agent knows which 배 it is reading.

---

## Tools

| Tool | What it does | Key inputs |
|---|---|---|
| `analyze_syntax` | Splits a sentence into words/morphemes and tags parts of speech (morphological analysis). | `text` (required), `auto_split_sentence`, `auto_spacing`, `auto_jointing`, `custom_dict_names`, `encoding`, `format` (`full`\|`compact`), `with_sense` |
| `analyze_syntax_raw` | Same analysis **without post-processing** (no compound-noun/verb splitting, no auto spacing, no custom dictionaries) — the raw model output. | `text` (required), `auto_split_sentence`, `encoding`, `format`, `with_sense` |
| `search_dict` | Searches the Urimalsaem Korean dictionary (~1.1M entries) by **jamo (phoneme-level) slot patterns** — conditions like "verbs whose stem ends in the ㅎ coda" or "words ending in -아지" that cannot be expressed with composed Hangul syllables. | `pattern` (required), `anchor` (`word`\|`prefix`\|`suffix`\|`contains`), `pos`, `std_only`, `with_definition`, `limit`, `count_only` |
| `tokenize` | Splits a sentence into word (token) units. | `text` (required), `auto_spacing`, `encoding` |
| `correct_grammar` | Corrects spelling/spacing and returns correction blocks. | `text` (required), `custom_dict_names`, + 9 boolean correction options |
| `list_pos_tags` | Returns the 47 part-of-speech tags Bareun uses (code · name · class). | _(none)_ |

**`correct_grammar` options** (all boolean, default off): `treat_as_title`,
`disable_split_sentence`, `disable_caret_spacing`, `disable_vx_spacing`,
`enable_limited_punctuation`, `disable_confusion`, `enable_cleanup_whitespace`,
`disable_typo_correction`, `enable_sentence_check`.

**`encoding`** controls the unit for morpheme offsets: `utf32` (default, code points
— matches Python), `utf16` (JS/Java), `utf8` (bytes — Go/C++).

**`with_sense` — homograph sense disambiguation (WSD, _beta_).** Korean writes many
unrelated words identically: 배 can be *belly*, *ship*, or *pear*. Set `with_sense: true`
on `analyze_syntax`/`analyze_syntax_raw` and each content morpheme carries a `sense`
object — the dictionary sense number, its Korean definition, the Urimalsaem entry id, and
the probability of the chosen sense among that word's candidate senses. It is **off by
default** (one extra model pass; responses are byte-identical to before when omitted),
and `format=compact` renders it inline as `배__002/NNG`. This feature is in **beta** and
ships officially with Bareun 3.1.0.

## Resources

| Resource URI | Contents | Auth |
|---|---|---|
| `bareun://pos-tags` | The 47 POS tags (code · name · class) — same data as `list_pos_tags` | API key |
| `bareun://server-info` | Server metadata — name · version · build · active tools/resources | API key |
| `bareun://custom-dicts` | Names of custom-dictionary domains registered for the key | **valid** API key |

---

## Quick start

> **Tip — register globally.** Most tools default to *project* scope (the server is
> only available in one project). To use Bareun across **all** your projects, register
> it at **global / user** scope as shown below.

### Claude Code

```bash
# -s user → global: available in every project
claude mcp add -s user --transport http bareun https://api.bareun.ai/mcp \
  --header "api-key: YOUR_API_KEY"
```

Omit `-s user` for project-local scope. Check with `claude mcp get bareun`.

### Cursor

Global: `~/.cursor/mcp.json` · Project: `<project>/.cursor/mcp.json`

```json
{
  "mcpServers": {
    "bareun": {
      "url": "https://api.bareun.ai/mcp",
      "headers": { "api-key": "YOUR_API_KEY" }
    }
  }
}
```

### VS Code

Global: run **MCP: Open User Configuration** · Project: `<project>/.vscode/mcp.json`

```json
{
  "servers": {
    "bareun": {
      "type": "http",
      "url": "https://api.bareun.ai/mcp",
      "headers": { "api-key": "YOUR_API_KEY" }
    }
  }
}
```

### Claude Desktop — `claude_desktop_config.json`

Claude Desktop bridges header-authenticated remote servers via `mcp-remote`
(Node.js required):

```json
{
  "mcpServers": {
    "bareun": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://api.bareun.ai/mcp",
        "--header", "api-key: YOUR_API_KEY"
      ]
    }
  }
}
```

### Cline — `cline_mcp_settings.json`

Open **MCP Servers → Configure MCP Servers** in Cline, then add:

```json
{
  "mcpServers": {
    "bareun": {
      "type": "streamableHttp",
      "url": "https://api.bareun.ai/mcp",
      "headers": { "api-key": "YOUR_API_KEY" },
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

All five tools are read-only (`readOnlyHint`), so listing them in `autoApprove` is
safe if you would rather not confirm every call.

### ChatGPT — Developer Mode

ChatGPT talks to Streamable HTTP servers directly — no directory review needed.
Turn on **Developer mode** (Settings → Apps & Connectors → Advanced), then **Create**
a connector:

- **URL:** `https://api.bareun.ai/mcp`
- **Authentication:** **OAuth** — Bareun runs its own OAuth 2.1 (PKCE) endpoint, so
  ChatGPT opens a login page where you paste your Bareun API key. (ChatGPT's connector
  dialog offers OAuth or no-auth; if your build also lets you set request headers, an
  `api-key` header works just as well.)

Menu wording and plan availability shift between ChatGPT releases — Developer mode is
an account-level toggle, and on Business/Enterprise a workspace owner enables it first.

### Test with MCP Inspector

```bash
npx @modelcontextprotocol/inspector
```

Set **Transport** to `Streamable HTTP`, **URL** to `https://api.bareun.ai/mcp`, and
add header `api-key: YOUR_API_KEY`.

---

## Example

```jsonc
// tools/call → analyze_syntax  (format: compact)
{ "text": "나는 학교에 간다.", "format": "compact" }
// → "나/NP 는/JX 학교/NNG 에/JKB 가/VV ㄴ다/EF ./SF"
```

## Links

- **Service:** https://bareun.ai
- **Docs:** https://bareun.ai/docs
- **MCP guide:** https://bareun.ai/docs/howtouse/mcp
- **API keys & usage:** https://bareun.ai/docs/howtouse/cloud-api

## License

The contents of this repository (documentation, registry manifests, examples) are
released under the [MIT License](./LICENSE). The Bareun engine itself is a
proprietary service operated by Baikal AI; access is governed by the bareun.ai
terms of service.

More