mcpField
N
Na Meetings

Na Meetings

リモート
mcp.bmlt.appヘルスケア023 週間前に更新
リポジトリ公式サイト

Na Meetings について

Na Meetingsは、BMLTディレクトリからNarcotics Anonymousのミーティングを探すMCPサービスです。場所、時間、形式、サービス地域で絞り込める読み取り専用検索を、ミーティングを探す人やAIクライアントに提供します。

主な機能

  1. 01住所または座標によるミーティング検索
  2. 02曜日・時間・形式・会場による絞り込み
  3. 03個別ミーティングの詳細取得
  4. 04ミーティング形式とサービス団体の一覧
  5. 05ルートサーバー情報の確認

活用シーン

  1. 01曜日や形式を指定して近隣のNAミーティングを検索
  2. 02オンライン・対面・ハイブリッド形式で絞り込み
  3. 03ミーティング形式コードやサービス地域の確認

MCP 対応

Streamable HTTP経由で、読み取り専用かつ冪等なツールをMCPクライアントに提供し、BMLTミーティングディレクトリにアクセスします。デフォルトのバックエンドは公開BMLTルートサーバーのアグリゲーターです。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.bmlt.app/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

6
パラメーター型必須説明
pageintegerいいえページ番号(1 始まり)。page_size と併用します。
addressstringいいえ近隣を検索するための自由形式の住所(サーバー側でジオコーディング)。latitude と longitude が指定されている場合は無視されます。
languagestringいいえフォーマット名に使用する言語コード(例:"en"、"es"、"de"、"fr")。
latitudenumberいいえ10 進度数で表した緯度。longitude と組み合わせると、正確な座標で検索できます。
weekdaysarrayいいえ曜日フィルター。1=日曜日、2=月曜日、……、7=土曜日。例:[2,4,6] は月/水/金曜日です。
longitudenumberいいえ10 進度数で表した経度。latitude と組み合わせると、正確な座標で検索できます。
page_sizeintegerいいえ1 ページあたりの結果数。省略すると、一致するすべての結果を返します。
radius_kmnumberいいえ検索半径(キロメートル)。radius_miles も指定されている場合は、こちらが優先されます。座標が指定されていない場合は無視されます。
format_idsarrayいいえ一致させる BMLT フォーマット ID。list_formats を使って ID を確認してください(例:Open、Closed、Speaker、Beginners)。
data_formatenumいいえ"summary" は厳選されたフィールドのサブセットを返します(デフォルト)。"full" は未加工の BMLT レスポンスを返します。summary | full
search_textstringいいえミーティング名、場所、メモを全文検索します。
venue_typesarrayいいえ会場タイプのフィルター。1=対面、2=オンライン、3=ハイブリッド。
radius_milesnumberいいえ検索半径(マイル)。デフォルトは 10 です。radius_km が指定されている場合、または座標が指定されていない場合は無視されます。
starts_afterstringいいえ最も早い開始時刻。24 時間表記の "HH:MM"(例:"18:00")。
starts_beforestringいいえ最も遅い開始時刻。24 時間表記の "HH:MM"(例:"21:30")。
root_server_urlstringいいえ設定済みの BMLT ルートサーバー URL を上書きします。BMLT_ALLOW_ANY_ROOT=true でない限り、許可リストへの登録が必要です。
service_body_idsarrayいいえ特定のサービス組織(地域/エリア)に限定します。list_service_bodies を使って ID を確認してください。
recursive_servicesbooleanいいえservice_body_ids が設定されている場合、その子要素も含めます。デフォルトは true です。

詳細

bmlt-server-mcp

BMLT(Basic Meeting List Toolbox — Narcotics Anonymous のミーティングディレクトリ)を、AI アシスタントが直接呼び出せる読み取り専用ツールとして提供する、ストリーミング可能な HTTP Model Context Protocol サーバーです。

BMLT は、世界中の Narcotics Anonymous ミーティングの約 85%を掲載しています。デフォルトのバックエンドは BMLT aggregator で、すべての公開 BMLT ルートサーバー(サーバー一覧)を統合し、単一の検索画面を提供します。つまり、NA ミーティングを探すための、AI がアクセスできる信頼性の高い情報源です。

