1. 项目概述:当MCP遇上网络诊断

最近在折腾一些自动化运维和监控脚本,经常需要从代码里直接查询域名解析情况。传统的做法无非是调用系统命令 nslookup 或者 dig ,然后费力地去解析那一大坨文本输出,既麻烦又容易出错。直到我发现了 Ayushje 大佬开源的 nslookup-mcp 这个项目,它完美地解决了我的痛点。简单来说,这是一个基于 Model Context Protocol 的服务器,它把 nslookup 这个命令行工具的能力,封装成了结构化、可编程的接口。

MCP 这个概念可能对部分朋友还比较新,你可以把它理解为一个标准化的“适配器”协议。它允许像 Claude、Cursor 这类 AI 助手或者任何客户端程序,以一种统一、安全的方式去调用外部工具或数据源。 nslookup-mcp 的核心价值就在于此:它让“域名查询”这个基础网络操作,变成了 AI 智能体工作流中一个可靠、可控的原子能力。想象一下,你正在和 AI 讨论一个网站无法访问的问题,AI 可以直接调用这个工具,获取到域名的 A 记录、MX 记录、NS 服务器等详细信息,并基于这些结构化数据进行分析和推理,而不是让你手动去跑命令再粘贴结果。这对于构建自动化诊断机器人、集成到 CI/CD 流水线中检查域名配置、或是作为更复杂网络监控系统的一个组件,都提供了极大的便利。

这个项目本身是用 TypeScript 写的,部署和运行都非常轻量。它没有重新发明轮子去实现 DNS 协议,而是巧妙地包装了系统自带的 nslookup 命令,将其杂乱的文本输出,通过正则表达式和逻辑处理,转换成了干净的 JSON 数据。这种做法既保证了功能的正确性(依赖了系统级工具的广泛测试),又极大地提升了可用性。接下来,我会带你深入拆解这个项目的设计思路、如何部署使用、以及在实际场景中如何发挥它的最大价值,当然,还有我踩过的一些坑和总结的实用技巧。

2. 核心设计思路与架构拆解

2.1 为什么选择 MCP 协议?

在深入代码之前,我们首先要理解作者为什么选择 MCP 作为封装协议。在 AI 智能体开发领域,一个核心挑战是如何让 AI 安全、可控地使用外部工具。早期常见的方式是让 AI 生成代码或命令,然后由执行环境去运行,但这存在安全风险和执行环境隔离的问题。MCP 协议的出现,正是为了标准化工具调用的方式。

MCP 定义了一套清晰的客户端-服务器模型。服务器(就像 nslookup-mcp )负责声明它提供哪些“工具”(Tools)和“资源”(Resources),并实现具体的执行逻辑。客户端(如 Claude Desktop、自定义的 AI 应用)则通过标准的 JSON-RPC over STDIO/SSE 与服务器通信。这样做有几个显著优势: 一是安全 ,工具运行在独立的服务器进程中,权限和资源受到限制; 二是标准化 ,任何兼容 MCP 的客户端都能无缝使用这些工具; 三是结构化 ,输入和输出都是定义良好的 JSON Schema,便于 AI 理解和处理。

nslookup-mcp 将自己定位为一个提供“域名查询”工具的 MCP 服务器。这个设计选择非常聪明,因为它瞄准了一个高频、通用且结果需要被程序化处理的基础网络需求。相比于让 AI 去拼接和解析 nslookup google.com 这样的命令输出,直接调用一个返回 {“A”: [“142.250.74.46”], “AAAA”: […]} 的工具,其可靠性和效率要高得多。

2.2 项目架构与工作流程

这个项目的架构非常清晰,遵循了典型的 MCP 服务器结构。我们来看一下它的核心工作流程:

  1. 服务器启动 :当你运行 nslookup-mcp 时,它会启动一个进程,并通过标准输入输出与客户端建立连接。
  2. 能力宣告 :连接建立后,服务器会首先向客户端发送一个 initialize 响应,其中包含一个 serverInfo 和最重要的 tools 列表。在这个列表里,它会宣告自己提供一个名为 nslookup 的工具,并详细描述这个工具的功能、所需的参数(比如 domain 域名)以及返回值的 JSON 结构。
  3. 工具调用 :当客户端(比如用户通过 AI 界面)想要查询一个域名时,它会向服务器发送一个 tools/call 请求,指定使用 nslookup 工具,并传入参数 {“domain”: “example.com”}
  4. 命令执行与解析 :服务器收到请求后,会在内部调用系统的 nslookup 命令(例如 nslookup -type=A -type=AAAA example.com )。然后,它捕获命令的标准输出。
  5. 输出转换 :这是项目的核心魔法所在。原始的 nslookup 输出是面向人类阅读的文本,不同系统(Windows, Linux, macOS)格式还有差异。服务器内置的解析器会使用一系列正则表达式和逻辑判断,从文本中提取出权威服务器、应答记录、别名记录等信息。
  6. 结构化返回 :解析器将提取的信息组装成一个结构化的 JSON 对象。例如,它会将 A 记录整理到 answers.A 数组下,将 MX 记录整理到 answers.MX 数组下,每个 MX 记录还包含优先级和域名。
  7. 响应客户端 :最后,服务器将这个 JSON 对象通过 tools/call 响应返回给客户端。客户端或 AI 就能直接使用这个清晰的数据结构进行后续处理或展示了。

整个过程中,MCP 协议像一座桥梁,连接了非结构化的命令行世界和结构化的 AI 应用世界。而 nslookup-mcp 就是这座桥上专门负责“域名查询”这个任务的精工巧匠。

2.3 与替代方案的对比

在决定使用 nslookup-mcp 之前,你可能考虑过其他方案,我们来简单对比一下:

  • 直接调用系统命令 :最原始的方式。缺点是需要处理跨平台兼容性、解析复杂的文本输出、处理错误码和超时,代码会变得冗长且脆弱。
  • 使用 Node.js 的 dns 模块 :对于 Node.js 环境,这确实是一个选择。 dns.resolve() 系列函数能返回结构化数据。但 nslookup-mcp 的优势在于 协议层 。它通过 MCP 暴露接口,使得任何语言编写的、任何兼容 MCP 的客户端都能调用,不局限于 Node.js 生态。此外,它包装的是 nslookup ,其行为(如遵循 /etc/resolv.conf 配置)与系统管理员熟悉的命令行工具完全一致,减少了理解成本。
  • 其他 DNS 查询库 :像 dns-packet native-dns 等库功能强大,但需要自己实现 DNS 协议细节和服务器封装。 nslookup-mcp 提供了一个开箱即用、标准化的解决方案。

因此,如果你的场景是 构建与 AI 智能体集成的应用 ,或者希望有一个 统一、跨平台的域名查询 HTTP/JSON-RPC 接口 nslookup-mcp 是一个非常优雅的选择。它把复杂度封装了起来,给你一个简单干净的 API。

3. 部署与运行环境搭建

3.1 环境准备与依赖安装

nslookup-mcp 是一个 Node.js 项目,所以首先你需要确保系统上安装了 Node.js 运行环境。项目要求 Node.js 版本 >= 18,我推荐使用最新的 LTS 版本以保证最好的兼容性。你可以通过 node -v 命令来检查。

安装方式主要有两种:全局安装和项目内安装。对于想要快速体验或作为系统工具使用的,全局安装最方便:

npm install -g @ayushje/nslookup-mcp

安装完成后,你可以通过 nslookup-mcp --help 来验证安装是否成功并查看帮助信息。如果看到命令说明,就表示安装好了。

注意 :在某些系统上,全局安装可能需要 sudo 权限。如果你没有权限或者想避免全局污染,也可以在项目目录内进行本地安装: npm install @ayushje/nslookup-mcp 。之后通过 npx nslookup-mcp 来运行。

