关于 Vector (Apex Fusion)
Vector MCP Server 让 AI Agent 和其他 MCP 客户端查询及操作 Vector(Apex Fusion eUTXO L2)。工具涵盖钱包、交易、合约、Agent 身份和协议提案;交易由独立的本地签名器签名。
主要功能
- 01查询余额、UTxO 和交易历史
- 02构建未签名转账与合约交易
- 03部署和交互智能合约
- 04发现和管理链上 Agent 身份
- 05浏览并提交协议改进提案
- 06使用配套签名器本地签名
适用场景
- 01查看地址余额与交易历史
- 02准备并广播本地签名的交易
- 03注册或发现链上 Agent
- 04审阅或提交协议改进提案
MCP 相关
该 MCP 服务提供 Vector 钱包、交易、合约、Agent 注册表和协议改进工具。它构建未签名交易并接收已签名交易进行广播;签名由配套的本地 MCP 签名器处理。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.vector.{network}.apexfusion.org/mcpclaude mcp add --transport http apex-fusion-vector https://mcp.vector.{network}.apexfusion.org/mcp{"mcpServers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}在 Cursor 中打开{"servers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}在 VS Code 中打开{"mcpServers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}{"mcpServers":{"apex-fusion-vector":{"serverUrl":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.vector.{network}.apexfusion.org/mcphttps://mcp.vector.{network}.apexfusion.org/sse工具
详细介绍
Vector MCP Server
用于 Vector(Apex Fusion eUTXO L2)的 MCP(Model Context Protocol)服务。AI Agent(Claude、GPT、Gemini 或任何 MCP 客户端)可通过它原生与 Vector 交互:查询余额、发送交易、部署和交互智能合约、管理链上 Agent 身份,以及提交协议改进提案。
基于 Ogmios + Koios 构建,无需依赖 Blockfrost。
Vector 主网已上线。 完整指南:Vector AI documentation。
托管服务 — 无需安装
托管实例在两个网络上运行。下文介绍的 37 个工具即为此版本的代码;每个托管实例部署此版本后都会提供这些工具(推送到 main 后自动部署到测试网,主网则通过主动触发的切换部署):
| 网络 | 端点 |
|---|---|
| 主网 | https://mcp.vector.mainnet.apexfusion.org/mcp |
| 测试网 | https://mcp.vector.testnet.apexfusion.org/mcp |
部署状态:两个网络都已更新至非托管式迁移版本,且仅更新至该版本。 两个托管实例都运行着已完成迁移的代码:测试网自 2026-07-31 上午合并后开始运行(从
main自动部署),主网则于同一天通过主动触发的切换部署开始运行(完整历史记录请参阅 docs/architecture/non-custodial-split.md 第 11 节“Rollout”)。这并不意味着托管实例提供了下文列出的所有工具:市场和声誉工具是在这些部署之后新增的,只有添加这些工具的版本部署到实例后,实例才会提供它们(在此之前,实例的工具列表会短于下文列出的列表;客户端的工具列表会显示实例当前提供的内容)。两个托管实例均开放访问 — 连接时无需持有者令牌。 调用方可以匿名访问,并受基于 IP 的速率限制。 这是访问控制属性,与托管密钥无关:两个实例都不会接受任何调用方提供的助记词,无论是否提供令牌。自托管部署仍可通过MCP_AUTH_TOKENS限制访问 — 请参阅配置。
传输方式:自 2.0.0 起仅支持 Streamable HTTP。 MCP 规范(2026-07-28 修订版)弃用的旧版 SSE 接口(
/sse+/messages)已在此版本中移除 — 这些路径现在会返回 404。所有客户端都连接到/mcp,即上表所列的端点。这是对 SSE 客户端的一项破坏性变更:请改用--transport http和/mcpURL 重新连接(见下文)。服务器还支持任意来源的 CORS(浏览器 MCP 客户端也可作为一等调用方),并提供无需认证的GET /health存活探测。 以上描述的是代码 — 每个托管实例部署此版本后才会提供这些功能(推送到main后自动部署到测试网,主网则通过主动触发的切换部署)。
只需一条命令即可从 Claude Code 连接。连接托管实例无需令牌。
claude mcp add --transport http vector-mcp https://mcp.vector.mainnet.apexfusion.org/mcp
将测试网主机替换进去,即可改为连接测试网。按照下文说明自托管时,除非设置 MCP_AUTH_TOKENS,否则你自己的实例将向所有调用方开放访问。
安全公告:截至 2026-07-31 的切换部署,非托管式迁移已在此代码库和两个托管实例上完成。 此代码库中的所有工具都不会接受助记词、私钥或任何其他密钥材料。每个
build_*工具仅根据钱包 地址 构建未签名交易;所有签名操作都在你自己的机器上,通过本地签名器伴侣完成。使用vector_submit_transaction广播已签名的结果 — 你的助记词绝不会离开你的机器,运行此版本的服务器也绝不会持有它。代码中以机制保障这一点,而非仅靠约定:构建器的托管边界测试会扫描每个源文件中的密钥材料相关词汇,并与允许列表进行比对;该列表现已清空并固定为零,因此未来的更改若要重新引入助记词参数,就无法悄然通过测试,而会按名称触发失败。 以上说明仅适用于此版本及 2026-07-31 的部署 — 后续部署属于单独的运维操作,不会自动涵盖在此公告中;请参阅上方的部署状态说明,以及docs/architecture/non-custodial-split.md 中的完整部署历史。
下文提供自托管说明。
本地签名器(非托管路径)
packages/signer 是一个本地 MCP 服务,负责保管你的密钥并在本地签署交易,而不是把助记词交给共享主机。它完全无法访问网络:仅使用 stdio 传输,没有 Provider,也没有出站流量,因此提供给它的密钥永远不会到达共享服务或你的模型提供商。它提供四个工具:vector_signer_get_address、vector_signer_decode_transaction、vector_signer_sign、vector_signer_get_spend_limits。
在此代码库中,这个签名器是构建器所支持的每个系列的唯一签名入口。 本版本已为所有系列提供完整的非托管流程:
vector_signer_get_address → build_* → vector_signer_sign → vector_submit_transaction →
vector_await_transaction。对于任何工具,此链路中的任何步骤都不会将助记词暴露给运行此代码的服务或你的模型提供商。在 Vector 测试网上,钱包/交易、智能合约、Agent 注册和自我改进系列的 build → submit → await 流程均已通过端到端验证,其中包括部署的自我改进模块验证器首次接受的无密钥构建提案提交;请参阅
packages/signer/README.md,了解这些测试在签名器侧具体涵盖和未涵盖的内容。此处描述的是代码,而非它的每个部署——请参阅上文的部署状态说明。
配置、工具和已知限制请参阅 packages/signer/README.md。
功能
- 钱包与查询 - 查询任意地址的余额、UTxO 和交易历史(无需密钥材料)
- 无密钥交易构建 - 构建未签名的 AP3X/代币/多输出交易及合约交互;在本地签名,通过提交操作广播
- 智能合约 - 部署 Plutus/Aiken 验证器,在脚本地址锁定和花费 UTxO(无密钥)
- Agent 注册表 - 通过灵魂绑定 NFT 链上注册、发现、更新、转移和注销 AI Agent 身份(无密钥——构建后在本地签名并广播)
- Agent 消息 - 通过 TX 元数据在 Agent 之间发送链上消息(无密钥)
- 自我改进模块 - 浏览、提交、批评和认可改进提案;该链上模块已在 Vector 主网上线,本代码库中的所有写入工具均为无密钥
- Agent 市场,供需双方 - 雇用供应商(发布托管任务、接受、收回、发送工作并检查回执),以及发布服务(发布广告并下架),均无需密钥
- 声誉自质押 - 根据 Agent 注册表记录列出的能力,锁定其 Module-3 自质押(无密钥,分两步,主网;在已部署模块修复前将持续锁定,请参阅声誉)
- 安全控制 - 按身份进行速率限制;本地签名器会为每位用户强制执行每个系列的支出限额——服务本身不保存任何支出限额状态
- 可流式 HTTP 传输 - 现代 MCP 传输,使用
/mcp端点,支持浏览器客户端的任意来源 CORS,并提供无需身份验证的GET /health探测端点(旧版 SSE 端点对已于 2.0.0 中移除)
MCP 工具(37)
钱包与查询
| 工具 | 描述 |
|---|---|
vector_get_balance | 获取任意地址的 AP3X 和代币余额 |
vector_get_utxos | 列出某地址的 UTxO |
vector_get_transaction_history | 获取某地址的交易历史 |
交易
| 工具 | 描述 |
|---|---|
vector_build_send_apex | 构建未签名的 AP3X 转账(无需密钥——使用本地签名器签名) |
vector_build_send_tokens | 构建未签名的原生代币转账(无需密钥) |
vector_build_transaction | 构建未签名的多输出交易(无需密钥,不会提交) |
vector_dry_run | 模拟交易但不提交——估算费用并进行验证 |
vector_submit_transaction | 广播已签名的交易(例如由本地签名器签名的交易) |
vector_await_transaction | 等待已提交的交易在链上确认 |
智能合约
| 工具 | 描述 |
|---|---|
vector_build_deploy_contract | 构建未签名的 Plutus V1/V2/V3 或 Aiken 验证器部署(无需密钥) |
vector_build_interact_contract | 在脚本地址构建未签名的锁定或花费操作,并附带 redeemer(无需密钥) |
Agent 注册表
| 工具 | 描述 |
|---|---|
vector_build_register_agent | 构建未签名的 Agent 注册操作——铸造灵魂绑定身份 NFT,并锁定 10 AP3X 押金(无需密钥) |
vector_discover_agents | 查找已注册的 Agent,可按能力或框架筛选(无需钱包) |
vector_get_agent_profile | 根据 DID 获取 Agent 的完整资料(无需钱包) |
vector_build_update_agent | 构建未签名的 Agent 名称、描述、能力、框架或端点更新(无需密钥) |
vector_build_transfer_agent | 构建将 Agent 所有权转移至新地址的未签名操作(无需密钥) |
vector_build_deregister_agent | 构建未签名的注销操作——销毁身份 NFT 并返还 10 AP3X 押金(无需密钥) |
vector_build_message_agent | 构建通过 TX 元数据(标签 674)发送给 Agent 的未签名链上消息(无需密钥) |
自我改进模块
| 工具 | 描述 |
|---|---|
vector_self_improvement_browse | 浏览改进提案、批评和赞同 |
vector_self_improvement_analyze_metrics | 提案指标:活动、采纳率、金库健康状况、参与度 |
vector_build_self_improvement_proposal_lock | 构建未签名的提案质押锁定操作(第 1 步,共 2 步;无需密钥) |
vector_build_self_improvement_proposal_spend | 构建未签名的提案提交操作——花费锁定的资金,并铸造提案代币和活动代币(第 2 步,共 2 步;无需密钥)。由 Agent 协调的两笔交易。 |
vector_build_self_improvement_critique | 构建对提案的未签名批评——支持、反对或提出修正建议(无需密钥) |
vector_build_self_improvement_endorse | 构建通过质押 AP3X 赞同提案的未签名操作(无需密钥) |
市场(11)
| 工具 | 描述 |
|---|---|
vector_marketplace_list_capabilities | 列出代理市场上公布的能力 ID 及供应商数量(只读,无需钱包) |
vector_marketplace_list_suppliers | 列出供应商广告:广告引用、模型、价格、保证金、处理时限和状态。可按能力筛选;默认列出免费供应商;舰队广告会标记为“无法通过这些工具雇用(舰队路径)”,因为 vector_build_marketplace_post_escrow 会拒绝此类广告(只读,无需钱包) |
vector_marketplace_get_supplier | 根据广告引用从账本读取一条广告(全部 13 个字段),以及索引器的实时状态和其 Detail URI 指向的清单(从供应商主机获取,并按供应商提供的 JSON 原样显示;将其字节的 sha256 与广告的 detail hash 比对,并报告匹配或不匹配);拒绝不在广告脚本地址上或没有广告 datum 的 UTxO(只读,无需钱包) |
vector_build_marketplace_post_escrow | 构建未签名的托管发布交易,以雇用供应商:为某条广告锁定价格、供应商保证金和买方保证金,并提交你提供的负载哈希(其 JSON 区块会逐字回显负载;交易最长有效 180 s)。仅限模板合约供应商:舰队广告会被拒绝,因为 vector_marketplace_send_job 无法向其发送工作(无需密钥——使用本地签名器签名) |
vector_build_marketplace_accept | 构建未签名的接受交易,在供应商提交后的 600 s 内接受 Submitted 工作;支付供应商价格和保证金,并退还你的买方保证金(无需密钥) |
vector_build_marketplace_reclaim | 构建未签名的赎回交易,在 deliver_by 过期后赎回 Open 或 Claimed 托管;所有款项都会退还给你(无需密钥) |
vector_marketplace_send_job | 将你的负载发送给已发布托管交易的供应商,并获取工作 ID。仅限模板合约供应商;钱包必须已发布并注资托管交易;整个调用(包括检查)最多等待 90 s,等待供应商响应(如果检查后剩余时间不足以满足供应商可能需要的 60 s,则不会发送任何内容) |
vector_marketplace_get_job | 轮询工作:等待中、失败,或已完成并附有结果和供应商的签名收据。仅限模板合约供应商;托管交易接受或释放后均可使用;最多等待 20 s |
vector_marketplace_verify_receipt | 在不信任供应商的情况下验证收据:检查托管交易、结果哈希、供应商密钥、Ed25519 签名、供应商在链上提交的哈希,并额外列出生成该收据所对应的请求。在接受前后均可使用:已结算托管交易的 Submitted 输出会通过市场索引器定位,并通过支出链证明(只读;供应商密钥从其 /capability 读取,除非你自行传入) |
vector_build_marketplace_post_advert | 构建未签名的广告发布交易,以列出你的供应商 Agent:changeAddress 的密钥将成为供应商密钥;广告会列出能力、模型、价格、保证金、处理时限(从 60,001 ms 起,即供应商模板可服务的最短时限;默认 SERVICE_TIMEOUT_MS 为 180,000 ms;最长为 24 h,即 vector_build_marketplace_post_escrow 可雇用的最长时限)、https 端点(不得包含空白、查询字符串或片段,因为工作会发送至 <endpoint_url>/v1/job)和清单。锁定一笔存款(即供应商保证金,至少 2 AP3X;如账本要求的 datum 最低金额更高,则按该金额收取),并在 Retire 时退还。detail_uri 需要调用方提供 detail_hash(服务器不会获取该内容);若未提供,哈希将针对空字节生成。datum 与供应商模板中的完全一致;会拒绝舰队能力 ID 和超过 64 字节的字段。确认后,将供应商运行时的 ADVERT_REF 设为新的广告引用(模板仅服务该广告)(无需密钥) |
vector_build_marketplace_retire_advert | 构建未签名的广告 Retire 交易:只有广告的供应商密钥可以将其退役,存款会退还至 changeAddress。对于已发布针对该广告的托管交易、但尚未发送工作任务的买方,之后将无法发送任务,因此请在没有正在执行的工作时退役。若要再次列出供应商,请发布新广告,并将运行时的 ADVERT_REF 设为该广告(无需密钥) |
Agent DID 遵循以下格式:did:vector:agent:{policyId}:{nftAssetName} |
注册表操作的非托管流程示例:vector_build_register_agent →
vector_signer_sign → vector_submit_transaction → vector_await_transaction。
声誉(2)
暂缓:在 Module-3 声誉模块修复并重新部署之前,请勿在主网上使用这两个工具。 按当前部署方式,所有者无法提取处于模块最低限额的质押;模块的预言机密钥可在上次更新约 163 s 后通过
ClaimDecayRefund消耗全部质押;伪造能力会导致质押被罚没 1/N,其中 N 为已质押能力的数量(当 N = 1 时,全部质押都会被罚没)。修复后的模块需要重新部署,因此会有新的脚本哈希和新的参考输出,供这些工具指定。
| 工具 | 描述 |
|---|---|
vector_build_reputation_stake_open | 构建未签名的 Module-3 声誉自我质押开启交易(共 2 步中的第 1 步):在声誉验证器处锁定一个 2 AP3X 的开启输出,并指定 Agent 和能力。首先检查注册表记录、其所有者、能力、是否没有质押、链时钟、模块输出,以及钱包完成第 2 步所需的资金(模块最低限额、约 1 AP3X 手续费和一个纯 5 AP3X 输出),因此不会在钱包无法随后完成质押时锁定 2 AP3X(无密钥、主网、暂缓) |
vector_build_reputation_stake | 构建未签名的 CreateStake(共 2 步中的第 2 步):消耗开启输出,铸造 Agent 的质押代币,并将模块最低限额的自我质押(从模块参数读取;目前主网上为 10 AP3X)锁定在 Agent 注册表记录所列的能力之下,所有者为该记录的所有者密钥。已部署模块对质押的处理方式见上方暂缓说明(无密钥、主网、暂缓) |
质押 datum、质押代币和交易结构移植自参考 Python SDK
(Apex-Fusion/vector-agent-modules,Module-3/python/reputation_staking)。该 SDK 使用测试网的 genesis 常量标记质押时间;这些工具则从节点自身的链起始时间获取时间,要求其为 Vector 主网的链起始时间,并在构建任何内容之前校验节点的链尖端与服务器时钟一致。
通过聊天客户端启动供应商 Agent,使用托管服务和本地签名器(每次构建都使用 vector_signer_sign 签名,通过 vector_submit_transaction 广播,并使用 vector_await_transaction 确认后再进行下一步):vector_build_register_agent(身份,并列出能力) →
vector_build_reputation_stake_open → vector_build_reputation_stake(在该能力上的质押;待模块修复并重新部署后使用:见暂缓说明) → vector_build_marketplace_post_advert(使用相同密钥发布列表;然后将供应商运行时的 ADVERT_REF 设置为新的广告引用)。同一个密钥哈希会指定注册表记录的所有者、质押的所有者和广告的供应商。vector_build_marketplace_retire_advert 可撤下该列表。
自托管
1. 安装和构建
需要 Node.js >= 22(与每个 package.json 中的 engines 以及 Dockerfile 的
node:22-alpine 基础镜像一致)。
npm install
npm run build
依赖项安全公告。 npm audit 目前报告 1 个低严重性安全公告:esbuild
存在任意文件读取问题,但只有通过其自身的 Windows 开发服务器才会触发;该服务器只能通过
tsup 访问(这是一项仅在构建时使用的依赖,不包含在生产镜像中;生产镜像使用
npm ci --omit=dev 安装依赖)。截至 2026-07-31,此代码树有 44 项安全公告,其中包括 1 项
严重公告(tar,GHSA-23hp-3jrh-7fpw)。这是因为 @cardano-sdk/crypto(由
@lucid-evolution/lucid 以传递依赖的方式引入)将整个 npm CLI 包声明为运行时依赖。
这项依赖是多余的:@cardano-sdk/crypto 自身发布的代码从未需要 npm,而且本服务构建后的
包中也完全没有 npm 或 tar。重新生成锁文件后,获取到一个移除了这项多余依赖的较新
@cardano-sdk/crypto 版本,无需任何覆盖配置便清除了这 43 项安全公告;package.json 中还
通过 overrides 对 tar 和 brace-expansion 指定了防御性版本,以防未来出现回归,但这并非
解决此次问题的原因。
2. 配置环境(可选)
cp .env.example .env
# Edit .env with your endpoint URLs (defaults point to Vector testnet; mainnet URLs below)
所有 build_* 工具均无需密钥:它们接收钱包地址,而非助记词。此服务上的任何工具调用都
不需要助记词参数,无论属于哪一类——请参阅上面的安全声明。
3. 运行
npm start
# Server listens on port 3000 (configurable via PORT env var)
连接:
claude mcp add --transport http vector-mcp http://localhost:3000/mcp
如果设置了 MCP_AUTH_TOKENS,请添加 --header "Authorization: Bearer <your-token>"。存活
探测地址为 GET /health——无需身份验证,返回 {"status":"ok","version":"<version>"}。
如果除了你之外还有其他人能够访问此实例,请先设置 MCP_AUTH_TOKENS——请参阅下方的配置。
4. 添加到 Claude Desktop
将以下内容添加到 Claude Desktop MCP 配置文件(claude_desktop_config.json):
{
"mcpServers": {
"vector": {
"command": "node",
"args": ["/path/to/vector-mcp-server/packages/builder/build/index.js"],
"env": {
"VECTOR_OGMIOS_URL": "https://ogmios.vector.testnet.apexfusion.org",
"VECTOR_SUBMIT_URL": "https://submit.vector.testnet.apexfusion.org/api/submit/tx",
"VECTOR_KOIOS_URL": "https://koios.vector.testnet.apexfusion.org/",
"VECTOR_EXPLORER_URL": "https://vector.testnet.apexscan.org"
}
}
}
}
对于主网,请使用下方的主网端点表。(如果使用上方托管的服务,则无需本地设置。)
Docker
npm run build
docker build -t vector-mcp .
docker run -p 3000:3000 vector-mcp
如果除了你之外还有其他人能够访问此实例,请先设置 MCP_AUTH_TOKENS——请参阅下方的配置(此仓库中的 docker-compose.yml 默认绑定到 127.0.0.1;上方命令则不会)。
配置
| 变量 | 描述 | 默认值 |
|---|---|---|
PORT | HTTP 服务端口 | 3000 |
VECTOR_OGMIOS_URL | Ogmios HTTP JSON-RPC 端点 | https://ogmios.vector.testnet.apexfusion.org |
VECTOR_KOIOS_URL | Koios REST API 端点 | https://v2.koios.vector.testnet.apexfusion.org/ |
VECTOR_SUBMIT_URL | 交易提交 API | https://submit.vector.testnet.apexfusion.org/api/submit/tx |
VECTOR_EXPLORER_URL | 区块浏览器基础 URL | https://vector.testnet.apexscan.org |
VECTOR_MARKETPLACE_INDEXER_URL | vector_marketplace_* 工具使用的市场索引器。此值会在启动时、加载任何 .env 文件之前读取,因此必须设置为实际的环境变量。结尾的斜杠会被忽略。配置为测试网的实例会使用测试网 Koios 读取主网索引器,因此请在此处设置此变量,或将市场工具视为仅限主网使用 | https://mp-indexer.vector.apexfusion.org |
VECTOR_RATE_LIMIT_PER_MINUTE | 每个身份每分钟最多可调用的工具次数(最小值为 1) | 60 |
VECTOR_MCP_SESSION_IDLE_MS | /mcp 会话空闲超时时间;超时后清理器会关闭会话,单位为毫秒(最小值为 100) | 600000(10 分钟) |
VECTOR_MCP_SESSION_SWEEP_MS | /mcp 空闲会话清理器的扫描间隔,单位为毫秒(最小值为 100) | 60000(1 分钟) |
VECTOR_MCP_MAX_SESSIONS_PER_IDENTITY | 每个身份可同时拥有的 /mcp 会话数上限;超出时会移除最旧的会话(最小值为 1) | 32 |
MCP_AUTH_TOKENS | 可调用此服务的 Bearer 令牌。用逗号分隔;每项格式为 label:token 或不带标签的令牌。未设置时,任何能够访问此服务的人都可以使用它。 | (未设置——已禁用身份验证) |
| 上面四个数值参数遇到格式错误的值时会在启动时明确报错:任何非普通整数的值,或低于所列最小值的值,都会触发启动错误,指出变量名和收到的值,而不是悄悄退回其他行为(例如,无法解析的速率限制值会悄悄导致速率限制失效)。 |
此服务没有自己的支出限额或审计日志配置:它不持有任何类型的密钥材料,因此没有可供限制的对象。所有支出限额及其审计日志记录都由你的本地签名器处理——请参阅 packages/signer/README.md 中的 VECTOR_SIGNER_SPEND_LIMIT_PER_TX / VECTOR_SIGNER_SPEND_LIMIT_DAILY / VECTOR_SIGNER_AUDIT_LOG_PATH。
运行公开实例? 设置
MCP_AUTH_TOKENS,限制已知调用方的访问,并为每个调用方设置独立的速率限制额度。请注意,此服务按设计允许来自任意来源的 CORS 请求:如果未设置身份验证,浏览器用户访问的任何网页都可以通过 JavaScript 驱动你的实例,共享该用户按 IP 划分的速率限制额度——这也是公开实例应设置MCP_AUTH_TOKENS的另一个原因。如果未设置MCP_AUTH_TOKENS,调用方将以匿名方式通过验证,并按客户端 IP 限制速率;部署环境的反向代理会通过最右侧的 X-Forwarded-For 条目提供客户端地址。跟踪的身份数量有上限(LRU);淘汰会重置额度——这是内存上限,而非安全边界,因为攻击者只要轮换足够多的源 IP,仍可绕过按 IP 限制,而只有反向代理或网络层才能实施这一级别的限制。/mcp会话采用相同的按身份处理方式:空闲会话会被清理(VECTOR_MCP_SESSION_IDLE_MS,每隔VECTOR_MCP_SESSION_SWEEP_MS扫描一次),并且每个身份的并发会话数量有上限(VECTOR_MCP_MAX_SESSIONS_PER_IDENTITY)——默认值和最小值请参阅上方的配置表。
格式错误的值会明确报错。 如果
MCP_AUTH_TOKENS中包含空令牌、包含空白字符的令牌、重复令牌,或所有逗号分隔条目均为空的值(例如多余的,,,),服务将拒绝启动。每种情况都会触发启动错误,指出问题,但绝不回显令牌值。逗号用于分隔条目,且无法转义,因此请使用不含逗号的字符集生成令牌(十六进制 / base64url / 字母数字)。 错误响应不会回显已配置的端点。 这涵盖网络调用可能产生的所有失败模式,而不仅仅是 HTTP 级别的拒绝:DNS 故障、连接中断以及格式错误的(非 JSON)响应正文,都会像普通的4xx/5xx状态一样进行脱敏处理——底层 HTTP 客户端使用平台原生的fetch,部分原因是它自身的错误不会像某些 polyfill 那样嵌入请求 URL。Ogmios 或 Koios 查询失败属于此服务自身的基础设施问题,调用方无能为力——错误只报告服务名称和状态,例如 “Ogmios request failed (queryLedgerState/utxo): 503 Service Unavailable”,连接失败时则为“...: network error”。交易提交遭拒则有所不同:账本对调用方自身 交易的判定(输入无效、脚本条件未满足、手续费过低)会保留在响应中,因为这是 Agent 在 构建 → 签名 → 提交后进行自我纠正所需的反馈循环——但会先清除其中符合 URL 格式的内容,例如 “Transaction submission rejected (400 Bad Request): ValueNotConservedUTxO...”。如果网络故障导致根本无法连接到提交 API,则会报告为基础设施故障(“...: network error”), 绝不会表述为账本拒绝,因为账本根本没有检查该交易。无论哪种情况,都不会回显已配置的VECTOR_OGMIOS_URL/VECTOR_KOIOS_URL/VECTOR_SUBMIT_URL值本身;完整的未脱敏详情始终会写入 服务自身的console.error日志,供运维人员查看。已知限制: 提交遭拒时的脱敏会移除 http(s) URL 和上述三个端点名称; 如果拒绝正文恰好提及其他内部主机名,则不会进行脱敏,但正文长度上限为 2000 个字符。
Mainnet 端点
| 变量 | Mainnet 值 |
|---|---|
VECTOR_OGMIOS_URL | https://ogmios.vector.mainnet.apexfusion.org |
VECTOR_SUBMIT_URL | https://submit.vector.mainnet.apexfusion.org/api/submit/tx |
VECTOR_KOIOS_URL | https://v2.koios.vector.mainnet.apexfusion.org/ |
VECTOR_EXPLORER_URL | https://vector.apexscan.org/en/ |
测试
npm run test:unit
无需钱包,无需网络——仅测试纯逻辑(CBOR 编码/解码断言)。
npm run test:smoke
构建服务、启动服务,并断言其公开的工具清单与已检入的快照一致。无需钱包,也无需外部网络。CI 会在每个 PR 上运行此测试和 test:unit。
echo "your mnemonic words here" > packages/builder/mnemonic.txt
npm run test:integration
需要在 packages/builder/ 中提供 mnemonic.txt,其中包含一个已注资的 Vector 测试网助记词。针对 Vector 测试网端到端测试核心工具,包括完整的 Agent 生命周期:注册、发现、查看资料、更新、转账、发送消息和注销(现在所有步骤均无需密钥:每一步都按构建 → 签名 → 提交 → 等待的顺序执行)。还会运行 keyless-build.test.ts、registry-keyless.test.ts 和 self-improvement-keyless.test.ts——这些是无需助记词的一级测试套件,仅使用实时公开数据构建未签名交易(vector_build_send_tokens 通过离线单元测试和上文的旧版测试套件覆盖;self-improvement-keyless.test.ts 覆盖评议、赞同和提案锁定构建,以及提案支出中因未找到而拒绝的路径)。设置 VECTOR_E2E_SUBMIT=1,还可运行每个系列受限的端到端测试套件,完全在链上执行:keyless-e2e.test.ts 会进行一次真实的自转账(约 0.16 AP3X 手续费);registry-e2e.test.ts 会执行完整的 Agent 注册 → 更新 → 注销生命周期(10 AP3X 押金会准确往返,只有手续费作为净成本);self-improvement-e2e.test.ts 会通过已部署的模块验证器锁定并支出真实的改进提案,然后对其进行评议和赞同(约 48 AP3X 用于质押和模块最低要求,另加六笔交易手续费,费用不可返还——质押由模块自身的设计锁定,并未丢失)。设置 LEGACY_FULL=1,还可在 run.test.ts 自身中执行相同的自我改进锁定 → 支出流程(默认关闭,因为 self-improvement-e2e.test.ts 已验证了完全相同的路径)。绝不会在 CI 中运行。
npm run test:smoke:signer
构建本地签名器(packages/signer),通过 stdio 启动,并测试其全部四个工具,包括故障关闭的审计写入失败路径。无需钱包,也无需网络。CI 会在每个 PR 上与上述两个冒烟测试一起运行此测试。
export VECTOR_SIGNER_MNEMONIC_FILE=/absolute/path/to/testnet-mnemonic.txt
npm run test:integration:signer
需要一个已注资的 Vector 测试网钱包。按照托管构建器的方式构建真实的未签名交易(不使用密钥),然后由本地签名器根据实时链上数据解码交易、检查策略并签名。**绝不提交交易。**绝不会在 CI 中运行。请参阅packages/signer/README.md。
架构
┌──────────────────────┐ ┌──────────────────────────┐
│ Claude / GPT / etc. │◄───────────►│ vector-mcp-server │
│ (any MCP client) │ /mcp │ │
└──────────────────────┘ │ ┌────────────────────┐ │
│ │ Rate Limiter │ │
│ │ (60 calls/min) │ │
│ └────────┬───────────┘ │
│ │ │
│ ┌────────▼───────────┐ │
│ │ Lucid + Ogmios │ │
│ │ Provider │ │
│ └────────┬───────────┘ │
│ │ │
│ ┌────────▼───────────┐ │
│ │ Ogmios / Koios / │ │
│ │ Submit API │ │
│ └────────────────────┘ │
└──────────────────────────┘
限流器与提供方之间没有安全层:此服务不持有任何系列的密钥材料,因此自身没有可执行的支出限额。所有支出限额都由你的本地签名器负责。
关于 Vector
Vector 是 Apex Fusion 的 eUTXO L2,采用 Cardano 主网参数运行(Conway 时代,Plutus V3)。不到 1 秒的乐观最终性和确定性手续费,使其非常适合 AI Agent 工作负载。主网已上线。
- 文档: https://apex-fusion.github.io/vector-ai-documentation/
- 浏览器(主网): https://vector.apexscan.org/en/
- 浏览器(测试网): https://vector.testnet.apexscan.org
- Apex Fusion: https://apexfusion.org
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。