MCP はオープンプロトコルであるため、互換性のあるクライアントであればどれでも利用できます:Claude(Code、Desktop、Web)、ChatGPT(Connectors と Responses API)、Google Gemini、Cursor、Windsurf、Zed、Cline、Continue などです。

ローカルのサブプロセスとして実行される、stdio のみ対応の npm bmlt-mcp-server とは異なり、このサーバーは HTTP 経由で MCP を通信し、一度ホストしてリモートから利用することを想定しています。

公式の laravel/mcp パッケージを使い、Laravel + PHP 8.2+ で構築されています。

https://mcp.bmlt.app/(ランディングページ)で稼働中のデプロイを利用でき、ツールのリファレンスは https://mcp.bmlt.app/reference にあります。


ツール

すべてのツールは読み取り専用で、冪等です。すべてのツールは省略可能な root_server_url 引数を受け取ります。省略した場合は、設定された BMLT_ROOT_SERVER_URL が使用されます。

ツール機能
search_meetings住所(サーバー側でジオコーディング)または緯度・経度と半径でミーティングを検索します。曜日、時間、形式、会場タイプ(対面/バーチャル/ハイブリッド)、サービス組織、フリーテキストで絞り込めます。デフォルトでは整理された概要を返します(生の BMLT レスポンスを取得するには data_format=full を指定します)。
get_meetingBMLT の id_bigint で単一のミーティングを取得します。
list_formatsミーティング形式コード(Open、Closed、Speaker、Beginners、言語タグなど)を一覧表示し、呼び出し側が search_meetings で使用する名前を ID に対応付けられるようにします。
list_service_bodiesゾーン/地域/エリア/グループを一覧表示し、呼び出し側が search_meetings で使用する名前を ID に対応付けられるようにします。
get_server_info設定されたルートサーバーの機能、バージョン、言語、デフォルト座標を返します。
list_root_serversアグリゲーターが認識している公開 BMLT ルートサーバーを一覧表示します。呼び出し側がルートを切り替えたい場合に便利です。

クイックスタート

Docker(推奨)
cp .env.example .env
docker compose up --build

その後、Streamable HTTP トランスポート経由で http://localhost:8080/mcp に MCP エンドポイントが公開されます。

ローカル PHP
composer install
cp .env.example .env
php artisan key:generate
php artisan serve     # http://localhost:8000/mcp
MCP Inspector で確認する
php artisan mcp:inspector

http://localhost:8000/mcp(Docker の場合は :8080)に接続し、ツール一覧を表示します。


設定

すべての設定は .env に記述します(.env.example を参照)。主な項目は次のとおりです。

変数用途
BMLT_ROOT_SERVER_URL必須。 デフォルトの BMLT ルートサーバー。/main_server パスを含めて指定します。
BMLT_ALLOWED_ROOTS省略可能な root_server_url ツール引数で許可する URL のカンマ区切りリストです。デフォルトのルートは常に暗黙的に許可されます。
BMLT_ALLOW_ANY_ROOTtrue にすると、root_server_url で任意の URL を指定できます。本番環境では推奨されません(SSRF のようなクエリが可能になります)。デフォルトでは無効です。
BMLT_AGGREGATOR_URLlist_root_servers がクエリするアグリゲーターです。デフォルトでは公開アグリゲーターを使用します。
GEOCODERnominatim(デフォルト)、google、または null を指定します。null の場合、住所入力は拒否され、緯度・経度が必須になります。
NOMINATIM_USER_AGENTOSM にデプロイ環境を識別させるための値です。Nominatim の利用規約により必須です。本番環境では必ず設定してください。
GOOGLE_GEOCODER_API_KEYGEOCODER=google の場合に必須です。
なぜ許可リストが必要なのか?

任意の root_server_url ツール引数を指定すると、1つのデプロイ環境で任意の BMLT ルートを利用できますが、任意の URL を受け入れると、呼び出し元がサーバーを利用してネットワークに対する SSRF プローブを実行できてしまいます。デフォルトでは、厳格な許可リスト(設定済みのデフォルトルートと、BMLT_ALLOWED_ROOTS に追加したルート)が適用されます。BMLT_ALLOW_ANY_ROOT=true を設定するのは、サーバーが機密情報から隔離されている場合に限ってください。