除了 Node.js,项目当然还依赖系统本身的 nslookup 命令。这个工具在 Linux、macOS 和 Windows(通常包含在系统或 WSL 中)上都是默认存在的。你可以通过 which nslookup (Linux/macOS)或 where nslookup (Windows)来确认它的位置。

3.2 运行模式详解:STDIO 与 SSE

MCP 服务器支持两种主要的传输方式: STDIO SSE nslookup-mcp 同时支持这两种模式,适用于不同场景。

1. STDIO 模式 这是最简单、最常用的模式,尤其适合与 Claude Desktop 等客户端集成。服务器通过标准输入和标准输出与父进程通信。运行方式就是直接执行命令:

nslookup-mcp

运行后,程序不会退出,而是等待来自 STDIO 的 JSON-RPC 请求。当你想把它配置到 Claude Desktop 中时,就是在配置文件中指定这个命令路径。这种模式开销极小,通信延迟低,是本地集成的首选。

2. SSE 模式 SSE 模式允许服务器通过 HTTP 提供 Server-Sent Events 流。这对于远程调用或者需要通过网络访问的场景非常有用。要启用 SSE 模式,你需要指定端口:

nslookup-mcp --transport sse --port 3000

启动后,服务器会在 http://localhost:3000/sse 提供一个 SSE 端点。客户端可以通过连接这个端点来发送请求和接收响应。同时,它还会在 http://localhost:3000 提供一个简单的 HTML 测试页面,方便你手动测试工具调用。

模式选择建议

  • 个人使用,集成 AI 桌面客户端 :使用默认的 STDIO 模式。
  • 提供网络 API 服务,供其他远程程序调用 :使用 SSE 模式。
  • 调试和测试 :SSE 模式下的 Web 测试界面非常直观,适合初步验证功能。

3.3 与 Claude Desktop 集成实战

目前,MCP 协议最“出圈”的应用就是与 Anthropic 的 Claude Desktop 客户端集成。下面我手把手带你配置,让你在 Claude 的对话窗口中直接使用域名查询功能。

  1. 找到 Claude Desktop 的配置目录

    • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows : %APPDATA%\Claude\claude_desktop_config.json
    • Linux : ~/.config/Claude/claude_desktop_config.json
  2. 编辑配置文件 :如果文件不存在,就创建一个。我们需要在 mcpServers 字段下添加 nslookup-mcp 的配置。

    {
      "mcpServers": {
        "nslookup": {
          "command": "nslookup-mcp"
        }
      }
    }
    

    这里, “nslookup” 是你给这个服务器起的名字,可以自定义。 “command” 就是启动服务器的命令。如果你使用的是全局安装,直接写 “nslookup-mcp” 即可。如果是本地安装,需要写绝对路径,或者使用 npx ,例如 “command”: “npx”, “args”: [“nslookup-mcp”]

  3. 重启 Claude Desktop :修改配置后,完全退出并重新启动 Claude Desktop 应用。

  4. 验证集成 :打开一个新的 Claude 对话。如果配置成功,你通常会在输入框上方看到一个新的工具图标(比如一个螺丝刀或魔杖图标),点击后能看到可用的工具列表。或者,你可以直接输入“请查询一下 example.com 的 DNS 记录”。Claude 应该会识别到它可以调用 nslookup 工具,并自动使用它进行查询,然后将结构化的结果呈现给你。

实操心得 :在配置时,最常见的问题是路径不对导致 Claude 无法启动服务器。一个排查方法是,在终端手动运行你配置的 command ,看是否能正常启动 nslookup-mcp 并等待输入。另外,记得检查 JSON 格式是否正确,最后一个项后面不能有逗号。

4. 工具调用详解与结果解析

4.1 工具定义与参数说明

根据 MCP 协议,服务器需要明确告知客户端它提供什么工具。 nslookup-mcp 提供的工具定义大致如下(具体可通过 Claude 的界面或查询初始化信息看到):

