使用说明
公民mcp
一个MCP服务器(加上社区适配器),让人工智能代理帮助人们浏览政府网站——检查资格、跟踪案例和启动福利申请。适用于Claude Desktop、Cursor和任何MCP客户端。无浏览器标志,无需扩展。
项目状态
前阿尔法。 MCP服务器、SDK、CLI和测试线束构建并运行。 九个适配器中有八个是根据其实时政府网站进行验证的 — SSA、联邦医疗保险、美国国税局、GetCalFresh、BenefitsCal、密歇根桥、科罗拉多州 PEAK和StudentAid切换——24次CI现场测试通过 2026-06-10 (证据).只有得克萨斯州的适配器尚未得到验证 选择器(请参见 期货.md).每次推送都会进行验证 这 验证实时工作流程一款实验性的Chrome 扩展也存在于这个仓库中——请参见 实验:Chrome扩展程序.
问题
政府网站是为人们点击表格而建立的。试图帮助公民导航的人工智能代理必须求助于屏幕截图解析、脆弱的DOM抓取和脆弱的点击序列——烧毁令牌、在每次UI更新时中断,并让最需要帮助的人失望。
与此同时,构建这些门户的供应商没有动机公开API。采购锁定意味着集成层永远无法构建。
解决方案
civic-mcp 船舶a 独立MCP服务器 加载社区编写的网站
适配器和驱动用户机器上的真实浏览器(Playwright)。每个适配器
将一个政府网站变成一套结构化的、可调用的工具:
Before: agent → screenshot → vision model → click → hope it worked
After: agent → MCP tool call → adapter drives the site → structured JSON
没有后端更改。没有供应商合作。没有多年API开发项目。 适配器由社区贡献并独立维护——每个适配器一个 政府网站。
快速开始
先决条件
- Node.js 18+和 pnpm
- 为剧作家打造的Chromium版本(
npx playwright install chromium)
安装
git clone https://github.com/ctrimm/civic-mcp.git
cd civic-mcp
pnpm install
连接到AI客户端
增添 ~/.claude/claude_desktop_config.json (或光标 ~/.cursor/mcp.json):
{
"mcpServers": {
"civic-mcp": {
"command": "npx",
"args": ["tsx", "/path/to/civic-mcp/packages/mcp-server/src/index.ts"],
"env": { "CIVIC_MCP_HEADED": "1" }
}
}
}
服务器扫描 adapters/ 启动时,注册每个工具。然后问你的经纪人:
“估计一下我的社会保障退休福利——我出生于1965年,收入7.4万美元。”
配置
| 环境变量 | 默认值 | 效果 |
|---|---|---|
CIVIC_MCP_HEADED |
off | 可见浏览器窗口——登录、验证码和 waitForHuman() 步骤 |
CIVIC_MCP_ALLOW_WRITE |
off | 启用 编写工具 (填写/提交真实申请的人)。出于安全考虑,默认情况下关闭 |
CIVIC_MCP_IDENTITY |
default |
哪个 便携式身份证 使用 |
CIVIC_MCP_ADAPTERS_DIR |
adapters/ |
从哪里加载适配器 |
CIVIC_MCP_TIMEOUT |
60000 |
每次操作超时(ms) |
身份:持续存在的登录名和申请人数据
服务器将所有内容都绑定到一个命名的 身份 在
~/.civic-mcp/identities/<name>/:
- 登录持续 --登录门户一次(头部模式);会话是 通过工具调用记住 和 服务器重新启动。
- 多步流工作 --每个适配器在调用之间保持页面打开。
- 申请人简介 --保存姓名/地址/家庭/收入一次
identity_set_profile工具;适配器从中预填充表单。以加密方式存储 使用OS钥匙链密钥。完整的SSN总是被拒绝。 - 多人 —
CIVIC_MCP_IDENTITY=mom保留家庭成员的或 客户的数据完全分开。专为个案工作者和福利导航员而设计。
内置工具: identity_get_profile, identity_set_profile, session_reset.
详细信息: docs/identity.md.
可用适配器
所有适配器都是社区层的。下面的状态表示选择器是否已 通过实时网站进行验证 验证实时工作流程.
国家福利
| 适配器 | 状态 | 程序 | 状态 |
|---|---|---|---|
gov.california.benefitscal |
加利福尼亚州 | CalFresh、CalWORKs、Medi-Cal(官方门户网站) | ✅ 实时验证2026-06-10(CI运行) |
gov.california.getcalfresh |
加利福尼亚州 | CalFresh信息(网站不再托管申请——通往BenefitsCal的路线) | ✅ 实时验证2026-06-10(CI运行) |
gov.colorado.peak |
科罗拉多州 | 福利目录、查找者、客户申请、状态(PEAK) | ✅ 实时验证2026-06-10(CI运行) |
gov.michigan.bridges |
密歇根州 | 资源浏览器、访客应用程序、状态(MI Bridges) | ✅ 实时验证2026-06-10(CI运行) |
gov.texas.yourtexasbenefits |
德克萨斯州 | SNAP、TANF、医疗补助、CHIP | 🧪 社区(选择器未经验证) |
联邦服务
| 适配器 | 代理 | 服务 | 状态 |
|---|---|---|---|
gov.ssa.retirement |
社会保障管理局 | 福利估算、预期寿命、办公室定位、申请移交 | ✅ 现场验证2026-06-10,12/12测试(CI运行) |
gov.medicare.eligibility |
医疗保险(CMS) | 资格和保费计算器 | ✅ 实时验证2026-06-10(CI运行) |
gov.irs.withholding |
IRS | 预扣税估算器(关于您的步骤+引导式继续) | ✅ 实时验证2026-06-10(CI运行) |
gov.studentaid.estimator |
教育部 | 联邦学生援助估算员(人工交接) | 🤝 仅限切换——studentaid.gov阻止数据中心IP |
仓库结构
civic-mcp/
├── packages/
│ ├── mcp-server/ # ★ The MCP server — exposes all adapters to
│ │ # Claude Desktop, Cursor, and any MCP client
│ │ # over stdio JSON-RPC; drives Playwright
│ ├── sdk/ # Adapter development SDK + shared types
│ ├── cli/ # civic-mcp CLI for adapter development
│ ├── testing/ # Test harness for adapter authors
│ └── extension/ # EXPERIMENTAL Chrome extension (see below)
├── adapters/ # Community-contributed site adapters
│ ├── gov.california.benefitscal/
│ ├── gov.ssa.retirement/
│ └── .../
├── registry/ # Adapter registry metadata
│ ├── registry.json # Master adapter list
│ └── verified.json # Verified publishers (empty — no process yet)
├── docs/ # Documentation (identity.md, ...)
└── scripts/ # Build and maintenance scripts
编写适配器
适配器是以下目录 adapters/ 带着一个 manifest.json 和a
adapter.ts 默认导出工具:
// adapters/gov.example.benefits/adapter.ts
import type { AdapterModule, SandboxContext, ToolResult } from '@civic-mcp/sdk';
const adapter: AdapterModule = {
id: 'gov.example.benefits',
tools: [
{
name: 'check_eligibility',
description: 'Pre-screen eligibility for state benefits',
inputSchema: {
type: 'object',
properties: {
householdSize: { type: 'number', minimum: 1 },
monthlyIncome: { type: 'number', minimum: 0 },
},
required: ['householdSize', 'monthlyIncome'],
},
async execute(params, context): Promise<ToolResult> {
const { page } = context;
await page.navigate('https://benefits.example.gov/screener', {
waitForSelector: 'form#screener',
});
await page.fillField('input[name="household_size"]', String(params.householdSize));
await page.fillField('input[name="monthly_income"]', String(params.monthlyIncome));
await page.click('button[type="submit"]', { waitForNavigation: true });
const message = await page.getText('.result .message');
// Report what the site says — never compute eligibility locally
return { success: true, data: { siteReportedResult: message } };
},
},
],
};
export default adapter;
适配器基本规则:
- 声明
securityLevel(read_only|write)对于每个工具 manifest——它映射到MCP注释和写门。 - 报告,不要计算。 从现场提取结果;硬编码收入 表格会过时,给人们关于他们的好处的错误答案。
- 为人类暂停 在登录、验证码和提交任何内容之前
(
page.waitForHuman()). - 永远不要处理完整的SSN。 身份存储拒绝了他们;需要的工具 必须把浏览器交给人类。
使用CLI搭建脚手架并进行验证:
node packages/cli/bin/civic-mcp create adapter # scaffold
node packages/cli/bin/civic-mcp validate adapters/gov.newstate.portal/
安全模型
写控制
申报填写或提交真实申请的工具 securityLevel: "write"
在适配器清单中。他们是:
- 向MCP客户宣传
destructiveHint注释, 和 - 被服务器拒绝,除非它是通过以下方式启动的
CIVIC_MCP_ALLOW_WRITE=1.
运行只读工具(资格筛选器、状态检查、福利估算) 没有国旗。
PII规则
- 申请人数据仅存在于本地的每个身份存储中,并使用加密
OS钥匙链密钥,
0700/0600权限(详情). - 完整的SSN 从未存储;仅
ssnLast4被接受。 - 适配器可以只读访问申请人资料;只有用户(通过
identity_set_profile工具)可以写它。
适配器信任级别
| 级别 | 谁 | 审核 | 当前计数 |
|---|---|---|---|
| 🔵 官方 | 政府机构 | 审计+数字签名 | 0 |
| 🟢 已验证 | 已知的公民技术组织 | 维护人员的代码审查 | 0--还没有验证过程 |
| 🟡 社区 | 任何人 | 自动检查(civic-mcp validate) |
6 |
报告安全问题
通过以下方式私下报告漏洞 安全.md.做 不 公开安全漏洞问题。
实验:Chrome扩展程序+WebMCP
packages/extension/ 包含一个基于以下内容构建的实验性Chrome(MV3)扩展程序
这 WebMCP 标准草案
(navigator.modelContext,Chrome 146+中的旗帜后面)。它是 不起作用
端到端 --已知的结构间隙包括适配器交付/编译,
跨导航编排和Chrome Web Store远程代码策略。MCP
服务器是目前支持的路径;延期是对何时进行的长期押注
WebMCP广泛使用。
MCP服务器还注入了一个实验 WebMCP polyfill存根 进入页面
它驱动:当政府网站开始注册自己的网站时
navigator.modelContext 工具,civil mcp记录它,并桥接这些本地
直接到MCP的工具成为升级路径。
贡献
我们欢迎各种捐助。
贡献一个适配器 --影响最大的贡献。最有价值的 PR现在是 根据实时情况验证现有适配器的选择器 网站 并修复损坏的部分。
改进MCP服务器或SDK --查看打开 GitHub问题.
为什么选择AGPL-3.0?
政府服务是公共产品。使它们更容易访问的软件也应该是一种公共产品。
AGPL确保任何将公民mcp部署为网络服务的人,包括政府供应商和SaaS提供商,都必须将他们的改进贡献给公共资源。MIT或Apache将允许供应商对此进行分叉,添加专有适配器,并出售对它们的访问权限,从而完全重新创建我们试图打破的锁定。
AGPL关上了那扇门。在本地运行这些工具的个人用户和政府机构不受影响——只有当你为他人运行修改后的版本作为服务时,许可证才会激活。
路线图
| 里程碑 | 状态 |
|---|---|
| 独立MCP服务器(注释、写门控、标识) | ✅ 已建成——需要现场验证 |
| 第一个适配器在实时站点上进行了端到端验证 | ✅ 政府统计局,2026-06-10(CI运行) |
| SDK、CLI、测试工具 | ✅ 建成 |
| 所有6个适配器的实时选择器验证 | 🚧 计划中 |
| 适配器验证过程+验证层 | 🚧 计划中 |
| WebMCP polyfill→ 全MCP桥 | 🧪 桩已发货,桥梁已规划 |
| Chrome扩展程序(WebMCP)端到端功能 | 🧪 实验性 |
| 25个状态适配器 | 🚧 计划中 |
相关项目
- 模型上下文协议 --此服务器使用的协议
- WebMCP规范 --扩展所基于的W3C标准草案
- mcp-b/chrome开发工具mcp --用于WebMCP的Chrome DevTools桥
- 美国代码 --公民技术生态系统
- 纳瓦PBC --政府数字服务
许可证
版权所有©2026公民mcp贡献者
此程序是自由软件:您可以根据 GNU Affero通用公共许可证 由自由软件基金会发布的许可证版本3,或(由您选择)任何更高版本。
分发此程序是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的暗示保证。请参阅 许可证 了解更多详情。
civil mcp是一个独立的开源项目。它不隶属于任何政府机构,也不受任何政府机构的认可或运营。
