@tomorrowdao/agent-skills
v0.1.4
Published
TomorrowDAO AI agent skills toolkit with MCP, CLI, OpenClaw and SDK interfaces.
Readme
@tomorrowdao/agent-skills
English | 中文
TomorrowDAO 的 AI Agent Skills 工具包,提供 MCP + OpenClaw + CLI + SDK 四种接入方式。
功能概览
- DAO:创建 DAO、更新 metadata、创建/投票/撤回/执行提案、讨论区接口
- Network Governance:提案创建/投票/Release、组织创建、合约名管理、合约流程工具
- BP Election:申请/退出、投票/撤回/切票、分红领取、团队信息维护
- Resource:资源代币买卖与记录查询
- 统一返回类型:
ToolResult<T>、TxReceipt - 执行模式:
simulate(默认)和send
接入方式
| 模式 | 入口 | 适用场景 |
|------|------|------|
| MCP | src/mcp/server.ts | Claude Desktop、Cursor、GPT 等 MCP 客户端 |
| CLI | tomorrowdao_skill.ts | 终端脚本、OpenClaw |
| SDK | index.ts | 自定义 Agent、LangChain/LlamaIndex |
架构
tomorrowDAO-skill/
├── index.ts # SDK 导出
├── tomorrowdao_skill.ts # CLI 适配层
├── src/
│ ├── core/ # config/auth/http/chain/tx/error/types
│ ├── domains/ # dao/network/bp/resource
│ └── mcp/server.ts # MCP 适配层
├── lib/ # 兼容导出
├── bin/setup.ts # claude/cursor/openclaw 一键配置
├── openclaw.json
├── mcp-config.example.json
└── tests/ # unit/integration/e2e快速开始
1. 安装
bun install2. 配置环境变量
cp .env.example .env
# 填写网络配置与可选 signer 回退配置3. 一键配置(推荐)
# Claude Desktop
bun run bin/setup.ts claude
# Cursor(项目级)
bun run bin/setup.ts cursor
# Cursor(全局)
bun run bin/setup.ts cursor --global
# OpenClaw(打印配置)
bun run bin/setup.ts openclaw
# OpenClaw(合并到已有配置文件)
bun run bin/setup.ts openclaw --config-path /path/to/openclaw-config.json
# 查看配置状态
bun run bin/setup.ts list环境变量
| 变量 | 必填 | 默认值 | 说明 |
|------|------|------|------|
| TMRW_API_BASE | 否 | https://api.tmrwdao.com | TomorrowDAO API 基地址 |
| TMRW_AUTH_BASE | 否 | https://api.tmrwdao.com | 鉴权服务基地址 |
| TMRW_CHAIN_DEFAULT_DAO | 否 | tDVV | DAO 默认链 |
| TMRW_CHAIN_DEFAULT_NETWORK | 否 | AELF | Network Governance 默认链 |
| TMRW_AUTH_CHAIN_ID | 否 | AELF | 鉴权签名使用链 ID |
| TMRW_PRIVATE_KEY | 否(send/鉴权 env 回退) | — | 签名私钥回退 |
| AELF_PRIVATE_KEY | 否 | — | 共享 skill 兼容的第二优先级私钥回退 |
| PORTKEY_PRIVATE_KEY | 否 | — | 共享 skill 兼容的第三优先级私钥回退 |
| PORTKEY_WALLET_PASSWORD | 否 | — | EOA wallet context 的密码缓存(可选) |
| PORTKEY_CA_KEYSTORE_PASSWORD | 否 | — | CA keystore context 的密码缓存(可选) |
| PORTKEY_SKILL_WALLET_CONTEXT_PATH | 否 | ~/.portkey/skill-wallet/context.v1.json | 覆盖 active wallet context 文件路径 |
| TMRW_SOURCE | 否 | nightElf | 鉴权 source 字段 |
| TMRW_CA_HASH | 否 | — | 可选鉴权 ca_hash |
| TMRW_RPC_AELF | 否 | https://aelf-public-node.aelf.io | AELF RPC |
| TMRW_RPC_TDVV | 否 | https://tdvv-public-node.aelf.io | tDVV RPC |
| TMRW_HTTP_TIMEOUT_MS | 否 | 10000 | HTTP 超时时间(毫秒) |
| TMRW_HTTP_RETRY_MAX | 否 | 1 | 可重试请求的最大重试次数 |
| TMRW_HTTP_RETRY_BASE_MS | 否 | 200 | 重试指数退避基础间隔(毫秒) |
| TMRW_HTTP_RETRY_POST | 否 | 0 | 设为 1/true 时允许 POST 自动重试 |
| TMRW_AELF_CACHE_MAX | 否 | 8 | 长生命周期进程中 AElf 客户端缓存上限 |
| TMRW_LOG_LEVEL | 否 | error | 结构化日志级别(error/warn/info/debug) |
使用示例
CLI
# DAO
bun run tomorrowdao_skill.ts dao create --input '{"args":{"metadata":{"name":"demo"}}}' --mode simulate
# Network Governance
bun run tomorrowdao_skill.ts network proposal-create --input '{"proposalType":"Parliament","args":{...}}' --mode send
# BP
bun run tomorrowdao_skill.ts bp apply --input '{"args":{...}}' --mode send
# Resource
bun run tomorrowdao_skill.ts resource buy --input '{"symbol":"CPU","amount":100000000}' --mode sendMCP
bun run src/mcp/server.ts{
"mcpServers": {
"tomorrowdao-agent-skills": {
"command": "bun",
"args": ["run", "/ABSOLUTE/PATH/TO/src/mcp/server.ts"],
"env": {
"TMRW_PRIVATE_KEY": "<YOUR_PRIVATE_KEY>",
"TMRW_API_BASE": "https://api.tmrwdao.com",
"TMRW_CHAIN_DEFAULT_DAO": "tDVV",
"TMRW_CHAIN_DEFAULT_NETWORK": "AELF"
}
}
}
}写操作 signer 解析顺序:
- 显式输入(
privateKey或signer对象) - active wallet context(
~/.portkey/skill-wallet/context.v1.json) - 环境变量回退(
TMRW_PRIVATE_KEY->AELF_PRIVATE_KEY->PORTKEY_PRIVATE_KEY)
signerMode=daemon 仅预埋接口,本轮返回 SIGNER_DAEMON_NOT_IMPLEMENTED。
OpenClaw
bun run build:openclaw
bun run build:openclaw:checkSDK
import { daoCreate, networkProposalCreate } from '@tomorrowdao/agent-skills';
const daoRes = await daoCreate({
chainId: 'tDVV',
mode: 'simulate',
args: { metadata: { name: 'hello codex' } },
});
const proposalRes = await networkProposalCreate({
chainId: 'AELF',
proposalType: 'Parliament',
mode: 'simulate',
args: { title: 'demo', description: 'demo' },
});MCP 工具(共 41 个)
DAO(12)
tomorrowdao_dao_createtomorrowdao_dao_update_metadatatomorrowdao_dao_upload_filestomorrowdao_dao_remove_filestomorrowdao_dao_proposal_createtomorrowdao_dao_votetomorrowdao_dao_withdrawtomorrowdao_dao_executetomorrowdao_discussion_listtomorrowdao_discussion_commenttomorrowdao_dao_proposal_my_infotomorrowdao_dao_token_allowance_view
Network Governance(13)
tomorrowdao_network_proposals_listtomorrowdao_network_proposal_gettomorrowdao_network_proposal_createtomorrowdao_network_proposal_votetomorrowdao_network_proposal_releasetomorrowdao_network_org_createtomorrowdao_network_org_listtomorrowdao_network_contract_name_checktomorrowdao_network_contract_name_addtomorrowdao_network_contract_name_updatetomorrowdao_network_contract_flow_starttomorrowdao_network_contract_flow_releasetomorrowdao_network_contract_flow_status
BP(11)
tomorrowdao_bp_applytomorrowdao_bp_quittomorrowdao_bp_votetomorrowdao_bp_withdrawtomorrowdao_bp_change_votetomorrowdao_bp_claim_profitstomorrowdao_bp_votes_listtomorrowdao_bp_team_desc_gettomorrowdao_bp_team_desc_listtomorrowdao_bp_team_desc_addtomorrowdao_bp_vote_reclaim
Resource(5)
tomorrowdao_resource_buytomorrowdao_resource_selltomorrowdao_resource_realtime_recordstomorrowdao_resource_turnovertomorrowdao_resource_records
网络与能力范围
- 支持链:
AELF、tDVV - Network Governance / BP / Resource 的写操作仅支持
AELF - DAO 默认
tDVV,可显式传chainId
合约地址策略
src/core/config.ts中 DAO/Network 系统合约地址当前为有意硬编码默认值。- 这是团队已确认的主网设计选择:这些地址按“长期稳定的系统合约”处理。
- 如未来要支持 testnet/devnet 覆盖,再通过独立 feature 分支引入 override,避免影响当前主网行为。
兼容层说明
lib/*文件用于兼容旧版 import 路径(re-export)。- 新接入建议优先使用包根导出(
index.ts)。 signature.ts中buildLegacyTimestampSignature、getAuthSigningMessage保留为公开兼容 API(legacy)。
测试
bun run test:unit
bun run test:integration
bun run test:e2e
bun run test:coverage
# 覆盖率门禁(仅统计 src/**,默认:lines>=80, funcs>=75)
bun run test:coverage:gate
COVERAGE_MIN_LINES=85 COVERAGE_MIN_FUNCS=80 bun run test:coverage:ci
# 真实只读 e2e(公网 API)
RUN_TMRW_E2E=1 bun run test:e2e安全建议
- 不要在日志和对话里暴露私钥。
- 先用
simulate预检,再切到send。 - 主网验收时优先用最小额度/最小影响操作。
License
MIT