{
  “name”: “nslookup”,
  “description”: “Perform a DNS lookup for a domain name using nslookup.”,
  “inputSchema”: {
    “type”: “object”,
    “properties”: {
      “domain”: {
        “type”: “string”,
        “description”: “The domain name to lookup (e.g., ‘example.com’).”
      },
      “server”: {
        “type”: “string”,
        “description”: “Optional DNS server to use for the lookup (e.g., ‘8.8.8.8’).”
      }
    },
    “required”: [“domain”]
  }
}
  • domain (必需) :要查询的域名。这是最主要的参数。你可以查询根域名如 “google.com” ,也可以查询子域名如 “www.google.com”
  • server (可选) :指定用于查询的 DNS 服务器地址。如果不提供,则使用系统默认的 DNS 解析器(通常是你的路由器或 ISP 提供的)。这个参数在诊断 DNS 污染、测试特定 DNS 服务器(如 8.8.8.8 1.1.1.1 )下的解析结果时非常有用。

4.2 响应数据结构深度解析

工具调用的返回值是一个结构化的 JSON 对象,这是 nslookup-mcp 的核心价值。理解这个结构,你才能更好地利用返回的数据。一个典型的成功响应如下:

{
  “authority”: “a.root-servers.net”,
  “answers”: {
    “A”: [
      { “address”: “93.184.216.34”, “ttl”: 600 }
    ],
    “AAAA”: [
      { “address”: “2606:2800:220:1:248:1893:25c8:1946”, “ttl”: 600 }
    ],
    “MX”: [
      { “priority”: 10, “exchange”: “mx.example.com”, “ttl”: 3600 }
    ],
    “NS”: [
      { “target”: “ns1.example.com”, “ttl”: 86400 },
      { “target”: “ns2.example.com”, “ttl”: 86400 }
    ],
    “TXT”: [
      { “text”: “v=spf1 include:_spf.example.com ~all”, “ttl”: 300 }
    ],
    “CNAME”: [
      { “target”: “real.example.com”, “ttl”: 300 }
    ]
  },
  “rawOutput”: “Server: 8.8.8.8\nAddress: 8.8.8.8#53\n\nNon-authoritative answer:\nName: example.com\nAddress: 93.184.216.34\n”
}

我们来拆解每个字段:

  • authority :指出提供权威答案的 DNS 服务器。这对于判断答案来源是否可靠很重要。如果是缓存回答,这里可能显示你的本地 DNS 解析器。
  • answers :这是一个对象,键是 DNS 记录类型,值是对应记录的数组。这是最常用的部分。
    • A / AAAA :IPv4 和 IPv6 地址记录。每个记录包含 address ttl
    • MX :邮件交换记录。包含 priority (数字越小优先级越高)和 exchange (邮件服务器域名)。
    • NS :域名服务器记录。指出该域名的权威 DNS 服务器。
    • TXT :文本记录。常用于 SPF、DKIM、DMARC 等邮件验证,或存放其他任意文本信息。
    • CNAME :别名记录。表示该域名是另一个域名的别名。
    • 其他可能出现的类型还包括 SOA (起始授权机构)、 PTR (反向解析)、 SRV (服务定位)等,取决于查询。
  • rawOutput :原始的 nslookup 命令输出文本。这是一个非常贴心的设计。当解析器可能因为输出格式意外而解析失败,或者你需要查看完整的、未经处理的原始信息(包括注释、错误信息)时,这个字段就派上了大用场。 在调试和故障排查时,应首先查看此字段。

4.3 通过 SSE 接口进行手动测试

当你以 SSE 模式运行服务器时,除了可以用客户端调用,还可以直接通过浏览器或 curl 进行手动测试,这对于开发和调试至关重要。

  1. 使用 Web 测试页面 :启动 SSE 模式后,访问 http://localhost:3000 (或你指定的端口)。你会看到一个简单的 HTML 页面,里面通常有一个表单,可以输入 domain 和可选的 server 参数。点击提交,页面会通过 JavaScript 调用 /messages 端点并显示返回的 JSON 结果。这是最直观的测试方式。

  2. 使用 curl 命令测试 :如果你想在命令行中测试,或者将其集成到 Shell 脚本中,可以使用 curl 。SSE 模式的交互稍微复杂,因为它是一个长连接。更简单的方式是,服务器通常也提供一个普通的 HTTP POST 端点来模拟工具调用(具体需查看项目文档或代码)。如果项目没有提供,你可以模拟 MCP 的 tools/call 请求。不过,Web 测试页面已经足够满足大多数手动测试需求。

  3. 观察日志 :在启动服务器时,你可以添加 --verbose --debug 标志(如果项目支持)来输出更详细的日志,看到接收到的请求和发送的响应,这对于理解通信过程非常有帮助。