AI クライアントの接続

デプロイ済みインスタンスのエンドポイントは https://your-host.example.com/mcp です。以下のホスト名を独自のものに置き換えてください(または、公開インスタンスを試すには https://mcp.bmlt.app/mcp を使用してください)。

Claude Code(CLI)
claude mcp add --transport http bmlt https://your-host.example.com/mcp
Claude Desktop — カスタムコネクター(新しいビルド)

Settings → Connectors → Add custom connector → URL を貼り付けます。

Claude Desktop — 設定ファイル(すべてのバージョン、Node.js が必要)
{
  "mcpServers": {
    "bmlt": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://your-host.example.com/mcp"]
    }
  }
}
ChatGPT / OpenAI Responses API
{
  "tools": [
    {
      "type": "mcp",
      "server_label": "bmlt",
      "server_url": "https://your-host.example.com/mcp"
    }
  ]
}

ChatGPT 自体で設定する場合(Pro/Business/Enterprise):Settings → Connectors → Add で、同じ URL を使用します。

Cursor / Windsurf / Zed / Cline / Continue

これらはすべて mcpServers ブロックを読み込みます。Cursor の場合は ~/.cursor/mcp.json(またはプロジェクトローカルの .cursor/mcp.json)を編集してください。その他のクライアントでは、同様の設定ファイルを使用します。

{
  "mcpServers": {
    "bmlt": {
      "url": "https://your-host.example.com/mcp"
    }
  }
}

ツールごとのパラメーターのドキュメントと BMLT-API の対応については、ライブのリファレンスページを参照してください。デプロイ済みインスタンスで日常的に使用するコマンド(ログの追跡、使用状況の概要確認、キャッシュのクリア、アップグレード)については、docs/operations.mdを参照してください。


認証の追加

デフォルトの設定では認証がなく、/mcp にアクセスできる人なら誰でもツールを呼び出せます。アクセスを制限するには、次のようにします。

// routes/ai.php
use Laravel\Mcp\Facades\Mcp;

Mcp::oauthRoutes();                          // OAuth 2.1 (Laravel Passport)
Mcp::web('/mcp', BmltServer::class)
    ->middleware('auth:api');

または、カスタムミドルウェアを使ってシンプルなベアラートークンチェックを追加してください。すべてのオプションについては、Laravel MCP のドキュメントを参照してください。


アーキテクチャ

app/
├── Mcp/
│   ├── Servers/BmltServer.php           # Registers the 6 tools
│   └── Tools/
│       ├── SearchMeetingsTool.php
│       ├── GetMeetingTool.php
│       ├── ListFormatsTool.php
│       ├── ListServiceBodiesTool.php
│       ├── GetServerInfoTool.php
│       ├── ListRootServersTool.php
│       └── Concerns/ResolvesBmltClient.php
├── Services/
│   ├── Bmlt/
│   │   ├── BmltClient.php               # Wraps client_interface/json
│   │   ├── BmltClientFactory.php        # Allowlist enforcement
│   │   └── BmltException.php
│   └── Geocoding/
│       ├── Geocoder.php                 # Interface
│       ├── GeocoderManager.php          # Driver resolver
│       ├── NominatimGeocoder.php        # OSM (rate-limited, cached)
│       ├── GoogleGeocoder.php           # Google Geocoding API
│       ├── NullGeocoder.php             # Disabled
│       ├── GeocodingResult.php
│       └── GeocodingException.php
└── Providers/BmltServiceProvider.php

config/bmlt.php                          # All knobs
routes/ai.php                            # Mcp::web('/mcp', BmltServer::class)

BmltClient がラップする HTTP API は、BMLT Semantic OpenAPI ドキュメント(OpenAPI 3.1)で正式に仕様化されています。この MCP サーバーがまだツール引数として公開していない場合でも、BMLT 自体がサポートするすべてのパラメーター、レスポンス形式、フィールド定義については、このドキュメントを参照してください。


ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。