使用说明
Cantol
Canton应用程序开发CLI——项目脚手架、DAML编译、测试、本地沙箱管理和用于AI辅助开发的MCP服务器。
为什么选择Cantol
- 核心命令的单一二进制、零运行时依赖关系。 下载一个文件,
chmod +x,跑。核心CLI(脚手架、MCP服务器、环境、插件)不需要JVM、Node.js或容器运行时。 - 交叉汇编。
GOOS=linux GOARCH=amd64 go build从macOS生成Linux二进制文件。CI构建适用于所有平台。 - 静态链接。 没有共享库冲突,没有版本不匹配,没有容器映像膨胀。将二进制文件复制到气隙环境中,它就可以工作了。
- 插件系统。 可通过JSON-RPC插件进行扩展。核心命令在任何外部插件发布之前证明插件契约。
安装
# Homebrew (macOS)
brew install displacetech/tap/cantool
# Binary download (preferred for institutions)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m); [ "$ARCH" = "x86_64" ] && ARCH="amd64"
curl -sSL "https://github.com/DisplaceTech/Cantool/releases/latest/download/cantool_${OS}_${ARCH}.tar.gz" \
| tar xz cantool
sudo mv cantool /usr/local/bin/
# Go install (for Go developers)
go install github.com/displacetech/cantool@latest
快速开始
# Create a new project
cantool init my-app --template basic
cd my-app
# Check environment status
cantool status
# Manage environments
cantool env add local --host localhost --ledger-port 5011
cantool env use local
# See installed plugins
cantool plugin list
也得到 build, test, dev, clean,以及 doctor 命令,启用便利插件(请参阅 插件).
命令
核心命令
| 命令 | 描述 |
|---|---|
cantool init [name] |
从模板创建新的Canton项目(basic 或 token) |
cantool env {add,use,list,remove} |
管理命名环境配置文件 |
cantool status |
显示Canton节点运行状况、版本和连接方 |
cantool mcp serve |
启动MCP服务器进行AI助手集成(stdio) |
cantool plugin list |
列出已安装的插件 |
可选便利命令(插件)
这些命令由内置的 convenience 插件,必须在中启用 cantool.yaml (参见 插件).他们将任务委托给dpm/daml,并将归因行打印到stderr(例如。, -> delegating to dpm build).
| 命令 | 描述 |
|---|---|
cantool build [--watch] |
编译DAML源代码。 --watch 根据文件更改进行重建 |
cantool test [--verbose] |
使用结构化输出运行DAML脚本测试 |
cantool dev [--port P] |
通过热重新加载和参与方配置启动本地沙盒 |
cantool clean [--all] |
删除构建工件 |
cantool doctor |
检查先决条件(Java、SDK、Docker、端口、Go) |
全球旗帜
| 标志 | 描述 |
|---|---|
--format |
输出格式: human (默认), json, quiet |
--version |
打印版本 |
配置
Cantol支持两个级别的配置:
- 全局配置 --按顺序检查:
$XDG_CONFIG_HOME/cantool/config.yaml(默认值~/.config/cantool/),~/Library/Application Support/cantool/config.yaml(仅限macOS),~/.cantool/config.yaml(回退)。适用于所有项目。可用于在所有项目中一次性启用插件。 - 项目配置 —
cantool.yaml在项目根中。项目设置会覆盖全局设置。
全局配置
创建全局配置以设置所有项目的默认值:
# Linux
mkdir -p ~/.config/cantool
cat > ~/.config/cantool/config.yaml << 'EOF'
version: "1"
plugins:
convenience:
enabled: true
EOF
# macOS
mkdir -p ~/Library/Application\ Support/cantool
cat > ~/Library/Application\ Support/cantool/config.yaml << 'EOF'
version: "1"
plugins:
convenience:
enabled: true
EOF
这使得在任何地方都可以使用方便的命令,而无需编辑每个项目的 cantool.yaml。项目仍然可以通过显式设置来覆盖全局设置 plugins.convenience.enabled: false 就其本身而言 cantool.yaml.
项目配置
Cantol项目使用 cantool.yaml 文件:
version: "1"
project:
name: my-app
sdk-version: "3.4.11"
parties:
- name: Alice
display: "Alice Corp"
- name: Bob
display: "Bob Trading"
environments:
local:
host: localhost
ledger-port: 5011
json-api-port: 7575
dev:
watch-paths:
- "daml/"
hot-reload: true
sandbox-port: 5011
plugins:
convenience:
enabled: true
MCP集成
将Cantol配置为Claude Code、Cursor或其他MCP感知工具的MCP服务器:
{
"mcpServers": {
"cantool": {
"command": "cantool",
"args": ["mcp", "serve"]
}
}
}
可用工具: query_contracts, list_parties, ledger_status, allocate_party, upload_dar, list_packages
可用资源: canton://contracts, canton://parties, canton://packages
插件
Cantol支持内置和外部插件。插件配置在 plugins 部分 cantool.yaml 或全局配置文件(请参阅 配置).
内置:便利插件
这 convenience 该插件随Cantol一起提供,并为常见的dpm/daml操作提供包装器命令。它是 默认禁用.
要在全球范围内启用它(所有项目):
# Linux
mkdir -p ~/.config/cantool
cat > ~/.config/cantool/config.yaml << 'EOF'
version: "1"
plugins:
convenience:
enabled: true
EOF
# macOS
mkdir -p ~/Library/Application\ Support/cantool
cat > ~/Library/Application\ Support/cantool/config.yaml << 'EOF'
version: "1"
plugins:
convenience:
enabled: true
EOF
或者在中为每个项目启用它 cantool.yaml:
plugins:
convenience:
enabled: true
要在特定项目中禁用它(覆盖全局启用):
plugins:
convenience:
enabled: false
启用后,以下命令可用:
| 命令 | 代表 |
|---|---|
cantool build |
dpm build / daml build |
cantool test |
dpm test / daml test |
cantool dev |
dpm sandbox / daml sandbox |
cantool clean |
删除 .daml/ 构建工件 |
cantool doctor |
检查Java、SDK、Docker、端口、Go |
当便利命令委托给外部工具时。, -> delegating to dpm build).
使用 cantool plugin list 查看已安装的插件。
外部插件
外部插件是独立的二进制文件,通过stdin/stdout上的JSON-RPC 2.0进行通信。插件可以在以下位置找到 ~/.cantool/plugins/ 并且必须做出回应 --metadata 使用JSON有效载荷:
{
"name": "my-plugin",
"version": "1.0.0",
"description": "My custom plugin",
"author": "Your Name",
"min_host_version": "0.1.0"
}
看 internal/plugin/interface.go 获取完整的插件接口定义。
错误代码
Cantol按子系统使用结构化错误代码:
| 范围 | 子系统 |
|---|---|
| CT1xxx | 配置 |
| CT2xxx | 软件开发工具包/工具 |
| CT3xxx | 沙盒/运行时 |
| CT4xxx | 构建 |
| CT5xxx | 测试 |
| CT6xxx | 分类帐API |
| CT7xxx | MCP服务器 |
| CT8xxx | 插件系统 |
| CT9xxx | 环境管理 |
每个错误都包含一个人类可读的建议,说明如何修复它。