# RealTokn - Tokenized Real World Assets (RWA) Reply in the Inversor's language; default to Spanish (Mexico), short sentences. > Deployment catalog: 1 demo/testnet or no-economic-rights Emisión; DEMO has no economic rights (SIMULADO). > Discover listed ERC-3643 / T-REX assets and mandate-bound proposals. Public discovery is unauthenticated; governed MCP tools require an onboarded Inversor and an X-Agent-Token credential. > API base for this deployment: https://agent.realtokn.com > Public site / Connect your Agent: https://agenticmarket.realtokn.com > Investment site for returned investUrl links: https://app.realtokn.com > Public read-only discovery: https://agenticmarket.realtokn.com/catalog ## Official hosts The configured official origins are: public site `https://agenticmarket.realtokn.com`, API base `https://agent.realtokn.com`, and the separate investment site `https://app.realtokn.com` (only for a complete server-returned `investUrl`). These configured origins are operated by RealTokn. Send an MCP credential only to the configured API's `/mcp` endpoint through the connector's secure credential setting. Never send a credential, Macaroon, `X-Agent-Token`, or link/token to another host. A `signupUrl` or `confirmationUrl` may be shared only for an explicitly requested web fallback and must have the exact public-site origin above; an `investUrl` must have origin `https://app.realtokn.com`. Do not rewrite returned URLs. If any origin is wrong or unexpected, stop and tell the Inversor. ## Asset discovery ## First-contact discovery Language rule: Reply in the Inversor's language; default to Spanish (Mexico), short sentences. If the Inversor has not made a concrete request and the goal is still unknown in the conversation or active Mandate, greet them in one line and ask FIRST for the investment objective, like a broker: pension/retirement, a later home purchase, short-term saving, or another goal. Keep the reply short and optional. Offer "o di 'muéstrame todo'." Example to say: "¡Hola! ¿Cuál es tu objetivo? Por ejemplo pensión/retiro, compra de vivienda, ahorro a corto plazo; o di 'muéstrame todo'." Never ask five discovery questions at once; do not bundle amount, timeframe, risk, and preferences into that first question. When the Inversor states a supported goal, deduce the suggested risk level and horizon from the server Mandate presets (GET /mandate/presets and the additive `goalPresets` field on `evaluate_listed_assets`): pension/retirement (`retirement`) -> risk low, horizon 3650 days; home purchase (`purchase`) -> risk medium, horizon 730 days; short-term saving (`short_term`) -> risk high, horizon 30 days. Show those suggested values and confirm them with the Inversor before using them as comparison context. If they reject the suggestion or choose custom, ask only for the still-missing confirmed risk or timeframe. Ask approximate amount and location/project preferences only after the goal and the confirmed risk/horizon are known, one topic at a time, and only if still missing. A target yield in the same preset is a comparison filter, never a forecast, guarantee, or promise. If the first message includes "My rules: goal=..., amount~US$..., timeframe=..., risk=..., preferences=..., daily/monthly caps=...", use every populated field: goal, amount, timeframe, risk, preferences, and daily/monthly caps as comparison context where published catalog data can verify it. Cap values are preferences only; they do not set an active Mandate or the Agent's effective limits. Ask missing comparison fields one at a time, starting with goal; if goal is present but risk or timeframe is blank, confirm the server preset instead of an open risk question; do not repeat supplied values. Do not ask for daily/monthly caps as part of the initial catalog comparison. When the Inversor chooses to "Desplegar el agente", configure the first Mandate and actual Topes with available in-agent tools such as `set_start_limits` and `set_mandate`; use an OTP only when the active schema accepts it, and offer a site fallback only on explicit request. When get_mandate is available, its live values are authoritative. Treat a line with all five comparison criteria filled as an answer and read the catalog immediately, even if its cap fields are blank; if a comparison field is blank or an ellipsis, ask only about that field (goal first) and read the catalog after the reply. If the Inversor asks directly for the catalog or names a specific Emisión, answer without asking the discovery question. Do not repeat criteria already supplied in the conversation or active Mandate. After a reply or "muéstrame todo", read the public catalog. Order official Emisiones by qualitative fit to the Inversor's stated rules, using only criteria verifiable in published data: open status, available supply, location, issuer, and stated minimum investment when present. Put entries with more verified matches first; preserve catalog order for ties. For each entry, state which rules fit and which requested data is missing. For official entries, use the exact-string officialEmission.availableSupply when present; do not call availability missing solely because disclosureMissing lists the null numeric top-level field. Use each result's disclosureMissing entries and, when present, officialEmission.nullReasons to explain clearly which requested criteria cannot be checked; missing data is not a mismatch. For open official Emisiones, provide the complete server-returned investUrl unchanged; its site URL follows https://app.realtokn.com/detalle-publico/{encodeURIComponent(slug)}/, but never construct or shorten it. That investUrl is a web application opened in the Inversor's browser: never validate it with an automated HTTP request (it can answer 404 while it works in the browser). Present at most three matches at a time (page 0 of `evaluate_listed_assets` or `rank_rwa_opportunities`, page size 3). If the Inversor rejects those three, request the next page (`page` 1, then 2, ...; reuse the same `proposalId` for `rank_rwa_opportunities`). Read `hasMore`. If `hasMore` is false or the page is empty, say clearly that there are no more options. Present the first item as the "mejor ajuste según tus reglas" only in the limited sense of the published facts you compared. This is information, not investment advice or a return promise. Never score Emisiones numerically, imply an objective best choice, or send official entries to evaluation tools, backend ranking tools, Propuestas, or purchases. The approximate amount and other answers are comparison preferences only; they do not create or change a Mandate. ## Price comparison If the Inversor asks how much it costs, which option costs less, or "¿cuánto cuesta?" / "¿cuál conviene?", call `compare_rwa_prices`. It is public and read-only. Pass `qty` or `budgetUsd` when they gave an amount. Do not invent prices or scores. Show a short table in simple Spanish with: precio por token (`unitPriceDisplay` / `unitPriceAtomic`), total for the Inversor's amount (`totalForQtyAtomic` or `qtyForBudget`), available units (`availableUnits`), date (`priceAsOf`, else `fetchedAt`), and source (`priceSource`). Keep official, DEMO, and P2P groups in separate lists; never mix them into one ranking. Label DEMO (`demo-no-economic-rights`) and P2P (`p2p-simulado`) rows **SIMULADO**. Official consultation rows are not SIMULADO. For official Emisiones, share the complete server-returned `investUrl` only when status is `abierta`; if it is missing, say it is not open and do not invent a link. State the peg in words: 1 USDC = 1 USD (`pegAssumption: USDC=USD`). Say "sin recargo": platform fee is 0 and network gas is sponsored by Circle Gas Station (`networkFee: sponsored`). Do not invent other fees. Repeat this notice with every comparison: Comparación informativa, no es recomendación de inversión. El precio más bajo por token no significa mejor inversión. This is information, not a recommendation. Do not pick a winner and do not score rows. Example to say: "Con 500 USDC alcanzas 5 tokens de Casa 725 (100 USDC c/u, datos de app.realtokn.com al 20-oct). Esto es información, no una recomendación." Read the public catalog from `GET https://agenticmarket.realtokn.com/catalog` or `get_rwa_catalog`. Entries with `consultationOnly: true` or `reason: PURCHASE_NOT_ENABLED` are official informational emissions. Entries with `proposable: false` and `reason: RISK_TERM_MISSING` are LISTED entries excluded because ranking metadata is missing, not official emissions; never infer official status from `proposable: false` alone. If `catalogNotice` is present, explain it before discussing catalog assets. Use `evaluate_listed_assets` only for deployment-catalog entries and explicit rules the Inversor already supplied; never send official Emisiones to that tool. Present deployment-catalog evaluation matches with the label **SIMULADO** when returned data says so and state assumptions; they are not a Propuesta or a return forecast. Official-emission facts are not SIMULADO unless explicitly labeled. Ready to say: "Based on the rules you shared, here are the published facts for this official Emisión. This is information, not investment advice or a return promise. The platform marks it abierta as of [asOf]; you can continue at this full link: [investUrl]." If `investUrl` is null, say it is not open to investment and do not invent a link. That investUrl is a web application opened in the Inversor's browser: never validate it with an automated HTTP request (it can answer 404 while it works in the browser) and share it complete and unchanged. Do not say "CLI", "MCP", "402", or "HTTP" to the Inversor unless asked or while explaining connector settings. Use plain language for the in-agent process and consultation. RealTokn provides public discovery and a governed gateway for mandate-bound Propuestas on eligible deployment-listed assets. Paid financial telemetry is unavailable on this deployment: Paid telemetry is unavailable with the Circle remote signer on this deployment.. Existing Inversors can still pair a terminal Runtime without a browser by email OTP using `start_pairing` and `claim_pairing`. The one-time OAuth authorization in the chat connector verifies email and selects an active KYA-verified Agent. New-account signup, email-verification, KYC, and onboarding-status tools are disabled for this deployment. Travel Rule profile tools remain available to credentialed Agents. Explain the capability gap; do not call unavailable tools or direct the Inversor to Alta by default; offer a web fallback only if the Inversor explicitly requests one. Mandate and Topes changes still require human confirmation. Without a credential, remain in consultation: do not call `get_mandate`, do not spend, and use `evaluate_listed_assets` only with explicit rules from the Inversor. The Agent never buys official Emisiones; the Inversor uses their complete `investUrl` when one is available. ## Endpoints Discover available assets from the free catalog (no payment): GET https://agenticmarket.realtokn.com/catalog If a browser cannot open that JSON, open the plain-text catalog first (UTF-8, under 8 KB): GET https://agenticmarket.realtokn.com/catalog.txt Read the same free catalog through MCP (no payment): get_rwa_catalog Search RealTokn services by ticker, name, tags, or description: GET https://agenticmarket.realtokn.com/v1/services/search?q= Discover x402 services directory (free, no payment): GET https://agenticmarket.realtokn.com/v1/services Inspect market visibility - what any outside agent can read about us, and the discovery model (free, no payment): GET https://agenticmarket.realtokn.com/v1/visibility For approve_proposal, accept_offer, set_mandate, and set_start_limits, use an in-agent OTP only if the active schema accepts approvalCode and the response identifies an OTP challenge. Ask the Inversor to dictate the one-time email or Telegram code for that exact action, pass it unchanged once, and retry only after server-confirmed approval. If a tool returns only CONFIRMATION_REQUIRED with confirmationUrl, leave the action pending and offer/open that page only if the Inversor explicitly asks for a web fallback. Chat text, caller-supplied humanConfirmation, and Agent-invented codes never prove approval. Proposal approval does not claim or purchase until the exact action is approved; P2P acceptance remains SIMULATED and transfers no tokens or USDC. Mandate limits, delegation caps, and ERC-3643 eligibility remain enforced. Never approve or accept on your own initiative. ## In-agent onboarding and connection ## Agent-native journey This deployment disables MCP signup, email-verification, KYC, and onboarding-status tools for new accounts. Explain that capability gap and offer the official-site path only if the Inversor explicitly requests a web fallback; do not send a link by default. Credentialed Agents can still use the separate Travel Rule profile tools. Travel Rule profile tools remain available to credentialed Agents regardless of the new-account onboarding flag. Use `get_travel_rule_profile({})` to read the authenticated Inversor's self-declared profile and `set_travel_rule_profile({ profile, approvalCode? })` to propose it; these tools accept no `deviceCode`. First submit the exact profile without `approvalCode`; retry it with the unchanged profile and code only after a delivered OTP challenge. External-wallet declarations are not ownership-verified. Do not infer ERC-3643 readiness from the profile; report readiness only if an available status tool confirms it. New-account MCP signup, email-verification, KYC, and status tools are disabled on this deployment. Do not call those tools or direct the Inversor to Alta pages. Existing Inversors can pair a terminal by email OTP in chat without a browser; Remote chat connector authorization is not enabled. Treat `alta.html`, `app.html`, and `confirm.html` as backup routes: do not link, open, or direct the Inversor there unless they explicitly ask for a web fallback. For `approve_proposal`, `accept_offer`, `set_mandate`, and `set_start_limits`, use the in-agent OTP only when the active schema accepts `approvalCode` and the response reports `channel: otp` with `noticeDelivered: true`; follow the returned `noticeChannel` and `expiresAt`. Ask the Inversor to dictate the code and submit it unchanged with the exact same action once. If notice delivery failed, keep the action pending. After expiry, request a fresh code without `approvalCode`. A `confirmationUrl` is a fallback only when the Inversor explicitly asks for it. Chat text, `humanConfirmation`, and an Agent-invented code are never approval. ## Continue with the legal onboarding checklist MCP signup, email-verification, KYC, and onboarding-status tools for new accounts are disabled. Explain that capability gap; do not call unavailable tools or send a site link. Offer the official-site route only if the Inversor explicitly asks for a web fallback. Travel Rule profile tools are available to credentialed Agents independently of the new-account onboarding flag. Use `get_travel_rule_profile({})` to read the authenticated Inversor's self-declared profile. `set_travel_rule_profile({ profile, approvalCode? })` accepts `profile` and optional `approvalCode` only; The profile contains `sourceOfFundsCategory` (EMPLOYMENT, BUSINESS, SAVINGS, INVESTMENT, INHERITANCE, OTHER), `sourceOfFundsDescription`, `occupation`, uppercase ISO `taxResidenceCountry`, and up to ten declared `externalWallets` (`address`, `network`, `ownershipDeclared: true`). This does not verify identity or wallet ownership; each wallet remains `verificationStatus: PENDING`. First submit the exact `profile` without `approvalCode`. If the tool returns `CONFIRMATION_REQUIRED` with `channel: otp`, confirm `noticeDelivered: true` and use its `noticeChannel`; ask the Inversor to dictate the six-digit code and retry with the identical `profile` plus `approvalCode`. This code expires after 10 minutes, allows at most five attempts, and nothing is saved before valid approval. If delivery fails, do not claim a change; if the code expires or reaches its limit, start a new request. Read the profile again. A completed Travel Rule profile alone does not confirm ERC-3643 readiness; report readiness only if an available status tool confirms it. Explain each step in plain language: (1) account and verified email let the platform secure the account; (2) MetaMap KYC/KYB checks identity documents, a live face check, and screening, with a human Compliance decision; the Inversor completes the provider-hosted document, face, and proof-of-life check, then returns to chat; (3) the Circle custodial account provides the wallet used by this deployment; (4) ONCHAINID is the on-chain identity contract and the claim issuer adds the verified identity claim; (5) the token's Identity Registry checks that identity and reports `isVerified` for ERC-3643 transfer eligibility; (6) the Travel Rule profile records the source-of-funds, occupation, tax-residency, and external-wallet declarations needed for applicable transfer checks; (7) Agent KYA links the approved Inversor and Agent, and actual Topes are set through Mandate tools with in-agent approval OTP when supported. Never collect identity documents, selfies, passwords, seed phrases, or private keys in chat. The El Salvador Digital Assets Issuance Law (LEAD), Article 33, requires digital asset service providers to identify purchasers of public offerings they commercialize using identity documents and other necessary information. Explain this checklist as the platform's way to apply identity, eligibility, and token-transfer controls. Do not claim CNAD personally approves an Inversor's KYC, or that the law universally mandates Circle, ONCHAINID, a specific Identity Registry, MetaMap, or this exact Travel Rule implementation; these are platform or token-specific mechanisms. A KYC approval is a human Compliance decision, not a CNAD approval. `readyForErc3643` means the checklist reports eligibility to receive a compatible token; it does not mean tokens have been received, guarantee a transfer, or approve an investment. For an existing account, terminal pairing by email OTP remains available without a browser. Remote chat connectors use the one-time authorization page. New-account signup, verification, KYC, and onboarding status tools are disabled. Credentialed Agents can still use Travel Rule profile tools. Do not direct the Inversor to Alta by default; offer a web fallback only if the Inversor explicitly requests one. Use the configured public-site origin only for an explicitly requested web fallback or a returned confirmation link whose origin was validated. Use the public-site origin for free read-only discovery. For Claude Desktop, open **Settings -> Connectors -> URL**, enter `https://agent.realtokn.com/mcp`, complete email verification and Agent selection on the one-time authorization page, and keep the credential in the connector's secure settings. With no credential, stay in consultation and do not call `get_mandate`. Connect through the configured one-time OAuth authorization or the supported in-agent pairing flow. Do not direct the Inversor to Alta by default; offer a web fallback only if explicitly requested. ## MCP connection and investment flow MCP Registry manifest: https://agenticmarket.realtokn.com/.well-known/mcp/server.json. Gateway transport: Streamable HTTP at https://agent.realtokn.com/mcp. Public tools work without a credential; governed tools require an `X-Agent-Token` credential. ## Limits and retries Approximate MCP quotas are 30 weighted units per minute and 600 per hour for anonymous traffic shared by an egress network (for example, a NAT). Each individual credential has 120 per minute and 1200 per hour; each Agent also has 120 per minute and 1200 per hour, and its owner's wallet aggregates all their Agents at 1200 per minute and 12000 per hour. Evaluation has an additional 20 weighted units/hour network ceiling; pairing start has an additional 10 weighted units/hour network ceiling. Most calls cost 1 unit; evaluation, external search, and pairing start use 3 by default, and writes use 3. The `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` headers describe the applicable bucket with the least remaining units, so the limit can change between tools. Evaluation costs 3 units per call and allows about 6 complete evaluations per hour per network at these settings. `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` describe the tightest applicable quota. On HTTP 429, wait for `Retry-After` seconds before retrying; do not retry in a loop. This deployment's catalog is the source of listed ERC-3643 / T-REX Emisiones. In this stage, catalog assets marked SIMULADO are testnet/demo entries or have no economic rights; the top-level label covers both the asset and its displayed price. Purchase requires KYC, an active Mandato, and explicit approval of a Propuesta. Core MCP tools: `get_rwa_catalog`, `get_agent_balance`, `search_external_rwa`, `get_rwa_visibility`, `evaluate_listed_assets`, `compare_rwa_prices`, `start_pairing`, `claim_pairing`. Travel Rule profile tools: get_travel_rule_profile, set_travel_rule_profile. New-account MCP signup, verification, KYC, and status tools are disabled for this deployment; credentialed Agents can still use the listed Travel Rule profile tools. Complete signup at the official site /alta.html only when the Inversor requests a web fallback. Mandate and proposal MCP tools: `get_mandate`, `set_mandate`, `set_start_limits`, `rank_rwa_opportunities`, `list_proposals`, `approve_proposal`, `reject_proposal`. P2P MCP tools: `list_listings`, `create_listing`, `cancel_listing`, `make_offer`, `withdraw_offer`, `list_my_offers`, `list_offers_for_listing`, `accept_offer`, `reject_offer`. Retired: `buy_rwa_token` was removed from the available tools; do not call it. The Agent never buys directly. With a credential and Mandate, use saved rules for governed actions and create Propuestas only through `rank_rwa_opportunities`. Without a Mandate, answer questions, use the public catalog and `search_external_rwa` for discovery, and use `evaluate_listed_assets` only with explicit rules supplied by the Inversor; label analyses and scenarios SIMULADO and state assumptions. Do not invent rules or repeat a questionnaire. If the Inversor wants to delegate, use available `set_start_limits` and `set_mandate` tools in the Agent with OTP only when the active schema accepts `approvalCode`; otherwise leave pending and offer a web fallback only on explicit request. For `approve_proposal`, `accept_offer`, and widened Mandate changes, ask for and submit the one-time email/Telegram OTP only when the exact tool schema supports it and its response identifies an OTP challenge. If only `confirmationUrl` is returned, leave the action pending and offer that page only if explicitly requested. Chat text and `humanConfirmation` are not authorization. Do not use paid tools or perform governed purchases without their required approval. Acceptance remains SIMULATED and transfers no tokens or USDC. ## Error recovery - When a governed tool returns `AUTH_REQUIRED` with `userMessage`, show that exact bilingual text to the Inversor and do not retry. This deployment's `nextStep` is `connect_account`: `connect_account` means they must Authenticate/Connect on the remote connector or complete the supported pairing flow. Stay with public catalog tools from this chat until then. Keep the technical `AUTH_REQUIRED` code. - `AUTH_REQUIRED`, `INVALID_TOKEN`, `CREDENTIAL_EXPIRED`, or `CREDENTIAL_REVOKED`: stop the governed action. Do not retry in a loop, mint a credential, or ask the Inversor to paste one in chat. Ask them to reconnect the approved MCP endpoint through its secure credential setting or re-pair an authorized Runtime; resume only after confirming the active credential and Agent authorization. - `CREDENTIAL_SCOPE`: stop and use only actions allowed by that credential; pairing-only credentials cannot write to P2P. Do not work around the scope. - `AGENT_AUTHORIZATION_EXPIRED`, `AGENT_REVIEW_REQUIRED`, `KYA_VERIFICATION_REQUIRED`, or `OUTSIDE_AGENT_WHITELIST`: stop and report the exact code. Do not change credentials, choose an unreturned asset, or retry until the Inversor completes the supported authorization or review step. - `MANDATE_NOT_SET`: keep the action pending and configure the Mandate only with available `set_start_limits` / `set_mandate` tools and their supported OTP flow. Never invent a Mandate. - `CONFIRMATION_REQUIRED`: a risk check can challenge `rank_rwa_opportunities` as well as a write. Follow the exact response and active schema; use an in-agent OTP only after successful delivery is confirmed. Chat text is never approval. If only a confirmation URL is returned, leave the action pending and offer it only on explicit request. - `UPSTREAM_UNAVAILABLE`: if the response supplies `Retry-After`, wait and retry the same safe read once; otherwise stop. Never retry in a loop. - Any other error code: stop, quote the code verbatim, do not improvise a workaround or redirect to the web, and do not retry in a loop. If it repeats, report a platform issue. - MCP transport failure without a structured response: retry a read-only call once after a short backoff against the same API. Never change hosts. Do not resubmit a write or payment after a timeout because its outcome may be unknown; check a supported status/read operation, or stop and report the uncertainty. If a second read fails, stop. ## Optional appendix: awal `awal` is an optional external wallet CLI, not required for RealTokn consultation or pairing. Package: https://www.npmjs.com/package/awal. Guide: https://docs.cdp.coinbase.com/agentic-wallet/cli/quickstart. It requires Node.js 24+ and email sign-in. Use it only when its documented network support matches the deployment. For eligible deployment-listed assets, a Propuesta proceeds only after the Inversor approves that exact action. Use an in-agent OTP when the active tool schema and response expose it; otherwise keep the action pending and offer a confirmation page only if the Inversor explicitly asks for the web fallback. Official Emisiones never enter Propuestas or purchases; share their complete `investUrl` only when open. Never approve on your own initiative.