KeiSeiKit-1.0/_primitives/_rust/kei-mcp/README.md
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

106 lines
2.9 KiB
Markdown

# kei-mcp — Model Context Protocol server
`kei-mcp` exposes the KeiSeiKit atom registry over the [Model Context
Protocol](https://modelcontextprotocol.io/) so MCP-aware clients (Claude
Code, Cline, OpenClaw, etc.) can discover and call our 13 atoms + N
primitives as MCP tools, and read our skills as MCP resources.
## What you get
- **Tools** — every atom in `_primitives/_rust/*/atoms/*.md` becomes one
MCP tool. Tool name is the atom's full id (`<crate>::<verb>`), the
description is the first paragraph of the atom's body, and the input
schema is the JSON-Schema referenced by the atom's frontmatter.
- **Resources** — every `skills/<name>/SKILL.md` becomes one MCP resource
at `skill://<name>` returning the SKILL.md text on read.
- **Prompts** — placeholder list (empty) for now.
## Wire format
JSON-RPC 2.0 over stdio, line-delimited (one request per line, one
response per line). stdout carries protocol frames ONLY; everything else
(diagnostics, warnings) goes to stderr.
Supported methods: `initialize`, `tools/list`, `tools/call`,
`resources/list`, `resources/read`, `prompts/list`, `prompts/get`.
## Build
```sh
cargo build -p kei-mcp --release
# binary: target/release/kei-mcp
```
## Configuration (env)
| Variable | Default | What it does |
|---|---|---|
| `KEI_MCP_ATOMS_ROOT` | `_primitives/_rust` | Where to walk for `<crate>/atoms/*.md` |
| `KEI_MCP_SKILLS_ROOT` | `skills` | Where to walk for `<name>/SKILL.md` |
| `KEI_RUNTIME_BIN_DIR` | (unset) | Resolve `<crate>` binaries here before falling back to `$PATH` |
## Register with Claude Code
Add to `~/.claude/mcp_servers.json`:
```json
{
"kei": {
"command": "/absolute/path/to/kei-mcp",
"args": [],
"env": {
"KEI_MCP_ATOMS_ROOT": "/absolute/path/to/KeiSeiKit/_primitives/_rust",
"KEI_MCP_SKILLS_ROOT": "/absolute/path/to/KeiSeiKit/skills",
"KEI_RUNTIME_BIN_DIR": "/absolute/path/to/KeiSeiKit/_primitives/_rust/target/release"
}
}
}
```
## Register with Cline
Edit Cline's `cline_mcp_settings.json` (open via `Cline: Edit MCP
Settings` from the command palette):
```json
{
"mcpServers": {
"kei": {
"command": "/absolute/path/to/kei-mcp",
"args": [],
"env": {
"KEI_MCP_ATOMS_ROOT": "/absolute/path/to/KeiSeiKit/_primitives/_rust",
"KEI_MCP_SKILLS_ROOT": "/absolute/path/to/KeiSeiKit/skills"
}
}
}
}
```
## Register with OpenClaw
Add to `~/.openclaw/mcp.json`:
```json
{
"servers": {
"kei": {
"command": "/absolute/path/to/kei-mcp",
"args": [],
"env": {
"KEI_MCP_ATOMS_ROOT": "/absolute/path/to/KeiSeiKit/_primitives/_rust",
"KEI_MCP_SKILLS_ROOT": "/absolute/path/to/KeiSeiKit/skills"
}
}
}
}
```
## Manual smoke test
```sh
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05"}}' \
| ./kei-mcp
```
You should see one line of JSON on stdout containing `serverInfo.name: "kei-mcp"`.