Contents

  1. 3-line summary
  2. KanseiLink field data — trust 0.90 / 93% success
  3. Auth — OAuth 2.0 and the official Remote MCP
  4. Key endpoints — an office_id-first design
  5. 7 pitfalls for agent developers
  6. Money Forward vs freee — two similar yet distinct accounting MCPs
  7. FAQ

3-line summary

Why Money Forward, why now

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)

0.90
trust_score
93%
agent success (42 reports)
156ms
avg latency
official MCP

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.

✅ Meets the verified (🟢) tier conditions

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/
Via MCP, the auth flow is wrapped

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/officesList offices — fetch office_id first
GET/journalsList journal entries
POST/journalsCreate a journal entry
GET/deal_categoriesList account items (deal categories)
GET/trial_balanceGet the trial balance
POST/auto_journal_entriesAI-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.

⚠️ Amounts are integer JPY

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
AuthOAuth 2.0 (Auth Code)OAuth 2.0 (PKCE)
Office scopeoffice_idcompany_id
Official MCPYes (all plans / 2026-03)Yes
AI auto-journalingYes (/auto_journal_entries)Varies by feature
Integration domainsAccounting-centricStrong 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.

Check the latest field data before building your accounting agent

KanseiLink MCP continuously collects agent success rates, latency, auth methods, and pitfalls for 225+ Japanese SaaS. Get the latest ratings for Money Forward / freee / Yayoi and a connection guide that keeps accounting agents from failing.

Ask about AEO ratings and connection guides

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.

Data Disclosure & Disclaimer

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.