stackchan-mcp 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/PKG-INFO +2 -2
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/README.md +1 -1
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/pyproject.toml +1 -1
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/stdio_server.py +10 -3
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/uv.lock +1 -1
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/.env.example +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/.gitignore +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/LICENSE +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/__init__.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/__main__.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/audio_stream.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/capture_server.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/cli.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/esp32_client.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/gateway.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/handlers/__init__.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/handlers/audio.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/handlers/camera.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/handlers/robot.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/mcp_router.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/protocol.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/server.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/stackchan_mcp/tools.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/conftest.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_capture_server.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_esp32_client.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_gateway.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_mcp_router.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_protocol.py +0 -0
- {stackchan_mcp-0.1.0 → stackchan_mcp-0.2.0}/tests/test_stdio_server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stackchan-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Two-faced MCP gateway for StackChan (xiaozhi-esp32): bridges stdio MCP clients to the ESP32 over WebSocket + HTTP.
|
|
5
5
|
Project-URL: Homepage, https://github.com/kisaragi-mochi/stackchan-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/kisaragi-mochi/stackchan-mcp
|
|
@@ -163,7 +163,7 @@ Same shape, under `mcpServers`.
|
|
|
163
163
|
| `move_head(yaw, pitch, speed?)` | Drive yaw + pitch servos |
|
|
164
164
|
| `get_head_angles` | Read current yaw + pitch servo angles |
|
|
165
165
|
| `get_touch_state` | Touch sensor state (press/release/stroke) |
|
|
166
|
-
| `set_avatar(face)` | Switch avatar expression (`idle` / `happy` / `thinking` / `sad` / `surprised` / `embarrassed`) |
|
|
166
|
+
| `set_avatar(face)` | Switch avatar expression (`idle` / `happy` / `thinking` / `sad` / `surprised` / `embarrassed`), or `off` to hide the avatar and disable blink so the underlying xiaozhi-esp32 screens (WiFi config UI, OTA, settings) are visible. A subsequent `set_avatar(<other face>)` brings it back and restores blink. |
|
|
167
167
|
| `set_blink(state)` | Blink animation on/off |
|
|
168
168
|
| `set_mouth(state)` | Mouth shape (`closed` / `half` / `open` / `e` / `u`) |
|
|
169
169
|
| `check_vm_en` | Read PY32 VM EN GPIO state (servo power supply diagnostic) |
|
|
@@ -132,7 +132,7 @@ Same shape, under `mcpServers`.
|
|
|
132
132
|
| `move_head(yaw, pitch, speed?)` | Drive yaw + pitch servos |
|
|
133
133
|
| `get_head_angles` | Read current yaw + pitch servo angles |
|
|
134
134
|
| `get_touch_state` | Touch sensor state (press/release/stroke) |
|
|
135
|
-
| `set_avatar(face)` | Switch avatar expression (`idle` / `happy` / `thinking` / `sad` / `surprised` / `embarrassed`) |
|
|
135
|
+
| `set_avatar(face)` | Switch avatar expression (`idle` / `happy` / `thinking` / `sad` / `surprised` / `embarrassed`), or `off` to hide the avatar and disable blink so the underlying xiaozhi-esp32 screens (WiFi config UI, OTA, settings) are visible. A subsequent `set_avatar(<other face>)` brings it back and restores blink. |
|
|
136
136
|
| `set_blink(state)` | Blink animation on/off |
|
|
137
137
|
| `set_mouth(state)` | Mouth shape (`closed` / `half` / `open` / `e` / `u`) |
|
|
138
138
|
| `check_vm_en` | Read PY32 VM EN GPIO state (servo power supply diagnostic) |
|
|
@@ -150,8 +150,11 @@ def create_server() -> Server:
|
|
|
150
150
|
name="set_avatar",
|
|
151
151
|
description=(
|
|
152
152
|
"Switch the avatar face shown on the LCD. "
|
|
153
|
-
"
|
|
154
|
-
"
|
|
153
|
+
"Choose one of the supported faces; this is the robot's "
|
|
154
|
+
"actual visible expression, not just a label. "
|
|
155
|
+
"Pass 'off' to hide the avatar and disable blink, exposing the "
|
|
156
|
+
"underlying xiaozhi-esp32 screens (WiFi config UI, OTA, settings); "
|
|
157
|
+
"any other face brings the avatar back and restores blink."
|
|
155
158
|
),
|
|
156
159
|
inputSchema={
|
|
157
160
|
"type": "object",
|
|
@@ -165,8 +168,12 @@ def create_server() -> Server:
|
|
|
165
168
|
"sad",
|
|
166
169
|
"surprised",
|
|
167
170
|
"embarrassed",
|
|
171
|
+
"off",
|
|
168
172
|
],
|
|
169
|
-
"description":
|
|
173
|
+
"description": (
|
|
174
|
+
"One of: idle, happy, thinking, sad, surprised, "
|
|
175
|
+
"embarrassed, off."
|
|
176
|
+
),
|
|
170
177
|
},
|
|
171
178
|
},
|
|
172
179
|
"required": ["face"],
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|