Tailnet MCP服务器
我为什么建造这个: 我构建这个是为了学习Tailscale——这是我第一次使用它。根据过去调试网络问题的经验,我认为使用MCP将网络状态直接输入LLM可以比在CLI输出和聊天窗口之间切换上下文更容易地诊断连接问题。
______________________________________________________________________
一个模型上下文协议(MCP)服务器,它将您的Tailscale尾网作为LLM的可查询资源公开。查询设备,检查连接,并直接从您的AI助手获取网络状态。
先决条件
- 码头工人
- A. 尾标 您的尾网上至少有一台设备
设置和测试
- 克隆并进入仓库:
git clone https://github.com/AlexSKorn/TailscaleMCP.git
cd TailscaleMCP- 获取认证密钥: 去你的 Tailscale管理控制台,单击“生成身份验证密钥”,然后复制密钥(以开头
tskey-auth-).
- 配置并启动:
make setup # creates .env from template
# edit .env and paste your TS_AUTHKEY
make docker-up # start containers
make docker-test # should print "Connection test: OK"- 以交互方式尝试 与MCP检查员:
npx @modelcontextprotocol/inspector docker compose exec -T tailnet-mcp python -m tailnet_mcp.server打开终端中显示的URL(通常 http://localhost:3000),单击 连接 然后 “列出工具”,然后选择任何工具并单击 “运行”.
可用工具
| 工具 | 输入 | 它的作用 |
|---|---|---|
list_devices | {} 或 {"online_only": true} | 列出尾网上的所有设备 |
get_device | {"hostname": "your-device"} | 特定设备的详细信息 |
get_tailnet_status | {} | 网络概述(MagicDNS、版本、设备计数) |
check_connectivity | {"hostname": "your-device"} | Ping设备并报告延迟 |
list_exit_nodes | {} | 列出可用的退出节点 |
清理
make docker-down # stop containers (keeps state)
make docker-clean # stop and remove all data______________________________________________________________________
建筑
MCP Client (stdio) ←→ tailnet-mcp (FastMCP) ←→ tailscale (Unix socket)
↓
/localapi/v0/*- MCP客户端通过stdio发送工具调用
- 服务器通过Unix套接字将它们转换为Tailscale本地API请求
- Tailscale守护进程响应网络状态
- 服务器格式化响应以提高可读性
关键设计决策:
- 只读 --服务器无法修改Tailscale设置、添加/删除设备或更改ACL
- 仅限本地API --所有呼叫都保留在本地计算机上(没有外部网络呼叫,没有存储的凭据)
- 异步贯穿始终 --httpx用于套接字I/O,ping的子进程
项目结构
src/tailnet_mcp/
├── server.py # MCP server & tool definitions
├── tailscale.py # Tailscale local API client (async httpx over Unix socket)
├── models.py # Pydantic data models
tests/
└── test_server.py # pytest + pytest-asyncio tests发展
pip install -e ".[dev]" # install with dev dependencies
make test # run tests
make check-all # lint + format + type-check + tests许可证
麻省理工学院
