MCP server for tteoki — a Korean rice cake desktop character that visualizes Claude Code session state
Project description
chibi-mcp (server)
MCP server for tteoki — a Korean rice cake (가래떡) desktop character that visualizes Claude Code session state.
The server has two jobs running together in one process:
- MCP server (stdio) — Claude Code / Codex calls these tools to interact with tteoki.
- WebSocket server (
ws://127.0.0.1:9876) — pushes state snapshots and events to the desktop app.
Install
pip install chibi-mcp
(For local development from this repo, see "Develop" below.)
Register with Claude Code
claude mcp add chibi -- chibi-mcp
Then launch the chibi-desktop app — it connects to the WebSocket and renders tteoki.
MCP tools
| Tool | Description |
|---|---|
get_pet_state |
Returns mood, system metrics (CPU/RAM/battery), counters, timing. Counts as a Claude interaction (may trigger a slice every N calls). |
pet_say(text) |
Make tteoki say something in a speech bubble. |
slice_now |
Force a slice (resets the lengthen cycle, fires a slice event). |
set_slice_interval(n) |
Change how often (every N Claude tool calls) the auto-slice fires. Default: 10. |
WebSocket protocol (server → desktop)
JSON messages broadcast to all connected desktop clients:
{ "type": "state",
"payload": {
"mood": "calm | panting | drowsy | lonely | happy | surprised | joyful",
"system": { "cpu_percent": 12.3, "ram_percent": 51.2, "battery_percent": 84.0, "battery_plugged": false },
"counters": { "calls_total": 23, "calls_since_slice": 3, "slice_interval": 10, "slices_today": 2 },
"timing": { "session_seconds": 1842, "idle_seconds": 7 }
}
}
{ "type": "say", "text": "오늘도 같이 코딩!" }
{ "type": "slice" }
State is pushed every 2 seconds. say and slice are pushed on demand.
Environment variables
| Var | Default | Purpose |
|---|---|---|
CHIBI_WS_HOST |
127.0.0.1 |
WebSocket bind host |
CHIBI_WS_PORT |
9876 |
WebSocket bind port |
CHIBI_LOG_LEVEL |
INFO |
Logging level |
Develop
cd server
python3.12 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
pytest
Run directly (without Claude Code) for the WebSocket side only:
CHIBI_LOG_LEVEL=DEBUG python -m chibi_mcp
The stdio MCP side will wait for a client on stdin/stdout, so to test the WebSocket alone, connect a simple ws client to ws://localhost:9876 while the process runs.
Design notes
- Counter resets only when the process restarts — intentional "today's-work" scope.
- All metrics are local — no network calls, no telemetry, no accounts.
- Slice trigger is Claude-call-based (not wall-clock) — measures actual work, not just time sitting.
See ../SPEC.md and ../CHARACTER_DESIGN.md for the broader project context.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chibi_mcp-0.1.3.tar.gz.
File metadata
- Download URL: chibi_mcp-0.1.3.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8b3af4f01594a00c3fb405c694ece13c3c966d928fd322c14c4372caf29b85c
|
|
| MD5 |
05e521842d0796968cef4e46e5a6ac0a
|
|
| BLAKE2b-256 |
b8195c5ed586917b9c3d8523df5472a779d8a8281a0c157572429eb18785d29d
|
Provenance
The following attestation bundles were made for chibi_mcp-0.1.3.tar.gz:
Publisher:
build.yml on soccz/chibi-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chibi_mcp-0.1.3.tar.gz -
Subject digest:
e8b3af4f01594a00c3fb405c694ece13c3c966d928fd322c14c4372caf29b85c - Sigstore transparency entry: 1572715857
- Sigstore integration time:
-
Permalink:
soccz/chibi-mcp@8d12f2a68e71afddf52a81e2b6f04fad9eaf7857 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/soccz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8d12f2a68e71afddf52a81e2b6f04fad9eaf7857 -
Trigger Event:
push
-
Statement type:
File details
Details for the file chibi_mcp-0.1.3-py3-none-any.whl.
File metadata
- Download URL: chibi_mcp-0.1.3-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a63131c1232839f30ad544de3db3b16d7b8432069effb4f17148f290595a1c36
|
|
| MD5 |
4e20b556589126d962d010df2259dd36
|
|
| BLAKE2b-256 |
ec9f69c8d035b4323b92eaf938724de2ef1dc92217fd7809920aded0e862675a
|
Provenance
The following attestation bundles were made for chibi_mcp-0.1.3-py3-none-any.whl:
Publisher:
build.yml on soccz/chibi-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chibi_mcp-0.1.3-py3-none-any.whl -
Subject digest:
a63131c1232839f30ad544de3db3b16d7b8432069effb4f17148f290595a1c36 - Sigstore transparency entry: 1572715905
- Sigstore integration time:
-
Permalink:
soccz/chibi-mcp@8d12f2a68e71afddf52a81e2b6f04fad9eaf7857 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/soccz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8d12f2a68e71afddf52a81e2b6f04fad9eaf7857 -
Trigger Event:
push
-
Statement type: