Skip to content

Add freee-mcp, the hosted MCP server, to the catalog - #44

Merged
haruotsu merged 2 commits into
mainfrom
freee-mcp-catalog
Aug 28, 2026
Merged

Add freee-mcp, the hosted MCP server, to the catalog#44
haruotsu merged 2 commits into
mainfrom
freee-mcp-catalog

Conversation

@haruotsu

Copy link
Copy Markdown
Collaborator

Why

freee hosts a remote MCP server at https://mcp.freee.co.jp/mcp (freee/freee-mcp). It is a different issuer from the freee API: its protected resource metadata (/.well-known/oauth-protected-resource/mcp) names an authorization server at https://mcp.freee.co.jp/ with its own authorize, token, and registration endpoints, and a token from there is not a freee API token. That is the same shape as notion-mcp, so the catalog can carry the entry.

What

Everything the entry claims is observed from the public endpoints:

  • Hosts. Only mcp.freee.co.jp. api.freee.co.jp stays off the list: naming both would say that either service's token may be sent to the other.
  • Elimination. The tokens are opaque and the server announces no prefix, so they are accepted by elimination — and freee is accepted the same way, so one agent cannot hold the two side by side. Pinned by a test.
  • PKCE. Required, not optional: an authorization request without an S256 code_challenge is refused with invalid_request. The entry sets pkce: true.
  • Scopes. The server declares mcp:read and mcp:write, but the consent it takes upstream is for freee's own application and covers reading and writing whichever mcp scopes are asked — they narrow what the server will do, not what the grant covers. The entry keeps mcp:read as the floor and offers mcp:write on the menu, and the setup text tells a read-only agent to say so on its mcp: block as well, since the tools are a thin pass-through over the whole API surface.
  • Registration. Dynamic client registration (RFC 7591) works, but its management half (RFC 7592) is absent: no registration_access_token comes back and the registration URI answers 405, so a client registered with the wrong redirect URI cannot be deleted — the same trap notion-mcp's setup text warns about, worded the same way here. An application from the freee developer console is refused as invalid_client: it belongs to the freee API's own authorization server, and this one keeps a register of its own.

verified: is absent because no authorization has been taken through Gemini Enterprise yet, as with zendesk.

The server at mcp.freee.co.jp is its own issuer: its protected
resource metadata names an authorization server on the same host,
with dynamic client registration (RFC 7591) and the scopes mcp:read
and mcp:write. A token from there is not a freee API token, so
mcp.freee.co.jp is the only host, and it is opaque, so no agent may
hold freee and freee-mcp together.

The authorization it fronts is freee's own application, taken with
reading and writing both whichever scopes are chosen - the mcp scopes
narrow what the server will do, not what the grant covers - so read
stays the floor and write sits on the menu. An S256 code challenge is
required, not optional: the endpoint refuses a request without one.

Registration comes without its management half (RFC 7592): no
registration access token is returned and the registration URI
answers 405, so a client registered with the wrong redirect URI stays
behind for good. The setup text warns about it, as notion-mcp's does.

🤖 Generated with Claude Code
The sentence mirrors what `gete connections` prints, and the catalog
gained freee-mcp without it, so the README undersold what ships. The
Zendesk addition kept the two in step; this keeps the habit.

🤖 Generated with Claude Code
@haruotsu
haruotsu merged commit c3e8990 into main Aug 28, 2026
3 checks passed
@haruotsu
haruotsu deleted the freee-mcp-catalog branch August 28, 2026 07:27
@github-actions github-actions Bot mentioned this pull request Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant