网络拓扑服务

My Network MCP 是一个为AI代理提供网络拓扑信息的模型上下文协议服务器,可部署为HTTP服务或独立运行,适用于系统管理和远程操作。

  • by danielrosehill
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 danielrosehill/My-Network-MCP

使用说明

我的网络MCP

一种模型上下文协议(MCP)服务器,为AI代理提供网络拓扑信息。将其部署为HTTP服务,以便与MCP聚合器一起使用,或独立运行。

动机/用例

像Claude Code这样的代理AI工具对于本地系统管理非常有用。它们还可以用于管理远程系统。

SSH提供了计算资源之间连接的基本骨干。

为了执行SSH操作,AI代理需要一个网络图。这可以在上下文中手动提供,也可以通过参考SSH别名来指示。但是,为了支持跨不同客户端的轻松使用,由集中管理的MCP服务器提供这种配置更有意义。

My Network MCP的理念是与MCP工具在用途狭窄且工具定义适中时最有效的原则保持一致。此MCP服务器的唯一目的是提供用户维护的本地网络资源列表。

v2.0-流式HTTP传输

2.0版本从stdio传输重构为 可流式HTTP传输,使其适合部署在MetaMCP等MCP聚合服务器上。服务器现在作为具有完整会话管理的HTTP服务运行。

安装和部署

先决条件

  • Node.js 18或更高版本

选项1:使用Docker部署(建议用于服务器)

FROM node:20-slim
WORKDIR /app
RUN npm install -g my-network-mcp
EXPOSE 3000
CMD ["my-network-mcp"]

构建并运行:

docker build -t my-network-mcp .
docker run -d -p 3000:3000 -v ~/.config/my-network-mcp:/root/.config/my-network-mcp my-network-mcp

选项2:直接使用npm/npx运行

# Install globally
npm install -g my-network-mcp

# Run the server
my-network-mcp

或者在不安装的情况下运行:

npx my-network-mcp

选项3:从源代码安装

git clone https://github.com/danielrosehill/My-Network-MCP.git
cd My-Network-MCP
npm install
npm run build
npm start

配置

环境变量

变量 默认值 描述
MCP_PORT 3000 要侦听的HTTP端口
MCP_HOST 0.0.0.0 要绑定的主机
NETWORK_MAP_PATH ~/.config/my-network-mcp/network-map.json 网络映射文件的路径

自定义配置示例

MCP_PORT=8080 MCP_HOST=127.0.0.1 NETWORK_MAP_PATH=/data/network.json my-network-mcp

添加到MCP聚合器

MetaMCP/通用流式HTTP

使用以下配置将此服务器添加到MCP聚合器中:

{
  "name": "my-network",
  "transport": "streamable-http",
  "url": "http://your-server:3000/mcp"
}

示例:MetaMCP配置

{
  "servers": [
    {
      "name": "my-network",
      "transport": "streamable-http",
      "url": "http://10.0.0.6:3000/mcp",
      "description": "Local network resource map"
    }
  ]
}

API终点

方法 端点 描述
POST /mcp JSON-RPC请求(MCP协议)
GET /mcp 服务器通知的SSE流
DELETE /mcp 会话终止
GET /health 健康检查端点

健康检查

curl http://localhost:3000/health
# {"status":"ok","service":"my-network-mcp","version":"2.0.0"}

可用工具

show_network_map

在网络图中显示所有网络资源。

示例提示:

克劳德,给我看看我的网络地图

query_resource

按主机名、IP、别名、操作系统或服务搜索资源。

示例提示:

查找运行Docker的所有资源 我的NAS的IP是什么? 显示所有Ubuntu机器

add_resource

在地图中添加新的网络资源。

必填字段:

  • hostname:主要标识符
  • ip:IP地址

可选字段:

  • description:人类可读的描述
  • aliases:备选名称
  • os:操作系统
  • services:已安装的服务
  • sshUser:SSH用户名
  • sshPort:SSH端口(默认值:22)
  • metadata:自定义数据的其他键值对

示例提示:

Claude,添加一个新资源:

  • 主机名:pi-hole
  • ip地址:10.0.0.10
  • description:DNS广告拦截器
  • 服务:DNS、Web UI

update_resource

更新现有资源。使用来自的资源ID show_network_map.

示例提示:

更新资源res_12345以添加SSH服务

delete_resource

按ID从映射中删除资源。

示例提示:

删除资源res_12345

set_network_info

设置网络级别信息(名称、CIDR、网关)。

示例提示:

将网络名称设置为“家庭实验室”,CIDR设置为10.0.0.0/24

list_services

列出网络中所有独特的服务、操作系统和SSH配置。

示例提示:

克劳德,给我看看我网络上运行的所有服务 正在使用哪些操作系统?

MCP资源

网络图也作为MCP资源在以下位置公开 network://map,允许AI代理以JSON格式读取整个地图。

初始设置

首次使用MCP时,您需要填充网络图:

  1. 以示例为起点:

    cp example-network-map.json ~/.config/my-network-mcp/network-map.json
    

    然后编辑它以匹配您的网络。

  2. 让克劳德为你建造它 使用MCP工具。

示例工作流

初始网络发现

克劳德,我需要设置我的网络地图。我的网络是10.0.0.0/24,网关是10.0.0.1。添加以下资源:

  • 10.0.0.1的防火墙(OPNsense)
  • NAS为10.0.0.50
  • 工作站10.0.0.6

查询网络

我的网络上有哪些SSH服务? 显示安装了Docker的所有资源 10.0.0.3是什么?

SSH操作

SSH到我的NAS并检查磁盘空间 连接到Ubuntu虚拟机并更新软件包

MCP提供上下文,这样Claude就知道在哪里连接,而无需重复指定IP。

网络地图格式

网络图以JSON格式存储:

{
  "networkName": "Home Lab",
  "networkCidr": "10.0.0.0/24",
  "gateway": "10.0.0.1",
  "resources": [
    {
      "id": "res_...",
      "hostname": "server1",
      "ip": "10.0.0.10",
      "description": "...",
      "aliases": ["alias1", "alias2"],
      "os": "Ubuntu 24.04",
      "services": ["SSH", "Docker"],
      "sshUser": "admin",
      "sshPort": 22,
      "metadata": {},
      "lastUpdated": "2025-12-15T..."
    }
  ],
  "metadata": {
    "created": "...",
    "lastModified": "...",
    "version": "2.0.0"
  }
}

文件结构

.
├── src/
│   ├── index.ts        # HTTP server & MCP handlers
│   ├── types.ts        # TypeScript type definitions
│   └── storage.ts      # Network map storage manager
├── dist/               # Compiled JavaScript (generated)
├── example-network-map.json
├── package.json
├── tsconfig.json
└── README.md

从v1.x迁移

如果从v1.x升级(stdio传输):

  1. 服务器现在作为HTTP服务运行,而不是stdio
  2. 更新MCP客户端配置以使用流式HTTP传输
  3. 网络图格式不变-无需数据迁移
  4. 集 MCP_PORT 和 MCP_HOST 根据需要设置环境变量

许可证

麻省理工学院