freee-mcp

freee's official MCP server for calling the freee accounting, HR, invoicing and other business APIs

Official · freee TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Finance and payments

80 popularity score ★ 515 ↓ 17k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude (desktop and web)Customize > Add custom connector, name freee
https://mcp.freee.co.jp/mcp
Claude CodeInstall the freee-mcp plugin from the freee/freee-mcp marketplace, then sign in via /mcp
claude mcp add --transport http freee https://mcp.freee.co.jp/mcp
CodexAdd the freee/freee-mcp plugin marketplace, then install freee-mcp from /plugins
[mcp_servers.freee]
url = "https://mcp.freee.co.jp/mcp"
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
npx freee-mcp configure
Claude CodeTerminal
claude mcp add freee -- npx freee-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "freee": {
      "command": "npx",
      "args": [
        "freee-mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "freee": {
      "command": "npx",
      "args": [
        "freee-mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "freee": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "freee-mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.freee]
command = "npx"
args = ["freee-mcp"]
Gemini CLITerminal
gemini mcp add --scope user freee npx -- freee-mcp

Settings 5

Set together: env-credentials
FREEE_CLIENT_ID Optional: Deprecated: app Client ID by environment instead of the config file written by configure; prints a warning.
FREEE_CLIENT_SECRET secret Optional: Deprecated: app Client Secret, set together with FREEE_CLIENT_ID.
FREEE_CALLBACK_PORT Optional: Port for the local OAuth callback; read only when the credentials come from the environment, must match the app's callback URL. Default 54321.
Set together: sign-credentials
FREEE_SIGN_CLIENT_ID Optional: freee Sign app Client ID, instead of the file written by freee-sign-mcp configure; needs FREEE_SIGN_CLIENT_SECRET too. For freee-sign-mcp.
FREEE_SIGN_CLIENT_SECRET secret Optional: freee Sign app Client Secret; setting only one of the pair is an error. For freee-sign-mcp.

What it does

freee is a Japanese cloud accounting and back-office software company, and this is its own server for the freee APIs. Instead of one tool per endpoint you get a handful of generic ones. There is a tool for each HTTP method (`freee_api_get`, `freee_api_post`, `freee_api_put`, `freee_api_patch`, `freee_api_delete`) that takes a `service` name and an API path, and `freee_api_list_paths` shows what paths exist. The path is checked against the bundled OpenAPI schema before anything goes out. The README counts 587 operations, freee Sign included, spread over twelve services: accounting, HR and payroll, invoices, time tracking, sales, IT management, fixed assets, contractor management, surveys, business launch, employee evaluation and tax returns.

A second group of tools handles sign-in and lets you list and switch between the companies (事業所) your account can see. If a request carries a `company_id`, it has to match the company currently selected or it fails.

The recommended way in is now freee's hosted endpoint at https://mcp.freee.co.jp/mcp. You add it as a custom connector in Claude, and the Claude Code and Codex plugins point at it too, bundled with freee's Agent Skills (API references and task recipes). Running the `freee-mcp` program yourself means registering your own freee app first. The same npm package also carries `freee-sign-mcp` for freee Sign electronic contracts, which for now runs only locally.

Two things in the code differ from the README. Its Sign tool table lists eight tools, but `freee-sign-mcp` registers ten: `sign_server_info` and `sign_file_upload` (which creates a Sign document from a local PDF, Word, Excel or PowerPoint file) are missing from it (src/sign/tools.ts, src/sign/file-upload-tool.ts). And the Sign sign-in listens on port 54322 by default, one above the accounting server's 54321 (src/sign/config.ts).

What it needs

To run it yourselfNode.js
Runs onmacOS, Windows, Linux
freeePaid planA freee account. The survey, launch, employee evaluation and tax return APIs also need a matching plan and user rights

The hosted endpoint needs only the freee sign-in your client opens. To run `freee-mcp` locally, register an app in the freee app store (https://app.secure.freee.co.jp/developers) with the callback URL http://127.0.0.1:54321/callback, note its Client ID and Client Secret and tick the permissions you need, then run `npx freee-mcp configure` once: it saves the credentials, signs you in through the browser and picks a company. freee Sign needs its own app and `npx --package=freee-mcp -- freee-sign-mcp configure`.

Limits

  • Limit The tools are generic HTTP wrappers, so the assistant must know the right API path; freee's Agent Skills or freee_api_list_paths supply it
  • Not covered freee_authenticate and freee_file_upload exist only in the local stdio server, not on the hosted endpoint
  • Not covered Survey, launch and employee evaluation paths work only on the hosted endpoint; the local server refuses them before sending
  • Not covered freee Sign is not offered on the hosted endpoint yet and runs only through the local freee-sign-mcp program
  • Limit A request whose company_id differs from the selected company returns an error
  • Limit Giving FREEE_CLIENT_ID and FREEE_CLIENT_SECRET by environment is deprecated and prints a warning; the config file from configure replaces it

The tools are generic HTTP-method wrappers, so the assistant must know the right freee API path. freee's Agent Skills or `freee_api_list_paths` supply this. `freee_authenticate` and `freee_file_upload` exist only when it runs locally over stdio, not on the hosted endpoint. freee Sign is not offered on the hosted endpoint yet: it runs only locally, through `freee-sign-mcp`. Requests carrying a `company_id` that differs from the selected company return an error. Credentials in environment variables are deprecated and due to be removed.

Who it suits

It suits freee users, mostly Japanese businesses, who want an assistant to read and enter bookkeeping, invoice, HR or expense data in their own freee account. Being freee's own server, it reaches far more of the API than a narrow wrapper would. Most people should use the hosted endpoint, which needs no app registration and is the only way to reach the survey, launch and evaluation APIs. Run it locally for receipt uploads, freee Sign, or your own OAuth app. It can create, change and delete live accounting records, so anyone who only wants reporting should give the app read-only permissions. Without a freee account it is of no use.

Tools 25

10 only read, 11 change things, 4 can delete or overwrite. A ? marks an optional parameter.

freee_authenticate changes
Starts the OAuth sign-in to freee (local stdio only)
freee_auth_status
Reports whether a valid freee sign-in is held
freee_clear_auth deletes
Deletes the stored freee credentials
freee_set_current_company changes
Switches the company that requests act oncompany_id: stringname?: stringdescription?: string
freee_get_current_company
Shows which company is currently selected
freee_list_companies
Lists the companies the account can reach
freee_current_user
Returns details of the signed-in freee user
freee_server_info
Gives the server version and transport
freee_file_upload changes
Uploads a local file such as a receipt to the freee file box (local stdio only)file_path: stringcompany_id: stringdescription?: stringreceipt_metadatum_partner_name?: stringreceipt_metadatum_issue_date?: stringreceipt_metadatum_amount?: numberqualified_invoice?: enumdocument_type?: enum
freee_api_get
Sends a GET request to a chosen freee service and pathservice: enumpath: stringquery?: object
freee_api_post changes
Sends a POST request to create a recordservice: enumpath: stringbody: objectquery?: object
freee_api_put changes
Sends a PUT request to update a recordservice: enumpath: stringbody: objectquery?: object
freee_api_patch changes
Sends a PATCH request to partly update a recordservice: enumpath: stringbody: objectquery?: object
freee_api_delete deletes
Sends a DELETE request to remove a recordservice: enumpath: stringquery?: object
freee_api_list_paths
Lists the API paths available for each service
sign_authenticate changes
freee-sign-mcp: starts the OAuth sign-in to freee Sign
sign_auth_status
freee-sign-mcp: reports the freee Sign sign-in state
sign_clear_auth deletes
freee-sign-mcp: deletes stored freee Sign credentials
sign_api_get
freee-sign-mcp: reads freee Sign documents and datapath: stringquery?: object
sign_api_post changes
freee-sign-mcp: creates freee Sign recordspath: stringquery?: objectbody?: object
sign_api_put changes
freee-sign-mcp: updates freee Sign recordspath: stringquery?: objectbody?: object
sign_api_patch changes
freee-sign-mcp: partly updates freee Sign recordspath: stringquery?: objectbody?: object
sign_api_delete deletes
freee-sign-mcp: deletes freee Sign recordspath: stringquery?: object
sign_server_info
freee-sign-mcp: gives the server version and transport
sign_file_upload changes
freee-sign-mcp: creates a Sign document from a local filefile_path: stringfolder_id: numberuploader_id?: numbertitle?: stringdocument_status?: enumsigners_count?: numberskip_approval?: boolean

Similar servers