Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
Search Narcotics Anonymous meetings worldwide via the BMLT directory.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://mcp.bmlt.app/mcp在终端中运行这条命令
claude mcp add --transport http bmlt https://mcp.bmlt.app/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"bmlt": {
"url": "https://mcp.bmlt.app/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"bmlt": {
"type": "http",
"url": "https://mcp.bmlt.app/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://mcp.bmlt.app/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 bmlt-enabled 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(0.3.0)于6个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A streamable HTTP Model Context Protocol server that exposes BMLT (Basic Meeting List Toolbox — the Narcotics Anonymous meeting directory) as a set of read-only tools that AI assistants can call directly.
BMLT hosts approximately 85% of Narcotics Anonymous meetings worldwide; the default backend is the BMLT aggregator, which federates every public BMLT root server (server list) into a single search surface — effectively the authoritative AI-accessible source for finding NA meetings.
MCP is an open protocol, so any compatible client works: Claude (Code, Desktop, web), ChatGPT (Connectors and the Responses API), Google Gemini, Cursor, Windsurf, Zed, Cline, Continue, and others.
Unlike the npm bmlt-mcp-server (stdio-only, runs as a local subprocess), this server speaks MCP over HTTP and is meant to be hosted once and consumed remotely.
Built on Laravel + PHP 8.2+ using the official laravel/mcp package.
A live deployment runs at https://mcp.bmlt.app/ (landing page) with a tools reference at https://mcp.bmlt.app/reference.
All tools are read-only and idempotent. All tools accept an optional root_server_url argument; if omitted, the configured BMLT_ROOT_SERVER_URL is used.
| Tool | What it does |
|---|---|
search_meetings | Search meetings by address (geocoded server-side) or lat/lng + radius, filtered by weekday, time, format, venue type (in-person / virtual / hybrid), service body, and free text. Returns a curated summary by default (data_format=full for the raw BMLT response). |
get_meeting | Fetch a single meeting by its BMLT id_bigint. |
list_formats | List meeting format codes (Open, Closed, Speaker, Beginners, language tags, …) so callers can map names → IDs for search_meetings. |
list_service_bodies | List zones / regions / areas / groups so callers can map names → IDs for search_meetings. |
get_server_info | Capabilities, version, languages, and default coordinates for the configured root server. |
list_root_servers | Public BMLT root servers known to the aggregator. Useful when the caller wants to switch roots. |
cp .env.example .env
docker compose up --build
The MCP endpoint is then live at http://localhost:8080/mcp over the Streamable HTTP transport.
composer install
cp .env.example .env php artisan key:generate php artisan serve # http://localhost:8000/mcp
php artisan mcp:inspector
Then connect to http://localhost:8000/mcp (or :8080 for Docker) and list tools.
All configuration lives in .env (see .env.example). The interesting bits:
| Variable | Purpose |
|---|---|
BMLT_ROOT_SERVER_URL | Required. Default BMLT root server, including /main_server path. |
BMLT_ALLOWED_ROOTS | Comma-separated allowlist for the optional root_server_url tool argument. The default root is always implicitly allowed. |
BMLT_ALLOW_ANY_ROOT | true allows any URL via root_server_url — not recommended in production (enables SSRF-style queries). Off by default. |
BMLT_AGGREGATOR_URL | Aggregator queried by list_root_servers. Defaults to the public aggregator. |
GEOCODER | nominatim (default), google, or null. null rejects address inputs and requires lat/lng. |
NOMINATIM_USER_AGENT | Identifies your deployment to OSM — required by Nominatim's ToS. Always set this in production. |
GOOGLE_GEOCODER_API_KEY | Required when GEOCODER=google. |
The optional root_server_url tool argument lets a single deployment serve any BMLT root, but accepting arbitrary URLs would let callers turn the server into an SSRF probe against your network. The default is a strict allowlist (the configured default root, plus anything you add to BMLT_ALLOWED_ROOTS). Set BMLT_ALLOW_ANY_ROOT=true only when the server is isolated from anything sensitive.
The endpoint of a deployed instance is https://your-host.example.com/mcp. Replace it below with your own host (or use https://mcp.bmlt.app/mcp to try the public instance).
claude mcp add --transport http bmlt https://your-host.example.com/mcp
Settings → Connectors → Add custom connector → paste the URL.
{
"mcpServers": { "bmlt": { "command": "npx", "args": ["-y", "mcp-remote", "https://your-host.example.com/mcp"] } } }
{
"tools": [ { "type": "mcp", "server_label": "bmlt", "server_url": "https://your-host.example.com/mcp" } ] }
In ChatGPT itself (Pro/Business/Enterprise): Settings → Connectors → Add, using the same URL.
All of these read an mcpServers block. For Cursor, edit ~/.cursor/mcp.json (or the project-local .cursor/mcp.json); other clients use a similar config file.
{
"mcpServers": { "bmlt": { "url": "https://your-host.example.com/mcp" } } }
For per-tool parameter documentation and BMLT-API mappings, see the live reference page. For day-to-day commands on a deployed instance (log tailing, usage summaries, cache clears, upgrades), see docs/operations.md.
The default config has no auth — anyone who can reach /mcp can call the tools. To gate it:
// routes/ai.php
use Laravel\Mcp\Facades\Mcp;
Mcp::oauthRoutes(); // OAuth 2.1 (Laravel Passport) Mcp::web('/mcp', BmltServer::class) ->middleware('auth:api');
Or add a simple bearer-token check via custom middleware. See the Laravel MCP docs for the full options.
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)
The HTTP API wrapped by BmltClient is formally specified by the BMLT Semantic OpenAPI document (OpenAPI 3.1) — refer to it for every parameter, response shape, and field definition that BMLT itself supports, even if this MCP server doesn't yet expose it as a tool argument.
MIT