Skip to content
Finero
Developers

Finero MCP server

Finero runs a Model Context Protocol server, so an AI assistant can read a Finero workspace and act inside it without anyone pasting a key into a chat window.

It is a different thing from the HTTP API rather than a wrapper around it. A session authenticates as the person who approved it, exposes a smaller, read-mostly capability set, and can be revoked for one person without touching anyone else. If you are writing software rather than connecting an assistant, the HTTP API is the right surface.

Canonical location

app.getfinero.com/mcp

Streamable HTTP transport, OAuth 2.1 authorisation. Use this URL directly: there is deliberately no short alias, because an alias would have to redirect and many clients do not follow redirects on the POST that MCP uses. Also resolvable by name from the MCP Registry, below.

Connecting an assistant

One prerequisite, and it is easy to miss because most MCP servers do not have one: an administrator has to open the workspace to agents at all. After that the flow is ordinary, and there is no credential to obtain.

  • In Finero, once. An administrator opens Settings, then API & agents, and switches agent connections on. It is off by default, and while it is off nothing binds to the workspace, an administrator included. Nothing is created and nothing is handed out.
  • In the assistant. Add the endpoint as a custom connector. In Claude that is Settings, then Connectors, then Add custom connector. There is no client ID or secret field to fill in: the client registers itself.

Leaving the switch off is the one way this fails confusingly: the handshake succeeds, the tool list appears, and the connection then stops at authorisation rather than at connection. From here the rest needs nothing but a browser:

  • The client calls the endpoint and is refused with 401. The refusal names the authorisation metadata rather than just saying no.
  • The client follows that to the protected-resource metadata, finds the authorization server, and starts an OAuth 2.1 flow.
  • You approve the connection in a browser, on a consent screen naming what the assistant will be able to reach. The client then holds a session bound to you personally, not to the workspace: what it can do is what you can do.

Finero supports dynamic client registration (RFC 7591). It did not until 4 September 2026, and the reversal is worth explaining, because the original objection was sound and has not gone away. An anonymous registration endpoint means the client name shown on Finero’s own consent screen is a string the registrant chose: someone registers “Finero Official Sync” and sends a customer a link.

What changed is the recognition that hand registration answered that at the cost of a model that never matched reality. Mainstream MCP clients, Claude included, register a new client for every installation, so “an administrator registers the agent once and the team reuses it” was never going to describe real use; it meant minting a secret per person. The boundary moved instead of disappearing: one workspace switch, off by default, and the binding is created at consent rather than in advance.

So judge a request by the redirect host, which is where the authorization server will send the browser with the code and which a registrant cannot fake. The consent screen shows the client name too, labelled unverified, because it is only the client’s claim about itself. Both are recorded on the connection for an administrator to review later, and revoking one deletes that client at the authorization server: a re-registration is a new client needing a new approval.

The full chain, including what each document contains, is on Finero API authentication.

One header matters. Requests carry MCP-Protocol-Version. An unsupported value is refused with a body listing the versions the server does accept, so a client pinned to an older revision fails loudly rather than behaving oddly, and learns the right value from the refusal itself. That list is generated by the server, which is why it is not repeated here. Most MCP clients set the header for you.

Finding the server without a URL

The endpoint above is the direct route, and it works. There is a second one worth knowing about: Finero is published to the official MCP Registry as com.getfinero/finero. A client that understands the registry can resolve the server from that name alone, with nobody pasting a URL anywhere.

The listing is backed by a manifest the server generates, which declares the transport and entry point. Read the transport details from the manifest rather than from this page: it is produced by the server, so it stays right when the deployment moves, and a copy here would not.

What a session can reach

Read-mostly, and deliberately narrower than the HTTP API. An assistant can look at receivables state, invoices, payments and payment links, inspect how an ERP or payment integration is behaving, and start a sync. It is not a route to bulk mutation.

Payment links, and the scheduling of the workspace’s own payment-link email, are where a session can write, so the constraints are worth stating plainly. All four writes require the person who approved the connection to be an administrator: a session belonging to a member can list and read but not change. When it creates a link, the assistant names an installment rather than choosing a customer or proposing a figure, and the amount is bounded by what is actually outstanding on that installment. A confused model can raise a link for money already owed. It cannot invent a charge, and it cannot write a word of the email that carries it.

The reason is the caller. The HTTP API is used by software you wrote, reviewed and tested. An MCP session is driven by a language model interpreting a person's request, and the appropriate surface for that is smaller.

Where the granularity lives is worth being precise about, because it is easy to assume wrongly. It is the consent screen, not OAuth scopes. The authorization server accepts the standard OpenID set, so the protected-resource metadata advertises scopes_supported: ["openid"] and nothing product-specific. What a session may actually reach is decided by what the person approved when they connected it, and asking for a Finero-shaped scope string is refused rather than honoured.

