bokio-mcp

bokio-mcp

Enables MCP clients to read and write Bokio accounting data for one company through 85 tools covering invoices, customers, suppliers, journal entries, chart of accounts, fiscal years, items, tags, uploads, SIE export, and bank payments.

Category
Visit Server

README

bokio-mcp

An MCP server for the Bokio accounting API. It exposes 85 tools over one Bokio company — invoices, customers, suppliers, supplier invoices, journal entries, credit notes, the chart of accounts, fiscal years, items, tags, uploads, SIE export and bank payments — so an MCP client can read and (optionally) write your bookkeeping.

No accounts, no database, no hosted service. One company per server instance.

"Which invoices are still unpaid?"
"Book the attached receipt against account 6570."
"Export the SIE file for the 2025 fiscal year."

Quick start

Try it with fixtures, no Bokio account needed:

BOKIO_MOCK=true npx bokio-mcp status
# { "companyName": "Testbolaget AB", "status": "active", ... }

BOKIO_MOCK=true serves an in-process fake Bokio, so the full tool surface works before you have any credentials.

For real data, pick one of the two credential routes below and add the server to your MCP client.

Route A — private integration token (recommended)

In Bokio: company settings → Integrations → API tokens → Create private integration. The token is long-lived, scoped to that one company, and needs no OAuth review.

{
  "mcpServers": {
    "bokio": {
      "command": "npx",
      "args": ["-y", "bokio-mcp"],
      "env": {
        "BOKIO_INTEGRATION_TOKEN": "your-token",
        "BOKIO_COMPANY_ID": "the-company-uuid-from-the-bokio-url"
      }
    }
  }
}

Route B — OAuth

Register an integration in Bokio's developer portal with the redirect URI http://127.0.0.1:7337/callback, then:

export BOKIO_CLIENT_ID=... BOKIO_CLIENT_SECRET=...
npx bokio-mcp login

That opens Bokio in your browser and writes the tokens to ~/.config/bokio-mcp/tokens.json (mode 0600). Access tokens are refreshed automatically, including refresh-token rotation. Point your MCP client at npx -y bokio-mcp with the same two env vars set.

Writes are off by default

A fresh install can read but not write. Mutating tools are not merely blocked — they are absent from tools/list, so the model never proposes an edit it cannot make:

BOKIO_ALLOW_WRITES=true

Of the 85 tools, 38 are read-only and 47 mutate. Start without the flag, confirm the model is reading what you expect, then turn writes on.

Commands

bokio-mcp Serve over stdio — what MCP clients launch
bokio-mcp serve --http Serve over streamable HTTP on $PORT
bokio-mcp login Connect a company via OAuth
bokio-mcp status Print the current connection and exit

HTTP transport

For self-hosting, e.g. behind a reverse proxy or in a container:

MCP_AUTH_TOKEN=$(openssl rand -hex 32) bokio-mcp serve --http

/mcp is then guarded by that static bearer. Without MCP_AUTH_TOKEN the server binds 127.0.0.1 only rather than exposing an unauthenticated bridge to live accounting data. A Dockerfile is included; it defaults to this transport.

Environment

Variable Default
BOKIO_INTEGRATION_TOKEN — Route A: private integration token
BOKIO_COMPANY_ID — Route A: the company's UUID
BOKIO_CLIENT_ID / BOKIO_CLIENT_SECRET — Route B: OAuth credentials
BOKIO_ALLOW_WRITES false Register mutating tools
BOKIO_MOCK false Serve in-process fixtures instead of Bokio
BOKIO_SCOPES see src/config.ts OAuth scopes requested by login
BOKIO_TOKEN_FILE ~/.config/bokio-mcp/tokens.json Where OAuth tokens live
BOKIO_TOKEN_ENCRYPTION_KEY — Optional AES-256-GCM at rest; openssl rand -base64 32
BINARY_MAX_BYTES 4194304 Cap on inline uploads/downloads
PORT / HOST 3000 / auto HTTP transport
MCP_AUTH_TOKEN — Bearer guarding /mcp
OAUTH_CALLBACK_PORT 7337 Loopback port used by login

See .env.example for the annotated version.

A note on token storage

The OAuth token file is plaintext at mode 0600 unless BOKIO_TOKEN_ENCRYPTION_KEY is set — the same posture as the gh and aws CLIs. On a personal machine a key stored next to the thing it encrypts adds little; set it when the file lives somewhere less private, such as a container image or a shared host.

Development

npm install
npm test          # 36 tests, no database, no credentials
npm run typecheck
npm run dev       # tsx watch, stdio transport

BOKIO_MOCK=true routes every Bokio request into an in-process mock at the fetch layer, so it behaves identically under stdio, under HTTP, and inside tests with no server running. test/mcp.test.ts drives the real MCP protocol end to end against it.

Tool definitions are hand-written in src/tools/bokio/, but each one's path and method are checked against the OpenAPI spec at compile time by the op() helper — a typo in a route fails the build. Regenerate the spec types with:

npm run gen:bokio

Not supported

  • More than one company per instance. Bokio credentials are per-company; run a second instance for a second company.
  • Elevated scopes. bank-payments:* requires per-integration approval from Bokio. The bank payment tools are registered but will fail until your integration is approved and the scopes are added to BOKIO_SCOPES.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured