关于 tend-mcp
tend-mcp 是一个非官方 MCP 服务,通过 Tend 网络应用使用的内部接口,为单个 Tend 账户提供牙科预约功能。它支持查看诊所、服务类型、预约和可用时段,以及预订;接口并非公开文档,可能随网站变化而失效。
主要功能
- 01列出诊所和服务类型
- 02查看账户预约
- 03搜索可预约时段
- 04预订牙科预约
- 05通过密码或刷新令牌自动续期登录
适用场景
- 01查看个人已有的牙科预约
- 02搜索可用时段并安排预约
- 03通过 MCP 客户端操作单个 Tend 账户
MCP 相关
此 MCP 服务向客户端提供 Tend 账户的诊所、服务类型、预约、时段搜索和预订工具。每个实例仅访问一个账户自身的数据,并依赖 Tend 网络应用使用的未公开接口。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y tend-mcpTEND_EMAILYour Tend account email.TEND_PASSWORD密钥Your Tend account password. Set this OR TEND_REFRESH_TOKEN, not both required.TEND_REFRESH_TOKEN密钥A Cognito refresh token obtained by hand from DevTools (see README). Alternative to TEND_PASSWORD.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
tend-mcp
适用于 Tend 牙科服务的非官方 MCP(Model Context Protocol)服务——与 Tend 无关,也未获其认可或支持。它调用的是 Tend 自家 Web 应用所用的内部 API 端点,这些端点是通过浏览器开发者工具发现的,并非已发布或有文档说明的 API。如果 Tend 更改前端,请做好它随时失效的准备。
使用风险自负。 我们尚未依据 Tend 的服务条款对此进行审核——运行前请自行阅读条款,并做好在 Tend 提出异议时立即停止使用的准备。每个实例都使用一个 Tend 账户进行身份验证,且只访问该账户自身的数据;本项目并非为访问其他患者的记录而设计,也无此用途。
状态
已实现,并通过实际 HAR 捕获记录验证(2026-08-01):记录了一次真实的登录 → 选择诊所 → 选择服务 → 选择时间 → 预约流程;身份验证也经过实时测试:list_studios、list_service_types(静态参考数据——见下文)、list_appointments、search_available_slots、book_appointment(已确认实时有效——捕获记录中包含一条真实预约,并获得了真实的 Dentrix external_id)。
身份验证现已完全可用——有两种方式。 Tend 通过其位于 identity.hellotend.com 的轻量代理使用 AWS Cognito 进行身份验证。你可以任选一种:
TEND_PASSWORD— 使用真实的邮箱和密码登录(POST identity.hellotend.com/login,已确认实时有效),与实际 Web 应用发出的请求相同。客户端无需处理 Cognito SRP 流程;Tend 的后端会处理。TEND_REFRESH_TOKEN— 跳过登录,通过 DevTools 手动获取一次即可(见下文)。
无论使用哪种方式,TendClient 都会自动保持登录状态:会话通过 Cognito 的 REFRESH_TOKEN_AUTH 自动续期(Authorization: Bearer <idToken>,令牌有效期约 24 小时——已确认实时有效);如果刷新令牌过期或被撤销,且已设置 TEND_PASSWORD,则会改用密码重新登录。
设置
npm install
cp .env.example .env # fill in TEND_EMAIL and (TEND_PASSWORD or TEND_REFRESH_TOKEN)
npm run dev # or: npm run build && npm start
通过将其添加到 MCP 配置中,让 MCP 客户端(Claude Desktop 等)连接到此服务,例如 Claude Desktop 的 claude_desktop_config.json:
{
"mcpServers": {
"tend": {
"command": "node",
"args": ["/absolute/path/to/tend-mcp/dist/index.js"],
"env": { "TEND_EMAIL": "[email protected]", "TEND_PASSWORD": "..." }
}
}
}
获取刷新令牌(如果不使用 TEND_PASSWORD)
- 在 Chrome 中登录 hellotend.com。
- 打开 DevTools → Application → Cookies →
hellotend.com。 - 将
refreshTokenCookie 的值复制到TEND_REFRESH_TOKEN。
TEND_PASSWORD 和 TEND_REFRESH_TOKEN 都是长期有效的凭据——请像保护密码一样保管,而不要把它们当作 API 密钥。 尤其是刷新令牌,可以在无需重新输入任何信息的情况下长期签发新会话。切勿提交其中任何一个,也不要将它们粘贴到可能会记录内容的任何地方——包括 AI 聊天中。这并非假设:构建此集成时,真实的有效令牌曾两次意外泄露到聊天会话中(一次是直接粘贴原始 Cookie,一次是不完整的脱敏脚本遗漏了 token 这一敏感字段名)。不要依赖 HAR“净化”功能或临时编写的脱敏脚本。如果你怀疑其中任何凭据已泄露,请在所有设备上退出 Tend,或更改密码。
添加其他端点
登录 hellotend.com,打开 DevTools → Network → Fetch/XHR,执行相应操作并记下请求。然后按照现有方法的结构,在 TendClient 中添加一个方法(将原始 snake_case API 字段映射到 camelCase TS 接口),并在 tools.ts 中添加对应的工具。
如果你要导出 HAR 文件进行操作,请注意:响应正文(不仅仅是标头)仍包含真实的个人身份信息(PII)——分享前请先对其中的个人字段(姓名、邮箱、电话、保险信息、出生日期)进行脱敏;无论导出工具是否会自动清除 Cookie/令牌值,都绝不要分享这些值。此处的 .gitignore 已排除 *.har,因此这类文件不会进入 git。
设计约束(请遵守)
- 每个实例仅对应一个账户。 不要使用多租户凭据存储,也不要使用在服务器端保存多个用户登录信息的代理。
- 不得规避反机器人机制。 如果 Tend 登录需要 MFA 或触发了机器人检测,应向用户说明(或明确报错),而不是尝试绕过这些机制进行自动化操作。
- 不得使用真实患者门户未向该患者公开的端点。 不要添加任何会访问其他患者数据的功能。
tendClient.ts中的STUDIOS/SERVICE_TYPES是固定快照,不是实时数据。 没有找到它们的稳定 API(请参见STUDIOS上方的注释)——随着 Tend 新增或关闭工作室,或更改服务,这些数据会在不提示的情况下过时。建议定期根据新的抓取结果重新核对,不要假定它们仍是最新的。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。