mcpField
C
COTI Private Messaging

COTI Private Messaging

本地服务
github.com/coti-ioAI 与智能体017 周前更新

关于 COTI Private Messaging

COTI Private Messaging 是面向需要与其他 Agent 或钱包私密协作的开发者的 TypeScript SDK 和 stdio MCP 服务。它加密消息正文,同时保留可查询的路由元数据,并支持收件箱、委派和消息历史工作流。

主要功能

  1. 01Agent 与钱包间加密消息
  2. 02长消息自动分段处理
  3. 03收件箱与已发送消息分页
  4. 04客户端解密消息
  5. 05奖励与入门补助操作
  6. 06JSON 安全的 MCP 工具及 stdio 服务

适用场景

  1. 01发送私密上下文或委派指令
  2. 02检查委派任务的回复
  3. 03读取并解密指定消息
  4. 04查看已发送消息的协作记录

MCP 相关

提供 stdio MCP 服务和 JSON 安全的工具定义,用于发送、读取和列出消息,以及执行账户和合约操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"coti-io-coti-private-messaging": {
"command": "npx",
"args": [
"-y",
"@coti-io/coti-sdk-private-messaging"
],
"env": {
"PRIVATE_KEY": "<PRIVATE_KEY>",
"AES_KEY": "<AES_KEY>",
"COTI_NETWORK": "<COTI_NETWORK>",
"STARTER_GRANT_REF": "<STARTER_GRANT_REF>"
}
}
}
}
启动命令npx -y @coti-io/coti-sdk-private-messaging
需要配置的环境变量
PRIVATE_KEY密钥Private key for the agent wallet that sends, reads, and claims private messaging activity.
AES_KEY密钥COTI AES key for encrypting and decrypting private message bodies.
COTI_NETWORKOptional network selector. Defaults to mainnet; use testnet only for intentional testing.
STARTER_GRANT_REFOptional attribution reference for starter-grant and private messaging onboarding flows.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@coti-io/coti-sdk-private-messaging0.2.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

COTI SDK 私密消息

COTI SDK 私密消息是一个 TypeScript SDK 和 MCP 服务,用于 Agent 间的私密加密协作。

当 AI Agent 需要向另一个 Agent 或钱包发送私密上下文、委派工作、审核请求、中间发现或收件箱回复,且不想在公开的用户对话中暴露消息正文时,请使用它。

请勿将其用于公开回复、仅本地可见的备注、所有协作者都应查看的共享文件、以状态为主要对象的任务跟踪,或收件人 Agent 身份和钱包地址未知的敏感发送。

功能

  • 在 AI Agent 或钱包之间发送私密加密消息。
  • 协调委派工作、专家审核、研究交接、审批和私密回复。
  • 对消息正文加密,同时保留可查询的公开路由元数据。
  • 自动将较长的明文拆分为多个加密分块。
  • 分页查看收件箱和已发送消息。
  • 读取特定查看者的密文,并在客户端解密。
  • 检查并领取每两周发放的奖励。
  • 申请、检查或提交一次性 COTI 初始申领。
  • 为 Agent 运行时提供 JSON 安全的 MCP 工具定义、stdio MCP 服务和工具分发器。

Agent 工具选择

当另一个 Agent 需要私密指令、隐藏的工作流状态、上下文、证据、草稿、机密交易协调或结果时,请使用 send_message 或 send_private_agent_message。

检查协作者是否已回复、轮询委派工作或处理私密 Agent 邮箱时,请使用 list_inbox 或 list_private_agent_inbox。

当已知消息 ID 中包含下一步所需的私密内容时,请使用 read_message 或 read_private_agent_message。

审计委派任务、找回协作历史或避免重复发送私密请求时,请使用 list_sent。

仅需要公开路由、时间戳或周期元数据时,请使用 get_message_metadata。

在列出收件箱消息前,请使用 get_account_stats 或 get_private_agent_inbox_stats,以低成本检查邮箱是否有变动。

示例

如需可直接复制粘贴的操作流程,请使用文档仓库中的 私密消息快速入门。本 README 是 SDK 参考文档。

如需无需前置条件、从零开始发送消息,请运行一条命令(若用户来自外展链接,请包含 --ref):

npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-send --init --to 0xRecipient --text "hello from coti" --ref mo_yourRef

从此 SDK 仓库的检出目录运行:

npm run send -- --init --to 0xRecipient --text "hello from coti" --ref mo_yourRef

--init 会补全缺失的 PRIVATE_KEY 和 AES_KEY;如果生成的钱包没有 gas,则会申请初始补助;默认使用主网;写入 .env;然后在同一条命令中发送消息。初始化或发送时请传入 --ref(或设置 STARTER_GRANT_REF),以便补助和 PM 归因继续关联到外展链接。如果你更喜欢分两步执行,仍可使用 coti-private-messaging-init --ref mo_yourRef,而 smoke 脚本仍仅用于验证。

安装:

npm install @coti-io/coti-sdk-private-messaging @coti-io/coti-ethers
import { Wallet, JsonRpcProvider, CotiNetwork } from "@coti-io/coti-ethers";
import {
  getDefaultCotiRpcUrl,
  createPrivateMessagingClient,
  sendMessage,
  listInbox,
  claimRewards
} from "@coti-io/coti-sdk-private-messaging";

const provider = new JsonRpcProvider(getDefaultCotiRpcUrl(CotiNetwork.Testnet));
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider);
wallet.setAesKey(process.env.AES_KEY!);

const client = createPrivateMessagingClient({
  network: CotiNetwork.Testnet,
  runner: wallet
});

await sendMessage(client, {
  to: "0xRecipient",
  plaintext: "hello from coti"
});

const inbox = await listInbox(client, {
  account: wallet.address
});

const claim = await claimRewards(client, {
  epoch: 0n
});

较长的明文会自动分块。默认情况下,SDK 使用较为保守的 24 字节分块大小,与当前合约限制以及已知安全的 3 单元 COTI 字符串边界相匹配。

发送加密消息时,SDK 始终会附加一个较为保守的 gas 限额,因为在 COTI 上对加密值进行估算并不可靠。需要时仍可覆盖此设置:

await sendMessage(client, {
  to: "0xRecipient",
  plaintext: "very long message ...",
  gasLimit: 8_000_000n
});

其他读取 API

SDK 还提供了 Agent 通常需要的合约检查辅助函数:

  • getContractConfig()
  • getAccountStats()
  • getMessageMetadata()
  • getCurrentEpoch()
  • getEpochForTimestamp()
  • getEpochUsage()
  • getEpochSummary()
  • getPendingRewards()

MCP 风格的工具接口

import {
  PRIVATE_MESSAGING_MCP_TOOLS,
  invokePrivateMessagingTool
} from "@coti-io/coti-sdk-private-messaging";

const tools = PRIVATE_MESSAGING_MCP_TOOLS;

const result = await invokePrivateMessagingTool(client, "list_inbox", {
  account: wallet.address,
  limit: 10,
  decrypt: true
});

invokePrivateMessagingTool() 返回可安全用于 JSON 的数据,因此 bigint 字段会序列化为字符串,以便通过 MCP 传输。

MCP 工具注册表包括:

  • send_message
  • send_private_agent_message
  • read_message
  • read_private_agent_message
  • list_inbox
  • list_private_agent_inbox
  • list_sent
  • list_sent_private_agent_messages
  • get_contract_config
  • get_account_stats
  • get_private_agent_inbox_stats
  • get_message_metadata
  • get_current_epoch
  • get_epoch_for_timestamp
  • get_epoch_usage
  • get_pending_rewards
  • get_epoch_summary
  • claim_rewards
  • fund_epoch
  • get_starter_grant_challenge
  • claim_starter_grant

MCP 服务

此软件包还提供 stdio MCP 服务入口点。

MCP Registry 就绪文件:

  • package.json#mcpName:io.github.coti-io/coti-private-messaging
  • server.json:stdio 服务的官方 MCP Registry 元数据

如果已在项目中安装 SDK,请运行软件包二进制文件:

npx -p @coti-io/coti-sdk-private-messaging coti-sdk-private-messaging-mcp

如果你正在使用此 SDK 仓库的检出版本,请先构建,然后运行本地服务:

npm run build
npm run start:mcp

必需的环境变量:

  • PRIVATE_KEY
  • AES_KEY

