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

サーバーはインデックスをメモリにキャッシュしません。すべてのツール呼び出しは、ディスク上のindex.dbに対して新しい読み取り専用接続を開きます。毎週のクロールがインデックスを再構築し、単一のアトミックなmvで入れ替えるため、ダウンタイムや再起動なしでインデックスが更新されます。

すべての方向で読み取り専用です。クローラーはenable.co.nzのみを読み取り、MCPツールはローカルのSQLiteインデックスのみを読み取ります。いかなる書き込み操作も行いません。


Related MCP server: Net-Syphon

ツール

search_enable_nz

enable.co.nz全体の全文検索。

パラメータ

型

必須

備考

query

string

はい

検索語

limit

integer

いいえ

デフォルト5、最大20

section

string

いいえ

1つのセクションに制限(例: services)

関連性でランク付けされた一致するページを返します。各ページにはurl、title、section、およびハイライトされたスニペットが含まれます。

get_page

URLで1ページの全文を取得します。

パラメータ

型

必須

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キー/ベアラー認証オプションを選択して提供してください)。

  5. 作成 → Copilot StudioはStreamable HTTP(2025年8月に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クライアント

Streamable HTTPトランスポートを使用して、https://enable-nz-mcp.duckdns.org/mcpを指定します。サーバーに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以外への読み取りアクセスもありません。pm2プロセス設定についてはdeploy/ecosystem.config.cjsを、リバースプロキシブロックについては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経由で使用して新しいインデックスをデプロイします。3つのリポジトリシークレットが必要です:DEPLOY_SSH_KEY、DEPLOY_HOST、DEPLOY_USER。authorized_keysのcommand=ディレクティブで制限された専用のデプロイキーペアを使用するため、任意のシェルではなくrsync/mvのみを実行できます。


v1の対象外

  • 埋め込み / セマンティック検索(1つのマーケティングサイトにはSQLite FTS5によるキーワード検索で十分)

  • ヘッドレスブラウザレンダリング

  • マルチサイトサポート

  • いかなる書き込み操作

  • ユーザーレベルの認証またはテナントごとの分離

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