# Recommended Composition

For a complete product experience, the ramp layer works alongside the vault and portfolio clients:

**Ramp operations (`MceRampClient`)** handle getting money into and out of the protocol. Use this for bank deposit instructions, crypto deposit addresses, OTC conversion quotes, and outbound fiat withdrawals.

**On-chain reads and writes (`CityClient`)** handle everything that happens once capital is on-chain. Use this for vault deposits, redemptions, cooldowns, share balances, and live vault state.

**Indexed data (`CityPortfolioClient`)** handles historical and aggregate views. Use this for transaction history, vault discovery pages, TVL charts, and investor counts.

The three clients are designed to be used together but are fully independent. You can use the ramp client without ever touching a vault, or query the subgraph without needing MCE credentials. This separation keeps each integration surface small and lets you adopt only the pieces your product actually needs.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://city-protocol.gitbook.io/docs/neofinance-as-a-service/on-off-ramp-module/recommended-composition.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
