Xiaozhi Desktop MCP
Allows opening or closing the Google Chrome app on macOS via app control.
Provides tools to save memories, append notes, manage daily notes, search, and read recent notes within an Obsidian vault.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Xiaozhi Desktop MCPSave a memory to Obsidian: meeting recap"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Xiaozhi Desktop MCP
把小智接到本机 Mac 工作流的桌面 MCP 服务
从 Obsidian 记忆、App 控制,到 Claude Code / Codex 可见会话、项目别名、待确认动作和多语言 HTTP 接入。
一套面向语音助手、桌面自动化和本地 AI 编程工作流的安全工具层。
中文 · API · Client Examples · Operations · Security
License: MIT · Version: 1.0.0 · MCP / HTTP Desktop Workflow
一个语音指令进来,Obsidian 记忆、Claude Code 会话、项目任务、状态查询和安全确认出去。
它不是新的小智服务器,也不是任意 shell 执行器,而是一个受白名单约束、可被 Java / Python / Go 调用的本机桌面工具服务。
Voice / Client
-> API v1 Dispatch
-> Safety Checks
-> Obsidian / App / Claude Code / Pending Action
-> Spoken Result为什么需要它
小智能听懂你说什么,但真正接入桌面工作流时,难点不是“调用一个命令”:
语音误识别可能打开或关闭错误 App
Claude Code / Codex 只能在允许项目里启动
Obsidian 写入必须限制在 vault 内
中风险动作需要先确认,而不是直接执行
Java、Python、Go 客户端不应该各自适配一堆散乱路由
桌面会话长期运行后需要自检、清理和可观测状态
Xiaozhi Desktop MCP 把这些约束编码成一套稳定接口:
统一 HTTP API
-> 白名单边界
-> 语音友好返回
-> 待确认动作
-> 多语言接入
-> 本机桌面执行Related MCP server: local-mmcp
核心能力
能力 | 覆盖范围 |
API v1 |
|
多语言接入 | Java、Python、Go 或任意 HTTP 客户端 |
Obsidian | 保存记忆、追加笔记、每日笔记、搜索、读取最近记忆 |
Claude Code / Codex | 打开项目、发送任务、查看状态、继续、聚焦、停止、切模型 |
项目别名 | 从 |
App 控制 | 打开或关闭 |
待确认动作 | 中风险动作先入队,确认后执行 |
自检与目录 | 环境自检、配置摘要、工具目录、会话清理 |
30 秒开始
git clone git@github.com:jijiutong/xiaozhi-desktop-mcp.git
cd xiaozhi-desktop-mcp
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
cp .env.example .env编辑 .env,至少确认:
OBSIDIAN_VAULT=/path/to/your/obsidian-vault
DEFAULT_PROJECT_ROOT=/path/to/your/project
CC_ALLOWED_PROJECTS=/path/to/your/project
ALLOWED_APPS=Obsidian,Terminal,Google Chrome启动 HTTP 服务:
xiaozhi-desktop-http检查服务:
curl http://127.0.0.1:8765/api/v1/health多语言统一调用
推荐所有新客户端使用:
POST /api/v1/dispatch请求:
{
"request_id": "client-001",
"action": "list_projects",
"params": {}
}响应:
{
"success": true,
"request_id": "client-001",
"action": "list_projects",
"spoken_message": "当前有 1 个允许的项目。",
"error_spoken_message": "",
"error": "",
"data": {}
}客户端建议:
成功时读
spoken_message失败时读
error_spoken_message调试信息读
data日志串联使用
request_id
Java 接入
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DesktopMcpDemo {
public static void main(String[] args) throws Exception {
String body = """
{
"request_id": "java-demo-1",
"action": "list_projects",
"params": {}
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8765/api/v1/dispatch"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Python 接入
import requests
payload = {
"request_id": "python-demo-1",
"action": "ask_cc_project",
"params": {
"project": "your-project-alias",
"text": "帮我检查这个项目的 README。"
},
}
response = requests.post(
"http://127.0.0.1:8765/api/v1/dispatch",
json=payload,
timeout=10,
)
data = response.json()
print(data["spoken_message"] if data["success"] else data["error_spoken_message"])Go 接入
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{
"request_id": "go-demo-1",
"action": "list_projects",
"params": {}
}`)
resp, err := http.Post(
"http://127.0.0.1:8765/api/v1/dispatch",
"application/json",
bytes.NewReader(body),
)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
}常用 Action
任务 | Action |
保存一条记忆 |
|
列出允许项目 |
|
按项目名交给 Claude Code |
|
查看 Claude Code 状态 |
|
让 Claude Code 继续 |
|
停止 Claude Code |
|
搜索 Obsidian |
|
写入每日笔记 |
|
创建待确认动作 |
|
确认待执行动作 |
|
桌面环境自检 |
|
查看工具目录 |
|
查看完整 action 列表:
curl http://127.0.0.1:8765/api/v1/actions典型语音
小智,记一下:这个项目先做成桌面 MCP。
小智,打开这个项目的 Claude Code。
小智,把这个任务交给 cc:检查 README 是否清楚。
小智,看看 cc 现在卡在哪。
小智,搜索 Obsidian 里关于桌面 MCP 的笔记。
小智,创建一个待确认动作,让 cc 继续。安全边界
边界 | 说明 |
任意 shell | 不提供 |
App | 只能操作 |
项目 | 只能进入 |
Obsidian | 只能访问 |
中风险动作 | 走 pending action |
会话状态 | 仅保存进程内状态,重启清空 |
目录结构
路径 | 作用 |
| 多语言统一 dispatch API |
| FastAPI HTTP 服务 |
| MCP stdio 服务 |
| Obsidian、App、cc、项目、待确认动作等工具 |
| API 协议 |
| Java / Python / Go 示例 |
| 启动、检查和排障 |
| 安全模型 |
文档
文档 | 适合谁 |
接入方、后端服务、SDK 作者 | |
Java / Python / Go 客户端 | |
部署、启动、排障 | |
关心边界和风险的人 | |
小智服务接入 | |
版本变化 |
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jijiutong/xiaozhi-desktop-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server