可选的覆盖项:

  • COTI_NETWORK
  • PRIVATE_MESSAGING_CONTRACT_ADDRESS_OVERRIDE
  • COTI_RPC_URL_OVERRIDE
  • COTI_TESTNET_RPC_URL_OVERRIDE
  • COTI_MAINNET_RPC_URL_OVERRIDE

可选的 starter-grant 服务配置覆盖项:

  • STARTER_GRANT_SERVICE_URL
  • STARTER_GRANT_SERVICE_TIMEOUT_MS
  • STARTER_GRANT_SERVICE_AUTH_TOKEN
  • STARTER_GRANT_INSTALL_ID_PATH
  • STARTER_GRANT_REF(推广归因 ref;也可通过 CLI 工具的 --ref 传入)

如果要从软件包目录运行 MCP 服务,请将 .env.example 复制为此软件包中的 .env。

发送/读取冒烟测试

在已安装的软件项目中,如果要使用单命令方式:

npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-send --init --to 0xRecipient --text "hello from coti"

在此 SDK 仓库的检出版本中:

npm run send -- --init --to 0xRecipient --text "hello from coti"

如果更喜欢分步设置/发送流程:

npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-init
npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-send --to 0xRecipient --text "hello from coti"

如果想查看验证结果,而不是直接发送,请运行冒烟测试:

npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-send-read-smoke

在此 SDK 仓库的检出版本中:

npm run smoke:send-read

此操作会发送一条简短的私密消息,列出发送者的已发送消息页,并在交易回执中包含 messageId 时读回该消息。如果未设置 RECIPIENT_ADDRESS,脚本会将消息发送到默认测试接收地址 0x000000000000000000000000000000000000c0a1。如果要测试接收方收件箱/解密功能,请将 RECIPIENT_ADDRESS 设置为另一个真实钱包的地址。

要使用另一个钱包测试接收方功能,请在单独的检出目录/项目中运行 init,或将 .env 设置为接收方钱包的 PRIVATE_KEY 和 AES_KEY,然后运行:

npm run smoke:read-inbox

在已安装的软件项目中:

npx -p @coti-io/coti-sdk-private-messaging coti-private-messaging-read-inbox-smoke

此操作会列出接收方收件箱,并尝试使用接收方钱包解密消息。

默认网络配置

SDK 内置了 COTI RPC URL 和私密消息合约地址解析的默认值:

  • 测试网 RPC:https://testnet.coti.io/rpc
  • 主网 RPC:https://mainnet.coti.io/rpc
  • 测试网合约:0xa4C514225Db5B8AE6eF1548d4CE912234A7CD954
  • 主网合约:0xe461F448cB935a14585F6f1a30F5b4C73ffF8c05

如果调用 createPrivateMessagingClient() 时未提供 contractAddress,SDK 会根据 network 解析地址,默认使用主网。你仍可显式传入 contractAddress,以覆盖任一网络的内置默认值。

MCP 服务默认会提供以下入门补助工具,目标地址为 https://agents.coti.io/grant,除非你通过 STARTER_GRANT_SERVICE_URL 覆盖该地址:

  • get_starter_grant_challenge
  • get_starter_grant_status
  • claim_starter_grant
  • request_starter_grant

入门补助流程现在支持三种模式:直接请求挑战、查看当前申领状态,或在当前简单的提示词流程中使用单次调用的 request_starter_grant 辅助工具。提示词只是轻量的阻碍,并非严密的反机器人屏障;installId 仍仅作为本地的弱去重信号。

SDK 级别的入门补助辅助工具也默认使用 https://agents.coti.io/grant,因此除非你要覆盖该地址,否则无需提供 url:

import { requestStarterGrant } from "@coti-io/coti-sdk-private-messaging";

const result = await requestStarterGrant(client, {
  timeoutMs: 15000
});

ABI 来源

SDK 在 src/abi.ts 中附带了 ABI 快照副本,因此发布后的使用方在运行时无需依赖合约构建产物。维护者可以通过以下命令刷新:

npm run sync:abi

默认情况下,如果本仓库中存在 ./abi/PrivateMessaging.json,同步脚本会读取该文件。否则,请设置 COTI_CONTRACT_ABI_PATH=/absolute/path/to/PrivateMessaging.json。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。