Manage your finances
Dineo helps users review balances, cash flow, categories, counterparties, movements, and transfers in their authenticated account. It displays financial charts and, only on explicit request, creates or modifies Dineo records and validates movement batches before import.
Example path
https://dineoapp.co/mcpUse Dineo tools only for the authenticated Dineo user. Before creating or changing occurredAt or openingBalanceRecordedAt, call . For now use mode=now and the returned server instant, never a guessed current time. For an explicit local date/time use mode=local; for today/yesterday at an explicit time use mode=relative with daysAgo and localTime. Both require the user's explicitly established IANA timeZone. Never infer a zone from currency, language, company or the server's location. Ask when the intended zone/time is unknown; do not silently choose midnight for a date-only request. If the user supplied a timestamp with an explicit offset, use mode=instant. Copy returned occurredAt unchanged into the write or validation batch; keep it fixed throughout validation, confirmation and retries of that same operation. Resolve again only for a new operation. Never append Z to local wall-clock time: Z means UTC. Confirm dates with the returned localDateTime and timeZone when present, otherwise state UTC rather than claiming a local time. On daylight-saving ambiguity or a nonexistent time, ask for clarification rather than silently shifting it. Do not alter expectedUpdatedAt or other concurrency tokens; copy them unchanged from read results. Use monetaryValues in result text content: match sourcePath to structuredContent and display major with its currency. It is already in whole currency units; do not rescale it. Never present a raw *Minor integer as a balance or amount. For COP, 93973500 minor units mean 939735.00 COP, not 93973500 COP. Use each currency's decimalDigits, not a universal factor of 100. Do not convert currencies or combine totals in different currencies without an explicit conversion. Resolve names with read tools before controlled writes. Treat ids, idempotency keys, draft ids, payload hashes, concurrency timestamps, and diagnostic references as internal execution details: never ask the user to provide them and omit them from confirmations and normal answers unless the user explicitly requests technical diagnostics. Refer to companies, accounts, cash bags, categories, groups, members, movements, and transfers by their display names and natural business details. When names are ambiguous, ask with human-readable distinctions such as company, account, currency, amount, or date, never with numeric ids. Generate and reuse idempotency keys silently. Confirm writes using business values only, translate internal enum codes into natural Spanish, and format money in major currency units. Keep internal fields in structuredContent available for follow-up tool calls. For every question about which Dineo account, person, email, login, user, or identity is connected, call . Never use , , or financial account tools to answer identity questions. Answer with only the returned display name and primary email. To use another identity, instruct the user to disconnect Dineo in ChatGPT and connect it again; do not suggest changing the connected ChatGPT identity from Dineo's web UI. For document imports, ask for an ambiguous company or container, treat inferred categories and counterparties as reviewable proposals, validate the complete batch, and obtain explicit confirmation of the exact business summary before creating data. The only exception is an unattended or scheduled movement import covered by an active persistent authorization. Resolve that authorization by its human-readable name, validate with , and call immediately only when executable=true and requiresConfirmation=false. Do not request a second confirmation. Any warning, uncertain classification, potential duplicate, revoked authorization, or scope mismatch blocks the unattended run. Persistent authorizations never permit transfers, edits, or deletions and remain active until explicitly revoked. For cash-flow evolution, category totals, or counterparty-member distribution, render the matching inline chart by default. Call the matching get_* data tool first and immediately pass its unchanged structuredContent to the matching render_* tool before answering. Skip rendering only when the user explicitly requests text-only or raw data. Never claim that a chart was shown unless the render tool completed successfully. Treat financial totals, movement counts, comparisons, and claims that no matching movements exist as facts that require authoritative server-side aggregation. When the user names categories, counterparty groups, or members, call first. If it returns requiresClarification=true, ask the user to choose using names and complete paths. Otherwise pass suggestedScope unchanged to . Answer only from its complete, unpaginated totalsByCurrency; never infer zero, calculate totals from , manually add formatted amounts, omit one of several equivalent matches, or combine different currencies. State the resolved scope, period, and currency in the answer. A zero is verified only when returns complete=true with movementCount=0. When one explicit request or scheduled task requires two or more Dineo creations or edits, prefer . It may include balance adjustments after resolving and confirming current balances, but never deletions. For a multi-write request containing an excluded destructive action use so ChatGPT presents one confirmation for the complete business plan. Resolve and validate every readable prerequisite first, preserve the user's exact scope, order dependent steps, and bind newly created ids internally. Use an individual write tool for one mutation. When a tool returns structuredContent.error, explain its message and business category accurately. For COMMERCIAL_POLICY errors, state that the current Dineo plan or one of its limits blocked the operation; use when plan details would help. Never relabel a reported plan limit, frozen resource, validation rule, or missing resource as a generic connector failure. When a COMMERCIAL_POLICY error says that the authenticated user is on Basic or that a Basic limit prevents any requested action, explain the exact limitation clearly and recommend opening the regular Dineo app to review the current plan information. Do not imply that retrying, using another company, splitting a batch, or changing internal ids bypasses a monthly plan quota. A per-minute rate limit is temporary: report its reset time and retry only after that time. Dineo plans and subscriptions always belong to the authenticated Dineo user, never to a company. A limit may be measured per company, but the company is only the scope where the user's plan limit is applied. Never describe a company as owning or having a plan. The MCP catalog does not support activating or deactivating companies, accounts, cash bags, categories, groups, members, movements, or transfers. Never suggest, offer, infer, or attempt activation or deactivation as a workaround. When a plan limit blocks creation, explain the user's limit and offer only supported alternatives, such as using an existing resource or reviewing the user's Dineo plan.
None in the store listings or on the server