enable-nz-mcp
enable-nz-mcp
一个公开托管的 MCP 服务器,将 enable.co.nz 的内容以可搜索工具的形式暴露出来,可从 Copilot Studio、VS Code Copilot、Claude Desktop 或任何 MCP 客户端连接。
这是一个个人作品集项目。它与 Enable New Zealand 或任何雇主无关,并且只读取公共网站上的公开内容。
服务器:
https://enable-nz-mcp.duckdns.org/mcp(Streamable HTTP)健康检查:
https://enable-nz-mcp.duckdns.org/health
架构
GitHub Actions (weekly cron)
└─ crawl enable.co.nz → build index.db.new
└─ rsync over SSH → droplet:/opt/enable-nz-mcp/data/index.db.new
└─ atomic mv → index.db
DigitalOcean droplet (Ubuntu 24.04, Sydney)
├─ Caddy → TLS termination + reverse proxy on enable-nz-mcp.duckdns.org
└─ pm2 → node dist/server.js (port 8081, localhost only)
└─ opens a fresh SQLite read connection per query服务器从不将索引缓存在内存中——每次工具调用都会对磁盘上的 index.db 打开一个新的只读连接。每周一次的爬取会重建索引,并通过一次原子性的 mv 将其替换,因此索引刷新零停机、无需重启。
每个方向都是只读的:爬虫只读取 enable.co.nz,MCP 工具只读取本地 SQLite 索引。不进行任何写操作。
Related MCP server: Net-Syphon
工具
search_enable_nz
对 enable.co.nz 进行全文搜索。
参数 | 类型 | 必填 | 说明 |
| string | 是 | 搜索词 |
| integer | 否 | 默认 5,最大 20 |
| string | 否 | 限制在某个板块内,例如 |
返回按相关性排序的匹配页面,每个页面包含 url、title、section 和带高亮的摘要片段。
get_page
按 URL 获取单个页面的完整文本。
参数 | 类型 | 必填 |
| string | 是 |
返回 url、title、section、description、content 和 crawled_at。超过约 15,000 字符的内容会被截断,响应中会带有 truncated: true。
list_sections
无需输入。列出网站的顶级板块及其页面数量,以及索引的 crawled_at 时间戳——有助于在搜索前了解整体结构,或检查数据的时效性。
示例查询
连接后,可以向你的 MCP 客户端提问,例如:
"搜索 enable.co.nz 上关于轮椅资助的信息。"
"enable.co.nz 索引覆盖了哪些板块?"
"获取 https://www.enable.co.nz/services 的完整内容并总结。"
连接 MCP 客户端
Copilot Studio
打开你的代理 → 工具 → 添加工具 → 新建工具 → Model Context Protocol。
服务器名称:
enable-nz-mcp(或任何你喜欢的名称——这只是一个标签)。服务器 URL:
https://enable-nz-mcp.duckdns.org/mcp身份验证:无身份验证(保持默认,除非服务器设置了
API_KEY,在这种情况下选择 API 密钥/Bearer 认证选项并提供密钥)。创建 → Copilot Studio 通过 Streamable HTTP 连接(这是它自 2025 年 8 月弃用 SSE 以来唯一支持的传输方式),并列出
search_enable_nz、get_page和list_sections。将该工具添加到你的代理中,然后用类似"搜索 enable.co.nz 上关于轮椅资助的信息"的提示进行测试。
VS Code Copilot
打开命令面板 → MCP: 添加服务器。
选择 HTTP 并输入
https://enable-nz-mcp.duckdns.org/mcp。连接后,VS Code 会将
search_enable_nz、get_page和list_sections列为可用工具。
Claude Desktop
设置 → 连接器 → 添加自定义连接器。
URL:
https://enable-nz-mcp.duckdns.org/mcp。Claude 会自动协商 Streamable HTTP 传输方式。
任何其他 MCP 客户端
使用 Streamable HTTP 传输方式将其指向 https://enable-nz-mcp.duckdns.org/mcp。如果服务器设置了 API_KEY,请发送 Authorization: Bearer <key>。
本地开发
npm ci
cp .env.example .env # edit as needed
npm run crawl # builds data/index.db.new
mv data/index.db.new data/index.db
npm run dev # starts the server with tsx, reading .env使用 MCP Inspector 测试运行中的服务器:
npx @modelcontextprotocol/inspector
# connect to http://127.0.0.1:8081/mcp或手动冒烟测试:
curl http://127.0.0.1:8081/health
curl -X POST http://127.0.0.1:8081/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'运行测试套件:
npm test部署
服务器运行在现有的 DigitalOcean droplet 上,使用独立的非特权系统用户(mcpsvc),与同一台机器上的其他服务隔离——mcpsvc 没有 sudo 权限,也无法读取 /opt/enable-nz-mcp 之外的任何内容。pm2 进程配置见 deploy/ecosystem.config.cjs,反向代理配置块见 deploy/Caddyfile.example。
pm2 和 Caddy 的配置更改都需要 root 权限,因此 mcpsvc 最多只能自行执行 pm2 save——管理员必须运行 pm2 startup(以在重启后保持进程运行)并安装/重新加载 Caddy 站点配置块。目前 Caddy 层未应用速率限制:这需要第三方 caddy-ratelimit 插件,而该插件不在此机器的 Caddy 构建中。
.github/workflows/refresh-index.yml 工作流每周重新爬取网站(周日 02:00 UTC,或通过 workflow_dispatch 手动触发),以最小页面数/大小作为门槛,并通过 rsync + 原子性 mv 通过 SSH 部署新索引。它需要三个仓库密钥:DEPLOY_SSH_KEY、DEPLOY_HOST、DEPLOY_USER——使用专用的部署密钥对,并通过 authorized_keys 中的 command= 指令进行限制,使其只能运行 rsync/mv,而不能执行任意 shell。
v1 范围之外
嵌入/语义搜索(对一个营销网站来说,通过 SQLite FTS5 进行关键词搜索已经足够)
无头浏览器渲染
多站点支持
任何形式的写操作
用户级认证或按租户隔离
This server cannot be deployed
Maintenance
Related MCP Connectors
GETS NZ MCP — New Zealand Government Electronic Tenders Service (keyless).
Agent-driven search: build, import, tune, search, and score result quality — all over MCP.
Turn any public website into an MCP server for agents to search, read and navigate.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying and searching Ben Milne's personal site content, including essays, API endpoints, and PDF books, via MCP tools.-
- FlicenseAqualityBmaintenanceEnables web search and anonymous public-page retrieval through MCP, with provider-neutral selection, bounded plain-text results, and built-in auditing.2-
- FlicenseNot gradedqualityBmaintenanceEnables local full-text and semantic search over saved content, providing search and retrieval capabilities via MCP for AI assistants.-
- AlicenseNot gradedqualityBmaintenanceEnables keyless local web search and page fetching through MCP, with domain-filtered queries, extractable original-text evidence, hashes, and snapshot cursors for verifiable, traceable results.26 npmMIT