关于 curb-cut-mcp
curb-cut-mcp 为工作场所无障碍便利申请提供信息查询和草稿生成,服务于希望以自己的方式提出申请的员工。它不发送消息,也不收集诊断信息,并将需要人工处理的请求交给工作人员。
主要功能
- 01查询便利方案与费用依据
- 02起草申请内容但不发送
- 03支持多种申请渠道
- 04不设置诊断信息字段
- 05提供人工处理队列
适用场景
- 01查找可能适用的工作场所便利方案
- 02了解方案的费用证据
- 03准备便利申请草稿
- 04将需要人工协助的请求转交工作人员
MCP 相关
MCP 服务提供 5 个工具,用于查询和起草;这些工具均不能发送消息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y curb-cut-mcpSF_ORG_ALIASSalesforce CLI alias of the Curb Cut org. Defaults to curbcut.CURB_CUT_SITEPublic URL of this installation's Curb Cut site, quoted when a draft tells the person where they can send it themselves.TWILIO_NUMBERSMS number of this installation, offered next to the site as another way the person can send for themselves.CURB_CUT_SUPPORT_EMAILAddress given when a human handoff cannot be completed.SF_CLI_MODULESOverride for the Salesforce CLI's node_modules/@salesforce directory when the CLI is installed somewhere unusual.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Curb Cut
Curb Cut 让任何员工都能用自己的话申请职场便利措施:无需登录即可通过网页申请,也可以使用普通电话发短信或打电话、发送电子邮件、在 Slack 中发送私信,或通过自己的助手申请,而且无需透露诊断信息。Agentforce Agent 负责对话;由确定性的 Apex 决定存储和发送哪些内容;无障碍服务台的工作人员负责回复。Dreamforce 2026 Agentforce for Good 黑客马拉松 Builder Track 第一名。
git clone https://github.com/parthsevak2/curb-cut
cd curb-cut
python3 tests/invariants.py # 521 structural checks, offline, about a second
**先亲自体验,再阅读介绍:**在 parthsevak2.github.io/curb-cut/try.html 输入一句话,看看产品自己的排序答案如何在浏览器中生成。 展示影片的着陆页位于 parthsevak2.github.io/curb-cut, 可直接打印并张贴在休息室的海报位于 poster.html。
了解背后的故事,只需 10 分钟:https://parthsevak2.github.io/curb-cut/story.html
若要将其部署到自己的 Salesforce 组织,请按照 DEPLOY.md 操作。 需要启用 Agentforce;短信和语音功能还需要你自己的 Twilio 号码和一个小型中继(channels/),Slack 则需要根据清单在你的工作区中创建应用。四个自定义标签用于存储部署所需的号码、网站 URL 和支持地址。
为什么要做这个项目
申请残障便利措施的流程本身,就是一道无障碍障碍。
要获得帮助,你必须先使用一个由没有你所患残障的人设计、且为他们服务的系统。找到相关政策,弄懂其中的术语,拥有公司登录账号,填写表格。还得把你可能不敢透露的事情,以书面形式告诉陌生人,而且沟通语言可能不是你的母语。
通常,费用并不是障碍。
影片时长 4 分 59 秒,实时展示所有渠道:https://youtu.be/yleHLiwWRKA。体验申请页面的 26 秒录屏:https://drive.google.com/file/d/13NApu8rq3MpJjuGG2yzKuJ2P02tKWwGx/view。三分钟剪辑版:https://drive.google.com/file/d/1Loqum6Kbk1noQazJDKrrVEnHzoU3biMD/view
| 证据 | 来源 |
|---|---|
| 在 2025 年的 655 家大型雇主中,向雇主说明自己有残障的员工比例中位数为 3.5%,且没有上升。截至 2026 年,其中 98% 的雇主表示已设立便利措施计划。 | Disability:IN 2025 Disability Index 和 2026 results |
| 2025 年,美国残障人士的就业率为 22.8%,而非残障人士为 65.2%;在就业的残障人士中,30% 从事兼职工作,而非残障人士为 17%。 | US BLS, People with a Disability 2025,于 2026 年 3 月 3 日发布 |
| 每 100 项便利措施中,有 61 项 对雇主而言无需花费任何成本。其余措施的一次性成本中位数为 $300。 | JAN employer survey,共调查 5,406 家雇主,时间为 2019 年 1 月至 2024 年 12 月 |
| 2022 年,在职加拿大残障人士中,超过三分之一 的便利措施需求未得到满足。 | Statistics Canada,《加拿大残障调查》 |
| GC Workplace Accessibility Passport 已经实现了“申请一次,长期有效”,但仅面向联邦公务员。 | Government of Canada |
Curb Cut 是一个 Agentforce Agent,它的首要服务对象是员工,而非雇主。
2026 年 9 月的演示部署
下面的黑客马拉松部署记录了评审实际测试过的内容。演示组织及其号码会随黑客马拉松结束而停用;你的安装在每一行都有自己的地址。
| 界面 | 地址 | 状态 |
|---|---|---|
| Web | https://curbcut-dev-ed.develop.my.salesforce-sites.com/curbcut | 正常运行 |
| 提问(完整流程,无电话) | /curbcut/ask | 正常运行 |
| 隐私 | /curbcut/privacy | 正常运行 |
| 条款 | /curbcut/terms | 正常运行 |
| SMS | 部署所拥有的 Twilio 号码 | 正常运行,通过我们在组织旁运行的中继 |
| 语音 | 同一个 Twilio 号码 | 已构建,支持语音输入和输出 |
| 电子邮件 | 入站服务 CurbCutInbound,地址位于 Setup → Email Services | 正常运行 |
| Slack | node channels/slack-app.mjs,Socket Mode,仅限私信,不会发送消息 | 在实际工作区中正常运行;清单位于 channels/slack-manifest.json |
| Agent | Curb_Cut v7,Curb_Cut_Desk v5 | 均已激活 |
| 控制台(内部) | /lightning/app/Curb_Cut_Console,主页选项卡 /lightning/n/Curb_Cut_Home,需要组织登录 | 正常运行 |
| 为什么是现在 | /curbcut/why | 正常运行 |
| 消息计划 | /curbcut/messaging | 正常运行 |
| MCP 服务 | node channels/mcp-server.mjs | 5 个工具,均无法发送消息 |
| 任何中继或助手 | POST /services/apexrest/curbcut/v1/message/ | 上述每个渠道共用的入口 |
没人演示的那一半,就是控制台。除非人类有地方可以接手,否则助手承诺有人会联系当事人就毫无价值。Human_Handoff__c 会创建记录,声称“有人正在接手”,但没有任何界面供那个人使用。
| 控制台界面 | 用途 |
|---|---|
| 值班中(应用主页) | 三个队列,按处理顺序排列,其上方显示常设指令 |
| 等待人工处理 | 有人要求联系人工,目前却只能等候 |
| 等待决策 | 已获批准但雇主尚未答复的请求,按截止时间从近到远排列 |
| 需要口译员 | 已签名的视频正在等待人工处理,绝不使用机器翻译 |
| Curb Cut 概览(仪表板) | 通过五个面板查看系统在哪些方面让人失望 |
| 记录动态 | 一个请求通常由两个人共同处理,因此对话会保存在记录中 |
控制台不会显示任何诊断信息,因为根本没有相关字段。如果有人询问某人患有什么病,操作员只能回答没人知道,也没人能查明。
四项原则
- Agent 的首要服务对象是员工。 未经当事人亲自批准,任何内容都不会发出。
- 没有哪个渠道才算真正的渠道。 文本、语音、电子邮件和 Web 都是平等的入口。
- 披露信息前先征求同意。 无需表明身份,也无需透露任何身体状况,就能得到切实的答复。
- 只问一次,不要没完没了地问。 常设偏好会提前随你一同传递。
刻意未构建的内容
- 没有自动手语识别。 ASL 是一种完整的语言;目前尚无法解决识别问题。签名视频会转给人工处理,并立即以文本确认收到,让人不必一直等候。
- 没有诊断字段。 该信息既未加密,也未设访问限制,因此直接不设此字段。如果有人添加诊断字段,CI 会导致构建失败。
- 绝不使用电话作为备用方式。
Reachable_By__c只接受消息渠道或电子邮件,代码会拒绝电话号码。 - 不作任何推断。 不会对任何内容建立档案或进行预测。每一项信号都由当事人自行设置。
验证
以下内容没有任何一项是凭记忆断言的。每个数字都是旁边命令的输出,tests/sync_counts.py 会根据不变量测试套件自身的输出重写已发布的计数,确保它们不会偏离。
147 Apex tests sf apex run test -o curbcut -l RunLocalTests
554 structural invariants python3 tests/invariants.py ~1s, no org
517 accessibility checks python3 tests/a11y_audit.py against the live pages
122 Sa11y checks npm run test:a11y Salesforce's own axe-core matcher
34 accessibility-tree checks node tests/ax_tree_audit.mjs what a screen reader is handed
34 controls by keyboard node tests/keyboard_walk.mjs real Tab presses; set CURB_CUT_SITE
21 responsible-AI checks python3 tests/rai_self_check.py against Salesforce's five guidelines
28 contrast checks python3 tests/contrast_audit.py both themes, from the tokens
16 reading-level checks python3 tests/reading_level_audit.py
76 link and copy checks python3 tests/link_and_copy_audit.py
23/23 adversarial assertions node tests/headless_agent_api.mjs && python3 tests/score_adversarial.py
其中两个测试套件会故意让自身检查失败,并断言每项都会报错(--selftest)。一个无法失败的测试套件无法证明它所测试的代码没有问题。对抗性测试套件曾获得 21/23 分;两项失败都连同记录一并公布,而没有被平均掉。此后,Agent 的拒绝措辞与评分器逐渐趋于一致,测试套件现已全部通过。我们坚持这一做法:出现失误就如实报告,绝不粉饰。
仓库结构
| 路径 | 内容 |
|---|---|
force-app/main/default/objects/ | 9 个对象、61 个字段、31 个列表视图,不含任何诊断字段 |
force-app/main/default/classes/ | 19 个 Apex 类 + 15 个测试类 |
force-app/main/default/lwc/ | 5 个 Lightning Web Components,每个组件旁都有一个 Sa11y 测试套件 |
force-app/main/default/aiAuthoringBundles/ | 两个 Agent Scripts:Curb_Cut 为公开版,Curb_Cut_Desk 为内部版 |
force-app/main/default/pages/ components/ sites/ | 公共网站、六个页面,面向匿名用户 |
force-app/main/default/emailservices/ | 入站电子邮件渠道 |
force-app/main/default/applications/ tabs/ flexipages/ | 内部控制台 |
force-app/main/default/reports/ dashboards/ | 五份报告和总览仪表板,不含任何名称 |
channels/ | SMS + 语音中继、Slack 应用(Socket Mode)、MCP 服务、Twilio 配置 |
tests/ | 上述十二个测试套件,以及生成 docs/SCREEN-READER-WALK.md 的 screen_reader_walk.mjs |
deck/ | 演示文稿源文件;构建后的副本位于 docs/hackathon/ |
docs/hackathon/ | 2026 年 9 月黑客松记录:评审指南、反思、演示文稿、静帧 |
legal/ | 隐私和条款源文件 |
docs/ | 架构、BRD、证据、受众、决策和两份审计报告 |
请先阅读 docs/ARCHITECTURE.md,再阅读
CRITIQUE.md,其中列出了仍然薄弱之处。
文档
| 文档 | 用途 |
|---|---|
docs/ARCHITECTURE.md | 系统如何协同运作,并附有图示 |
docs/BRD.md | 业务需求和可追溯性 |
docs/ROADMAP.md | 下一步计划,以及已否决的方案 |
docs/DECISIONS.md | 每项重大决策及其缘由 |
docs/EVIDENCE.md | 每个公开数据,附来源、分母和注意事项 |
docs/AGENT-INTERFACES.md | 无头模式、MCP、Agent 间交互,以及我们不会构建的配置文件 |
CRITIQUE.md | 仍然存在的问题 |
FINDINGS.md | 对抗性测试运行结果 |
CI.md | 流水线和不变量 |
DEPLOY.md | 部署 |
由 Parth Sevak 构建。加拿大安大略省韦兰。 Agentforce for Good,Dreamforce 2026 · Builder Track · Abilityforce。
许可证
Apache 2.0。无障碍资源库随仓库一并提供,每一行都附有来源引用。可使用、分叉,也可在自己的组织中运行。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。