Skip to main content
Glama
liam-edmunds

enable-nz-mcp

by liam-edmunds

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.

Параметр

Тип

Обязательный

Примечания

query

string

да

Поисковые запросы

limit

integer

нет

По умолчанию 5, максимум 20

section

string

нет

Ограничение одним разделом, например services

Возвращает соответствующие страницы, отсортированные по релевантности, каждая с url, title, section и выделенным фрагментом.

get_page

Получение полного текста одной страницы по URL.

Параметр

Тип

Обязательный

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

  1. Откройте вашего агента → Инструменты → Добавить инструмент → Новый инструмент → Model Context Protocol.

  2. Имя сервера: enable-nz-mcp (или что угодно — это просто метка).

  3. URL сервера: https://enable-nz-mcp.duckdns.org/mcp

  4. Аутентификация: Без аутентификации (оставьте как есть, если на сервере не задан API_KEY, в этом случае выберите вариант с API-ключом/Bearer-аутентификацией и укажите его).

  5. Создайте → Copilot Studio подключится через Streamable HTTP (единственный поддерживаемый транспорт с тех пор, как в августе 2025 года был убран SSE) и перечислит search_enable_nz, get_page и list_sections. Добавьте инструмент вашему агенту и протестируйте запросом вроде "найди на enable.co.nz финансирование инвалидных колясок".

VS Code Copilot

  1. Откройте палитру команд → MCP: Add Server.

  2. Выберите HTTP и введите https://enable-nz-mcp.duckdns.org/mcp.

  3. VS Code перечислит search_enable_nz, get_page и list_sections как доступные инструменты после подключения.

Claude Desktop

  1. Настройки → Коннекторы → Добавить пользовательский коннектор.

  2. URL: https://enable-nz-mcp.duckdns.org/mcp.

  3. 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-браузер

  • Поддержка нескольких сайтов

  • Операции записи любого рода

  • Аутентификация пользователей или изоляция по арендаторам

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying and searching Ben Milne's personal site content, including essays, API endpoints, and PDF books, via MCP tools.
    -
  • F
    license
    A
    quality
    B
    maintenance
    Enables web search and anonymous public-page retrieval through MCP, with provider-neutral selection, bounded plain-text results, and built-in auditing.
    2
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    MIT