使用说明
@亚伦·巴塞特/午夜本地开发网
一个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。