Contents
3-line summary
- Official Remote MCP on all plans: Since March 2026,
npx @moneyforward/mcp-serverwraps OAuth authorization and offers the easiest integration path. - Top tier in KanseiLink field data: trust_score 0.90, 93% agent success rate, 156ms average latency. Sits in the verified (🟢) tier.
- Most stumbles are "not understanding the design": rather than technical difficulty, the dominant failure causes are the office_id-first call order and the debit/credit balance requirement — accounting-domain traps.
Accounting SaaS is the most agent-ready (AEO-advanced) category among Japanese SaaS. With Money Forward following freee in shipping an official Remote MCP to all plans, "accounting agents that touch mid-market financial data directly" become markedly more real. For developers automating month-end close, journal entry, and trial-balance retrieval, Money Forward MCP is one of the foundations to know in 2026.
KanseiLink field data — trust 0.90 / 93% success
KanseiLink continuously collects real agent usage outcomes. Here is the recent aggregate for Money Forward Cloud MCP.
Money Forward Cloud MCP — KanseiLink field data (as of 2026-05)
A 93% success rate ranks near the top among Japanese SaaS. The reported failures are mostly api_error-class, largely tied to the "call order" and "journal balance" issues discussed below. The low 156ms average latency helps agents that run multi-step accounting workflows (fetch office → fetch account items → post journal) by limiting the compounding cost of retries.
Official MCP server, OAuth 2.0 compliance, structured error responses (error_messages/errors), and page-based pagination. It has the "agents can self-recover" design KanseiLink observes across the top AEO group.
Auth — OAuth 2.0 and the official Remote MCP
The Money Forward Cloud accounting API uses the OAuth 2.0 Authorization Code flow. There are two scope families: mfc/accounting/read and mfc/accounting/write. Tokens are issued at https://accounting.moneyforward.com/oauth/token.
For agent development, though, the easiest route is not to manage client_id/secret manually but to use the official Remote MCP server, available to all plans since March 2026.
# Official Remote MCP server (wraps OAuth authorization)
npx @moneyforward/mcp-server
# For manual REST integration, register an app at developer.moneyforward.com
# base_url: https://accounting.moneyforward.com/api/v3/
The official MCP server wraps the OAuth authorization flow, freeing the agent side from token lifecycle management. Manual REST integration is only needed when embedding into your own backend or running an MCP-incompatible runtime. Trying the MCP route first is the shortest path to maximizing the success rate KanseiLink measures in the field.
Key endpoints — an office_id-first design
By design, nearly every Money Forward API operation is scoped to "which office (事業所) the operation targets." So you first call GET /offices to obtain an office_id, then scope subsequent calls with it. This is exactly the same pattern as freee's company_id.
| Method | Path | Purpose |
|---|---|---|
| GET | /offices | List offices — fetch office_id first |
| GET | /journals | List journal entries |
| POST | /journals | Create a journal entry |
| GET | /deal_categories | List account items (deal categories) |
| GET | /trial_balance | Get the trial balance |
| POST | /auto_journal_entries | AI-powered auto journaling (added 2026-03) |
GET /api/v3/offices HTTP/1.1
Host: accounting.moneyforward.com
Authorization: Bearer {access_token}
Response:
{"offices":[{"id":123,"display_name":"Test Office"}]}
Requests are application/json; pagination is page/per_page (max 100), with total_count and total_pages in the response. Errors come back in a structured format, {"error_messages":[...],"errors":{"field":["message"]}} — a shape that lets agents interpret failure reasons programmatically, which is favorable for AEO.
7 pitfalls for agent developers
1. Calling endpoints without fetching office_id
The most common beginner mistake. Call GET /offices first, get the office_id, then proceed to journal/trial-balance endpoints. Just remember it's the same premise as freee's company_id.
2. Journal debits and credits don't balance
POST /journals errors out if debit and credit amounts don't match. It's accounting 101, but LLMs tend to break it when generating amounts. Add a guard on the agent side that reconciles debit/credit totals before posting.
3. Guessing account item IDs
Fetch valid account item IDs from GET /deal_categories and use them. Hardcoding guessed names or codes leads to api_error.
All amount fields are integers in JPY (no decimals). Passing decimals like "1234.56" or comma-grouped strings will be rejected. Don't forward raw LLM output — coerce to integers first.
4. Ignoring the rate limit (300 req/5 min)
300 requests per 5 minutes per token. Exceeding it returns HTTP 429 with Retry-After. For bursty work like monthly bulk imports, always implement exponential backoff with jitter that respects Retry-After.
5. Building journals by hand instead of using the AI endpoint
POST /auto_journal_entries, added March 2026, provides ML-powered expense categorization. In many cases an "agent proposes via this endpoint → human approves" workflow beats manually assigning account items on both accuracy and speed.
6. Overlooking the multi-currency premise
Multi-currency journal entry was supported in February 2026. Agents handling cross-border transactions should verify currency-field handling. Single-currency-only code breaks at offices that involve FX.
7. Starting without deciding MCP vs REST
Unless you're deeply embedding into your own backend, try Remote MCP (npx @moneyforward/mcp-server) first. By offloading auth lifecycle management, it raises first-attempt success. Manual REST is the option when you need an MCP-incompatible runtime or fine-grained control.
Money Forward vs freee — two similar yet distinct accounting MCPs
You can't discuss Japanese cloud accounting agents without freee and Money Forward, the two giants. They are remarkably similar in design philosophy yet differ in the details.
| Item | Money Forward | freee |
|---|---|---|
| Auth | OAuth 2.0 (Auth Code) | OAuth 2.0 (PKCE) |
| Office scope | office_id | company_id |
| Official MCP | Yes (all plans / 2026-03) | Yes |
| AI auto-journaling | Yes (/auto_journal_entries) | Varies by feature |
| Integration domains | Accounting-centric | Strong five-domain integration |
The shared trap is the call order and domain constraints: fetch office ID → fetch account items → keep journal debits and credits balanced. Implement one and porting to the other is easy. The differences: Money Forward exposes AI auto-journaling as an explicit endpoint, while freee leans on PKCE and cross-five-domain strength. See our freee MCP deep dive for that side.
FAQ
Q1. Can anyone use the official MCP server?
Yes. npx @moneyforward/mcp-server has been available as a Remote MCP to all plans since March 2026. Because it wraps the OAuth 2.0 authorization flow, you can connect without managing client_id/secret manually. For manual REST integration, register an app at developer.moneyforward.com.
Q2. How does Money Forward's MCP/API differ from freee's?
Both use OAuth 2.0 and require fetching an office-scoped ID first (MF: office_id, freee: company_id). KanseiLink field data shows Money Forward at 93% success, 156ms, trust 0.90. The difference: Money Forward ships a Remote MCP for all plans and AI auto-journaling (/auto_journal_entries), while freee leans on PKCE and five-domain integration.
Q3. What are the most common journal-API failures?
(1) Calling without fetching office_id, and (2) unbalanced debit/credit amounts. Run POST /journals within an office_id scope, fetch valid account item IDs from deal_categories, then compose debit/credit. Pass amounts as integer JPY.
Q4. What is the rate limit?
300 requests per 5 minutes per token. Exceeding it returns HTTP 429 with Retry-After. For bursty work, implement exponential backoff that respects Retry-After and use pagination (per_page max 100) to keep result sets small.
Q5. What AEO grade does it have?
KanseiLink field data shows trust_score 0.90, 93% success, and 156ms — the battle-tested 'verified (🟢)' tier. It meets the top-AEO conditions: official MCP, OAuth 2.0 compliance, and structured errors. Check the latest rating via KanseiLink MCP's get_service_detail.
The technical specifications (auth method, endpoints, rate limits, recent change history) and agent field metrics (trust_score 0.90, 93% success rate, 156ms average latency, 42 reports) in this article are based on values returned by KanseiLink MCP's get_service_detail/get_insights as of May 2026. "Official Remote MCP released to all plans 2026-03," "AI auto-journaling endpoint added 2026-03-18," and "multi-currency journaling supported 2026-02-10" are based on KanseiLink change-history data. API specs may change, so always verify the latest spec at developer.moneyforward.com before implementing. This article does not guarantee any specific implementation outcome or business decision.