@亚伦·巴塞特/午夜本地开发网
](https://www.npmjs.com/package/@aaronbassett/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 dashboardMCP服务器
添加到您的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 .
全局选项
| 选项 | 描述 |
|---|---|
--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 (节点、索引器、证明服务器), --lines (默认值:50) |
health | 检查所有服务的健康状况 | |
balances | 显示主钱包夜间/灰尘余额 | |
fund | 使用NIGHT代币为Bech32地址充值 | --amount 夜间金额(默认值:50000) |
| `fund-file | ||
| ` | 从accounts.json文件为所有账户充值 | |
generate-accounts | 生成随机测试帐户 | --count , --format , `--output |
, --fund, --register-dust` | ||
dashboard | 打开浏览器仪表板 | --port (默认值: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--使用特定端口(默认值: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 (助记符 | 私钥), count?, fund?, registerDust?, outputFile? |
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。
