政府网站导航工具

一个允许AI代理帮助用户导航政府网站的工具,用于检查资格、跟踪案例和启动福利申请。

  • by ctrimm
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ctrimm/civic-mcp

使用说明

公民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" 在适配器清单中。他们是:

  1. 向MCP客户宣传 destructiveHint 注释, 和
  2. 被服务器拒绝,除非它是通过以下方式启动的 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个状态适配器 🚧 计划中

相关项目


许可证

版权所有©2026公民mcp贡献者

此程序是自由软件:您可以根据 GNU Affero通用公共许可证 由自由软件基金会发布的许可证版本3,或(由您选择)任何更高版本。

分发此程序是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的暗示保证。请参阅 许可证 了解更多详情。


civil mcp是一个独立的开源项目。它不隶属于任何政府机构,也不受任何政府机构的认可或运营。