Skip to main content
Glama

DeepLedger QuickBooks MCP Server for ChatGPT, Claude & AI

companies

Idempotent

DeepLedger: list and switch the companies you work in, on any ledger (QuickBooks or Xero). Every other tool acts on the ACTIVE company, named in each result's "company" field. current (default): the active company, its ledger and apps. list: every company with its ledger. switch (organizationId or name): make one active for every later call from every AI client; name it to the user before the first write. Every write passes companyId (the organizationId in the last "company"); COMPANY_MISMATCH means it changed (another chat may have switched): ask the user. Use the tools of the active company's ledger (qb* or xero*). On NO_ACTIVE_COMPANY: list, then switch. feedback (subject, message): report a problem to DeepLedger; no financial data.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "companies"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoswitch: the company name; must match one company.
messageNofeedback: what happened; no financial data.
subjectNofeedback: one line; no amounts or names.
operationNocurrent
organizationIdNoswitch: the id from list.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior4/5

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

Annotations mark this non-read-only but non-destructive and idempotent; the description goes well beyond that by disclosing the global side effect of switch ("make one active for every later call from every AI client"), the cross-chat contention risk surfaced as COMPANY_MISMATCH, and the unauthenticated-ish escape hatch of feedback. It does not describe return shapes or what fields list returns beyond the ledger, though that is partly inherent to a switch/state tool.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries operational content — there is no filler. It is written in a dense, telegraphic register with fragments and parentheticals ("current (default): the active company, its ledger and apps"), which packs a lot in but costs some readability.

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

Completeness5/5

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

There is no output schema, and the description compensates by explaining that each result carries a "company" field naming the active company, plus how to recover from NO_ACTIVE_COMPANY and COMPANY_MISMATCH. For a five-parameter, zero-required dispatcher tool, an agent has everything needed to call it correctly and to interpret failure modes.

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?

Schema coverage is 80%, and the description still adds real meaning: it maps each enum value to its purpose, states current is the default, explains that switch accepts either organizationId or name, and notes organizationId should come "from list." That is genuine operation-to-parameter binding the schema does not express, since the operation enum itself has no per-value descriptions.

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 names specific verbs and resource ("list and switch the companies you work in, on any ledger") and immediately scopes it against the sibling set by saying every other tool acts on the ACTIVE company. Each of the four operations is then defined in a compact clause, so an agent can enumerate the tool's capabilities without opening the schema.

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?

Explicit routing rules are given for the exact situations an agent will hit: "Use the tools of the active company's ledger (qb* or xero*)" and "On NO_ACTIVE_COMPANY: list, then switch." It also imposes a precondition on writes ("name it to the user before the first write") and prescribes behavior on COMPANY_MISMATCH, which is precisely the when-to-use guidance this dimension asks for.

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.