@practicemakes / mcp
一个小 MCP 公开的服务器 PracticeMakes 生产数据(只读)到Claude进行管理和开发工作-并显示您的 规划师积压 因此,您自己的任务列表可以驱动开发。
它的身份验证为 您自己的平台标识 (您的Firebase用户),因此每个结果都由后端限定为您的实际角色和组织。SYSADMIN可以看到整个平台;普通用户只能看到他们的组织。这样就可以将同一台服务器交给平台上的其他用户。
它是如何工作的
Claude ──stdio──▶ @practicemakes/mcp ──HTTPS Bearer──▶ https://api.practicemakes.io/api/...
(refreshes your Firebase ID token) (existing authz + business logic)
没有后端更改,也没有秘密凭据——它使用的Firebase Web API密钥是 公共 客户机值(作为默认值嵌入),因此每个用户仅为 他们自己的 帐户。只读的。
使用它(已发布的包)
一旦发布到npm,任何平台用户都可以连接到一行代码——无需克隆或构建:
claude mcp add practicemakes \
--env FIREBASE_REFRESH_TOKEN=<your-refresh-token> \
-- npx -y @practicemakes/mcp
在开发过程中指向本地后端 --env PM_API_BASE_URL=http://localhost:9090.
获取刷新令牌
- 账户密码: 创建
.env(见.env.example),PM_EMAIL/PM_PASSWORD、运行yarn workspace @practicemakes/mcp login-它打印一个FIREBASE_REFRESH_TOKEN=...线路使用。 - 谷歌和苹果登录: 登录web应用,打开DevTools→Application→IndexedDB→
firebaseLocalStorage→授权用户记录,并复制stsTokenManager.refreshToken.
Develop(从monoorepo开始)
yarn install # at repo root, links the workspace
yarn workspace @practicemakes/mcp build
cp packages/mcp/.env.example packages/mcp/.env # then fill in a credential
yarn workspace @practicemakes/mcp smoke # end-to-end check against prod
smoke 打印您的身份验证,有多少组织是可见的,以及您的Planner待办事项。要直接在Claude中运行本地构建,而不是在已发布的包中运行:
claude mcp add practicemakes \
--env FIREBASE_REFRESH_TOKEN=... \
-- node "$(pwd)/packages/mcp/dist/index.js"
发布
版本按单一日历方案(26.MMDD.patch). 适用范围:
yarn workspace @practicemakes/mcp publish # runs prepublishOnly (clean + build) first
工具(阅读)
| 工具 | 它返回什么 |
|---|---|
list_organizations | 对您可见的组织(SYSADMIN→all) |
get_organization | 一个组织按UUID |
get_my_profile | 您的配置文件+权利/角色/org上下文 |
list_profiles | 配置文件(SYSADMIN→所有,ADMIN→您的组织) |
get_profile | 一个配置文件按UUID |
get_my_planner_tasks | 你的计划表待办事项(推动开发) |
search_tasks | 搜索任务;通过显示已完成/已删除/已休眠 showFields |
get_task | 按UUID执行一个任务 |
list_workflows | 你的Planner工作流程 |
get_workflow | 一个工作流,与运行状态相结合 |
get_billing_config | 您的组织的计费/权利配置(需要一个required platform) |
list_servers | 受监视的服务器+下面工具需要的两个标识符 |
get_server | 一台服务器的配置,包括其维护窗口 |
list_server_statuses | 的生活状态 所有 您的服务器(现在有任何问题吗) |
get_server_uptime | 正常运行时间%在过去的1-168小时,从原始心跳 |
get_server_uptime_daily | 每天的正常运行时间历史记录超出心跳保留 |
list_server_incidents | 一台服务器的停机历史记录,计划内与计划外 |
服务器标识符
监控工具采用 两个不同的、不可互换的标识符和传递错误
其中一个返回404,读起来像是丢失了服务器。 list_servers 返回:
| 标识符 | 所使用的 | 路线的家庭 |
|---|---|---|
serverShortLink | get_server_uptime, get_server_uptime_daily | /api/public/... (未经身份验证的) |
serverId | get_server, list_server_incidents | /api/server/... (org-scoped认证) |
两者都不是UUID - serverId 是操作符指定的id(例如: web-01)。
工具(写)
每个写入工具在发送任何内容之前都要求您确认确切的请求。
| 工具 | 它是做什么的 |
|---|---|
create_task | 在当前的组织上下文中创建一个Planner任务(需要ADMIN) |
complete_task | 集 completedAt 在一个任务上——完成计划者驱动的开发循环的工具 |
switch_org_context | 切换您的活动组织上下文(SYSADMIN→任意组织,否则仅限邀请) |
在启用写工具之前,请先阅读本文
这些工具以您的身份运行,具有您的所有权限。 身份验证是针对每个用户的Firebase ID令牌,而不是服务帐户——没有只读角色,没有单独的服务标识,并且 它们背后没有服务器端允许列表。如果您的帐户是SYSADMIN,那么写工具可以跨写 平台上的每个租户。工具列表和确认提示就是整个安全 边界。
确认需要客户的支持。 门采用MCP 引出. 如果你的客户没有 在握手的过程中,广告的启发支持,没有渠道问你,每一次 编写工具 拒绝,什么也不送 -它不会在未经确认的情况下退回到书面状态。这个 错误指定了它拒绝执行的变异。这是故意的:默默地进行 让那些不同意被要求的客户失去保护。
switch_org_context 会话是全球性的。 它改变了你的侧写,所以它改变了什么 每一个
后读工具 返回会话的其余部分,而不仅仅是下一个调用。
complete_task 是读-修改-写。 没有专用的完井端点;这个工具
读取任务,设置 completedAt,然后带着读过的内容重新发布 ETag 在
If-Match 因此,并发编辑不会被悄无声息地破坏。
yarn smoke 是不受影响的-它发出三个固定的只读请求,从不触及工具
注册表,因此没有写入可以通过它到达生产。
路线图
- 管理的行为 (例如ARCH-153 /user purge) - blocked:没有可执行端点存在
然而,只有一个
GET .../data-inventory这说明这是一次多么大的清洗 将 执行并删除任何内容。 - OpenAPI-driven 从后端分组规范(monorepo已经使用)生成工具
openapi-typescript在packages/core)。 - 托管远程服务器 (streamable-HTTP + per-user OAuth),这样用户就不用安装任何东西就可以连接到URL。