AI工具协议服务器

一个提供多种AI工具的Model Context Protocol服务器,支持stdio、HTTP和WebSocket传输协议。

  • by tunforjob
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 tunforjob/xiaozhi-mcp

使用说明

小智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日历凭据

谷歌日历设置

  1. 在中创建项目 谷歌云控制台.
  2. 启用 谷歌日历API.
  3. 创建 OAuth 2.0凭据 (桌面应用程序)。
  4. 下载 credentials.json 并将其放置在:
    ~/.config/xiaozhi/credentials.json
    
  5. 首次运行时,OAuth流将在浏览器中打开并写入 token.json 到同一个文件夹。

Outlook/团队日历设置

  1. 在以下网址注册应用程序 Azure 门户 → Azure Active Directory→ 应用程序注册。
  2. 添加 Calendars.Read Microsoft Graph下的委托权限。
  3. 集 O365_CLIENT_ID 和 O365_CLIENT_SECRET 在 .env.

电报模块设置

Telegram模块允许您从自己的帐户向白名单联系人发送消息。

1.获取Telegram API证书

  1. 首选https://my.telegram.org/apps并登录。
  2. 点击 “创建应用程序” 并填写字段。
  3. 复制您的 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 .