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Сервер никогда не кэширует индекс в памяти — каждый вызов инструмента открывает новое
readonly-подключение к index.db на диске. Еженедельный обход пересобирает индекс и заменяет его
одним атомарным mv, поэтому индекс обновляется без простоев и без перезапуска.
Readonly во всех направлениях: краулер только читает 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 года был убран SSE) и перечислит
search_enable_nz,get_pageиlist_sections. Добавьте инструмент вашему агенту и протестируйте запросом вроде "найди на enable.co.nz финансирование инвалидных колясок".
VS Code Copilot
Откройте палитру команд → MCP: Add Server.
Выберите 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-клиент
Укажите https://enable-nz-mcp.duckdns.org/mcp с транспортом Streamable HTTP. Если
на сервере задан 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-дроплете под отдельным непривилегированным системным
пользователем (mcpsvc), изолированным от других сервисов на той же машине — у mcpsvc нет sudo
и нет доступа на чтение за пределами /opt/enable-nz-mcp. См. deploy/ecosystem.config.cjs для
конфигурации процесса pm2 и 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 — с использованием выделенной пары ключей развёртывания,
ограниченной директивой command= в authorized_keys, чтобы она могла выполнять только rsync/mv,
а не произвольную оболочку.
Вне рамок v1
Эмбеддинги / семантический поиск (ключевой поиск через SQLite FTS5 достаточен для одного маркетингового сайта)
Рендеринг через headless-браузер
Поддержка нескольких сайтов
Операции записи любого рода
Аутентификация пользователей или изоляция по арендаторам
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