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: MCP Knowledge Base Server
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityFmaintenanceEnables searching for any text within a specified Algolia index through an MCP-compatible interface. It allows users to integrate Algolia search capabilities into their environment using an application ID and API key.11MIT
- FlicenseCqualityCmaintenanceEnables semantic search over knowledge-base articles and listing of sample support tickets using MCP tools.4
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving records from the DigitalNZ collection, with tools for keyword search and fetching full item details.9MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to search, read, and query saved bookmark content via a read-only MCP interface, with full-text and optional semantic search.4MIT
Related MCP Connectors
GETS NZ MCP — New Zealand Government Electronic Tenders Service (keyless).
data.govt.nz CKAN MCP.
Internet Archive (archive.org) item search & metadata MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/liam-edmunds/enable-nz-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server