Skip to main content
Glama
README.md
# ourword-mcp

**403 deep reads on 171 figures and classics across 2,600 years, indexed by the
situation you're actually in.** An MCP server with no search — the client's
model does the matching.

## Why there is no search in here

Someone says: *"my boss keeps changing priorities."*

The entry in the library that answers it reads:
*"Five things are on fire and I am spread across all five."*

**Those two sentences share zero words.** Keyword search cannot get from one to
the other; the model calling this server can, instantly. So the server stopped
trying. It exposes the index in two levels and lets the model pick:

```
browse()                              → 121 situation groups
browse(group="Everything is urgent…") → the specific wordings, each with chapters
read_chapter(url)                     → full text
```

That design is not a preference. The first version *was* a literal search: on
real situation sentences it returned **0 hits**, top score 0.11. The scoring
function had its denominator rewritten twice before the conclusion became
obvious — nothing belonged in that position at all.

`search()` still exists as a fallback for when the model cannot pick. It is
documented as a fallback, in the tool description the model reads.

## Install

```bash
claude mcp add ourword -- uvx ourword-mcp
```

Before that lands on PyPI, straight from the repo — same one line:

```bash
claude mcp add ourword -- uvx --from git+https://github.com/woowoeth/ourword-mcp ourword-mcp
```

Or from source, no packaging involved — it is one file and the standard library:

```bash
claude mcp add ourword -- python3 /path/to/ourword_mcp.py
```

Nothing to clone: the index is fetched from the web and cached locally for a day.

## The three tools

| tool | what it does |
|---|---|
| `browse(lang, group)` | no `group`: list the situation groups. With `group`: the specific wordings under it, each with the chapters that answer it. |
| `read_chapter(url)` | full text of one chapter. Use the url `browse` gave you. |
| `search(query, limit)` | literal fallback. Prefer `browse`. |

`lang` is `zh` (default) or `en`.

## Chinese and English are not translations of each other

The same **403 chapters**, entered through a different set of doors:
**112 situation groups / 655 wordings** in Chinese, **121 / 629** in English.
What an English speaker says to themselves at 2am is not a translation of what
a Chinese speaker says — so the two indexes grew separately. The Chinese side
has situations about social-insurance gaps and the graduate exam; the English
side has its own.

## What it will not do

Written into the tool descriptions, because that is what the model reads:

- **Only what is in the library.** Nothing matches → say so. Do not invent.
- **Every item carries a URL.** An answer that cannot point back to the source
  does not get written.
- **Not personal medical, legal or financial advice.** How people before you
  thought about such questions, yes. What you should do, no.

Ask it about a cat losing fur and it returns `found: 0` and tells the model, in
so many words, not to make something up.

## Also available as an Agent Skill

`tools/skill/ourword-en/` in the repo — for clients without MCP. It reads the
same index over plain HTTP (`https://ourword.ai/en/llms.txt`), so it works with
no configuration at all. MCP is for people who can wire up a server; the Skill
is for everyone else.

## Privacy

No telemetry. The server fetches two public JSON files and caches them in
`~/.cache/ourword-mcp`. Install counts come from public CDN and PyPI numbers,
not from anything this program reports.

MIT. Source: <https://github.com/woowoeth/woowoeth.github.io/tree/main/tools/mcp>

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct role: browse navigates by semantic category, search is an explicit literal fallback for when browse fails, and read_chapter retrieves full text by URL. The descriptions even specify usage order, so an agent is unlikely to misselect.

Naming Consistency4/5

All names are lowercase imperative verbs and clearly indicate actions. The only minor inconsistency is that read_chapter follows a verb_noun pattern while browse and search are bare verbs, but this is readable and does not create confusion.

Tool Count5/5

Three tools is well-scoped for this focused read-only reference server. Each tool earns its place: semantic browsing, literal search fallback, and full-text retrieval cover the essential workflow without unnecessary bloat.

Completeness5/5

The server's stated purpose is retrieving curated situational wisdom, and the tools cover the complete read-only journey: list/select categories, inspect entries, retrieve full chapters, and fall back to literal search. No create/update/delete operations are expected for this domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues