Start

Inlet

Inlet delivers native USDC from any chain a user holds it on into a position on the chain a protocol runs on. The user signs once on the source chain. Circle Gateway or CCTP V2 brings the USDC to a per deposit address on Arc, the Inlet hub sweeps it through CCTP to the destination, and the Inlet receiver calls an adapter that makes the protocol deposit for the user. The way out is the same size: one signature on the position, and the exit rail lands native USDC on the chains the user names.

What you get

  • One signature on the source chain. A Gateway burn intent from a unified balance, with no gas and no network switch, or a CCTP burn from the wallet, on an EVM chain or on Solana.
  • Native USDC the whole way. Nothing wrapped, nothing swapped. Arc is the settlement hub in the middle.
  • A position, not a balance. The adapter makes the protocol deposit in the user's name: aTokens, a Compound supply, vault shares, a Uniswap v4 position.
  • Nothing gets stuck. The deposit address is derived from the intent, so USDC can only move along the path the intent names or back to the sender after the deadline. If the adapter fails, the USDC waits in the receiver and the user claims it.
  • No fee in version one. The hub rejects any fee other than zero. Circle's own transfer fee is the only cost.

The pieces

PieceWhereWhat it does
HubArc testnetDerives one deposit address per intent, sweeps what arrives through CCTP toward the destination, refunds after the deadline
ReceiverEach destination chainVerifies the Circle mint, calls the adapter, keeps the USDC claimable if the adapter reverts
AdapterEach destination chainOne stateless contract with one function that turns USDC into a position for a beneficiary
RelayerOff chain, anyone can run oneSubmits mints, sweeps, waits for attestations, executes receivers. It makes deposits fast, not possible
SDK and widgetYour appBuild intents, route through Gateway or CCTP, follow a deposit to the position
MCP serverAn agent's toolboxThe same flow as tools for a coding or trading agent

Three ways in

  1. Mount the widget. Three lines for a protocol with an ERC 4626 vault, one adapter for anything else.
  2. Deposit without a browser. The SDK and the relayer API, the flow the widget runs.
  3. Give it to an agent. A stdio MCP server with ten tools and a skill file.

Status

Testnet only. Live on Arc testnet with deposits from Base Sepolia, Arbitrum Sepolia, Unichain Sepolia, Ethereum Sepolia, Monad Testnet and Solana Devnet, receivers on Arbitrum Sepolia, Base Sepolia, Unichain Sepolia, Ethereum Sepolia and Monad Testnet, and destinations on Aave V3, Compound III, a Morpho vault, a Uniswap v4 pool and Euler. Every recorded run with its transactions is in the live app, which makes a real deposit or replays one.

The full architecture specification lives in the repository at docs/spec.md.