因子MCP服务器
MCP(模型上下文协议)服务器,使AI工具能够与EVM链上的因子协议库进行交互。
特性
- 68 MCP工具 实现完整的保险库管理
- 多链支持:Arbitrum One、Base、以太坊主网
- 安全钱包管理:Foundry密钥库(Web3 V3)+AES-256-GCM加密
- 模拟模式:执行前预览交易
- 战略建设:使用构建块编写DeFi策略
- 铸造集成:分叉模拟、错误解码、伪造脚本
操作模式
标准MCP
默认模式。服务器作为本地进程运行,通过stdin/stdout进行通信,并在工具调用之间维护全局状态(活动链、钱包、环境)。使用 factor_set_chain 切换链条和 factor_wallet_setup 配置钱包。
无状态(用于MCP网关集成)
专为多租户网关设计,其中许多用户共享一个服务器进程。没有全局状态发生突变——每个工具调用都有自己的 chainId 和 environment 参数。
使用环境变量启用:
STATELESS_MODE=true node dist/index.js
或设置 STATELESS_MODE=true 在过程环境中。
无状态模式的主要区别:
| 行为 |
stdio模式 |
无状态模式 |
| 链条选择 |
factor_set_chain 改变全球状态 |
chainId 每次工具调用的参数 |
| 环境 |
通过config/env-var设置一次 |
environment 每次工具调用的参数 |
| 钱包 |
写操作需要 |
不需要-- sendTransaction 返回未签名的调用数据 |
| 气体估算 |
根据RPC运行 |
跳过(返回零估算) |
| 津贴检查 |
在创建保险库之前检查 |
跳过(赞助处理审批) |
| 客户端缓存 |
Singleton PublicClient 每条链 |
每次请求新客户端(并发安全) |
| 模拟模式 |
可配置 |
始终为真 |
它在内部是如何工作的:
ConfigManager (in src/config/index.ts)使用Node.js AsyncLocalStorage 存储每个请求的上下文(chainId, environment).
- 在
server.ts,每 CallToolRequest 提取物 chainId 和 environment 从工具参数中提取并封装处理程序 configManager.runWithContext(ctx, execute).
- 所有配置getter(
getChain(), getChainId(), getRpcUrl(), getEnvironment())阅读自 AsyncLocalStorage 首先,仅在stdio模式下回退到全局配置。
- 国家变异决策者(
setChain(), setRpcUrl())引入无状态模式以防止全局突变。
sendTransaction() 在 src/wallet/signer.ts 返回a calldata 对象({ to, data, value, chainId })而不是签名和广播。
factor_create_vault 接受a ownerAddress 参数(在无状态中是必需的),用于设置保管库所有者,而不需要本地钱包。通过 feeReceiverAddress 当费用收入必须转到其他地址时。
getClient() 在 src/sdk/client.ts 创造新鲜 PublicClient 在无状态模式下执行每次调用,而不是使用全局缓存,确保不同链的并发请求不会冲突。
快速开始
单线安装
curl -sSL https://raw.githubusercontent.com/FactorDAO/factor-mcp/main/install.sh | bash
这将:
- 安装Rust(如果不存在)
- 安装铸造厂(铸造、砧座、锻造)
- 克隆和构建因子MCP
- 创建
factor-mcp 命令
手动安装
git clone https://github.com/FactorDAO/factor-mcp.git
cd factor-mcp
npm install
npm run build
配置
服务器使用存储在以下位置的JSON配置 ~/.factor-mcp/config.json:
{
"alchemyApiKey": "your_api_key",
"defaultChain": "ARBITRUM_ONE",
"simulationMode": false,
"logLevel": "info",
"activeWallet": "default"
}
环境变量可以覆盖JSON配置:
ALCHEMY_API_KEY -用于RPC访问的Alchemy API密钥
DEFAULT_CHAIN -默认链(ARBITRUM_ONE、BASE、MAINNET)
STATELESS_MODE -设置为 true 用于无状态/网关模式(按请求 chainId 和 environment)
FACTOR_ENVIRONMENT - production, staging,或 testing
SIMULATION_MODE -设置为 true 用于干运行模式
LOG_LEVEL -日志记录级别(调试、信息、警告、错误)
FACTOR_ARTIFACTS_DIR -将生成的伪造脚本持久化到此目录(在Docker/临时环境中很有用)
跑步
# Direct execution
npm start
# Or with environment variables
ALCHEMY_API_KEY=xxx npm start
Claude代码集成
添加到您的Claude代码配置中(~/.config/claude-code/config.json 或MCP设置):
{
"mcpServers": {
"factor": {
"command": "node",
"args": ["/path/to/factor-mcp/dist/index.js"],
"env": {
"ALCHEMY_API_KEY": "your_api_key"
}
}
}
}
工具参考
配置(5个工具)
| 工具 |
说明 |
factor_set_chain |
设置活动链(ARBITRUM_ONE、BASE、MAINNET) |
factor_set_rpc |
配置自定义RPC终结点 |
factor_get_config |
获取当前配置 |
factor_wallet_setup |
导入/生成带有可选加密功能的钱包 |
factor_get_address_book |
获取当前链的SDK地址簿(Pro适配器) |
保险库操作(14个工具)
| 工具 |
说明 |
factor_vault_templates |
准备好使用vault参数(创建vault时先调用) |
factor_create_vault |
部署新的Studio Pro保管库 |
factor_get_owned_vaults |
列出某个地址拥有的保管库 |
factor_get_vault_info |
获取详细的保险库信息 |
factor_get_shares |
获取用户份额、总供应量、每股价格 |
factor_get_executions |
通过解码的调用获取vault执行历史记录 |
factor_preview_deposit |
预览存款(只读) |
factor_deposit |
执行存款(自动批准代币) |
factor_preview_withdraw |
预览提款(只读) |
factor_withdraw |
执行提款(赎回股份) |
factor_execute_manager |
作为保管库管理员执行DeFi策略 |
factor_get_factory_addresses |
从工厂获取白名单资产/适配器 |
factor_validate_vault_config |
部署前验证vault配置 |
factor_add_adapter |
将管理器适配器添加到vault |
保险库管理(12个工具)
| 工具 |
说明 |
factor_set_deposit_fee |
设定存款手续费(基点) |
factor_set_withdraw_fee |
设定提款费(基点) |
factor_set_performance_fee |
设定绩效费(基点) |
factor_set_management_fee |
设定年度管理费(基点) |
factor_charge_performance_fee |
收取应计绩效费 |
factor_set_fee_receiver |
设置收款人地址 |
factor_set_max_cap |
设置最高存款上限 |
factor_set_max_debt_ratio |
设置最大债务比率 |
factor_set_price_deviation_allowance |
设置价格偏差容差 |
factor_add_vault_manager |
添加经理地址 |
factor_remove_vault_manager |
删除经理地址 |
factor_set_risk_manager |
设置风险经理地址 |
贷款操作(4种工具)
| 工具 |
说明 |
factor_lend_supply |
向Aave、化合物V3、Morpho、筒仓V2供应资产 |
factor_lend_withdraw |
提取供应资产 |
factor_lend_borrow |
以抵押品为抵押借入资产 |
factor_lend_repay |
偿还借入资产 |
交换操作(4个工具)
| 工具 |
说明 |
factor_swap |
Uniswap V3精确输入交换(指定花费多少) |
factor_swap_exact_output |
Uniswap V3精确输出交换(指定接收多少) |
factor_swap_openocean |
OpenOcean DEX聚合器交换 |
factor_swap_pendle |
Pendle PT/YT代币互换 |
LP操作(4个工具)
| 工具 |
说明 |
factor_lp_create_position |
建立集中流动性头寸 |
factor_lp_add_liquidity |
为现有头寸增加流动性 |
factor_lp_remove_liquidity |
从头寸中移除流动性 |
factor_lp_collect_fees |
收取累计交易费 |
产量操作(1个工具)
| 工具 |
说明 |
factor_pendle_lp |
Pendle LP(添加/删除流动性,收取费用) |
闪借(1个工具)
| 工具 |
说明 |
factor_flashloan |
执行快速贷款策略(Aave、Morpho) |
令牌和注册表(3个工具)
| 工具 |
说明 |
factor_give_approval |
批准ERC20代币用于支出 |
factor_get_lending_tokens |
查找借贷代币(aTokens、债务代币) |
factor_add_vault_token |
使用会计功能将资产/债务令牌添加到保管库 |
战略构建(1个工具)
| 工具 |
说明 |
factor_list_adapters |
列出可用的协议适配器(30+) |
交易工具(2个工具)
| 工具 |
说明 |
factor_preview_transaction |
预览含天然气估算的tx |
factor_get_transaction_status |
通过哈希检查tx状态 |
简介与战略(6个工具)
| 工具 |
说明 |
factor_save_profile |
保存用户资料(需要钱包签名) |
factor_get_profile |
按地址获取用户配置文件(只读) |
factor_save_strategy |
保存或更新保管库策略(需要钱包签名) |
factor_delete_strategy |
删除已保存的策略(需要钱包签名) |
factor_get_strategy |
通过哈希获取策略(只读) |
factor_get_strategies |
获取链上所有者的所有策略(只读) |
铸造工具(5个工具)
| 工具 |
说明 |
factor_check_foundry |
检查铸造厂安装 |
factor_cast_call |
执行只读合约调用 |
factor_simulate_transaction |
在分叉网络上进行模拟 |
factor_decode_error |
解码合同错误数据 |
factor_run_forge_script |
运行Solidity锻造脚本 |
安全
钱包存储
钱包支持两个后端:
- MCP因子 (默认):
~/.factor-mcp/wallets/ --AES-256-GCM加密,PBKDF2密钥推导(100k迭代)
- 铸造钥匙库:
~/.foundry/keystores/ --Web3秘密存储V3格式,兼容cast/geth
最佳实践
- 始终对生产钱包使用加密
- 使用模拟模式进行测试 (
simulationMode: true)
- 切勿提交钱包文件或API密钥
Docker 部署
# Build image
docker build -t factor-mcp .
# Run with docker-compose
docker-compose up -d
发展
# Install dependencies
npm install
# Type checking
npm run typecheck
# Build
npm run build
# Run in dev mode
npm run dev
# Run tests
npm test
SDK覆盖路线图
此路线图跟踪MCP服务器对 @factordao/sdk-studio 包裹。标记的项目 [x] 在MCP中实施,标记项目 [ ] SDK功能尚未公开。
配置和钱包
- [x] 设置活动链(ARBITRUM_ONE、BASE、MAINNET)
- [x] 设置自定义RPC终结点
- [x] 获取当前配置(链、RPC、钱包、模拟模式)
- [x] 从私钥导入钱包
- [x] 钱包生成(新随机)
- [x] Foundry密钥库存储(Web3 V3格式)
- [x] 因子MCP加密存储(AES-256-GCM)
- [x] 使用现有的Foundry密钥库
- [x] 获取SDK地址簿(Pro适配器地址)
Vault创建和模板
- [x] 部署新的Factor Pro保险库(
factor_create_vault)
- [x] 带有现成参数的Vault模板(
factor_vault_templates)
- [x] 可借出的保险库模板(已预设)
- [x] 可借出的保险库模板(复合V3预设)
- [x] 可借出的保险库模板(Morpho预设)
- [x] 从工厂自动检测会计适配器
- [x] 部署前验证vault配置(
factor_validate_vault_config)
- [x] 获取白名单工厂地址(
factor_get_factory_addresses)
- [x] 不可变保险库选项
- [x] 可配置的费用、上限、债务比率、冷却时间、可升级性
保险库查询
- [x] 拥有保险库(
factor_get_owned_vaults)
- [x] 获取保险库信息——资产、费用、管理者、适配器(
factor_get_vault_info)
- [x] 获取用户份额、总供应量、每股价格(
factor_get_shares)
- [x] 获取解码调用的执行历史记录(
factor_get_executions)
- [x] 预存--预期份额(
factor_preview_deposit)
- [x] 预览提款——预期资产(
factor_preview_withdraw)
- []检查资产是否为有效存款资产(
isDepositAsset)
- []检查资产是否有效提取资产(
isWithdrawAsset)
- []获取资产会计适配器(
getAssetAccounting)
- []获取债务会计适配器(
getDebtAccounting)
- []估算原始提款预期金额(
estimateRawWithdrawExpectedAmount)
- []Alchemy的美元余额明细(
balanceUsd)
保险库存款和取款
- [x] 存入ERC20代币(
factor_deposit)
- [x] 提取/赎回股份(
factor_withdraw)
- []存款原生代币--ETH(
depositNative)
- []在一次交易中存入并执行策略(
depositAssetAndExecute)
- []带有执行块的原始提款(
rawWithdraw)
保险库费用管理
- [x] 设定存款手续费(
factor_set_deposit_fee)
- [x] 设定提款费用(
factor_set_withdraw_fee)
- [x] 设定表演费(
factor_set_performance_fee)
- [x] 设置管理费(
factor_set_management_fee)
- [x] 收取演出费(
factor_charge_performance_fee)
- [x] 设置费用接收人(
factor_set_fee_receiver)
保险库风险和访问管理
- [x] 设置最高存款上限(
factor_set_max_cap)
- [x] 设置最大债务比率(
factor_set_max_debt_ratio)
- [x] 设定价格偏差容差(
factor_set_price_deviation_allowance)
- [x] 添加保管库管理器(
factor_add_vault_manager)
- [x] 删除保管库管理器(
factor_remove_vault_manager)
- [x] 设置风险经理(
factor_set_risk_manager)
Vault策略配置
- []制定公共战略(
setPublicStrategy)
- []删除公共策略(
removePublicStrategy)
- []执行公共战略(
executePublicStrategy)
- []设置存款策略(
setDepositStrategy)
- []删除存款策略(
removeDepositStrategy)
保险库模拟
- []模拟存款(
simulateDeposit)
- []模拟收费绩效费(
simulateChargePerformanceFee)
令牌和批准
- [x] ERC20代币批准(
factor_give_approval)
- [x] 获取借贷代币——aTokens、债务代币、基础代币(
factor_get_lending_tokens)
- [x] 将资产/债务令牌添加到保管库(
factor_add_vault_token)
- []ERC2612许可证/无气批准(
permit 适配器)
贷款-Aave V3
- [x] 供应/全部供应/按百分比供应
- [x] 撤回/全部撤回
- [x] 借用
- [x] 偿还/偿还全部
贷款——复合V3
- [x] 供应/供应全部
- [x] 撤回/全部撤回
- [x] 借用
- [x] 偿还/偿还全部
- []领取奖励(
claimRewards)
贷款--Morpho
- [x] 供应(贷款)
- [x] 作为抵押品供应
- [x] 提款(贷款+抵押品)
- [x] 借用
- [x] 偿还/偿还全部
贷款——Silo V2
- [x] 供应
- [x] 提款
- [x] 借用
- [x] 还款
DEX--Uniswap V3
- [x] 精确输入单交换(
factor_swap)
- [x] 交换所有余额
- [x] 按百分比交换
- [x] 可配置的收费等级(100、500、3000、10000)
- [x] 可配置滑动
- [x] 精确输出单交换(
factor_swap_exact_output)
- [x] 精确输出单体,完全平衡(
factor_swap_exact_output InMax“全部”)
DEX-OpenOcean
- [x] 聚合掉期(
factor_swap_openocean)
DEX--悬挂式PT/YT
- [x] 令牌到PT交换
- [x] 代币到YT的交换
- [x] PT到代币交换
- [x] YT到代币交换
DEX--水
LP-Uniswap V3
- [x] 建立集中流动性头寸
- [x] 为现有头寸增加流动性
- [x] 移除流动性(金额或“全部”)
- [x] 收取累计费用
- []按百分比删除流动性(
removeByPercentage)
LP——卡米洛特V3
- [x] 建立集中流动性头寸
- [x] 增加流动性
- [x] 消除流动性
- [x] 收取费用
- []按百分比删除流动性(
removeByPercentage)
LP——机场
- [x] 建立集中流动性头寸
- [x] 增加流动性
- [x] 消除流动性
- [x] 收取费用
产量——Pendle LP
- [x] 为Pendle市场增加流动性
- [x] 消除流动性
- [x] 收取费用/奖励
紧急贷款
- [x] 具有内部战略步骤的快速贷款
- [x] Morpho闪借与内部战略步骤
- []平衡器闪借(
balancerFL)
策略生成器
- [x] 通过以下方式执行战略
executeByManager
- [x] 列出可用适配器(
factor_list_adapters)
- [x] 将策略保存到Stats API(
factor_save_strategy)
- [x] 从Stats API中删除策略(
factor_delete_strategy)
- [x] 通过哈希获取策略(
factor_get_strategy)
- [x] 按所有者获取策略(
factor_get_strategies)
- [x] 将配置文件保存到Stats API(
factor_save_profile)
- [x] 从Stats API获取配置文件(
factor_get_profile)
- []将策略导出为calldata(
export)
- []导出策略为JSON(
exportToJson)
- []克隆策略(
clone)
- []逐步调试策略(
debugFromBlocks)
- []估计用户影响(
estimate / estimateFromBlocks)
- []战略概述(
summary)
- []猜测令牌状态更改(
guessTokenState)
公用事业适配器
- []在地址之间转移令牌(
transfer 适配器)
- []退还灰尘金额(
refund 适配器)
- []本地令牌打包/解包(
native 适配器)
- []ERC721/NFT操作(
erc721 适配器)
- []利用保险库操作(
leverageVault 适配器)
- []利用战略建设(
leverageStrategy 适配器)
- []存款政策管理(
depositPolicy 适配器)
- []Gelato自动化设置(
gelato 适配器)
- []Chainlink直接报价查询(
chainlink 适配器)
适配器发现和元数据
- [x] 按链列出适配器(
factor_list_adapters)
- []跨适配器获取用户组合信息(
getUserInfo)
- []获得构建块/协议的市场(
getMarkets)
- []通过输入令牌获取市场(
getMarketByInToken)
- []通过输入令牌获取协议(
getProtocolsByInToken)
- []获取支持的输入令牌(
getInTokens)
- []获取适配器元数据(
getMetadata / getMetadataByBuildingBlock)
- []获取所有构建块类型(
getBuildingBlocks)
增强系统
- []添加令牌以增强白名单(
addBoostTokenWhitelist)
- []从boost白名单中删除令牌(
removeBoostTokenWhitelist)
- []存款保险库奖励(
depositRewardForVaultBN)
- []兑换升级奖励(
redeemBoostRewards)
- []兑换所有奖励(
redeemBoostRewardAll)
- []获取增强奖励代币(
getBoostRewardTokens)
- []获得用户获得的增强代币(
boostEarnedTokensByUser)
- []获取奖励数据(
rewardData)
- []获得持续时间奖励(
getRewardForDuration)
磅秤系统
- []获取Scale保险库(
getVaults)
- []获取缩放保险库详细信息(
getVaultDetail)
- []获取用户比例位置(
getUserVaults)
- []获取用户活动余额(
activeBalance)
- []获取总有效供应量(
totalActiveSupply)
- []获取Scale奖励代币(
getScaleRewardTokens)
- []兑换等级奖励(
redeemScaleRewards)
- []兑换奖励+扩大奖励组合(
redeemBoostAndScaleRewards)
- []按仪表投票(
vote)
- []删除投票(
unvote)
- []获取用户/保管库投票
- []索赔等级奖励(
claimRewards)
- []获取Scale市场数据(
getMarketData)
- []获取历史数据(
getHistoricalData)
贿赂制度
- []制造贿赂(
addBribe)
- []索要贿赂(
claimBribe)
- []获取贿赂信息(
getBribe)
- []收取所有贿赂(
getAllBribes)
交易与调试
- [x] 使用天然气估算预览交易(
factor_preview_transaction)
- [x] 检查交易状态(
factor_get_transaction_status)
- [x] 检查铸造厂安装(
factor_check_foundry)
- [x] 通过以下方式进行只读合同调用
cast (factor_cast_call)
- [x] 通过以下方式在分叉网络上进行模拟
anvil (factor_simulate_transaction)
- [x] 解码合同错误(
factor_decode_error)
- [x] 运行Solidity锻造脚本(
factor_run_forge_script)
- [x] 模拟的平衡覆盖
- [x] 使用自动生成的Forge脚本的模拟提示
Pro适配器可用性
仅 _pro MCP服务器使用适配器。路线图中不包括未部署的适配器。
借贷
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| Aave |
✅ |
✅ |
✅ |
✅ |
| 化合物V3 |
✅ |
✅ |
✅ |
✅ |
| 复合V3市场 |
✅ |
✅ |
✅ |
✅ |
| Morpho |
- |
- |
✅ |
✅ |
| Morpho市场✅ |
✅ |
|
|
|
| 筒仓V1 |
✅ |
✅ |
- |
✅ |
| 筒仓V2 |
- |
✅ |
- |
- |
| 思洛V2市场 |
- |
✅ |
- |
- |
去中心化交易所
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| Uniswap |
✅ |
✅ |
✅ |
✅ |
| OpenOcean |
✅ |
✅ |
✅ |
✅ |
| 浮动PY(PT/YT掉期) |
✅ |
✅ |
✅ |
✅ |
| 彭德尔PY市场 |
✅ |
✅ |
✅ |
✅ |
| 水 |
- |
- |
|
|
唱片
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| Uniswap V3 LP |
- |
✅ |
- |
✅ |
| 卡米洛特V3 LP✅ |
- |
- |
|
|
| 机场LP |
- |
- |
|
|
产量
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| 吊坠 |
✅ |
✅ |
- |
✅ |
紧急贷款
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| 平衡器FL |
✅ |
✅ |
✅ |
✅ |
| Morpho FL✅ |
|
|
|
|
会计
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| 链式会计 |
✅ |
✅ |
✅ |
✅ |
| 链式挂钩会计 |
✅ |
✅ |
✅ |
✅ |
| Aave会计 |
✅ |
✅ |
✅ |
✅ |
| Pendle会计 |
- |
✅ |
- |
✅ |
| 潘德尔PY会计 |
✅ |
- |
✅ |
- |
| 复合V3抵押品会计 |
✅ |
✅ |
- |
✅ |
| 复合V3债务会计 |
✅ |
✅ |
- |
✅ |
| Silo V2抵押品会计 |
- |
✅ |
- |
- |
| Silo V2债务会计 |
- |
✅ |
- |
- |
基础设施
| 适配器 |
Arb Prod |
Arb测试 |
基础Prod |
基础测试 |
| 适配器管理 |
✅ |
✅ |
✅ |
✅ |
| 资产/债务 |
✅ |
✅ |
✅ |
✅ |
| 存款政策 |
✅ |
- |
- |
✅ |
| 冰淇淋 |
✅ |
✅ |
✅ |
✅ |
| 增强 |
✅ |
✅ |
✅ |
✅ |
备注:以太坊主网没有部署专业适配器(测试中只有工厂+链会计)。
覆盖范围摘要
| 类别 |
已实施 |
总计 |
覆盖范围 |
| 配置和钱包 |
9 |
9 |
100% |
| Vault创建和模板 |
10 |
10 |
100% |
| 保险库查询 |
6 |
12 |
50% |
| 金库存款和取款 |
2 |
5 |
40% |
| 保险库费用管理 |
6 |
6 |
100% |
| 保险库风险和访问 |
6 |
6 |
100% |
| 保险库策略配置 |
0 |
5 |
0% |
| 保险库模拟 |
0 |
2 |
0% |
| 令牌和批准 |
3 |
4 |
75% |
| 贷款(Aave、Compound、Morpho、Silo) |
16 |
17 |
94% |
| DEX掉期 |
12 |
13 |
92% |
| LP运营 |
12 |
14 |
86% |
| 收益率(待定) |
3 |
3 |
100% |
| 紧急贷款 |
2 |
3 |
67% |
| 战略构建者 |
8 |
14 |
57% |
| 实用工具适配器 |
0 |
9 |
0% |
| 适配器发现 |
1 |
8 |
13% |
| 增压系统 |
0 |
9 |
0% |
| 比例系统 |
0 |
14 |
0% |
| 贿赂制度 |
0 |
4 |
0% |
| 事务与调试 |
9 |
9 |
100% |
| 总计 |
~99 |
~176 |
~56% |
许可证
麻省理工学院