5. 高级应用场景与实战案例

5.1 场景一:构建自动化网络诊断机器人

假设你需要维护一个内部聊天工具(如 Slack、钉钉)上的运维机器人。当开发同事报告“网站打不开了”,传统的流程是运维人员手动 SSH 到服务器跑命令。现在,你可以用 nslookup-mcp 来赋能这个机器人。

架构设计

  1. 在一个常驻服务器上,以 SSE 模式 运行 nslookup-mcp ,作为一个内部网络服务。
  2. 你的聊天机器人后端(可以用 Python、Node.js 等任何语言编写)充当 MCP 客户端。
  3. 当机器人收到“/dns check example.com”这样的指令时,后端向 http://your-server:3000/sse 发起 SSE 连接,并发送 tools/call 请求。
  4. 收到结构化的 JSON 响应后,后端可以智能地分析:是否返回了 IP?返回的 IP 是否在预期的网段?TTL 是否异常?然后生成人类可读的报告,如“域名解析正常,IP 为 1.2.3.4,TTL 剩余 300 秒”,或者“解析失败,可能域名未配置或 DNS 服务器故障”,并附上原始输出 ( rawOutput ) 供高级用户查看。

优势 :将专业操作封装成简单的聊天命令,提升了响应速度,降低了运维人员的工作负担,并且所有查询都有日志可追溯。

5.2 场景二:集成到 CI/CD 流水线

在部署微服务或更新网站时,错误的 DNS 配置可能导致严重故障。你可以将 nslookup-mcp 集成到 CI/CD 流水线(如 GitHub Actions, GitLab CI)中,进行预发布检查。

实践步骤

  1. 在 CI 脚本中,将 nslookup-mcp 作为依赖安装或直接使用 Docker 镜像(如果作者提供)。
  2. 在部署的关键阶段(例如,在更改 DNS 配置后或应用发布前),运行一个检查步骤。
  3. 该步骤通过 STDIO 模式调用 nslookup-mcp ,查询你的生产域名。
  4. 验证返回的 answers.A 是否包含预期的、新的服务器 IP 地址,或者 answers.MX 记录是否正确指向了新的邮件服务商。
  5. 如果检查不通过,则自动中止部署流程,并通知相关人员。

示例(GitHub Actions 步骤片段)

- name: Verify DNS A record before deployment
  run: |
    # 这里需要根据项目提供的具体调用方式编写,假设有一个简单的 CLI 包装
    RESPONSE=$(echo ‘{“jsonrpc”:”2.0”, “id”:1, “method”:”tools/call”, “params”:{“name”:”nslookup”, “arguments”:{“domain”:”${{ vars.PRODUCTION_DOMAIN }}”}}}’ | nslookup-mcp)
    # 使用 jq 解析 RESPONSE,检查是否包含预期的 IP
    ACTUAL_IP=$(echo $RESPONSE | jq -r ‘.result.answers.A[0].address’)
    if [ “$ACTUAL_IP” != “${{ secrets.EXPECTED_IP }}” ]; then
      echo “DNS check failed! Expected ${{ secrets.EXPECTED_IP }}, got $ACTUAL_IP”
      exit 1
    fi

5.3 场景三:作为微服务架构中的基础组件

在复杂的微服务架构中,多个服务可能都需要 DNS 查询能力。与其在每个服务里都实现一套 DNS 查询逻辑(可能用不同库,不同错误处理),不如统一部署一个 nslookup-mcp 服务。