Security worth thinking about before you connect it

A session carries the authority of whoever approved it. Approving Finero inside an assistant that other people can prompt effectively lends them that person's access for as long as the session lives. That is not a flaw in MCP, it is what delegated access means, but it is worth deciding deliberately rather than discovering. The upside of the OAuth model is the other half of the same property: revoking one person changes nothing for anyone else, where a shared API key would have to be rotated everywhere.

Building on Finero? Let's talk through the integration.

Tell us what you are connecting and we'll point you at the right entry point, or get you a key.

30 minutes · No commitment

Frequently asked

Does Finero have an MCP server?

Yes. Finero runs a Model Context Protocol server over Streamable HTTP at app.getfinero.com/mcp. It is authorised with OAuth 2.1, so a session acts as the person who approved it rather than as the whole workspace, and it is also resolvable by name from the official MCP Registry.

What is the Finero MCP server endpoint?

app.getfinero.com/mcp. It moved there on 4 September 2026 from a path under api.getfinero.com; the old path still answers and its metadata points here, but configure the new one. There is deliberately no short alias for it on getfinero.com. An alias would have to redirect, and MCP clients POST JSON-RPC to the endpoint: many HTTP clients do not follow redirects on a POST, so an aliased endpoint works for some clients and silently fails for others. Put the canonical URL in your config, or resolve the server by name from the registry.

What can an assistant do through it?

It is read-mostly. An assistant can look at receivables state, invoices, payments, payment links, integration status and queued payment-link emails, and can trigger a sync. The writes are payment links and the scheduling of the workspace's own payment-link email: creating or deactivating a link, and rescheduling or cancelling a queued send. All of them require the person who approved the connection to be an administrator, and when creating a link the assistant names an installment rather than choosing a customer or proposing a figure, with the amount bounded by what is actually outstanding on that installment. It never writes the words in an email; the template is fixed. It is deliberately a smaller surface than the HTTP API, because the thing on the other end is a language model acting on a person's behalf rather than a system you wrote and tested.

How do I connect an assistant to it?

Add the endpoint to your MCP client's server configuration. On first use the client is refused with a 401 that names the authorisation metadata, walks the OAuth 2.1 flow, and you approve the connection in a browser on a consent screen naming what the assistant will be able to reach. After that the client holds a session bound to you. No key is copied anywhere.

Which MCP protocol version does Finero support?

Clients send it in an MCP-Protocol-Version header, and the server refuses an unsupported value with a 400 whose body lists the versions it does accept. Read the list from that response rather than from a marketing page: it is generated by the server, so it cannot go stale the way a figure written here would. A client pinned to an old revision therefore fails immediately and is told what to use instead. Most MCP clients set the header for you.

Are Finero capabilities exposed as OAuth scopes?

No. The protected-resource metadata advertises the standard OpenID scope set rather than product-specific strings, and the authorization server refuses a Finero-shaped scope. Access granularity lives on the consent screen: what a session can reach is what the person approved when they connected it. A client attempting least privilege by requesting capability-named scopes would fail to connect rather than get narrower access.

Is the Finero MCP server in the MCP Registry?

Yes. It is published to the official MCP Registry as com.getfinero/finero, so a client that knows that name can resolve the server without being handed a URL by anyone. The manifest behind the listing is served at app.getfinero.com/mcp/server.json and follows the registry's server schema. Read the manifest for the transport and entry point rather than copying them from here.

Is there a .well-known discovery file for MCP?

Two, on different hosts and for different readers. getfinero.com/.well-known/mcp.json is a small pointer: it names the endpoint on app.getfinero.com, the server card, the manifest and the registry name, and nothing else, so a guess at the conventional path on the marketing host lands somewhere true. The server card at app.getfinero.com/.well-known/mcp-server-card is the server describing itself and is the one to trust. Neither is required by the protocol: MCP defines no .well-known discovery endpoint, and a connecting client learns what a server offers by posting an initialize request. The only well-known document the protocol depends on is the OAuth protected-resource metadata, which RFC 9728 requires.

Should I use MCP or the HTTP API?

If you are writing software, use the HTTP API with an API key: it is the full surface, it acts as the workspace, and it does not need a person present to approve anything. Use MCP when the caller is an assistant working for a specific person and you want what it can reach to be bounded by what that person approved.

Is the MCP server safe to connect to a shared assistant?

A session carries the authority of whoever approved it, so treat it as you would that person's own access. Approving it inside an assistant that other people can prompt effectively lends them that access for the life of the session. Revoking one person's access does not require rotating a shared credential, which is the main reason it is OAuth rather than an API key.