DNS服务发现工具

mcp-www是一个基于DNS的MCP服务发现和安装工具,利用现有的DNS基础设施进行服务发现,无需集中式注册表或硬编码配置。

  • by kormco
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 kormco/mcp-browse

使用说明

mcp www

基于DNS的MCP服务发现和安装。

问题

代理需要发现MCP服务器,但目前的方法依赖于集中式注册表或硬编码配置。这会产生单点故障,增加部署开销,并迫使代理进入围墙花园。应该有一种方法可以使用无处不在的基础设施来发现MCP服务:DNS。

运作原理

mcp www 它本身就是一个标准的MCP服务器。代理连接到它的方式与连接到任何其他MCP服务器的方式相同——没有新的客户端代码,没有特殊的SDK,也没有注册表注册。

连接后,代理调用 discover 使用域名。mcp-www执行标准 UDP DNS TXT查找 为了 _mcp.{domain},解析记录,并返回所有通告的MCP服务器。然后 browse 连接到这些服务器并检索其完整清单。最后, install 生成配置以将服务器永久添加到用户的MCP客户端。

Agent  →  mcp-www  →  discover("example.com")  →  DNS TXT lookup
                   →  browse("example.com")     →  server card GET with MCP handshake fallback
                   →  install("example.com")    →  config for Claude Desktop / VS Code / Cursor / Windsurf

循环中没有HTTP注册表。DNS基础设施 是 登记处。

安装

npm install -g mcp-www

或直接与 npx:

npx mcp-www

克劳德代码/MCP客户端配置

添加到您的MCP客户端配置中(例如。, .mcp.json):

{
  "mcpServers": {
    "mcp-www": {
      "type": "stdio",
      "command": "npx",
      "args": ["mcp-www"]
    }
  }
}

试试看

korm.co 发布直播 _mcp TXT记录。您可以发现它并与之进行端到端的交互:

discover("korm.co")            → DNS lookup, returns all _mcp TXT records
discover_browse("korm.co")     → DNS + server card in one call, init as fallback
browse({ domain: "korm.co" })  → server card first, MCP handshake as fallback
call_remote_tool("https://mcp.korm.co", "browse_posts")  → returns blog articles
read_remote_resource("https://mcp.korm.co", "korm://bio") → reads author bio
get_remote_prompt("https://mcp.korm.co", "recommend-post", { "topic": "AI" }) → gets prompt
install({ domain: "korm.co" }) → generates config to add to your MCP client

设计要点

  • 使用UDP DNS(端口53)进行查找 --尽可能轻的网络原语。一个UDP数据包输出,一个数据包返回。
  • DNS基础设施是注册表 --无需部署额外的服务器,无需维护正常运行时间,无需创建帐户。如果您可以发布TXT记录,则可以宣传您的MCP服务器。
  • mcp-www是一个标准的mcp服务器 --任何符合MCP的代理都可以在没有新客户端代码的情况下使用它。
  • 支持多条TXT记录 --一个域可以发布多个 _mcp TXT记录,每个记录都宣传一个不同的MCP服务器。例如,公共内容服务器与经过身份验证的API一起:
    _mcp.example.com  TXT  "v=mcp1; src=https://mcp.example.com; auth=none"
    _mcp.example.com  TXT  "v=mcp1; src=https://api.example.com/mcp; auth=oauth2"
    
    discover 返回所有记录——代理根据身份验证要求和功能决定连接到哪个记录。代理应如何在同一域的多个服务器之间进行选择是一个悬而未决的问题。
  • 适用于分域DNS --企业和专用网络可以发布内部 _mcp 仅在其网络内可见的记录。
  • 允许通过环境变量覆盖默认系统DNS解析器: MCP_DNS_SERVER=192.168.68.133:5335 npx mcp-www

工具

discover

仅DNS查询。返回全部 _mcp.{domain} TXT记录——可以有多个,每个记录都宣传一个不同的MCP服务器。支持单域或批量查找。

{ "tool": "discover", "arguments": { "domain": "example.com" } }
{ "tool": "discover", "arguments": { "domains": ["example.com", "acme.org"] } }

discover_browse

DNS查找+服务器卡在一次呼叫中。查找全部 _mcp.{domain} TXT记录,然后获取 .well-known/mcp.json 用于服务器元数据。只有在找不到服务器卡的情况下,才会回退到MCP初始化。

{ "tool": "discover_browse", "arguments": { "domain": "example.com" } }

browse

检查域或服务器URL。尝试 .well-known/mcp.json (服务器卡)首先,只有在没有找到服务器卡的情况下,才回退到MCP初始化握手。对于域:还执行DNS查找 _mcp TXT记录。

{ "tool": "browse", "arguments": { "domain": "example.com" } }
{ "tool": "browse", "arguments": { "url": "https://mcp.example.com" } }

call_remote_tool

调用远程MCP服务器上的工具。使用 browse 首先发现可用的工具,然后使用它来执行它们。

{
  "tool": "call_remote_tool",
  "arguments": {
    "url": "https://mcp.example.com",
    "tool": "list_articles",
    "arguments": { "limit": 5 }
  }
}

read_remote_resource

通过资源的URI从远程MCP服务器读取资源。

{
  "tool": "read_remote_resource",
  "arguments": {
    "url": "https://mcp.example.com",
    "uri": "korm://bio"
  }
}

get_remote_prompt

从远程MCP服务器获取带有可选参数的提示。

{
  "tool": "get_remote_prompt",
  "arguments": {
    "url": "https://mcp.example.com",
    "prompt": "recommend-post",
    "arguments": { "topic": "AI vision" }
  }
}

install

生成客户端配置以永久添加已发现的MCP服务器。返回Claude Desktop、VS Code、Cursor和Windsurf的配置文件路径和JSON条目。代理读取目标配置文件,合并条目并将其写回。

{ "tool": "install", "arguments": { "domain": "example.com" } }
{ "tool": "install", "arguments": { "url": "https://mcp.example.com", "name": "my-server" } }

状态

工作。 服务器通过Streamable HTTP传输实现基于DNS的发现、服务器检查、远程工具调用、资源读取、提示检索和客户端安装。

注: 基于DNS的MCP发现 _mcp TXT记录当前位于 SEP前的研究现状 --它还不是模型上下文协议规范的批准部分。看 讨论#2334 和 讨论#2368 对于正在进行的工作。格式和行为可能会随着规范的发展而变化。

欢迎反馈、批评和替代方法——打开一个问题或开始讨论。

安全

基于DNS的信任模型

因为mcp-www使用DNS TXT记录进行发现,所以域名所有权是由DNS基础设施本身强制执行的——只有域名所有者(或其DNS提供商)可以发布 _mcp TXT记录。这本质上比集中式注册表更强,集中式注册表引入了单点折衷。

IDN同形图攻击检测

mcp www检测 IDN同形词攻击 在所有域查找中。这些攻击使用来自不同Unicode脚本的视觉上相同的字符(例如,西里尔字母“a”与拉丁语“a”)来欺骗合法域名。

检测范围:

  • Punycode编码域 --以开头的标签 xn-- (国际化域名的ASCII编码)
  • 混合脚本标签 --包含多种文字字符的单个标签(例如拉丁语+西里尔语)
  • 非拉丁标签 --完全西里尔文/希腊语标签,可以在视觉上模仿常见的拉丁语域

检测到时,会显示一个突出的警告作为单独的内容块,指示代理在继续之前与用户验证域。查找未被阻止——警告是信息性的。

其他注意事项

  • 无隐含信任 --mcp-www发现并检查远程服务器,但工具执行(call_remote_tool)总是一个明确的代理动作。
  • 分域DNS --私人/内部 _mcp 记录只能在其发布的网络内解析。
  • 万国码规范化 --在查找之前,所有域输入都经过NFC归一化。

相关

许可证

麻省理工学院