BookMind
Used as an LLM provider for AI-powered categorization and other natural language bookkeeping tasks.
Used as an LLM provider for AI-powered categorization and other natural language bookkeeping tasks.
Used as an LLM provider for AI-powered categorization and other natural language bookkeeping tasks, enabling local model inference.
Used as an LLM provider for AI-powered categorization and other natural language bookkeeping tasks.
Provides intelligent bookkeeping for QuickBooks Online, including auto-categorization, reconciliation, monthly close, anomaly detection, and vendor search.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BookMindCategorize my uncategorized transactions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
What is BookMind?
BookMind is an open-source MCP server that brings intelligent bookkeeping to QuickBooks Online. Unlike Intuit's official MCP server (a raw API wrapper), BookMind is an intelligent bookkeeping layer — you speak naturally, it handles the rest.
Why BookMind?
Problem | Solution |
Manual transaction categorization | Auto-categorize with 90%+ accuracy using learned rules + any LLM |
Month-end close takes hours | One prompt → full close package (P&L, BS, CF, action items) |
Bank reconciliation is tedious | Automatic fuzzy matching by amount, date, vendor |
Duplicate payments slip through | Statistical anomaly detection catches them |
Chasing overdue invoices | Professional emails in friendly/firm/escalation tones |
Vendor research is slow | Natural language search: "What did we pay AWS last quarter?" |
Locked into one AI provider | Works with OpenAI, Anthropic, Google, Groq, Mistral, NVIDIA, Ollama — or no provider at all |
Architecture
QuickBooks Online ──► BookMind (this MCP) ──► Local SQLite
│
┌─────────┼─────────┐
▼ ▼ ▼
Rules Engine Memory Anomaly DetectorZero cloud dependency — your data stays in local SQLite
Learns from you — every correction becomes a persistent rule
Model-agnostic — works with 7+ LLM providers (or rules-only mode)
Agent-agnostic — works with Claude, Cursor, Cline, Continue, Windsurf, VS Code Copilot, Goose
Related MCP server: qbo-mcp
Install
One command (any MCP client)
npx @bbookmind/mcpPre-built configs
Agent | Config | Location |
Claude Desktop |
|
|
Cursor |
|
|
Cline |
| VS Code → Extensions → Cline → MCP |
Continue |
|
|
Windsurf |
|
|
VS Code Copilot |
| VS Code → GitHub Copilot → MCP |
Environment (optional)
BookMind runs in rules-only mode by default (no API key needed). To enable AI categorization, add one provider key:
# Pick ONE:
export GROQ_API_KEY=... # Free tier available
export NVIDIA_API_KEY=... # Free tier available
export GOOGLE_API_KEY=... # Free tier available
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export MISTRAL_API_KEY=...
export OLLAMA_BASE_URL=http://localhost:11434Tools
BookMind exposes 14 tools that your AI agent discovers automatically:
Category | Tool | Description |
Categorization |
| Auto-categorize uncategorized transactions |
| Approve pending categorizations in batch | |
| Reject with feedback, auto-create rules | |
| Rollback from audit log | |
Data |
| Pull transactions, invoices, bills from QBO |
| Push approved changes back to QuickBooks | |
Reconciliation |
| Match bank feed ↔ invoices/bills |
Intelligence |
| Duplicate, drift, outlier detection |
| Full close package (P&L, BS, CF) | |
| Natural language vendor search | |
Communications |
| Overdue invoice email generator |
Learning |
| Create rules from user corrections |
Multi-company |
| Switch between QBO companies |
| List connected companies |
Example prompts
"Categorize my uncategorized transactions from last month"
"Reconcile my bank feed against open invoices"
"Generate March close package"
"Any duplicate payments to vendors?"
"What did we pay AWS last quarter?"
"Draft friendly chase emails for invoices over 30 days overdue"
"Remember: Stripe transactions → Payment Processing Fees"
"Switch to Acme Corp company"Pricing
Tier | Price | Transactions | Companies | Features |
Free | $0 | 50/mo | 1 | Rules-only categorization, basic vendor search |
Pro | $29/mo | 1,000/mo | 3 | AI categorize, reconcile, anomalies, vendor search |
Firm | $149/mo | Unlimited | Unlimited | Monthly close, chase emails, white-label PDFs, team seats |
14-day Pro trial — no credit card required.
Development
git clone https://github.com/bbookmind/mcp
cd bookmind
npm install
npm run dev # watch mode
npm run build # production build
npm test # vitestProject structure
src/
├── index.ts # MCP server entry
├── tools/ # 14 bookkeeping tools
│ ├── categorize.ts
│ ├── approveCategories.ts
│ ├── rejectCategories.ts
│ ├── undoCategories.ts
│ ├── fetchTransactions.ts
│ ├── syncToQbo.ts
│ ├── reconcile.ts
│ ├── anomalies.ts
│ ├── monthlyClose.ts
│ ├── vendorSearch.ts
│ ├── chaseEmail.ts
│ ├── learnRules.ts
│ ├── selectCompany.ts
│ └── listCompanies.ts
└── lib/
├── qbo.ts # QuickBooks OAuth + API client
├── db.ts # SQLite schema + migrations
└── llm.ts # Multi-provider LLM interfaceDistribution channels
npm:
npx @bbookmind/mcpMCP Registry:
registry.modelcontextprotocol.ioClaude Marketplace:
/plugin install bookmindGitHub: github.com/bbookmind/mcp
License
MIT — free to use, modify, and distribute.
Support
Available Tools
14 toolsbookmind.anomaliesB
Statistical anomaly detection: duplicate payments (Map-based O(n)), vendor cost drift (>25%), IQR outliers, frequency spikes (>10/mo), round numbers (>=$100), large weekend transactions (>=$500). Returns flagged items with severity. Persists to SQLite for review.
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | ||
| min_amount | No | ||
| transactions | Yes | ||
| lookback_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses behavioral traits: persistence to SQLite, return of flagged items with severity, and detection thresholds. However, it does not mention whether the tool modifies input data, authentication requirements, or rate limits, which are gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the main purpose and listing anomaly types in a single sentence. It is efficient but lacks structural elements like bullet points or sections that could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (multiple anomaly types, persistence, 4 parameters, no output schema), the description is incomplete. It does not explain return format, how to interpret severity, or the role of required parameter 'transactions'. The tool likely needs more context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters (rules, min_amount, transactions, lookback_days). It only describes detection logic, leaving the agent without context for how to set parameters or what values are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it performs statistical anomaly detection and lists specific anomaly types (duplicate payments, vendor cost drift, etc.), clearly defining the tool's purpose. The verb 'detection' and resource 'anomalies' are specific, and it distinguishes from siblings like categorization or reconciliation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for detecting anomalies in transactions before review, but it does not explicitly state when to use this tool versus alternatives like 'approve_categorizations' or 'reconcile'. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.approve_categorizationsA
Approve pending categorization suggestions. Accepts transaction IDs or 'all' to approve everything pending. Approved transactions get status='categorized' and approved=1.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_ids | Yes | List of transaction IDs to approve, or ['all'] to approve all pending |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the outcome (approved transactions get status='categorized' and approved=1) and the input format (IDs or 'all'). This adds value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core purpose. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description covers the effect and input format. Minor omission: no mention of error handling for invalid IDs, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a description for the single parameter, and the tool description repeats the same information ('Accepts transaction IDs or 'all''). With 100% schema coverage, the description adds no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Approve pending categorization suggestions') and specifies the effect on transactions (status='categorized', approved=1). It distinguishes from siblings like 'reject_categorizations' by focusing on approval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when there are pending categorization suggestions but does not explicitly state when to use this tool vs alternatives (e.g., reject_categorizations). No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.categorizeA
Auto-categorize Uncategorized QuickBooks transactions using learned rules (regex) + keyword dict + LLM (when connected). Returns confidence-scored suggestions. Use bookmind.approve_categorizations to apply. New categorization requests stage in 'pending' status and follow approval workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| auto_apply | No | ||
| transactions | Yes | ||
| confidence_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool uses learned rules, keyword dictionary, and optionally LLM, and that results are staged in 'pending' status. This explains the non-destructive workflow and return of suggestions. However, it does not mention error handling or behavior when LLM is unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each providing distinct value: core action, follow-up instruction, and workflow explanation. It is efficient with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers the core action and workflow but lacks detail on return format and parameter semantics. It does not describe the structure of the return suggestions or the behavior of auto_apply and confidence_threshold.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not explain the three parameters (auto_apply, transactions, confidence_threshold). The word 'confidence' appears only in 'confidence-scored suggestions', but no details on the threshold or auto_apply behavior. The description adds no meaning beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool auto-categorizes uncategorized QuickBooks transactions using multiple methods (regex, keyword dict, LLM). It specifies that it returns confidence-scored suggestions and stages them in 'pending' status. This distinguishes it from sibling tools like bookmind.approve_categorizations and bookmind.fetch_transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to use bookmind.approve_categorizations to apply suggestions and mentions the approval workflow. It provides clear context for when to use this tool, but does not explicitly state when not to use it or compare to alternatives like bookmind.learn_rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.chase_emailA
Generate overdue invoice chase emails in friendly, firm, or escalation tone. Returns ready-to-send drafts.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | friendly | |
| invoices | Yes | ||
| custom_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It only states 'returns ready-to-send drafts' but omits side effects, permissions, or state changes, which is minimal for a tool generating drafts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundancy. Every word adds value: action, resource, tone, and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description hints at output (drafts) but lacks detail on return format, error conditions, or prerequisites like company selection. With 3 parameters and no annotations, the description is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters. The description adds meaning for the tone parameter (lists the three tones) and relates invoices to overdue context, but does not cover the custom_message parameter or explain invoice fields. This offers marginal value but does not fully compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Generate' and the resource 'overdue invoice chase emails' with tone options and output return. It distinguishes itself from siblings like categorize or reconcile which are unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies clear usage context (overdue invoices and chase emails) without ambiguity, but does not provide explicit when-not or alternative tools. Given unique purpose, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.fetch_transactionsA
Fetch transactions from QuickBooks Online for a date range. Returns normalized JSON array compatible with categorize, reconcile, anomalies, and monthly_close tools. Caches results in local SQLite.
| Name | Required | Description | Default |
|---|---|---|---|
| bills | No | Also fetch bills for this period | |
| fetch | No | If false, returns cached data only | |
| end_date | Yes | End date YYYY-MM-DD | |
| invoices | No | Also fetch invoices for this period | |
| start_date | Yes | Start date YYYY-MM-DD | |
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions caching in SQLite, which is a key trait. However, it does not state whether the operation is read-only, whether authentication is required, or rate limits. It also does not describe what happens if the fetch fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each adding value: first covers purpose and output, second covers caching behavior. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the output format as 'normalized JSON array' and notes compatibility with other tools. Caching behavior is described. However, it lacks detail on error handling or the structure of the returned data. For a tool with 6 parameters, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already explains most parameters. The description adds minimal additional meaning beyond 'returns cached data only' for the 'fetch' parameter. No new syntax or format details are provided for parameters like start_date and end_date.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (fetch), resource (transactions), and scope (date range from QuickBooks Online). It also specifies the output format as a normalized JSON array compatible with other tools, which gives context. However, it does not explicitly distinguish from sibling tools like 'sync_to_qbo' or 'chase_email'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when data is needed for downstream tools (categorize, reconcile, etc.) and mentions caching, which suggests repeated use. But it does not provide explicit when-to-use or when-not-to-use guidance, nor alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.learn_rulesC
Learn categorization rules from user corrections. Stores regex patterns. Rules apply to current company by default; set global=true to share across all companies under one account.
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | ||
| transactions_to_apply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool stores regex patterns but does not disclose side effects, whether existing rules are overwritten, permission requirements, or any destructive behavior. The behavioral disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences, front-loading purpose and scope. However, given the complexity of the input schema, it sacrifices necessary detail for brevity, making it moderately effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nested objects, multiple fields, and no output schema, the description fails to explain key aspects like the meaning of confidence, priority, or the transactions_to_apply array. It is incomplete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only mentions the 'global' parameter briefly. All other parameters (category, priority, account_id, confidence, vendor_pattern, description_pattern, transactions_to_apply) are left unexplained, leaving the agent unable to understand how to construct the input correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool learns categorization rules from user corrections and stores regex patterns. This distinguishes it from sibling tools like categorize or reject_categorizations, though it could be more specific about the learning process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives guidance on scoping (default current company vs global), but lacks explicit when-to-use or when-not-to-use compared to alternatives. It provides some context without fully clarifying selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.list_companiesA
List all companies configured in BookMind, showing company ID, name, and association status. Allows OAuth connection for unconnected companies.
| Name | Required | Description | Default |
|---|---|---|---|
| oauth_url | No | If true, returns OAuth auth URL to connect a new QBO company | |
| company_id | No | If oauth_url is true, the company ID to connect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the read nature (listing) and the OAuth connection behavior, providing good transparency. However, explicitly stating 'read-only' would enhance clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: one for the main listing purpose, one for the OAuth feature. No redundancy, front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return fields (ID, name, association status) and the OAuth URL return. For a simple list tool with no output schema, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for each parameter. The description adds context by mentioning 'OAuth connection for unconnected companies,' which complements the schema without repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all companies configured in BookMind' with specific details on output (ID, name, association status). It distinguishes from sibling tools like 'select_company' which selects the active company.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions allowing OAuth connection, which gives some usage context, but it does not explicitly state when to use this tool versus alternatives like 'select_company' or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.monthly_closeC
Generate complete monthly close package: P&L, Balance Sheet snapshot, Cash Flow, top vendors, expense breakdown, overdue AR, anomaly summary, and action items. Returns formatted markdown report.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | ||
| invoices | No | ||
| anomalies | No | ||
| transactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only lists output components and format, but does not disclose behavioral traits like side effects (likely read-only), whether it modifies data, required permissions, or rate limits. An agent cannot infer if this is a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main purpose and a list of what's included. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters (2 required), no output schema, and no annotations, the description should provide context about required inputs (transactions and month) and optional ones (invoices, anomalies). It doesn't mention that transactions are expected to be already categorized, or that the tool assumes a certain state. Incomplete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any parameters. Month format, required vs optional inputs (transactions required, invoices and anomalies optional), and expected data structures are not elaborated. The description adds no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a 'monthly close package' with specific components (P&L, Balance Sheet, etc.) and returns a 'formatted markdown report'. It distinguishes itself from sibling tools like bookmind.anomalies or bookmind.reconcile by being a comprehensive package.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, if only anomalies are needed, the anomalies tool might be more appropriate. No prerequisites or context (e.g., need to have fetched transactions first) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.reconcileA
Match bank feed transactions to invoices/bills by amount, date tolerance, and vendor similarity. Returns matched pairs and unmatched items. Score uses Levenshtein vendor similarity and weighted date/amount distance.
| Name | Required | Description | Default |
|---|---|---|---|
| bills | No | ||
| invoices | No | ||
| fee_tolerance | No | ||
| amount_tolerance | No | ||
| bank_transactions | Yes | ||
| date_tolerance_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description discloses the matching algorithm (Levenshtein, weighted distance) and output types (matched pairs, unmatched items). However, it does not state whether the tool mutates data or is read-only, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, beginning with the purpose and followed by output and algorithm details. Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description is partially complete: it explains the core functionality and scoring, but lacks details on parameter semantics, return format, and side effects, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions tolerances and vendor similarity but does not map to specific parameters like fee_tolerance or date_tolerance_days. With 0% schema coverage, the description should provide more detail, yet it only gives a high-level overview.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool matches bank feed transactions to invoices/bills, specifying criteria (amount, date tolerance, vendor similarity). It clearly distinguishes from sibling tools by focusing on reconciliation while siblings handle tasks like categorization or anomaly detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reconciliation but does not provide explicit guidance on when to use this tool versus alternatives or when not to use it. No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.reject_categorizationsA
Reject pending categorization suggestions with feedback. Rejected transactions return to 'uncategorized'. Optional rule learning: set learn_rules=true and provide corrected_category, vendor_pattern, or description_pattern to auto-create a correction rule.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| learn_rules | No | ||
| vendor_pattern | No | ||
| transaction_ids | Yes | ||
| corrected_category | No | ||
| description_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses core behavior (rejected transactions become uncategorized) and rule learning side effect, but lacks details on permanence, permissions, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that efficiently convey purpose, effect, and optional feature with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main action and optional behavior adequately given no output schema or annotations; missing return value and error details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema by explaining how learn_rules works with corrected_category, vendor_pattern, and description_pattern; does not elaborate on reason or transaction_ids.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool rejects pending categorization suggestions, describes the effect (transactions return to 'uncategorized'), and distinguishes from siblings like approve_categorizations and undo_categorize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for use (rejecting suggestions) and mentions optional rule learning, but does not explicitly contrast with sibling tools like approve or undo.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.select_companyA
Switch between connected QuickBooks companies. Sets the active company for all subsequent operations. Returns the current company info.
| Name | Required | Description | Default |
|---|---|---|---|
| company_id | Yes | Company ID to switch to. Use bookmind.list_companies to see available ones. Set to 'default' for single-company mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently states that the tool switches the active company and returns company info. While it does not discuss side effects like invalidating caches or permission requirements, the behavior is simple and the disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that front-load the primary action and purpose. No extraneous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description fully covers what the tool does, the expected input, and the output type. It is complete for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (company_id) with schema description coverage at 100%. The description adds extra meaning by explaining how to obtain valid IDs via list_companies and notes the special value 'default' for single-company mode, which goes beyond the JSON schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Switch between connected QuickBooks companies') and resource, and it specifies what it does ('Sets the active company for all subsequent operations. Returns the current company info.'). This distinguishes it from sibling tools like bookmind.anomalies or bookmind.categorize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates that this tool should be used before other operations that depend on the active company, and the parameter description explicitly suggests using bookmind.list_companies to find company IDs. However, it does not provide explicit when-not-to-use guidance or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.sync_to_qboA
Push approved categorizations from local SQLite back to QuickBooks Online. Creates journal entries for category reclassifications. Only syncs approved (approved=1) transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_ids | Yes | Specific transaction IDs to sync, or ['all'] for all approved uncategorized transactions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It discloses the creation of journal entries (mutation) and the approval filter, but does not mention idempotency, error handling, permissions, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences that immediately convey the tool's purpose and key constraint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a one-parameter tool with no output schema. Covers main action and parameter usage, but omits details on return values, error scenarios, and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the only parameter with a description, but the description adds value by explaining the special value ['all'] for all approved uncategorized transactions, going beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'push', the resource (approved categorizations from local SQLite to QuickBooks Online), and the specific action (creates journal entries). Differentiates from siblings like approve_categorizations and reject_categorizations by focusing on the sync step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after approvals by stating 'Only syncs approved transactions', but lacks explicit when-not-to-use or alternative tools. Does not mention prerequisites like selecting a company or finalizing categorizations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.undo_categorizeA
Undo categorization changes on transactions. Restore previous category from audit log. Accepts transaction IDs or 'all' to undo all categorizations from today's session.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_ids | Yes | Transaction IDs to undo, or ['all'] to undo all today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the behavior: restoring previous category from audit log. No annotations provided, so description carries full burden. Lacks details on potential side effects or requirements, but adequately covers the primary action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Effectively summarizes the tool's function and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 parameter, no output schema), the description covers purpose and usage adequately. Missing return value details, but action is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter description in schema matches the narrative description. No additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Undo' and resource 'categorization changes', clearly stating it restores previous categories from audit log. Differentiates from sibling tools like 'categorize' and 'approve_categorizations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (to undo categorization changes) and how (by transaction IDs or 'all'). Does not explicitly mention when not to use or alternatives, but context from siblings makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmind.vendor_searchC
Search transactions by vendor, description, category, or amount. Supports lookback and limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| transactions | Yes | ||
| lookback_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions lookback and limit but does not explain search type (exact/fuzzy), return format, or whether data is modified. Lacks critical behavioral details for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no fluff, making it concise. However, it sacrifices necessary detail, resulting in under-specification. Could be restructured to include key parameter clarifications without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, one complex nested array, no output schema, and no annotations, the description is incomplete. Does not cover the 'transactions' parameter behavior, query syntax, or search scope. Fails to provide a complete picture for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It briefly maps searchable fields to properties but does not explain the 'query' parameter format or the purpose of the 'transactions' array (input vs output). Insufficient given the param count.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches transactions by specific fields (vendor, description, category, amount), distinguishing it from siblings like fetch_transactions or categorize. However, it is ambiguous whether the search is across all transactions or within the provided 'transactions' input array.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention when to use vendor_search vs fetch_transactions or other search tools. The description only states it supports lookback and limit, which does not help with decision-making.
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. Dates show when Glama detected each change.
14 tool updates
v1.0.1- First observed
bookmind.anomalies - First observed
bookmind.approve_categorizations - First observed
bookmind.categorize - First observed
bookmind.chase_email - First observed
bookmind.fetch_transactions - First observed
bookmind.learn_rules - First observed
bookmind.list_companies - First observed
bookmind.monthly_close - First observed
bookmind.reconcile - First observed
bookmind.reject_categorizations - First observed
bookmind.select_company - First observed
bookmind.sync_to_qbo - First observed
bookmind.undo_categorize - First observed
bookmind.vendor_search
TDQS
Each tool has a distinct purpose with no overlap: categorization, approval, rejection, fetching, reconciliation, anomaly detection, reporting, etc. The workflow is clear and unambiguous.
Most tools follow a verb_noun pattern (e.g., fetch_transactions, approve_categorizations), though 'monthly_close' and 'vendor_search' are noun_noun. Still, all are lowercase with underscores, making them predictable.
14 tools cover a comprehensive bookkeeping workflow without being overwhelming. Each tool serves a clear need, and the count feels right for the domain.
The tool set covers the full lifecycle: fetching, categorizing (with approval), reconciliation, anomaly detection, monthly close, undo, sync, and search. Missing features like invoice creation are outside the stated scope.
Maintenance
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
AI agents for bookkeeping, reconciliation, and financial close for SMBs.
AI Accountant for Quickbooks- recording, reconcile, month-end close
Accounting knowledge graphs: SEC XBRL filings, QuickBooks ledgers, reports and forecasts over MCP.
QuickBooks Online in Claude and ChatGPT: 211 tools, full ledger, multi-company, Canada + US, FR/EN.
1
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that enables AI agents to interact with QuickBooks Online accounts to manage invoices, customers, payments, and financial reports. It provides 20 tools to automate accounting workflows and retrieve financial data through natural language interfaces.-
- AlicenseAqualityDmaintenanceMCP server for QuickBooks Online providing read-only access to customers, vendors, invoices, bills, and chart of accounts. Enables natural language queries to your financial data through Claude or any MCP client.8MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server for KikoBooks enterprise bookkeeping software that enables AI assistants to perform accounting operations on accounts, customers, invoices, bills, and more through natural language.MIT
- AlicenseNot gradedqualityBmaintenanceComprehensive MCP server for QuickBooks Online providing full CRUD operations on 29 entities (customers, invoices, bills, etc.) and 11 financial reports, enabling accounting data management via natural language.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/bbookmind/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server