Orla

Personal, family and business books over fiat and crypto. Reads and records; it cannot pay.

OtherTypeScriptv0.3.0

orla

Your Orla books from a terminal, and a stdio bridge for MCP clients that cannot speak HTTP.

npx orla-cli login
npx orla-cli tx list --from 2026-08-01
npx orla-cli export --from 2026-01-01 > books.csv

No dependencies, no build step, no native module to compile. Node 22 or newer.

The package is orla-cli and the command it installs is orla. They differ because npm refused the bare name as too close to packages that already exist (ora, ol, rlp, url), and renaming the command would have been the worse half of that trade: npm i -g orla-cli still gives you orla tx list.

What it is

A thin client over the same MCP endpoint Claude connects to. Every command is a tool call, so the CLI cannot do anything a personal connection cannot do, and nothing here has its own idea of authorization. orla login walks the ordinary OAuth code flow with S256 PKCE: the browser lands on Orla's own consent page, where you tick the spaces this machine may reach.

It does not move money. A personal connection reads and records. Payments, transfers and card details belong to an agent connected for that purpose, with its own limits, set in the app under Agents. The tools that move money are not in the list this connection is given, and are refused at the endpoint if asked for by name.

Commands

CommandWhat it does
orla login [--api URL]Connect this machine. Opens a browser.
orla logoutForget the stored session.
orla whoamiWhich connection this is and which spaces it reaches.
orla spacesThe spaces in reach.
orla use <space-id>Remember one as the default.
orla accountsAccounts in the space.
orla tx listTransactions. --from --to --search --account --limit.
orla tx addRecord one. --account --kind --amount --date [--payee --note].
orla exportThe same rows as CSV on stdout.
orla toolsWhich tools this connection was given.
orla mcpstdio bridge (below).

--space <id> on anything space-scoped, --json for machine-readable output.

As an MCP server

Orla's MCP server is remote and speaks Streamable HTTP:

https://app.orla.finance/api/mcp

A client that supports remote MCP needs nothing from this package. Point it at that URL and it will find the consent page by itself. Claude Code, for example:

claude mcp add --transport http orla https://app.orla.finance/api/mcp

Clients that only support stdio servers can run this CLI as one. It relays JSON-RPC to the HTTP endpoint and holds the token, so the client needs no OAuth support of its own:

{
  "mcpServers": {
    "orla": { "command": "npx", "args": ["-y", "orla-cli", "mcp"] }
  }
}

Run npx orla-cli login once first. The bridge uses that session and refreshes it.

The server is listed in the official MCP registry as finance.orla/orla, which is the name a client or a directory should resolve it by. The entry carries both doors: the remote endpoint above and this package for stdio.

Setup for individual clients is written up at orla.finance/en/mcp. That is the personal connection, which reads your books and cannot pay. /en/ai-agents is a different door, where an agent gets a budget and a card of its own.

Where the token lives

The OS keychain: security on macOS, secret-tool on Linux. Where neither exists it falls back to a 0600 file under your config directory and says so on stderr, because a refresh token quietly landing on disk is not something to discover later.

orla logout clears both.

Development

npm install
npm run check   # types
npm run build   # dist/

The server this talks to is not in this repository. --api points the CLI at a different deployment, and the session records which one minted it, so a token from one environment is never replayed against another.

Contributions are welcome. See CONTRIBUTING.md.

License

MIT. See LICENSE.

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y orla-cli

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "finance-orla-orla": {
      "command": "npx",
      "args": [
        "-y",
        "orla-cli"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

orla-clinpm

Compatible MCP Clients

Orla works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More