mcpField
N
Na Meetings

Na Meetings

远程服务
mcp.bmlt.app健康医疗023 周前更新

关于 Na Meetings

Na Meetings 是一个通过 BMLT 目录查找全球匿名戒毒会(NA)会议的 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否十进制度数表示的纬度。与 longitude 配对可进行精确坐标搜索。
weekdaysarray否星期筛选条件。1=星期日,2=星期一,……,7=星期六。示例:[2,4,6] 表示星期一/三/五。
longitudenumber否十进制度数表示的经度。与 latitude 配对可进行精确坐标搜索。
page_sizeinteger否每页结果数。省略此项可返回所有匹配项。
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,否则该 URL 必须在允许列表中。
service_body_idsarray否限制为特定服务实体(区域/分区)。使用 list_service_bodies 查找 ID。
recursive_servicesboolean否设置 service_body_ids 后,同时包括其子项。默认值为 true。

详细介绍

bmlt-server-mcp

一个采用 可流式传输的 HTTP 的 模型上下文协议服务,可将 BMLT(Basic Meeting List Toolbox——匿名戒毒互助会会议目录)作为一组只读工具提供,让 AI 助手可以直接调用。

BMLT 收录了全球约 85% 的匿名戒毒互助会会议;默认后端是 BMLT aggregator,它将所有公开的 BMLT 根服务(服务列表)联合起来,提供统一的搜索入口——实际上,它是查找匿名戒毒互助会会议时权威且可供 AI 访问的数据源。

MCP 是开放协议,因此任何兼容的客户端均可使用:Claude(Code、Desktop、网页)、ChatGPT(Connectors 和 Responses API)、Google Gemini、Cursor、Windsurf、Zed、Cline、Continue 等。

与 npm bmlt-mcp-server(仅支持 stdio,以本地子进程运行)不同,本服务通过 HTTP 提供 MCP,旨在部署一次并供远程使用。

基于 Laravel + PHP 8.2+ 构建,使用官方 laravel/mcp 软件包。

线上部署地址为 https://mcp.bmlt.app/(落地页),工具参考文档见 https://mcp.bmlt.app/reference。


工具

所有工具均为只读且幂等。所有工具都接受可选的 root_server_url 参数;若省略,则使用配置的 BMLT_ROOT_SERVER_URL。

工具功能
search_meetings按地址(由服务端进行地理编码)或经纬度 + 半径搜索会议,并可按星期、时间、形式、场地类型(线下 / 虚拟 / 混合)、服务机构和自由文本筛选。默认返回精简摘要(使用 data_format=full 可获取原始 BMLT 响应)。
get_meeting按 BMLT id_bigint 获取单场会议。
list_formats列出会议形式代码(开放、封闭、主讲人、初学者、语言标签等),以便调用方将名称映射为 ID,供 search_meetings 使用。
list_service_bodies列出分区 / 地区 / 区域 / 小组,以便调用方将名称映射为 ID,供 search_meetings 使用。
get_server_info获取已配置根服务的功能、版本、语言和默认坐标。
list_root_servers列出 aggregator 所知的公开 BMLT 根服务。调用方需要切换根服务时可使用。

快速开始

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

随后,MCP 端点将在 http://localhost:8080/mcp 上通过 Streamable HTTP 传输提供服务。

本地 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 工具参数。默认根服务始终隐式允许。
BMLT_ALLOW_ANY_ROOTtrue 允许通过 root_server_url 使用任意 URL——生产环境中不建议这样设置(可能导致 SSRF 类查询)。默认关闭。
BMLT_AGGREGATOR_URLlist_root_servers 查询的 Aggregator。默认使用公共 aggregator。
GEOCODERnominatim(默认)、google 或 null。null 会拒绝地址输入,要求提供经纬度。
NOMINATIM_USER_AGENT用于向 OSM 标识你的部署——Nominatim 的服务条款要求设置。生产环境中务必设置。
GOOGLE_GEOCODER_API_KEY使用 GEOCODER=google 时必需。
为什么使用允许列表?

可选的 root_server_url 工具参数可让单个部署服务任意 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 — 自定义连接器(较新版本)

设置 → 连接器 → 添加自定义连接器 → 粘贴 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):设置 → 连接器 → 添加,并使用相同的 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');

或者通过自定义中间件添加简单的 bearer 令牌检查。完整选项请参阅 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)正式定义——对于 BMLT 本身支持的所有参数、响应结构和字段定义,请参考该文档,即使此 MCP 服务尚未将其作为工具参数公开。


许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。