我的网络MCP
](https://www.npmjs.com/package/my-network-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时,您需要填充网络图:
- 以示例为起点:
cp example-network-map.json ~/.config/my-network-mcp/network-map.json然后编辑它以匹配您的网络。
- 让克劳德为你建造它 使用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传输):
- 服务器现在作为HTTP服务运行,而不是stdio
- 更新MCP客户端配置以使用流式HTTP传输
- 网络图格式不变-无需数据迁移
- 集
MCP_PORT和MCP_HOST根据需要设置环境变量
许可证
麻省理工学院
