MCP list_profiles: Conservative vs Balanced
How Forge MCP list_profiles maps strategies to vaults — Conservative and Balanced live, aggressive gated.
Last updated: May 28, 2026 · Published 2026-05-26
Forge Treasury smart contracts completed an external security review (May 2026). Yield is variable and not guaranteed. Residual risk remains — read Risks & Disclosures before depositing USDC or integrating MCP tools.
Forge MCP's `list_profiles` tool is the runtime source of truth for which strategies (Conservative · Balanced · Aggressive) and vaults (Core · Middle · Infra) are live on your connected chain. Agents should call it at session start — before `deposit`, `simulate_deposit`, or `get_current_apy` — instead of hard-coding profile names from docs. `conservative` and `balanced` are live on mainnet. `aggressive` returns `PROFILE_NOT_LIVE` until Infra vault deploys.
Vaults vs strategies (v1.3 canon)
Product v1.3 separates on-chain vault buckets from agent strategies. Vaults are ERC-4626 contracts holding USDC; strategies are cross-vault allocation guidance telling an agent how to split deposits. Legacy MCP input `profile: "conservative"` maps to the Conservative strategy → 100% Core vault today. Balanced targets 50% Core / 40% Middle / 10% Infra — with Infra weight redirecting to Middle until Infra deploys. Full canon: Conservative and Balanced guides.
- Core: 100%
| Term | What it is | On-chain? |
|---|---|---|
| Core vault | ForgeVault for stable yield adapters | Yes — 0x2C9a3922…193B mainnet |
| Middle vault | LST / avUSDC / Moonwell book | Yes — adapters live May 2026 |
| Infra vault | Virtuals / Venice (planned) | Not deployed — May 2026 |
| Conservative strategy | 100% Core allocation guidance | No — policy label |
| Balanced strategy | 50/40/10 cross-vault guidance | No — policy label |
What list_profiles returns
Calling `list_profiles` via MCP (`tools/call`) yields structured JSON with `vaults`, `strategies`, and legacy `profiles` arrays for backward compatibility. Each entry includes `id`, `status`, target allocation bps/pct, vault addresses where deployed, and adapter book summaries. Treat MCP response as authoritative over static docs — timelock execution changes live state without redeploying marketing pages.
- vaults.core — `status: live`, Core address, Spark/Morpho/Aave adapter targets.
- vaults.middle — `status: live`, Middle address, four active adapters.
- vaults.infra — `status: planned`, no address.
- strategies.conservative — `status: live`, deposit routes to Core.
- strategies.balanced — `status: live`, returns Core + Middle deposit legs.
- strategies.aggressive — `status: planned`, requires Infra vault.
Conservative — Core-only live deposit
`profile: "conservative"` (default when omitted) resolves to Core vault calldata on Base mainnet. One USDC approval, one `deposit` transaction, fUSDC shares. Adapter book: five Core legs — verify live bps via `get_vault_stats`.
| Field | Value |
|---|---|
| profile / strategy id | conservative |
| Target vault | Core — 0x2C9a3922b426005B979FDD1A8F43Eb61B309193B |
| Share token | fUSDC |
| list_profiles status | live |
| deposit tool | Returns calldata — sign locally |
Balanced — live with two deposit legs
Balanced is not a vault — it is a strategy describing splits across Core and Middle (plus future Infra). Middle vault (`0x0cAB46658aFD0F01018117475e17CAE439E36C5D`) is live with four adapters. `deposit({ profile: "balanced" })` returns two legs — Core + Middle calldata (50/50 effective with Infra redirect). Agents sign two approve + deposit transactions from the user EOA. See Balanced two-deposit guide.
Agents must not retry aggressive deposits — `aggressive` returns `PROFILE_NOT_LIVE` until Infra vault deploys. For Balanced, parse `legs[]` and sign each returned calldata from the user EOA.
PROFILE_NOT_LIVE vs PROFILE_UNKNOWN
| Code | Trigger | Agent should |
|---|---|---|
| PROFILE_NOT_LIVE | aggressive on gated tools | Stop deposit; offer conservative or balanced |
| PROFILE_UNKNOWN | Typo e.g. "conservativ" | Call list_profiles; retry valid id |
| PROFILE_NO_VAULT | Internal misconfig / wrong chain | Check MCP chain env; read health |
Tools that accept `profile` and enforce gating include `deposit`, `withdraw` (when strategy-aware), `simulate_deposit`, and `get_current_apy`. `list_profiles` and `get_vault_stats` remain callable regardless — use them for discovery.
Recommended agent bootstrap sequence
- Connect MCP (production `mcp.forgetreasury.com` or local dev).
- Call `list_profiles` — cache `strategies.*.status` with TTL (e.g., 1 hour, refresh after timelock dates).
- If user requests Aggressive and status ≠ live, explain PROFILE_NOT_LIVE before any approve tx.
- For live conservative: `get_vault_stats` → `simulate_deposit` → approve → `deposit`.
- Log profile status in agent telemetry for support replay.
Conservative vs Balanced — decision table
| User intent | list_profiles check | MVP action |
|---|---|---|
| Stable USDC yield only | conservative = live | deposit(profile=conservative) |
| 50/50 Core + Middle | balanced = live | deposit(balanced) → two legs |
| Max ETH beta + infra | aggressive = planned | PROFILE_NOT_LIVE — not available |
| Unknown profile name | N/A | PROFILE_UNKNOWN — list_profiles first |
Phase 2b expectations
Balanced deposit legs shipped May 2026. Phase 2b may add multi-vault `get_balance` / `withdraw`. Until then, Balanced weights in `list_profiles` are defaults — verify on Stats before large sweeps.
R4-safe user messaging
- When Aggressive is not live, say "strategy not yet available" — not "coming soon with X% APY".
- Never imply Middle deposits earn yield before adapters execute — verify adapterCount on Stats.
- Link Risks & Disclosures when explaining why agent fell back to Conservative.
- Separate FORGE emissions from vault yield in any profile comparison (emissions guide).
Cursor and framework integrators
Same semantics across Cursor, LangChain, and OpenAI Agents SDK — MCP is the contract. See Cursor tutorial, LangChain guide, OpenAI Agents SDK guide. Docs error-handling table mirrors PROFILE_NOT_LIVE rows.
Frequently asked questions
Should I cache list_profiles forever?
No. Timelock events change adapter counts and may flip strategy status. Refresh after governance milestones and before large automated sweeps.
Can I deposit to Middle directly without using Balanced?
Middle contract accepts USDC with four live adapters. See Balanced strategy.
Does list_profiles replace reading /stats?
Complementary. MCP for agent runtime flags; Stats for human dashboards and subgraph-indexed history. Cross-check share price on both.
Summary for agents
Call `list_profiles` first. `conservative` live → Core fUSDC. `balanced` live → two deposit legs. `aggressive` → PROFILE_NOT_LIVE. Handle errors explicitly. Strategies ≠ vaults. Verify on Stats. Conservative · Balanced · MCP-native treasury · Risks.
External resources
Primary protocol documentation and data sources. Forge is not affiliated with these projects; links are for education only.
Related reading
- Conservative strategy: Core vault explainedThe Conservative agent strategy routes USDC to the Core vault — Spark Savings, Morpho Steakhouse Prime, and Aave V3 on Base mainnet.
- Balanced strategy: routing across Core and MiddleDefault 50/40/10 weights across Core, Middle, and Infra vaults — Balanced MCP live with two deposit legs.
- 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.
- 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.
Share this article
Draft copy for social posts — review before publishing. URL: https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced
Open Graph / preview card
Forge MCP list_profiles explained Conservative + Balanced live on mainnet. Aggressive returns PROFILE_NOT_LIVE. Strategies are not vaults. https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced
Twitter / X
Forge MCP list_profiles: conservative + balanced live on Base. aggressive = PROFILE_NOT_LIVE. Call it first: https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced
Agent integrators should bootstrap every Forge MCP session with list_profiles — Conservative and Balanced are live on mainnet; Aggressive returns PROFILE_NOT_LIVE until Infra deploys. Vault vs strategy canon and error handling: https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced