Skip to main content
Glama
hakeemrabiuDFW

QuickBooks Online MCP Server

QuickBooks Online MCP Server

A Model Context Protocol (MCP) server for QuickBooks Online integration, enabling AI assistants like Claude to query and manage QuickBooks data through natural language.

Features

  • Customers: List, search, and view customer details

  • Invoices: Create and list invoices with filtering

  • Bills: Track vendor bills and payables

  • Vendors: Manage supplier information

  • Accounts: View chart of accounts

  • Reports: Generate Profit & Loss reports

Related MCP server: LedgerLink MCP

Prerequisites

  • Node.js 18+

  • QuickBooks Online account

  • Intuit Developer account with OAuth app

Quick Start

1. Clone the repository

git clone https://github.com/hakeemrabiuDFW/quickbooks-mcp-server.git
cd quickbooks-mcp-server

2. Install dependencies

npm install

3. Configure environment

cp .env.example .env

Edit .env with your QuickBooks credentials:

QUICKBOOKS_CLIENT_ID=your_client_id
QUICKBOOKS_CLIENT_SECRET=your_client_secret
QUICKBOOKS_REFRESH_TOKEN=your_refresh_token
QUICKBOOKS_COMPANY_ID=your_company_id
QUICKBOOKS_ENVIRONMENT=production

4. Build and run

npm run build
npm start

Getting QuickBooks Credentials

Step 1: Create Developer Account

  1. Go to developer.intuit.com

  2. Sign in or create account

  3. Create a new app (select QuickBooks Online API)

Step 2: Get Client Credentials

  1. In your app dashboard, find Client ID and Client Secret

  2. Add OAuth redirect URI: http://localhost:3000/callback

Step 3: Get Refresh Token

  1. Use the OAuth Playground in Intuit Developer portal

  2. Or use a tool like qbo-oauth-tool

  3. Complete OAuth flow to get refresh token

Step 4: Find Company ID (Realm ID)

  1. Log into QuickBooks Online

  2. Company ID is in the URL: https://qbo.intuit.com/app/...?realmId=COMPANY_ID

Claude Desktop Configuration

Add to your Claude Desktop config (~/.config/claude/claude_desktop_config.json):

{
  "mcpServers": {
    "quickbooks": {
      "command": "node",
      "args": ["/path/to/quickbooks-mcp-server/dist/index.js"],
      "env": {
        "QUICKBOOKS_CLIENT_ID": "your_client_id",
        "QUICKBOOKS_CLIENT_SECRET": "your_client_secret",
        "QUICKBOOKS_REFRESH_TOKEN": "your_refresh_token",
        "QUICKBOOKS_COMPANY_ID": "your_company_id",
        "QUICKBOOKS_ENVIRONMENT": "production"
      }
    }
  }
}

Available Tools

Tool

Description

qbo_list_customers

List customers with optional filtering

qbo_list_invoices

List invoices by customer, status, or date

qbo_create_invoice

Create a new invoice

qbo_list_accounts

View chart of accounts

qbo_profit_loss_report

Generate P&L report

qbo_list_vendors

List vendor/suppliers

qbo_list_bills

List bills/payables

Example Usage

Once connected to Claude:

"Show me all open invoices"
"Create an invoice for customer ID 123 with a $500 cleaning service charge"
"Get the profit and loss report for Q4 2025"
"List all unpaid bills"

HTTP Transport

To run as HTTP server instead of stdio:

TRANSPORT=http PORT=3000 npm start

Railway Deployment

Deploy to Railway with one click or via CLI:

Option 1: Railway Dashboard

  1. Fork this repository

  2. Go to Railway and create a new project

  3. Select "Deploy from GitHub repo"

  4. Add environment variables in Railway dashboard:

    • QUICKBOOKS_CLIENT_ID

    • QUICKBOOKS_CLIENT_SECRET

    • QUICKBOOKS_REFRESH_TOKEN

    • QUICKBOOKS_COMPANY_ID

    • QUICKBOOKS_ENVIRONMENT=production

  5. Railway will auto-deploy using the included Dockerfile

Option 2: Railway CLI

