Skip to main content
Glama
liam-edmunds

enable-nz-mcp

by liam-edmunds

enable-nz-mcp

Ein öffentlicher, gehosteter MCP-Server, der den Inhalt von enable.co.nz als durchsuchbare Tools bereitstellt, die von Copilot Studio, VS Code Copilot, Claude Desktop oder jedem MCP-Client verbunden werden können.

Dies ist ein persönliches Portfolio-Projekt. Es ist nicht mit Enable New Zealand oder einem Arbeitgeber verbunden und liest nur öffentlich verfügbare Inhalte von einer öffentlichen Website.

  • Server: https://enable-nz-mcp.duckdns.org/mcp (Streamable HTTP)

  • Health-Check: https://enable-nz-mcp.duckdns.org/health


Architektur

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

Der Server speichert den Index nie im Speicher – jeder Tool-Aufruf öffnet eine frische, schreibgeschützte Verbindung zu index.db auf der Festplatte. Ein wöchentlicher Crawl baut den Index neu auf und tauscht ihn mit einem einzigen atomaren mv aus, sodass der Index ohne Ausfallzeiten und ohne Neustart aktualisiert wird.

In jede Richtung schreibgeschützt: Der Crawler liest nur enable.co.nz, und die MCP-Tools lesen nur den lokalen SQLite-Index. Keinerlei Schreiboperationen.


Related MCP server: Net-Syphon

Tools

search_enable_nz

Volltextsuche über enable.co.nz.

Parameter

Typ

Erforderlich

Hinweise

query

string

ja

Suchbegriffe

limit

integer

nein

Standard 5, max. 20

section

string

nein

Auf einen Abschnitt beschränken, z. B. services

Gibt passende Seiten nach Relevanz sortiert zurück, jeweils mit url, title, section und einem hervorgehobenen Ausschnitt.

get_page

Ruft den vollständigen Text einer Seite per URL ab.

Parameter

Typ

Erforderlich

url

string

ja

Gibt url, title, section, description, content und crawled_at zurück. Inhalte über ~15.000 Zeichen werden abgeschnitten, mit truncated: true in der Antwort.

list_sections

Keine Eingabe. Listet die Top-Level-Abschnitte der Website mit Seitenzahlen und den crawled_at-Zeitstempel des Index – nützlich zur Orientierung vor einer Suche oder zur Prüfung, wie aktuell die Daten sind.


Beispielabfragen

Sobald verbunden, fragen Sie Ihren MCP-Client zum Beispiel:

  • „Suche auf enable.co.nz nach Informationen zur Rollstuhlfinanzierung."

  • „Welche Abschnitte deckt der enable.co.nz-Index ab?"

  • „Hole den vollständigen Inhalt von https://www.enable.co.nz/services und fasse ihn zusammen."


Verbinden eines MCP-Clients

Copilot Studio

  1. Öffnen Sie Ihren Agent → Tools → Tool hinzufügen → Neues Tool → Model Context Protocol.

  2. Servername: enable-nz-mcp (oder was auch immer Sie möchten – dies ist nur ein Label).

  3. Server-URL: https://enable-nz-mcp.duckdns.org/mcp

  4. Authentifizierung: Keine Authentifizierung (so lassen, es sei denn, der Server hat API_KEY gesetzt; in diesem Fall wählen Sie eine API-Key/Bearer-Auth-Option und geben Sie sie an).

  5. Erstellen → Copilot Studio verbindet sich über Streamable HTTP (das einzige Transportprotokoll, das es seit der Abschaffung von SSE im August 2025 unterstützt) und listet search_enable_nz, get_page und list_sections auf. Fügen Sie das Tool zu Ihrem Agent hinzu und testen Sie es mit einer Eingabeaufforderung wie „Suche auf enable.co.nz nach Rollstuhlfinanzierung".

VS Code Copilot

  1. Öffnen Sie die Befehlspalette → MCP: Server hinzufügen.

  2. Wählen Sie HTTP und geben Sie https://enable-nz-mcp.duckdns.org/mcp ein.

  3. VS Code listet search_enable_nz, get_page und list_sections als verfügbare Tools auf, sobald die Verbindung hergestellt ist.

Claude Desktop

  1. Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen.

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

  3. Claude verhandelt das Streamable-HTTP-Transportprotokoll automatisch.

Jeder andere MCP-Client

Richten Sie ihn auf https://enable-nz-mcp.duckdns.org/mcp mit dem Streamable-HTTP-Transport. Wenn API_KEY auf dem Server gesetzt ist, senden Sie Authorization: Bearer <key>.


Lokale Entwicklung

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

Testen Sie den laufenden Server mit MCP Inspector:

npx @modelcontextprotocol/inspector
# connect to http://127.0.0.1:8081/mcp

Oder führen Sie einen manuellen Smoke-Test durch:

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"}'

Führen Sie die Testsuite aus:

npm test

Bereitstellung

Der Server läuft auf einem bestehenden DigitalOcean-Droplet unter einem eigenen, nicht privilegierten Systembenutzer (mcpsvc), isoliert von anderen Diensten auf derselben Maschine – mcpsvc hat kein sudo und keinen Lesezugriff außerhalb von /opt/enable-nz-mcp. Siehe deploy/ecosystem.config.cjs für die pm2-Prozesskonfiguration und deploy/Caddyfile.example für den Reverse-Proxy-Block.

Sowohl pm2- als auch Caddy-Konfigurationsänderungen benötigen Root-Rechte, daher kann mcpsvc nicht weiter gehen als pm2 save auf eigene Faust – ein Administrator muss pm2 startup ausführen (um den Prozess über Neustarts hinweg zu erhalten) und den Caddy-Site-Block installieren/neu laden. Rate Limiting wird derzeit nicht auf der Caddy-Ebene angewendet: Es erfordert das Drittanbieter-Plugin caddy-ratelimit, das nicht in der Caddy-Build dieser Maschine enthalten ist.

Der Workflow .github/workflows/refresh-index.yml crawlt die Website wöchentlich neu (Sonntag 02:00 UTC, oder manuell über workflow_dispatch), prüft eine Mindestanzahl/-größe von Seiten und stellt den neuen Index über rsync + ein atomares mv über SSH bereit. Er benötigt drei Repository-Secrets: DEPLOY_SSH_KEY, DEPLOY_HOST, DEPLOY_USER – unter Verwendung eines dedizierten Deploy-Keypairs, das über eine command=-Direktive in authorized_keys eingeschränkt ist, sodass es nur das rsync/mv ausführen kann, nicht eine beliebige Shell.


Nicht im Umfang von v1

  • Embeddings / semantische Suche (Stichwortsuche über SQLite FTS5 ist für eine Marketing-Website ausreichend)

  • Headless-Browser-Rendering

  • Multi-Site-Unterstützung

  • Schreiboperationen jeglicher Art

  • Benutzer-Authentifizierung oder Mandantenisolierung

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