本地开发网络管理工具

一个CLI和MCP服务器工具,用于管理基于Docker的Midnight本地开发网络,包括启动节点、索引器和证明服务器,并提供测试账户管理和网络监控功能。

  • by devrelaicom
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 devrelaicom/midnight-local-devnet

使用说明

@亚伦·巴塞特/午夜本地开发网

一个CLI和MCP(模型上下文协议)服务器,用于管理基于Docker的本地Midnight开发网络。它在Docker容器中启动Midnight节点、索引器和证明服务器,初始化预加载有NIGHT令牌和DUST的创世主钱包,并提供资助测试帐户、生成钱包和监控网络健康状况的命令——所有这些都可以通过命令行或任何兼容MCP的AI助手完成。

先决条件

  • Node.js>=22
  • 码头工人 (使用Compose v2的Docker桌面或Docker引擎)

快速开始

命令行界面

启动网络:

npx @aaronbassett/midnight-local-devnet start

在浏览器中打开仪表板以监控您的devnet:

npx @aaronbassett/midnight-local-devnet dashboard

MCP服务器

添加到您的MCP客户端配置(Claude Code、Cursor、Windsurf等):

{
  "mcpServers": {
    "midnight-devnet": {
      "command": "npx",
      "args": ["-y", "-p", "@aaronbassett/midnight-local-devnet", "midnight-devnet-mcp"]
    }
  }
}

MCP服务器通过stdio进行通信,并公开AI助手可以用来代表您管理devnet的工具和资源。

CLI命令参考

所有命令都可以通过以下方式运行 npx @aaronbassett/midnight-local-devnet <command>.

全局选项

选项 描述
--json 在stdout上将结果输出为机器可解析的JSON
--version 显示版本号
--help 显示帮助

当 --json 处于活动状态,只有有效的JSON被写入stdout。所有进度消息和日志都被重定向到stderr,因此输出可以直接通过管道传输到以下工具 jq.

命令

命令 描述 选项
start 启动本地Midnight devnet --pull 拉取最新的Docker镜像
stop 停止devnet --remove-volumes 移除卷和容器
restart 重新启动网络 --pull, --remove-volumes
status 显示网络状态和每个服务的信息
logs 显示网络服务日志 --service <name> (节点、索引器、证明服务器), --lines <n> (默认值:50)
health 检查所有服务的健康状况
balances 显示主钱包夜间/灰尘余额
fund <address> 使用NIGHT代币为Bech32地址充值 --amount <n> 夜间金额(默认值:50000)
fund-file <path> 从accounts.json文件为所有账户充值
generate-accounts 生成随机测试帐户 --count <n>, --format <mnemonic|privateKey>, --output <path>, --fund, --register-dust
dashboard 打开浏览器仪表板 --port <n> (默认值:31780), --no-open 抑制自动打开
interactive 启动交互式菜单模式

无参数运行将显示帮助。

JSON 输出

使用 --json 脚本和自动化标志:

# Get network status as JSON
npx @aaronbassett/midnight-local-devnet status --json

# Pipe to jq for filtering
npx @aaronbassett/midnight-local-devnet health --json | jq '.allHealthy'

# Generate accounts and capture output
npx @aaronbassett/midnight-local-devnet generate-accounts --count 3 --json > accounts.json

错误 --json 模式生产 {"error": "message"} 在stdout上使用非零退出代码。

仪表盘

这 dashboard 该命令启动一个本地服务器,并打开一个基于浏览器的仪表板,实时显示所有本地devnet服务的状态。

npx @aaronbassett/midnight-local-devnet dashboard

这将在以下位置启动服务器 http://localhost:31780 并打开默认浏览器。在终端中按Ctrl+C停止。

选项:

  • --port <n> --使用特定端口(默认值:31780,使用时自动递增)
  • --no-open --在不打开浏览器的情况下启动服务器

仪表板显示:

  • 节点 --块高度、平均块时间、链、对等体、同步状态、版本
  • 索引器 --就绪状态、响应时间
  • 证明服务器 --版本、证明版本、作业处理/待处理/容量表
  • 钱包 --主钱包夜间(无屏蔽+屏蔽)和灰尘余额
  • 响应时间 --每个服务响应时间的SVG火花线图
  • 日志 --来自所有服务的组合颜色编码日志流,可按服务、级别或文本搜索进行过滤

仪表板通过WebSocket连接到服务器进行实时更新。如果连接中断,它会自动重新连接。您可以使用操作按钮直接从仪表板启动和停止网络。

布局是响应式的,并适应您的浏览器窗口宽度。

MCP工具参考