部署模式

  • 使用 Docker 容器化 nslookup-mcp ,以 SSE 模式运行。
  • 通过 Kubernetes Service 或 Docker Compose 将其暴露给内部网络。
  • 其他微服务通过 HTTP 客户端调用这个统一的 DNS 查询接口。

好处

  • 一致性 :所有服务获得相同格式的 DNS 数据。
  • 可维护性 :DNS 查询逻辑、超时设置、重试策略等集中在一处,升级和调试方便。
  • 可观测性 :可以在这个 MCP 服务器层面集中添加日志、监控指标(如查询次数、延迟、错误率),便于全局洞察网络解析状况。
  • 安全性 :可以在此服务上实施访问控制、速率限制,防止内部服务滥用 DNS 查询。

6. 常见问题排查与性能调优

6.1 典型错误与解决方案

在实际使用中,你可能会遇到一些问题。下面是一个快速排查指南:

问题现象 可能原因 解决方案
启动失败,提示命令未找到 1. Node.js 未安装或版本过低。
2. nslookup-mcp 未全局安装,且未在项目目录使用 npx
1. 安装或升级 Node.js 至 v18+。
2. 使用 npm install -g @ayushje/nslookup-mcp 全局安装,或在项目目录下使用 npx nslookup-mcp
Claude Desktop 集成后,工具不出现或调用失败 1. Claude 配置文件路径或格式错误。
2. command 路径不正确。
3. nslookup-mcp 本身运行有错误。
1. 检查配置文件路径和 JSON 语法。
2. 在终端中直接运行配置的 command ,看是否能启动。
3. 查看 Claude Desktop 的应用日志(通常可在其设置或系统日志中找到),里面常有 MCP 服务器启动失败的详细错误。
查询返回超时或错误 1. 查询的域名不存在或拼写错误。
2. 网络问题导致无法连接 DNS 服务器。
3. 指定的 server 参数不可达或拒绝查询。
1. 检查域名拼写。
2. 检查网络连通性。
3. 尝试使用公共 DNS(如 8.8.8.8 )作为 server 参数进行测试。 务必查看返回的 rawOutput 字段,里面通常有 nslookup 命令给出的具体错误信息。
解析结果不完整或格式异常 1. 系统 nslookup 命令的输出格式与解析器预期不符(不同 OS 版本)。
2. 查询返回了非标准或复杂的记录类型。
1. 这是开源项目常见的兼容性问题。首先检查 rawOutput 确认原始数据是否正确。
2. 可以到项目的 GitHub Issues 页面查看是否有类似问题,或提交新的 Issue,附上 rawOutput 内容。
SSE 模式无法连接 1. 防火墙阻止了端口访问。
2. 服务器未成功启动在指定端口。
1. 检查服务器日志,确认是否在监听指定端口。
2. 使用 curl -v http://localhost:3000 测试基础 HTTP 连接。

6.2 性能考量与优化建议

nslookup-mcp 本身非常轻量,但在高并发或频繁调用的场景下,仍需考虑性能。

  1. 单例与连接池 :对于 SSE 模式的服务,应确保客户端使用连接池和长连接,避免为每次查询都建立新的 HTTP/SSE 连接,这是最大的性能开销来源。在微服务架构中,可以考虑使用 gRPC 等更高效的协议,但 MCP over SSE 对于中小规模应用已经足够。

  2. 查询超时设置 :DNS 查询受网络影响较大。在客户端调用时, 务必设置合理的超时时间 (例如 5-10 秒)。MCP 客户端库通常支持配置超时。防止因为一次慢查询阻塞整个工作流。

  3. 缓存策略 :DNS 记录本身有 TTL。对于频繁查询的域名,可以在客户端或 nslookup-mcp 上层添加一个缓存层。例如,在调用 MCP 工具前,先检查本地缓存中是否有未过期的记录。这能极大减少不必要的网络查询和服务器负载。 但要注意 ,缓存必须尊重 DNS 记录的 TTL,否则可能导致获取到过时的 IP 地址。

  4. 资源限制 :如果你将 nslookup-mcp 作为公共服务开放,需要考虑资源限制。可以通过容器编排工具(如 Docker/K8s)限制其 CPU 和内存使用。更重要的是,在应用层面实现 速率限制 ,防止被恶意或错误代码无限调用,耗尽系统资源。

  5. 监控与告警 :为服务添加基础监控,如进程健康检查、查询 QPS、平均响应时间、错误率等。当错误率升高或响应时间异常时,及时触发告警。

