
Tend Mcp
io.github.nries1由 GitHub 账号 nries1 发布v0.1.2更新于 Oct 24, 2026
Unofficial MCP server for Tend Dental appointment booking. Not affiliated with Tend.
概览
非官方 MCP 服务器,让助手通过 Tend 网站的内部接口查看并预约单个 Tend 账户的牙科门诊。
- 可以做什么
- 从固定的参考快照列出 Tend 门店和服务类型,并列出该账户已有的预约。按门店和服务搜索可预约时段。预约门诊,会在账户上产生真实预约。自动维持登录状态,刷新令牌或在必要时回退到密码登录。
- 适用场景
- 适合希望让助手在不打开网站的情况下查看自己的 Tend 牙科可约时段、预约或查看预约的用户。只有在你接受使用未公开接口的非官方集成时才值得添加。
- 运行要求
- 以 Node.js 本地进程运行(npm 包 tend-mcp,stdio)。需要 TEND_EMAIL,以及 TEND_PASSWORD 或从浏览器 DevTools Cookie 手动复制的 TEND_REFRESH_TOKEN 之一。需要能访问 Tend 的身份与 API 接口的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Tend Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
tend-mcp
An unofficial MCP (Model Context Protocol) server for Tend dental — not affiliated with, endorsed by, or supported by Tend. It talks to internal API endpoints their own web app calls, discovered via browser devtools, not a published/documented API. Expect it to break without notice if Tend changes their frontend.
Use at your own risk. This has not been reviewed against Tend's Terms of Service — read them yourself before running this, and be ready to stop if Tend objects. Each instance authenticates as one Tend account and only ever accesses that account's own data; it is not designed or intended to access any other patient's records.
Status
Real, verified against a live HAR capture (2026-08-01) of an actual login → pick studio → pick service → pick time → book flow, plus live-tested auth: list_studios, list_service_types (static reference data — see below), list_appointments, search_available_slots, book_appointment (confirmed live — the capture includes a real booking that got a real Dentrix external_id).
Auth is fully real now — two ways in. Tend authenticates via AWS Cognito behind their own thin proxy at identity.hellotend.com. You can use either:
TEND_PASSWORD— real email+password login (POST identity.hellotend.com/login, confirmed live), the same call the actual web app makes. No Cognito SRP dance needed client-side; Tend's backend handles that.TEND_REFRESH_TOKEN— skips login, obtained by hand once from DevTools (see below).
Either way, TendClient keeps itself signed in automatically: sessions renew via Cognito's REFRESH_TOKEN_AUTH (Authorization: Bearer <idToken>, ~24h tokens — confirmed live), falling back to a fresh password login if a refresh token expires/gets revoked and TEND_PASSWORD is set.
Setup
Point an MCP client (Claude Desktop, etc.) at it by adding to its MCP config, e.g. Claude Desktop's claude_desktop_config.json:
Getting a refresh token (if not using TEND_PASSWORD)
- Log into hellotend.com in Chrome.
- Open DevTools → Application → Cookies →
hellotend.com. - Copy the value of the
refreshTokencookie intoTEND_REFRESH_TOKEN.
Both TEND_PASSWORD and TEND_REFRESH_TOKEN are standing credentials — treat them like a password, not an API key. A refresh token in particular can mint fresh sessions for a long time without re-entering anything. Never commit either, never paste either anywhere it might get logged — including into an AI chat. This isn't hypothetical: building this integration involved two real accidental exposures of live tokens into a chat session (once from a raw cookie paste, once from an incomplete redaction script missing token as a sensitive field name) — HAR "sanitization" and ad-hoc redaction scripts are not something to rely on. If you ever suspect either has leaked, log out of Tend everywhere / rotate your password.
Adding another endpoint
Log into hellotend.com, open DevTools → Network → Fetch/XHR, perform the action, and note the request. Then add a method to TendClient following the existing ones' shape (raw snake_case API fields mapped to a camelCase TS interface) and a corresponding tool in tools.ts.
If you export a HAR to work from: response bodies (not just headers) still contain real PII — redact personal fields (name, email, phone, insurance, DOB) out of them before sharing, and never share cookie/token values regardless of what the export tool does or doesn't strip automatically. .gitignore here already excludes *.har so it won't land in git.
Design constraints (please keep these)
- One account per instance. No multi-tenant credential store, no server-side proxy holding multiple users' logins.
- No anti-bot evasion. If Tend's login has MFA or bot-detection, surface it to the user (or fail loudly) rather than trying to automate around it.
- No endpoints beyond what a real patient portal already exposes to that patient. Don't add anything that reaches into other patients' data.
STUDIOS/SERVICE_TYPESintendClient.tsare a frozen snapshot, not live data. No stable API for them was found (see the comment aboveSTUDIOS) — they'll silently go stale as Tend adds/closes studios or changes services. Worth periodically re-checking against a fresh capture rather than assuming they're current.
来源:README.md,提交 ad05ca6
工具
0版本历史
1- v0.1.2最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分