使用说明
小智mcp
A. 模型上下文协议(MCP) 服务器提供一套支持人工智能的工具——天气、杂货清单、加密货币/货币汇率、日历、燃料价格、电报消息等。支持 标准, 可流式传输HTTP,以及 WebSocket管道 运输。
由...管理 紫外线.
快速入门
uv sync
uv run python tools.py # stdio (single server)
uv run python run_http.py # HTTP on 0.0.0.0:8000
uv run python mcp_pipe.py # stdio ↔ WebSocket pipe (Docker default)
工具
工具已在中注册 tools.py。需要凭据的工具包括 自动禁用 当相关的envvar或配置文件丢失时。
| 工具 | 描述 | 需要 |
|---|---|---|
calculator |
计算Python数学表达式(math/random 可用) |
-- |
weather |
按城市划分的当前天气(OpenWeatherMap) | OPENWEATHER_API_KEY |
weather_plan |
多日天气预报,包括户外得分和服装建议 | OPENWEATHER_API_KEY |
get_currency_rates |
乌克兰国家银行公布的美元、欧元、黄金官方汇率 | -- |
get_crypto_prices |
通过CoinGecko以美元计价的BTC、ETH、SOL现货价格 | -- |
get_okko_fuel_price_a95 |
OKKO加油站目前的A-95汽油价格(UAH) | -- |
add_product / remove_product / list_products |
内存产品列表 | -- |
add_grocery_item / remove_grocery_item / list_grocery_items / complete_grocery_item / update_grocery_spec |
带上!购物清单管理 | BRING_EMAIL + BRING_PASSWORD |
list_google_calendars / get_google_calendar_events |
谷歌日历读取权限 | 凭据位于 ~/.config/xiaozhi/credentials.json |
list_outlook_calendars / get_outlook_calendar_events |
Microsoft Outlook/Teaks日历读取权限 | O365_CLIENT_ID + O365_CLIENT_SECRET |
配置
复制 .env.example 到 .env 并填写您需要的值:
cp .env.example .env
| 变量 | 描述 |
|---|---|
MCP_ENDPOINT |
WebSocket端点由使用 mcp_pipe.py (例如。 ws://host:port/path) |
OPENWEATHER_API_KEY |
OpenWeatherMap 免费层密钥 |
TAVILY_API_KEY |
塔维利 搜索API密钥 |
BRING_EMAIL / BRING_PASSWORD |
带上!杂货应用程序凭据 |
O365_CLIENT_ID / O365_CLIENT_SECRET |
Outlook的Azure应用程序注册凭据 |
O365_TENANT_ID |
(可选) Azure租户ID(默认值: common) |
运输方式
stdio(默认,克劳德桌面/光标)
uv run python tools.py
mcp_config.json 例子:
{
"mcpServers": {
"xiaozhi": {
"type": "stdio",
"command": "python",
"args": ["tools.py"]
}
}
}
可流式传输的HTTP
MCP_HOST=0.0.0.0 MCP_PORT=8000 uv run python run_http.py
WebSocket管道
将本地stdio MCP服务器连接到远程WebSocket端点(用于Docker部署):
MCP_ENDPOINT=ws://your-server:port/path uv run python mcp_pipe.py
码头工人
提供了两张图片:
| 图片 | 切入点 | 目的 |
|---|---|---|
Dockerfile |
mcp_pipe.py |
WebSocket管道——将本地服务器连接到远程WS端点 |
Dockerfile.http |
run_http.py |
HTTP传输——暴露MCP streamable-http 在8000端口 |
使用Docker Compose运行
cp .env.example .env # fill in your values
docker compose up -d
xiaozhi-mcp--WebSocket管道服务(读取MCP_ENDPOINT从.env)xiaozhi-mcp-http--端口上的HTTP服务8000,安装~/.config/xiaozhi获取Google日历凭据
谷歌日历设置
- 在中创建项目 谷歌云控制台.
- 启用 谷歌日历API.
- 创建 OAuth 2.0凭据 (桌面应用程序)。
- 下载
credentials.json并将其放置在:~/.config/xiaozhi/credentials.json - 首次运行时,OAuth流将在浏览器中打开并写入
token.json到同一个文件夹。
Outlook/团队日历设置
- 在以下网址注册应用程序 Azure 门户 → Azure Active Directory→ 应用程序注册。
- 添加
Calendars.ReadMicrosoft Graph下的委托权限。 - 集
O365_CLIENT_ID和O365_CLIENT_SECRET在.env.
电报模块设置
Telegram模块允许您从自己的帐户向白名单联系人发送消息。
1.获取Telegram API证书
- 首选https://my.telegram.org/apps并登录。
- 点击 “创建应用程序” 并填写字段。
- 复制您的
api_id和api_hash.
2.配置
cp telegram_config.json.template telegram_config.json
{
"api_id": "12345678",
"api_hash": "abcdef1234567890abcdef1234567890",
"phone": "+1234567890",
"allowed_contacts": []
}
3.获取联系人
import asyncio
from xiaozhi_mcp.telegram import get_all_contacts
async def main():
contacts = await get_all_contacts()
for c in contacts:
print(f"{c['full_name']} - {c['username']}")
asyncio.run(main())
首次运行时,系统将提示您输入Telegram验证码。
4.添加允许的联系人
将确切姓名(如联系人列表中所示)添加到 allowed_contacts 在 telegram_config.json.
安全说明
telegram_config.json和*.session文件在.gitignore.- 仅限中列出的联系人
allowed_contacts可以接收消息。
故障排除
- “联系人不在允许列表中” --将名称添加到
allowed_contacts. - “未找到联系人” --使用联系人列表中的确切姓名。
- 电话代码提示 --输入发送到您的Telegram应用程序的代码。
发展
uv sync --dev
uv run pytest
uv run ruff check .
uv run mypy .
