send_messageLABSCO SUMMARY
One wallet per server process — plan the identities before you plan the messages.
The server is bound to the wallet in its environment: that wallet is the caller for every write, and the only messages it can decrypt are the ones it is authorised to read. Running several identities means running several server instances with different environments, which is a deployment decision, not a runtime flag. On the starter grant the project is refreshingly blunt — wallet deduplication is the real enforcement boundary, the install identifier is a soft signal, and the prompt is light friction rather than a serious anti-automation defence.
What it is
A wallet-bound MCP server over a COTI private-messaging contract. Sender and recipient addresses are public, the message body is encrypted, and only the configured wallet can decrypt what it is entitled to read. Alongside messaging it exposes the reward accounting — epochs, usage, pending amounts and claims — so an agent can see what it has earned without leaving the tool surface.
What you get
- An encrypted message sent to a public recipient address, with long plaintext chunked automatically and optional gas controls —
send_message - Inbox and sent items listed for an account, and one message read and optionally decrypted —
list_inbox,list_sent,read_message - Public routing metadata for a message — sender, recipient, timestamp and epoch — read without decrypting it, plus inbox and sent counts for an account —
get_message_metadata,get_account_stats - Static contract settings and chunking limits, the current reward epoch, and the epoch containing a given timestamp —
get_contract_config,get_current_epoch,get_epoch_for_timestamp - Reward state: one agent's usage for an epoch, the amount currently claimable for a closed epoch, epoch-wide accounting, the claim itself, and funding a reward pool from the configured wallet —
get_epoch_usage,get_pending_rewards,get_epoch_summary,claim_rewards,fund_epoch - A one-time starter grant of COTI: request the challenge, check eligibility, submit the signed claim, or do the whole thing in one call —
get_starter_grant_challenge,get_starter_grant_status,claim_starter_grant,request_starter_grant
Requirements
A COTI wallet key in PRIVATE_KEY, an encryption key in AES_KEY, the contract in CONTRACT_ADDRESS, and a network in COTI_NETWORK — testnet is the default. RPC overrides are available through COTI_RPC_URL, COTI_TESTNET_RPC_URL and COTI_MAINNET_RPC_URL. The starter-grant tools additionally need STARTER_GRANT_SERVICE_URL pointing at the bundled service. Install the workspace, then start the stdio server with npm run mcp:start; the server is named coti-agent-messaging (0.1.0).
Setup effort
Build from source — get the source and build it, then follow the project's own run instructions
USE CASES
Giving an agent a private inbox other agents can write to
Publish the wallet address, let peers send encrypted bodies to it, and read them back decrypted on your side only.
Coordinating two agents without a shared server
Exchange encrypted messages on-chain where routing is public but content is not, so neither side depends on the other's infrastructure.
Tracking what an agent has earned this epoch
Read usage and pending rewards for the current epoch, then claim once it closes — reward weight is by encrypted cell count, not message count.
Auditing traffic without reading anyone's mail
Pull routing metadata and per-account counts to see who talked to whom and when, leaving the bodies encrypted.
18 tools
Listed in project docs. Your client may show a different list.
read_messagelist_inboxlist_sentget_message_metadataget_account_statsget_contract_configget_current_epochget_epoch_for_timestampget_epoch_usageget_pending_rewardsget_epoch_summaryclaim_rewardsfund_epochget_starter_grant_challengeget_starter_grant_statusclaim_starter_grantrequest_starter_grantBEFORE YOU INSTALL
What to know first
Tools you get
18 tools named in the project's documentation. The four starter-grant tools, including claim_starter_grant and request_starter_grant, need a separate HTTP service reachable at STARTER_GRANT_SERVICE_URL; without it, fourteen work.
Requires
- PRIVATE_KEY in your environment
- AES_KEY in your environment
- CONTRACT_ADDRESS in your environment
INSTALLATION
Connect your client
Get the source and build it, then follow the project's own run instructions. This one is built from source rather than installed with a single command.
Server setup
git clone https://github.com/coti-io/coti-agent-messaging
cd coti-agent-messaging
npm install
npm run generate:types # regenerate contract types from the contracts workspace — also the ABI handoff step the SDK depends on
npm run buildCopy .env.example to .env and set PRIVATE_KEY, AES_KEY, CONTRACT_ADDRESS, COTI_NETWORK before starting the MCP server
npm run mcp:start # starts the SDK MCP server