lim includes a native Model Context Protocol (MCP) server. Any MCP-compatible AI client — Claude Code, Claude Desktop, Cursor, or custom agents — can connect to lim and perform accounting operations.
Register lim as an MCP server with a single command:
Copy
npx @lim-labs/lim mcp add
This adds lim to your MCP configuration file (~/.config/claude/claude_desktop_config.json or .claude/mcp.json depending on your client).The generated configuration looks like:
Returns the current trial balance — all account balances for the current fiscal year. The agent uses this to understand the company’s financial position.Example interaction:
Copy
You: What's our current cash position?Claude: Let me check the trial balance. [Reads lim://company/.../trial-balance] Your current cash position: - Cash: ¥2,450,000 - Checking account: ¥1,800,000 - Total liquid: ¥4,250,000
Returns the full chart of accounts with codes, names, types, and normal balance directions. Essential for the agent to know which accounts exist when creating journal entries.
Returns cash runway calculation: current cash balance, monthly burn rate, and estimated months remaining. Computed from the last 3 months of data.Example response:
Run the 3-step judgment engine on a bank transaction to suggest the correct journal entry.Input schema:
Copy
{ "transactionId": "uuid-of-bank-transaction"}
Returns: A judgment result with the suggested account classification, confidence score, and which step resolved it (rule, history, AI, or escalated).Example interaction:
Copy
You: Process the unmatched bank transactions.Claude: Let me check the unmatched transactions. [Reads lim://company/.../bank-transactions] Found 3 unmatched transactions: 1. ¥11,000 to AWS — [match_bank_transaction] → Rule match (91%) → Communication ¥10,000 + Input VAT ¥1,000 2. ¥3,300 to Amazon — [match_bank_transaction] → History match (78%) → Supplies ¥3,000 + Input VAT ¥300 3. ¥150,000 to "TANAKA" — [match_bank_transaction] → Escalated → Could not classify. Needs human review. Shall I post entries 1 and 2?
Promote a scenario’s virtual entries to real journal entries. This is irreversible.Input schema:
Copy
{ "scenarioId": "uuid-of-scenario"}
Example interaction:
Copy
You: We decided to go ahead with the new hire. Apply the scenario.Claude: [Calls apply_scenario with the scenario ID] Done! The scenario "Hire Senior Engineer" has been applied. 3 journal entries were created: - Monthly salary: ¥600,000/month - Social insurance: ¥90,000/month - Equipment: ¥300,000 (one-time) Your updated runway is now 2.8 months (was 3.5).
The real power of MCP is combining reads and writes in a single conversation:
Copy
You: How's the company doing this month?Claude: [Reads trial-balance, cash-runway, alerts, bank-transactions] Here's your March summary: - Revenue: ¥1,100,000 (+5% vs February) - Expenses: ¥680,000 (-2% vs February) - Cash runway: 3.5 months - 2 unmatched bank transactions - No active alerts Want me to process the unmatched transactions?You: Yes, go ahead.Claude: [Calls match_bank_transaction for each] [Calls create_journal_entry for high-confidence matches] Done. Both transactions processed: 1. AWS ¥11,000 → Communication (rule match, auto-posted) 2. Zoom ¥2,200 → Communication (AI inference, 85% confidence) #2 was a new vendor. I've created a matching rule for "Zoom" so it'll be instant next time.