6.3 安全最佳实践

  1. 最小权限原则 :运行 nslookup-mcp 的进程或容器,应使用非 root 用户,并只赋予其必要的权限。
  2. 网络隔离 :如果部署在公网,确保其只能被可信的客户端访问。使用防火墙规则、VPC 网络隔离或 API 网关进行保护。
  3. 输入验证 :虽然 nslookup 命令本身对输入有一定处理,但在客户端或网关层面,应对传入的 domain 参数进行基本的格式验证,防止命令注入等攻击(尽管通过 MCP 协议参数化调用,风险已大大降低)。
  4. 日志审计 :记录所有查询的日志(注意可能包含隐私信息),以便在出现安全事件时进行追溯。日志中可记录查询的域名、客户端 IP、时间戳和结果状态。

7. 项目扩展与二次开发

nslookup-mcp 项目结构清晰,基于优秀的 @modelcontextprotocol/sdk 开发,这为二次开发提供了很好的基础。你可以基于它来添加更多功能或定制行为。

7.1 添加新的查询类型或参数

目前工具主要支持基本的域名和服务器参数。你可以 fork 项目,修改 src 目录下的代码来增强功能。例如:

  • 添加 recordType 参数 :让调用者可以指定只查询 A MX TXT 等特定类型的记录。这需要修改工具定义的 inputSchema ,并在调用 nslookup 命令时添加 -type=XXX 参数。
  • 支持反向 DNS 查询 :添加一个名为 reverse_lookup 的新工具,接收 IP 地址参数,调用 nslookup 进行 PTR 记录查询。
  • 批量查询 :设计一个接收域名列表的工具,并发或顺序查询多个域名,并汇总结果。这可以显著提升批量检查的效率。

修改完成后,你需要重新编译 TypeScript 代码 ( npm run build ) 并发布你自己的包,或者直接在本地运行开发版本 ( npm start )。

7.2 集成到其他 MCP 客户端

除了 Claude Desktop,MCP 生态正在成长。你可以将 nslookup-mcp 集成到其他支持 MCP 的客户端中,例如:

  • Cursor IDE :最新版本的 Cursor 也支持 MCP。配置方式类似,将服务器配置到 Cursor 的设置文件中,就可以在编写代码或处理运维脚本时,让 AI 助手直接查询 DNS。
  • 自定义 AI 应用 :使用 @modelcontextprotocol/sdk 或其他语言的 MCP 客户端 SDK,你可以构建自己的 AI 应用,并将 nslookup-mcp 作为其中一个工具来调用。这为你构建垂直领域的智能助手(如 IT 运维助手、网络安全分析助手)提供了强大且专业的能力。

7.3 容器化与云原生部署

为了让部署更便捷,你可以为项目创建 Dockerfile,将其容器化。

FROM node:18-alpine
RUN npm install -g @ayushje/nslookup-mcp
EXPOSE 3000
ENTRYPOINT [“nslookup-mcp”, “--transport”, “sse”, “--port”, “3000”]

然后,你可以使用 Docker Compose 或 Kubernetes 部署文件来管理它。在 K8s 中,你可以将其部署为 Deployment ,并通过 Service 暴露。结合 ConfigMap 可以管理配置,结合 HorizontalPodAutoscaler 可以在查询负载高时自动扩容。

我个人在几个内部项目中已经采用了这种部署方式,通过 Kubernetes 的 Ingress 配置内部域名和简单的认证,让各个团队的自动化脚本都能安全地调用这个统一的 DNS 查询服务,效果非常稳定。

更多推荐