# Install Railway CLI
npm install -g @railway/cli

# Login and deploy
railway login
railway init
railway up

MCP Endpoint

Once deployed, your MCP endpoint will be:

https://your-app.railway.app/mcp

Health check available at:

https://your-app.railway.app/health

Docker Deployment (Local)

docker build -t quickbooks-mcp .
docker run -p 3000:3000 --env-file .env quickbooks-mcp

License

MIT

Author

Hakeem Rabiu - Martinez Cleaning LLC

Available Tools

7 tools
qbo_create_invoiceCreate QuickBooks InvoiceA

Create a new invoice in QuickBooks Online.

Args:

  • customer_id (required): The QuickBooks customer ID

  • line_items (required): Array of {description, amount, quantity}

  • due_date: Invoice due date (YYYY-MM-DD)

  • memo: Notes visible to customer

Returns: Created invoice details including Id, DocNumber, and TotalAmt

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idYesQuickBooks Customer ID
line_itemsYesInvoice line items
due_dateNoDue date (YYYY-MM-DD)
memoNoCustomer memo/notes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide important behavioral hints (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), so the bar is lower. The description adds some context by mentioning the return format ('Created invoice details including Id, DocNumber, and TotalAmt'), which helps the agent understand what to expect. However, it doesn't disclose other behavioral traits like authentication requirements, rate limits, or error conditions.

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?

The description is well-structured with clear sections (purpose, Args, Returns) and uses bullet points for readability. It's appropriately sized for a creation tool with 4 parameters. However, the 'Args' section could be more concise by integrating with the schema instead of duplicating information, and the purpose statement is somewhat basic.

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?

Given the tool's complexity (a write operation with 4 parameters), the description is reasonably complete. It covers the purpose, parameters, and return values. With annotations providing safety hints and no output schema, the description's inclusion of return details is valuable. However, it lacks context about error handling, validation rules, or integration with sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all parameters. The description's 'Args' section essentially repeats what's in the schema without adding meaningful semantic context (e.g., explaining what a 'customer_id' represents beyond 'QuickBooks Customer ID' or providing examples of line item descriptions). The baseline of 3 is appropriate when the schema does the heavy lifting.

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 description clearly states the specific action ('Create a new invoice') and resource ('in QuickBooks Online'), distinguishing it from sibling tools like qbo_list_invoices (which lists invoices) and other list tools. It provides a precise verb+resource combination that leaves no ambiguity about the tool's function.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. While it's clear this creates invoices, there's no mention of prerequisites (e.g., needing an existing customer), when not to use it, or how it differs from other invoice-related operations that might exist. The agent must infer usage from the tool name alone.

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

qbo_list_accountsList QuickBooks AccountsA
Read-onlyIdempotent

List chart of accounts from QuickBooks Online.

Args:

  • account_type: Filter by type ('all', 'Bank', 'Accounts Receivable', etc.)

  • response_format: 'markdown' or 'json'

Returns: Account list with: Id, Name, AccountType, CurrentBalance

ParametersJSON Schema
NameRequiredDescriptionDefault
account_typeNoFilter by account typeall
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover key behavioral traits (read-only, open-world, idempotent, non-destructive), so the bar is lower. The description adds useful context by specifying what data is returned (Id, Name, AccountType, CurrentBalance) and the response format options, which goes beyond annotations. No contradictions with annotations exist.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by bullet points for Args and Returns. Every sentence adds value without redundancy, making it easy to scan and understand quickly.

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?

Given the tool's low complexity (2 parameters, no output schema), annotations covering safety, and high schema coverage, the description is mostly complete. It specifies return fields, which compensates for the lack of output schema, but could improve by mentioning pagination or error handling for a more comprehensive view.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters well-documented in the schema (including enums, defaults, and descriptions). The description adds minimal value beyond the schema by listing the return fields, which doesn't directly relate to parameter semantics. Baseline 3 is appropriate given the comprehensive schema.

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 description clearly states the verb ('List') and resource ('chart of accounts from QuickBooks Online'), making the purpose specific and unambiguous. It distinguishes this tool from siblings like qbo_list_customers or qbo_list_invoices by specifying it deals with accounts rather than other QuickBooks entities.

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

