USDC approve and deposit on Base: agent workflow
Step-by-step approve → simulate → deposit flow for AI agents using Forge MCP on Base mainnet — non-custodial calldata signing.
Last updated: May 26, 2026 · Published 2026-05-26
Forge Treasury smart contracts are unaudited. Yield is variable and not guaranteed. Read Risks & Disclosures before depositing USDC or integrating MCP tools.
Depositing USDC into Forge on Base mainnet (chain ID `8453`) is a two-step on-chain pattern for most agents: ERC-20 approve then ERC-4626 deposit. The public Forge MCP server returns unsigned calldata for both steps; your agent EOA signs locally. Forge production MCP does not hold private keys or USDC — see MCP-native treasury. This workflow applies to Core (fUSDC) today; Middle (fmUSDC) adds a second vault when Balanced routing is live. Always read Risks & Disclosures first: contracts are unaudited, TVL is early-stage, yield is variable.
ERC-20 allowance for ForgeVault — not unlimited unless policy allows.
Prerequisites
- Agent EOA with ETH on Base for gas.
- USDC balance on Base mainnet (Circle native).
- MCP client pointed at `https://mcp.forgetreasury.com/mcp` or local dev stack.
- Policy: read Stats for live adapter state before deposits > smoke size.
| Field | Value |
|---|---|
| Chain ID | 8453 |
| USDC | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Core vault | 0x2C9a3922b426005B979FDD1A8F43Eb61B309193B |
| Share token | fUSDC (ERC-4626) |
| MVP profile | conservative → 100% Core |
Step 1 — USDC approval
Call `approve(spender, amount)` on the USDC contract with spender = vault address and amount ≥ deposit size. Many agents use exact allowance per deposit to reduce allowance-risk; others use incremental caps per treasury policy. MCP `deposit` tool responses typically include approval calldata when allowance is insufficient. Never approve unlimited USDC from a hot agent wallet without explicit operator consent.
- Read current `allowance(owner, vault)` via RPC.
- If allowance < deposit amount, broadcast approve tx and wait for confirmation.
- Re-check allowance before deposit — race-safe automations should serialize txs.
Step 2 — simulate before deposit
Call MCP `simulate_deposit` with `{ amount: "<usdc>", profile: "conservative" }` (default profile). The tool returns 30/90/365-day illustrative projections, target allocation weights, gas hints, and disclaimers. This is planning UX — not promised returns. Underlying Spark, Morpho, and Aave rates move daily. Full tool walkthrough: Simulate deposit via MCP.
Step 3 — deposit calldata and broadcast
Call MCP `deposit` with amount and profile. Response includes `to`, `data`, `value`, and chain context for `ForgeVault.deposit(assets, receiver)`. Set receiver to the agent EOA (or treasury multisig) that should hold fUSDC shares. Sign with the same EOA that holds USDC. Recommend elevated gas (~4M) on first deposit after multi-adapter timelock expansions (P2-C0).
| Step | Via MCP | Manual |
|---|---|---|
| Approve | Included in deposit tool flow when needed | USDC.approve encode |
| Deposit | deposit tool calldata | ERC-4626 deposit encode |
| Verify shares | get_balance | vault.balanceOf + convertToAssets |
Balanced routing (two vaults)
Balanced strategy targets Core + Middle. Until MCP Phase 2 multi-vault calldata ships, agents perform two approve/deposit sequences — one per vault address. Middle may return `PROFILE_NOT_LIVE` until adapters execute post-timelock. See Balanced strategy and verify Middle on Stats. Infra vault is not deployed; 10% Infra weight redirects to Middle in canon.
Post-deposit monitoring
- Track fUSDC balance and implied USDC via MCP `get_balance` or Stats.
- Share price accrues with adapter yield — separate from FORGE Merkle claims.
- Withdraw path: MCP `withdraw` calldata; 15% performance fee on profits above HWM.
- Claim FORGE only via separate `claim_forge` flow — Merkle rewards guide.
Common failure modes
| Symptom | Likely cause | Fix |
|---|---|---|
| Transfer failed | Insufficient allowance | Approve then retry |
| Wrong chain | Wallet on Ethereum or Sepolia | Switch to Base 8453 |
| Wrong USDC | L1 USDC or Sepolia USDC | Bridge/swap to Base native USDC |
| Deposit reverts | Adapter not live / timelock | Check Stats adapterCount |
| Out of gas | First multi-adapter deposit | Raise gas limit ~4M |
Security practices for agent operators
- Never paste private keys into MCP or browser docs pages.
- Simulate every new amount tier — adapter books change on timelock.
- Cap per-tx deposit size in agent policy until audit milestones.
- Log tx hashes and vault addresses for treasury reconciliation.
Frequently asked questions
Can MCP sign the deposit for me?
No on production Forge MCP (Option A). The server returns calldata only. Local AgentKit + CDP experiments may sign on engineer machines — never route production user deposits through CDP custody. See Docs and custody rules in repo handoffs.
Do I need approve every time?
Only when remaining allowance is below the next deposit amount. Exact-approve workflows need one approve per deposit; standing allowances amortize gas but increase allowance risk if the vault address were ever compromised.
What receiver address should I use?
Typically the same agent EOA that deposits. Using a multisig receiver is valid for DAO treasuries — ensure your accounting system tracks shares held by that contract.
Summary for agents
Workflow: fund Base ETH → hold Base USDC → `simulate_deposit` → `approve` if needed → sign MCP `deposit` calldata → monitor fUSDC on Stats. Chain 8453 only. Unaudited, variable yield — Risks. Share semantics: ERC-4626 explainer.
External resources
Primary protocol documentation and data sources. Forge is not affiliated with these projects; links are for education only.
- Forge MCP health ↗Production MCP availability check.
- Base mainnet docs ↗Base L2 network — chain ID 8453.
- USDC on Base — Basescan ↗Circle native USDC token contract.
- Core vault — Basescan ↗ForgeVault deposit target for conservative routing.
- Model Context Protocol ↗MCP standard for agent tool integration.
Related reading
- What is an MCP-native treasury?How Forge Treasury uses the Model Context Protocol so AI agents can discover, quote, and deposit into USDC vaults without custodial intermediaries.
- simulate_deposit: MCP dry-run before depositHow to use Forge MCP simulate_deposit for 30/90/365-day illustrative projections, profile gating, and compliance-safe agent UX.
- Agent treasury automation with Cursor and Forge MCPCursor MCP deeplink install, first vault info call, approve/deposit calldata walkthrough, test amounts, and troubleshooting on Base mainnet.
- ERC-4626 share tokens: fUSDC, fmUSDC, and fiUSDC explainedHow Forge vault share tokens work on Base — ERC-4626 NAV, three bucket symbols, and what agents should display to users.
Share this article
Draft copy for social posts — review before publishing. URL: https://forgetreasury.com/learn/usdc-approve-deposit-base-agent-workflow
Open Graph / preview card
USDC approve + deposit on Base for agents Forge MCP: approve USDC, simulate, sign deposit calldata locally. Base 8453, Core vault, non-custodial. https://forgetreasury.com/learn/usdc-approve-deposit-base-agent-workflow
Twitter / X
Agent workflow on Base: approve USDC → simulate_deposit → sign Forge deposit calldata from MCP. Non-custodial, unaudited: https://forgetreasury.com/learn/usdc-approve-deposit-base-agent-workflow
Treasury automation on Base requires disciplined approve/deposit sequencing. This Forge guide walks AI agents through MCP calldata, gas limits, and Middle timelock caveats for production integrators: https://forgetreasury.com/learn/usdc-approve-deposit-base-agent-workflow