工具 说明 参数
start-network 启动devnet(节点、索引器、证明服务器) pull? 布尔值
stop-network 停止devnet并关闭钱包 removeVolumes? 布尔值
restart-network 重新启动网络 pull? 布尔值, removeVolumes? 布尔值
network-status 获取当前网络和每个服务的状态
network-logs 从服务获取最新日志 service? (节点、索引器、证明服务器), lines? 编号
health-check 检查所有服务端点的运行状况
get-network-config 获取端点URL、网络ID、图像版本
get-wallet-balances 获取主钱包的夜间和灰尘余额
fund-account 将NIGHT转移到Bech32地址 address 字符串, amount? 字符串
fund-account-from-mnemonic 从助记符中提取钱包,为NIGHT充值,注册DUST name 字符串, mnemonic 字符串
fund-accounts-from-file 从accounts.json批量生成资金账户 filePath 字符串
generate-test-account 生成随机测试帐户 format (助记符

MCP资源参考

URI 描述
devnet://config 当前网络配置:端点、网络ID、Docker镜像版本
devnet://status 实时网络状态,包括每个服务容器的状态

资源是只读的,任何MCP客户端都可以访问,以向AI助手显示上下文。

accounts.json格式

这 fund-file CLI命令和 fund-accounts-from-file MCP工具接受一个描述要资助的账户的JSON文件。每个账户都有一个助记符;该工具导出其钱包,转移NIGHT代币,并注册DUST。

{
  "accounts": [
    {
      "name": "Alice",
      "mnemonic": "abandon abandon abandon ... art"
    },
    {
      "name": "Bob",
      "mnemonic": "zoo zoo zoo ... vote"
    }
  ]
}

看 accounts.example.json 对于具有有效24个单词BIP39助记符的完整示例。

每个帐户条目都需要:

  • 名字 --帐户的显示标签。
  • 助记 --一个24字的BIP39助记符短语。

Docker服务

devnet运行三个通过Docker Compose管理的容器:

服务 容器名称 图像 端口 URL
节点 午夜节点 midnightntwrk/midnight-node:0.20.0 9944 http://127.0.0.1:9944
索引器 午夜索引器 midnightntwrk/indexer-standalone:3.0.0 8088 http://127.0.0.1:8088/api/v3/graphql
校对服务器 午夜校对服务器 midnightntwrk/proof-server:7.0.0 6300 http://127.0.0.1:6300

索引器还公开了WebSocket端点 ws://127.0.0.1:8088/api/v3/graphql/ws.

网络ID为 undeployed (开发模式)。

DApp开发的网络端点

将Midnight DApp连接到本地devnet时,请使用以下配置:

const config = {
  indexer: 'http://127.0.0.1:8088/api/v3/graphql',
  indexerWS: 'ws://127.0.0.1:8088/api/v3/graphql/ws',
  node: 'http://127.0.0.1:9944',
  proofServer: 'http://127.0.0.1:6300',
  networkId: 'undeployed',
};

您还可以在运行时通过以下方式检索此配置 get-network-config MCP工具或 devnet://config MCP资源。

发展

在当地开展此项目:

git clone https://github.com/devrelaicom/midnight-local-devnet.git
cd midnight-local-devnet
npm install
npm run build

从源代码运行CLI:

node --enable-source-maps dist/cli.js start

从源运行MCP服务器:

node --enable-source-maps dist/index.js

运行测试:

npm test

故障排除

Docker容器无法启动

确保Docker正在运行,并且您的用户有使用它的权限:

docker info

如果您看到权限错误,请将您的用户添加到 docker 组或使用 sudo.

端口冲突

devnet使用端口9944、8088和6300。如果另一个进程正在使用这些端口之一,请在启动devnet之前停止它:

lsof -i :9944
lsof -i :8088
lsof -i :6300

容器不健康

运行健康检查以查看哪个服务没有响应:

npx @aaronbassett/midnight-local-devnet health

检查故障服务的日志:

npx @aaronbassett/midnight-local-devnet logs --service node
npx @aaronbassett/midnight-local-devnet logs --service indexer
npx @aaronbassett/midnight-local-devnet logs --service proof-server

干净重启

如果网络处于断开状态,请重新启动以删除所有卷:

npx @aaronbassett/midnight-local-devnet restart --remove-volumes

这将删除所有链数据并重新开始。

钱包同步时间过长

主钱包必须在首次启动时与链同步。这可能需要10-30秒,具体取决于您的机器。CLI和MCP服务器自动等待同步。

“网络未运行”错误

该工具在启动时检测正在运行的容器。如果您在外部停止容器(例如通过 docker compose down),跑 start 再一次:

npx @aaronbassett/midnight-local-devnet start

致谢

该项目基于 午夜本地网络 通过 @保加利亚。感谢您提供的最初版本。

许可证

麻省理工学院


该项目通过额外的开发工具扩展了Midnight Network。