Skip to main content
Glama

get_spreadsheet_url

Read-only

Return the user's master ExpenseBot Google Sheet plus authenticated ExpenseBot workspace links, each with a label and a description of when to use it. Use this when the user asks to open, view, check, or edit their spreadsheet; review expenses or income; manually scan Gmail; reconcile; connect or manage a bank/credit card; open Automation Hub or General Settings; create or open reports; or asks where a submitted receipt went. Choose and show the one or two links relevant to the request instead of listing the entire catalog. After a receipt submission, prefer Review expenses plus the Google Sheet. After an income write, prefer Review income plus the Sheet. For a Gmail scan or connection request, use the Scan Gmail link, which opens the existing Gmail scanning interface. Bank/card requests use the Reconcile link; configuration requests use the returned Automation Hub or General Settings link. Category, G/L, and account-code requests use Category management; client, project, and trip groups use Group management; questions about what counts as Personal use Personal rules. For client billing setup, use the returned clientBillingHandoffs instead of giving a generic dashboard tour: manageClients creates or manages the client list, tagReadyExpenses opens Review Expenses filtered to blank or default-Business rows, and createClientReport opens report creation by group after expenses have been assigned. Choose the one next step that matches the user's current state. If the user names a client and an exact expense scope and asks the assistant to do the work, use search_expenses and group_expenses instead; show its grounded preview and require explicit confirmation before changing any rows. When the user asks to choose receipt images from Google Photos, use the returned Google Photos link; it opens the existing authenticated picker and handles any required Google consent in ExpenseBot. When they ask where ExpenseBot stores receipt files, return the Drive folder link only when it is available; never invent or request a folder ID. For a complete, unambiguous cash expense or mileage trip, use the direct write tool. Use the returned Manual expense link for multiple entries, credits/refunds, detailed tax/tip entry, per diem, incomplete details, or visual review. Use the Mileage and travel link for route calculation, mileage settings, repeated trips, calendar/rideshare imports, per diem, or visual review. These links open the existing reviewed app forms. When the user wants to import income from a screenshot, PDF, or CSV but no attachment is available in chat (or the review is visually complex), use the returned Import income links — they open the existing Add Income importer, which parses the file and shows every row for review before anything is saved. Team setup requests use the returned role-aware Team setup handoff: eligible solo business owners open Add teammates, while existing team owners and co-admins open Team Management. If the handoff says owner access is required, explain that instead of presenting a broken link. Complex or visually reviewed report requests use the returned Create report link. Read-only; this tool does not create or modify spreadsheet rows.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYes
messageYes
successYes
reportsUrlYes
dashboardUrlYes
gmailScanUrlYes
spreadsheetIdYes
spreadsheetUrlYes
reviewIncomeUrlYes
reviewExpensesUrlYes
gmailActionNeededUrlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • removedOutput schema / description
      Removed value: -"Standard ExpenseBot tool result envelope. `message` is the human-readable summary the AI cites; `data` is the structured payload (totals, breakdowns, ids, etc.). On failure, `success` is false and `error` carries a code/message/hint triple."
    • addedOutput schema / properties / dashboardUrl
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / data / description
      Removed value: -"Structured payload. Shape varies per tool — common keys: total, breakdown, comparison, sampleMeta, ids, expenseId, reportId, signupUrl, results."
    • removedOutput schema / properties / error
      Removed value: -{
      -  "additionalProperties": true,
      -  "description": "Present only when success === false.",
      -  "properties": {
      -    "code": {
      -      "type": "string"
      -    },
      -    "hint": {
      -      "type": "string"
      -    },
      -    "message": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • addedOutput schema / properties / gmailActionNeededUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / gmailScanUrl
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / message / description
      Removed value: -"Human-readable result text. Always present on success; prefer rendering this verbatim before any further reasoning."
    • addedOutput schema / properties / reportsUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / reviewExpensesUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / reviewIncomeUrl
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / sampleMeta
      Removed value: -{
      -  "additionalProperties": true,
      -  "description": "Set when the underlying dataset was truncated. isTruncated=true means the agent saw a sample of `sampleCount` of `totalCount` rows; aggregate totals are still accurate.",
      -  "properties": {
      -    "isTruncated": {
      -      "type": "boolean"
      -    },
      -    "sampleCount": {
      -      "type": "integer"
      -    },
      -    "totalCount": {
      -      "type": "integer"
      -    }
      -  },
      -  "type": "object"
      -}
    • addedOutput schema / properties / spreadsheetId
      Added value: +{
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedOutput schema / properties / spreadsheetUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / success / const
      Added value: +true
    • removedOutput schema / properties / success / description
      Removed value: -"False on tool errors; check before reading `data`."
    • addedOutput schema / required
      Added value: +[
      +  "success",
      +  "spreadsheetId",
      +  "spreadsheetUrl",
      +  "reviewExpensesUrl",
      +  "reviewIncomeUrl",
      +  "gmailScanUrl",
      +  "gmailActionNeededUrl",
      +  "reportsUrl",
      +  "dashboardUrl",
      +  "data",
      +  "message"
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, and the description reinforces this with 'Read-only; this tool does not create or modify spreadsheet rows.' Beyond annotations it adds genuinely useful behavior: show only one or two relevant links rather than the full catalog, never invent a Drive folder ID, explain owner-access requirements instead of presenting a broken link, and require explicit confirmation before row changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

This is a single ~350-word run-on paragraph with no headings or bullets, and much of the routing prose duplicates its own output — the description states each returned link already carries 'a description of when to use it.' The purpose is front-loaded, but the volume is disproportionate and unstructured even for a dispatcher tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Coverage of scenarios is remarkably complete for a zero-param dispatcher, and the presence of an output schema means return contents need not be explained. The only shortfall is that the heavy per-scenario routing rules logically belong in the returned link descriptions, making the tool description an oversized complement rather than a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Referenced fields like clientBillingHandoffs and the label/description pairs are part of the output, not inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: 'Return the user's master ExpenseBot Google Sheet plus authenticated ExpenseBot workspace links, each with a label and a description of when to use it.' That immediately distinguishes it from siblings like get_spending_summary or search_expenses — it is a link/handoff catalog, not a data or write tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an exhaustive when-to-use map: after receipt submission prefer Review expenses + Sheet, after income write prefer Review income, Gmail requests use Scan Gmail, bank/card use Reconcile, categories use Category management, etc. It also names explicit alternatives (search_expenses and group_expenses for client-scoped work, direct write tools for clean cash/mileage entries) and the conditions that select them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.