enable-nz-mcp
enable-nz-mcp
Un servidor MCP público y alojado que expone el contenido de enable.co.nz como herramientas buscables, conectable desde Copilot Studio, VS Code Copilot, Claude Desktop o cualquier cliente MCP.
Este es un proyecto de portafolio personal. No está afiliado con Enable New Zealand ni con ningún empleador, y solo lee contenido disponible públicamente de un sitio web público.
Servidor:
https://enable-nz-mcp.duckdns.org/mcp(Streamable HTTP)Comprobación de salud:
https://enable-nz-mcp.duckdns.org/health
Arquitectura
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 queryEl servidor nunca almacena en caché el índice en memoria — cada llamada a una herramienta abre una
conexión nueva de solo lectura contra index.db en disco. Un rastreo semanal reconstruye el índice
y lo intercambia con un único mv atómico, de modo que el índice se actualiza sin tiempo de
inactividad y sin reinicio.
Solo lectura en todas las direcciones: el rastreador solo lee enable.co.nz, y las herramientas MCP solo leen el índice SQLite local. No se realiza ningún tipo de operación de escritura.
Related MCP server: Net-Syphon
Herramientas
search_enable_nz
Búsqueda de texto completo en enable.co.nz.
Parámetro | Tipo | Obligatorio | Notas |
| string | sí | Términos de búsqueda |
| integer | no | Por defecto 5, máximo 20 |
| string | no | Restringir a una sección, p. ej. |
Devuelve las páginas coincidentes ordenadas por relevancia, cada una con url, title, section y un
fragmento resaltado.
get_page
Recupera el texto completo de una página por URL.
Parámetro | Tipo | Obligatorio |
| string | sí |
Devuelve url, title, section, description, content y crawled_at. El contenido de más de
~15.000 caracteres se trunca, con truncated: true en la respuesta.
list_sections
Sin entrada. Enumera las secciones de nivel superior del sitio con recuentos de páginas, y la marca de
tiempo crawled_at del índice — útil para orientarse antes de una búsqueda, o para comprobar la
actualidad de los datos.
Ejemplos de consultas
Una vez conectado, pide a tu cliente MCP cosas como:
"Busca en enable.co.nz información sobre financiación de sillas de ruedas."
"¿Qué secciones cubre el índice de enable.co.nz?"
"Obtén el contenido completo de https://www.enable.co.nz/services y resúmelo."
Conexión de un cliente MCP
Copilot Studio
Abre tu agente → Herramientas → Añadir una herramienta → Nueva herramienta → Model Context Protocol.
Nombre del servidor:
enable-nz-mcp(o lo que quieras — es solo una etiqueta).URL del servidor:
https://enable-nz-mcp.duckdns.org/mcpAutenticación: Sin autenticación (déjalo como está a menos que el servidor tenga
API_KEYconfigurada, en cuyo caso elige una opción de autenticación por clave API/bearer y proporciónala).Crea → Copilot Studio se conecta mediante Streamable HTTP (el único transporte que soporta desde que eliminó SSE en agosto de 2025) y enumera
search_enable_nz,get_pageylist_sections. Añade la herramienta a tu agente y pruébala con un prompt como "busca en enable.co.nz financiación para sillas de ruedas".
VS Code Copilot
Abre la Paleta de comandos → MCP: Añadir servidor.
Elige HTTP e introduce
https://enable-nz-mcp.duckdns.org/mcp.VS Code enumerará
search_enable_nz,get_pageylist_sectionscomo herramientas disponibles una vez conectado.
Claude Desktop
Ajustes → Conectores → Añadir conector personalizado.
URL:
https://enable-nz-mcp.duckdns.org/mcp.Claude negociará el transporte Streamable HTTP automáticamente.
Cualquier otro cliente MCP
Apunta a https://enable-nz-mcp.duckdns.org/mcp usando el transporte Streamable HTTP. Si
API_KEY está configurada en el servidor, envía Authorization: Bearer <clave>.
Desarrollo local
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 .envPrueba el servidor en ejecución con MCP Inspector:
npx @modelcontextprotocol/inspector
# connect to http://127.0.0.1:8081/mcpO haz una prueba rápida manualmente:
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"}'Ejecuta la suite de pruebas:
npm testDespliegue
El servidor se ejecuta en un droplet existente de DigitalOcean bajo su propio usuario de sistema sin
privilegios (mcpsvc), aislado de otros servicios en la misma máquina — mcpsvc no tiene sudo ni
acceso de lectura fuera de /opt/enable-nz-mcp. Consulta deploy/ecosystem.config.cjs para la
configuración del proceso pm2 y deploy/Caddyfile.example para el bloque de proxy inverso.
Tanto los cambios de configuración de pm2 como los de Caddy requieren root, por lo que mcpsvc no
puede ir más allá de pm2 save por su cuenta — un administrador debe ejecutar pm2 startup (para
persistir el proceso entre reinicios) e instalar/recargar el bloque del sitio en Caddy. La limitación
de tasa no se aplica actualmente en la capa de Caddy: requiere el plugin de terceros
caddy-ratelimit, que no está en la compilación de Caddy de esta máquina.
El flujo de trabajo .github/workflows/refresh-index.yml re-rastrea el sitio semanalmente (domingo
02:00 UTC, o manualmente mediante workflow_dispatch), establece un umbral mínimo de recuento/tamaño
de páginas, y despliega el nuevo índice mediante rsync + un mv atómico por SSH. Necesita tres
secretos de repositorio: DEPLOY_SSH_KEY, DEPLOY_HOST, DEPLOY_USER — usando un par de claves de
despliegue dedicado restringido mediante una directiva command= en authorized_keys para que solo
pueda ejecutar el rsync/mv, no un shell arbitrario.
Fuera del alcance de v1
Embeddings / búsqueda semántica (la búsqueda por palabras clave mediante SQLite FTS5 es suficiente para un sitio de marketing)
Renderizado con navegador headless
Soporte multi-sitio
Operaciones de escritura de cualquier tipo
Autenticación a nivel de usuario o aislamiento por inquilino
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