Usage Guidelines3/5

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

The description implies usage through the mention of filtering by account_type and output format options, but it doesn't explicitly state when to use this tool versus alternatives. No guidance is provided on prerequisites, timing, or comparisons with sibling tools like qbo_profit_loss_report for financial data.

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

qbo_list_billsList QuickBooks BillsA
Read-onlyIdempotent

List bills/payables from QuickBooks Online.

Args:

  • limit/offset: Pagination

  • vendor_id: Filter by vendor

  • status: 'all', 'unpaid', or 'paid'

  • response_format: 'markdown' or 'json'

Returns: Bill list with: Id, VendorRef, TxnDate, DueDate, TotalAmt, Balance

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return
offsetNoNumber of results to skip
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown
vendor_idNoFilter by vendor ID
statusNoPayment status filterall

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already provide strong hints (readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true), covering safety and idempotency. The description adds value by specifying the return format options ('markdown' or 'json') and listing the fields in the output (e.g., Id, VendorRef, TxnDate), which are not covered by annotations. It doesn't contradict annotations, as 'List' aligns with read-only behavior.

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?

The description is appropriately sized and structured with clear sections (Args, Returns), making it easy to scan. It avoids unnecessary verbosity, but the Args section could be more integrated into the main text rather than listed separately, slightly reducing efficiency. Overall, it's front-loaded with the core purpose.

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?

Given the tool's complexity (5 parameters, no output schema), the description is reasonably complete. It covers the purpose, parameters (via schema), and return fields, though it lacks details on error handling or rate limits. With annotations providing safety context, it's sufficient for a list operation, but could benefit from more behavioral context like pagination limits or data freshness.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter well-documented in the schema (e.g., limit, offset, status with enum values). The description adds minimal semantics beyond the schema, only briefly mentioning pagination and filtering in the Args section without new details. This meets the baseline of 3 since the schema carries the primary burden.

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 description clearly states the action ('List') and resource ('bills/payables from QuickBooks Online'), making the purpose specific and unambiguous. It distinguishes this tool from siblings like qbo_list_invoices and qbo_list_vendors by focusing on bills/payables, which are distinct financial entities in accounting systems.

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

Usage Guidelines3/5

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

The description implies usage through the mention of filtering options (vendor_id, status) and pagination, suggesting it's for retrieving bill data. However, it lacks explicit guidance on when to use this tool versus alternatives like qbo_list_invoices or qbo_profit_loss_report, which might also involve financial data retrieval. No exclusions or prerequisites are stated.

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

qbo_list_customersList QuickBooks CustomersA
Read-onlyIdempotent

List all customers from QuickBooks Online.

Returns customer details including name, email, phone, balance, and status.

Args:

  • limit (number): Maximum results (default: 100, max: 1000)

  • offset (number): Skip results for pagination

  • active_only (boolean): Only active customers (default: true)

  • search (string): Filter by name/company

  • response_format: 'markdown' or 'json'

Returns: List of customers with: Id, DisplayName, PrimaryEmailAddr, PrimaryPhone, Balance, Active

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return
offsetNoNumber of results to skip
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown
active_onlyNoOnly return active customers
searchNoSearch term to filter by name or company

TDQS

A3.9/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=true, and idempotentHint=true, covering safety and idempotency. The description adds useful context beyond this: it specifies the return format options (markdown/json) and details about pagination (limit/offset), which are not captured in annotations, enhancing behavioral understanding.

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?

The description is well-structured with clear sections (purpose, returns, args, returns details) and uses bullet points for readability. It is appropriately sized but could be slightly more concise by avoiding repetition of schema details. Most sentences earn their place by providing essential info.

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?

Given the tool's complexity (list operation with filtering/pagination), annotations provide good safety coverage, and the description adds context like return format and data fields. However, without an output schema, the description partially compensates by listing return fields, though it could better explain response structure or error handling.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description repeats parameter info (e.g., limit, offset, active_only, search, response_format) without adding significant meaning beyond what's in the schema, such as usage examples or edge cases. Baseline 3 is appropriate as the schema does the heavy lifting.

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 description clearly states the specific action ('List all customers') and resource ('from QuickBooks Online'), distinguishing it from sibling tools like qbo_list_invoices or qbo_list_vendors. It explicitly mentions what data is returned, making the purpose unambiguous and distinct.

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

