Skip to main content
Glama

get_spreadsheet_url

Read-only

Return the user's master ExpenseBot Google Sheet plus authenticated workspace links, each with a label and when-to-use description. Use when the user asks to open, view or edit their spreadsheet; review expenses or income; scan Gmail; reconcile; connect or manage a bank/card; open Automation Hub or General Settings; create or open reports; or asks where a submitted receipt went. Show only the one or two relevant links, not the catalog. After a receipt submission prefer Review expenses plus the Sheet; after an income write, Review income plus the Sheet. Gmail scan or connection: Scan Gmail. Bank/card: Reconcile. Configuration: Automation Hub or General Settings. Category, G/L and account codes: Category management. Client, project and trip groups: Group management. What counts as Personal: Personal rules. Client billing setup: use the returned clientBillingHandoffs, not a generic tour: manageClients manages the client list, tagReadyExpenses opens Review Expenses filtered to blank or default-Business rows, createClientReport opens report creation by group once expenses are assigned; pick the one step matching the user's state. If the user names a client and an exact expense scope and wants the assistant to do the work, use search_expenses and group_expenses instead (grounded preview, explicit confirmation before changing rows). Google Photos receipt picking: Google Photos link (existing authenticated picker, handles Google consent). Receipt file storage: the Drive folder link only when available; never invent or request a folder ID. A complete, unambiguous cash expense or mileage trip: use the direct write tool. Manual expense link: multiple entries, credits/refunds, detailed tax/tip, per diem, incomplete details, visual review. Mileage and travel link: route calculation, mileage settings, repeated trips, calendar/rideshare imports, per diem, visual review. Income import from a screenshot, PDF or CSV with no attachment in chat (or a visually complex review): Import income links; the importer shows every row for review before saving. Team setup: the role-aware Team setup handoff (solo business owners open Add teammates; team owners and co-admins open Team Management); if it says owner access is required, explain that instead of presenting a broken link. Complex or visually reviewed report requests: Create report link. Read-only; modifies no spreadsheet rows.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output 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

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data; 'Read-only; modifies no spreadsheet rows' largely restates it. What the description does add beyond annotations is operational: show only one or two relevant links rather than the catalog, never invent or request a folder ID, surface clientBillingHandoffs, and explain an owner-access-required message instead of presenting a broken link.

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?

The opening sentence front-loads the purpose correctly, but the body sprawls into a several-hundred-word catalog of sibling routing rules, which sits awkwardly against its own instruction to show only one or two links rather than a catalog. Much of the content is relevant, yet it is dense, semicolon-chained, and hard to scan for the single link an agent needs.

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?

With an output schema present, return-value detail is not required, and annotations carry the safety profile, so the remaining need is knowing which links apply in which state. The description covers that thoroughly, including fallback behavior for owner-access and the clientBillingHandoffs path, leaving little an agent would need to guess.

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 applies. The schema is empty and consistent with the description's no-argument link lookup.

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

Purpose4/5

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

The first sentence states a specific verb and resource: it returns the master ExpenseBot Google Sheet plus labeled workspace links, each with a when-to-use description. That is concrete enough to distinguish it from data-mutation siblings, though the core function is quickly buried under a long downstream routing catalog.

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 enumerates explicit triggers (open/view/edit spreadsheet, review expenses, scan Gmail, reconcile, manage bank/card, open Automation Hub, create reports, trace a receipt) and then maps each scenario to a specific sibling or link. It also gives explicit exclusions: use the direct write tool for a complete unambiguous cash expense, use search_expenses plus group_expenses when the user names a client and exact scope.

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.