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

api.getfinero.com/functions/v1/mcp

Streamable HTTP transport, OAuth 2.1 authorisation. The short path redirects with a 307, which preserves the POST method and body that JSON-RPC requires. Also resolvable by name from the MCP Registry, below.

Connecting an assistant

Two steps, and the first is easy to miss because most MCP servers do not need it: an administrator creates the client inside Finero, and only then does the browser flow have anything to run.

  • In Finero. An administrator opens Settings, then API & agents, and chooses “Connect an agent”. They are shown a server URL, a client ID and a client secret. The secret is displayed once and Finero does not store it.
  • In the assistant. Add the endpoint as a custom connector and put the ID and secret in its advanced settings. In Claude that is Settings, then Connectors, then Add custom connector.

Skipping the first step 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 does not offer dynamic client registration, and that is a decision rather than an omission. An anonymous registration endpoint would let anyone choose the client name and redirect URI that Finero’s own consent screen displays — a client calling itself something official, pointing anywhere — and it would make revoking a client meaningless, since another is one request away. The MCP specification anticipates exactly this and allows a client to be registered by hand. The cost is one paste, once, by someone who already administers the workspace.

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 are where a session can write, so the constraints are worth stating plainly. Creating a link and deactivating one both require an admin credential: a read-only session can list and read links but not change them. When it creates one, 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.

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.

Frequently asked

Does Finero have an MCP server?

Yes. Finero runs a Model Context Protocol server over Streamable HTTP at api.getfinero.com/functions/v1/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?

api.getfinero.com/functions/v1/mcp. 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 and integration status, and can trigger a sync. Payment links are where it can write: creating or deactivating one requires an admin credential, and when creating, 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 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 api.getfinero.com/functions/v1/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?

No, and that is not the same question as the manifest above. The protocol itself defines no .well-known discovery endpoint: a connecting client learns what a server offers by posting an initialize request to the endpoint. The only well-known URL in play is the OAuth protected-resource metadata, which exists because RFC 9728 requires it rather than because MCP does. A tool reporting a missing MCP .well-known file is checking for something the specification never defined.

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.

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.