Usage Guidelines3/5

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

The description implies usage for retrieving customer data but does not explicitly state when to use this tool versus alternatives like qbo_list_vendors or qbo_list_accounts. It provides no guidance on prerequisites, exclusions, or specific scenarios where this tool is preferred over others.

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

qbo_list_invoicesList QuickBooks InvoicesA
Read-onlyIdempotent

List invoices from QuickBooks Online with filtering options.

Args:

  • limit/offset: Pagination

  • customer_id: Filter by specific customer

  • status: 'all', 'open', 'paid', or 'overdue'

  • start_date/end_date: Date range filter (YYYY-MM-DD)

  • response_format: 'markdown' or 'json'

Returns: Invoice list with: Id, DocNumber, CustomerRef, TxnDate, DueDate, TotalAmt, Balance

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return
offsetNoNumber of results to skip
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown
customer_idNoFilter by customer ID
statusNoInvoice status filterall
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover key behavioral traits (read-only, open-world, idempotent, non-destructive), but the description adds valuable context beyond this: it specifies the return format options ('markdown' or 'json'), lists the fields in the response, and mentions pagination behavior via limit/offset. This enhances transparency without contradicting the annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by organized sections for Args and Returns. Every sentence adds value: the first sets context, and the bullet points efficiently detail parameters and outputs without redundancy. It's appropriately sized for a tool with 7 parameters.

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?

Given the tool's complexity (7 parameters, no output schema), the description is complete: it covers the purpose, all parameters with semantics, return format options, and response fields. With annotations providing safety and behavioral hints, and the description filling in usage and output details, there are no significant gaps for an AI agent to invoke the tool correctly.

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?

With 100% schema description coverage, the baseline is 3, but the description adds meaningful semantic context: it groups parameters (e.g., 'limit/offset: Pagination'), clarifies status enum values with descriptions like 'open', 'paid', or 'overdue', and explains the purpose of response_format. This goes beyond the schema's technical definitions, improving understanding.

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 description clearly states the specific action ('List invoices from QuickBooks Online') and resource ('invoices'), distinguishing it from sibling tools like qbo_create_invoice (which creates rather than lists) and qbo_list_customers/vendors (which list different resources). The verb 'List' is precise and unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for usage through the 'with filtering options' phrase and the detailed parameter explanations, which help understand when to apply specific filters. However, it doesn't explicitly state when to use this tool versus alternatives like qbo_list_customers or qbo_profit_loss_report, nor does it mention any prerequisites or exclusions.

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

qbo_list_vendorsList QuickBooks VendorsA
Read-onlyIdempotent

List vendors/suppliers from QuickBooks Online.

Args:

  • limit/offset: Pagination

  • active_only: Only active vendors (default: true)

  • response_format: 'markdown' or 'json'

Returns: Vendor list with: Id, DisplayName, Email, Phone, Balance

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return
offsetNoNumber of results to skip
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown
active_onlyNoOnly return active vendors

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds value by specifying the return format options ('markdown' or 'json') and listing returned fields (Id, DisplayName, Email, Phone, Balance), which are not covered by annotations, enhancing behavioral context.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by structured 'Args' and 'Returns' sections. Every sentence adds value without redundancy, making it efficient and well-organized for quick comprehension.

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?

Given the annotations cover safety and idempotency, and the description adds return format and field details, it is complete for a read-only list tool. No output schema is present, but the description adequately explains returns, and the tool's complexity is low with clear parameters.

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

Parameters3/5

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

Schema description coverage is 100%, with detailed parameter descriptions in the schema. The description adds minimal semantics beyond the schema, such as noting 'active_only' defaults to true and 'response_format' options, but does not significantly enhance understanding. Baseline 3 is appropriate as the schema does the heavy lifting.

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 description clearly states the verb 'List' and resource 'vendors/suppliers from QuickBooks Online', making the purpose specific. It distinguishes from siblings like qbo_list_customers and qbo_list_bills by specifying the vendor resource type, avoiding redundancy.

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

