MCP list_profiles: Conservative vs Balanced
How Forge MCP list_profiles maps strategies to vaults, why balanced returns PROFILE_NOT_LIVE, and the agent bootstrap sequence.
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.
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. MVP: `conservative` is live (routes to Core vault). `balanced` and `aggressive` return `PROFILE_NOT_LIVE` on deposit-family tools until Middle adapters execute and Phase 2 multi-vault calldata ships.
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 | Deployed; adapters timelock pending |
| 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: timelock_scheduled`, Middle address, pending adapter list.
- vaults.infra — `status: planned`, no address.
- strategies.conservative — `status: live`, deposit routes to Core.
- strategies.balanced — `status: planned`, cross-vault weights informational.
- strategies.aggressive — `status: planned`, requires Infra + Middle live.
Conservative — the only live deposit profile (MVP)
`profile: "conservative"` (default when omitted) resolves to Core vault calldata on Base mainnet. One USDC approval, one `deposit` transaction, fUSDC shares. Adapter book: Spark ~60%, Morpho ~25%, Aave ~15% Phase 1 — verify live bps via `get_vault_stats` after P2-C0 timelock. Agents using automated sweeps should pin `conservative` until `list_profiles` reports balanced `status: live`.
| Field | Value |
|---|---|
| profile / strategy id | conservative |
| Target vault | Core — 0x2C9a3922b426005B979FDD1A8F43Eb61B309193B |
| Share token | fUSDC |
| list_profiles status | live |
| deposit tool | Returns calldata — sign locally |
Balanced — planned and PROFILE_NOT_LIVE
Balanced is not a vault — it is a strategy describing splits across Core and Middle (plus future Infra). Middle vault (`0x0cAB46658aFD0F01018117475e17CAE439E36C5D`) is deployed on mainnet but `adapterCount` may be zero until owner executes timelock adapter sets (~May 27, 2026). Until Phase 2 MCP ships multi-transaction calldata, calling `deposit({ profile: "balanced" })`, `simulate_deposit`, or `get_current_apy` with balanced returns structured error:
Agents must not interpret PROFILE_NOT_LIVE as a transient RPC glitch — retrying with higher gas wastes user time. Correct responses: (1) fall back to conservative Core-only deposit with user consent; (2) wait and poll `list_profiles` after announced timelock; (3) manually split deposits using separate Core and Middle calldata once Middle adapters are live (advanced — see Balanced strategy).
PROFILE_NOT_LIVE vs PROFILE_UNKNOWN
| Code | Trigger | Agent should |
|---|---|---|
| PROFILE_NOT_LIVE | balanced / aggressive on gated tools | Stop deposit; offer conservative or wait |
| 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 Balanced 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 = planned | PROFILE_NOT_LIVE — wait or manual split post-timelock |
| Max ETH beta + infra | aggressive = planned | PROFILE_NOT_LIVE — not available |
| Unknown profile name | N/A | PROFILE_UNKNOWN — list_profiles first |
Phase 2 expectations
When Middle adapters pass timelock and MCP Phase 2 ships, `list_profiles` will flip `balanced` → live and deposit tools will return multi-tx calldata arrays — one approve + deposit per vault leg. Until then, documentation and MCP agree: Balanced weights in `list_profiles` are informational. Do not automate Balanced deposits based on target bps alone.
R4-safe user messaging
- When Balanced is not live, say "strategy not yet available" — not "coming soon with X% APY".
- Never imply Middle deposits earn yield before adapters execute — idle USDC risk.
- 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 while Balanced is not live?
Middle contract accepts USDC, but with zero adapters funds may not route to yield legs until timelock executes. Core leg works independently. See Balanced strategy timelock-pending notes.
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. MVP: `conservative` live → Core vault fUSDC. `balanced` / `aggressive` → PROFILE_NOT_LIVE on deposit tools until Phase 2. Handle errors explicitly; no retry spam. 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 — and how to deposit while Middle timelock is pending.
- 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 live → Core. Balanced returns PROFILE_NOT_LIVE until Phase 2. Strategies are not vaults. https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced
Twitter / X
Forge MCP list_profiles: conservative = live Core deposits. balanced = PROFILE_NOT_LIVE until Middle timelock. Call it first: https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced
Agent integrators should bootstrap every Forge MCP session with list_profiles — Conservative maps to the live Core vault; Balanced returns PROFILE_NOT_LIVE until Middle adapters execute. This guide covers vault vs strategy canon and structured error handling. https://forgetreasury.com/learn/mcp-list-profiles-conservative-balanced