Skip to main content
Glama
wyre-technology

QuickBooks Online MCP Server

qbo_navigate

Select a QuickBooks Online domain to access specific tools for managing customers, invoices, expenses, payments, or financial reports.

Instructions

Navigate to a specific domain in QuickBooks Online. Call this first to select which area you want to work with. After navigation, domain-specific tools will be available.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain to navigate to: - customers: Customer management - list, get, create, and search customers - invoices: Invoice management - list, get, create invoices and send them by email - expenses: Expense tracking - list and view purchases and bills - payments: Payment management - list, get, and create payments linked to invoices - reports: Financial reports - profit & loss, balance sheet, aged receivables/payables, customer sales

Implementation Reference

  • Tool definition with schema - defines the qbo_navigate tool structure including name, description, and inputSchema with domain validation (enum of allowed domains: customers, invoices, expenses, payments, reports)
    const navigateTool: Tool = {
      name: "qbo_navigate",
      description:
        "Navigate to a specific domain in QuickBooks Online. Call this first to select which area you want to work with. After navigation, domain-specific tools will be available.",
      inputSchema: {
        type: "object",
        properties: {
          domain: {
            type: "string",
            enum: [
              "customers",
              "invoices",
              "expenses",
              "payments",
              "reports",
            ],
            description: `The domain to navigate to:
    - customers: ${domainDescriptions.customers}
    - invoices: ${domainDescriptions.invoices}
    - expenses: ${domainDescriptions.expenses}
    - payments: ${domainDescriptions.payments}
    - reports: ${domainDescriptions.reports}`,
          },
        },
        required: ["domain"],
      },
    };
  • Tool handler implementation - processes the qbo_navigate request by updating server state to the selected domain, retrieving available tools for that domain, and returning a success message with the list of available tools
    if (name === "qbo_navigate") {
      const { domain } = args as { domain: Domain };
      state.currentDomain = domain;
    
      const domainTools = getDomainTools(domain);
      const toolNames = domainTools.map((t) => t.name).join(", ");
    
      return {
        content: [
          {
            type: "text",
            text: `Navigated to ${domain} domain. Available tools: ${toolNames}`,
          },
        ],
      };
    }
  • Domain type definition - TypeScript union type defining the five allowed domains for navigation (customers, invoices, expenses, payments, reports)
    type Domain =
      | "customers"
      | "invoices"
      | "expenses"
      | "payments"
      | "reports";
  • Domain descriptions metadata - provides human-readable descriptions for each domain used in the qbo_navigate tool's input schema to guide users on domain selection
    const domainDescriptions: Record<Domain, string> = {
      customers:
        "Customer management - list, get, create, and search customers",
      invoices:
        "Invoice management - list, get, create invoices and send them by email",
      expenses:
        "Expense tracking - list and view purchases and bills",
      payments:
        "Payment management - list, get, and create payments linked to invoices",
      reports:
        "Financial reports - profit & loss, balance sheet, aged receivables/payables, customer sales",
    };
  • src/index.ts:157-170 (registration)
    Tool registration in ListTools handler - conditionally registers qbo_navigate when currentDomain is null (at root level), making it the entry point for the decision tree architecture
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      const tools: Tool[] = [];
    
      if (state.currentDomain === null) {
        // At root - show navigation tool only
        tools.push(navigateTool);
      } else {
        // In a domain - show domain tools plus back navigation
        tools.push(backTool);
        tools.push(...getDomainTools(state.currentDomain));
      }
    
      return { tools };
    });
Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wyre-technology/qbo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server