Usage Guidelines4/5

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

The description implies usage for retrieving vendor lists, with context from sibling tools suggesting alternatives for other resources (e.g., qbo_list_customers for customers). However, it lacks explicit guidance on when to use this tool versus others or any exclusions, such as not using it for creating vendors.

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

qbo_profit_loss_reportGet Profit & Loss ReportA
Read-onlyIdempotent

Generate a Profit & Loss (Income Statement) report.

Args:

  • start_date: Report start date (YYYY-MM-DD)

  • end_date: Report end date (YYYY-MM-DD)

  • response_format: 'markdown' or 'json'

Returns: P&L report with Income, Cost of Goods Sold, Expenses, and Net Income

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesStart date (YYYY-MM-DD)
end_dateYesEnd date (YYYY-MM-DD)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=true, destructiveHint=false) and idempotency, but the description adds valuable context by specifying the return content structure (Income, Cost of Goods Sold, Expenses, Net Income) and output format options. It doesn't contradict annotations and enhances understanding of what the tool produces.

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?

The description is well-structured with clear sections (purpose, args, returns) and uses bullet points for readability. It's appropriately sized but includes some redundancy (e.g., restating parameter details already in schema). Every sentence adds value, though it could be more front-loaded.

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?

Given the tool's moderate complexity, rich annotations, and full schema coverage, the description is mostly complete. It explains the report's components and output formats, compensating for the lack of output schema. However, it could better address usage context relative to sibling tools.

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

Parameters3/5

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

With 100% schema description coverage, the schema fully documents all parameters. The description repeats parameter info in the 'Args' and 'Returns' sections but adds minimal extra meaning beyond what's in the schema (e.g., clarifying report components). This meets the baseline for high schema coverage.

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 description clearly states the specific action ('Generate') and resource ('Profit & Loss (Income Statement) report'), distinguishing it from sibling tools like list operations or invoice creation. It precisely identifies the report type and its accounting context.

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

Usage Guidelines3/5

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

The description implies usage for financial reporting within date ranges but provides no explicit guidance on when to use this versus alternatives like other reports or list tools. No exclusions or prerequisites are mentioned, leaving the agent to infer context from the tool name and parameters alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • First observedqbo_create_invoice
    • First observedqbo_list_accounts
    • First observedqbo_list_bills
    • First observedqbo_list_customers
    • First observedqbo_list_invoices
    • First observedqbo_list_vendors
    • First observedqbo_profit_loss_report

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Every tool has a clearly distinct purpose targeting specific QuickBooks Online resources: invoices (create and list), accounts, bills, customers, vendors, and a profit/loss report. There is no overlap in functionality—each tool serves a unique CRUD or reporting role.

Naming Consistency5/5

All tool names follow a consistent 'qbo_verb_noun' pattern (e.g., qbo_create_invoice, qbo_list_accounts). This uniform naming convention makes the tool set predictable and easy to navigate.

Tool Count4/5

With 7 tools, the count is reasonable for a QuickBooks Online server, covering core entities like invoices, customers, and reports. However, it feels slightly thin as it lacks update/delete operations for resources like invoices or bills, which are common in accounting workflows.

Completeness3/5

The tool set provides good listing and creation capabilities for key resources (invoices, customers, vendors) and a profit/loss report, but there are notable gaps. Missing update/delete tools for invoices, bills, and other entities limit full CRUD coverage, and additional reporting tools (e.g., balance sheet) would enhance completeness.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with QuickBooks Online through OAuth authentication. Supports CRUD operations for financial entities like customers, invoices, bills, estimates, and accounting records through natural language.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to QuickBooks Online, enabling management of invoices, customers, expenses, and reports through natural language.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables financial professionals to interact with QuickBooks Online using natural language for reports, journal entries, bills, expenses, and more.
    36
    893
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables full CRUD operations on 29 QuickBooks Online entity types and 11 financial reports via natural language, allowing users to manage customers, invoices, payments, and more through MCP-compatible clients.
    Apache 2.0