Finance Toolkit
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Beschreibung vom Entwickler (englisches Original)
Double-entry books an agent keeps as the user: invoices, VAT returns, 174 country packs.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
SUPABASE_URL, SUPABASE_ANON_KEY, EKWO_EMAIL, EKWO_PASSWORD, EKWO_ACCESS_TOKEN, EKWO_DB_URL, EKWO_ACT_AS_USER_ID, EKWO_EINVOICE_DIRECTORY, EKWO_AGENT_POSTINGAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Funktioniert in Claude im Web, auf dem Desktop und auf dem Handy:
https://mcp.ekwo.ai/mcpÖffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"ekwo": {
"command": "npx",
"args": [
"-y",
"@ekwo-ai/mcp"
],
"env": {
"SUPABASE_URL": "your-value",
"SUPABASE_ANON_KEY": "your-value",
"EKWO_EMAIL": "your-value",
"EKWO_PASSWORD": "your-value",
"EKWO_ACCESS_TOKEN": "your-value",
"EKWO_DB_URL": "your-value",
"EKWO_ACT_AS_USER_ID": "your-value",
"EKWO_EINVOICE_DIRECTORY": "your-value",
"EKWO_AGENT_POSTING": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add --transport http ekwo https://mcp.ekwo.ai/mcpclaude mcp add ekwo --env SUPABASE_URL=your-value --env SUPABASE_ANON_KEY=your-value --env EKWO_EMAIL=your-value --env EKWO_PASSWORD=your-value --env EKWO_ACCESS_TOKEN=your-value --env EKWO_DB_URL=your-value --env EKWO_ACT_AS_USER_ID=your-value --env EKWO_EINVOICE_DIRECTORY=your-value --env EKWO_AGENT_POSTING=your-value -- npx -y @ekwo-ai/mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"ekwo": {
"url": "https://mcp.ekwo.ai/mcp"
}
}
}In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"ekwo": {
"command": "npx",
"args": [
"-y",
"@ekwo-ai/mcp"
],
"env": {
"SUPABASE_URL": "your-value",
"SUPABASE_ANON_KEY": "your-value",
"EKWO_EMAIL": "your-value",
"EKWO_PASSWORD": "your-value",
"EKWO_ACCESS_TOKEN": "your-value",
"EKWO_DB_URL": "your-value",
"EKWO_ACT_AS_USER_ID": "your-value",
"EKWO_EINVOICE_DIRECTORY": "your-value",
"EKWO_AGENT_POSTING": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"ekwo": {
"type": "http",
"url": "https://mcp.ekwo.ai/mcp"
}
}
}In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"ekwo": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@ekwo-ai/mcp"
],
"env": {
"SUPABASE_URL": "your-value",
"SUPABASE_ANON_KEY": "your-value",
"EKWO_EMAIL": "your-value",
"EKWO_PASSWORD": "your-value",
"EKWO_ACCESS_TOKEN": "your-value",
"EKWO_DB_URL": "your-value",
"EKWO_ACT_AS_USER_ID": "your-value",
"EKWO_EINVOICE_DIRECTORY": "your-value",
"EKWO_AGENT_POSTING": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
ChatGPT verbindet sich nur mit Servern im Internet:
https://mcp.ekwo.ai/mcpMenünamen können sich je nach Tarif und mit der Zeit leicht unterscheiden.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
SUPABASE_URL envEKWO_EMAIL envEKWO_ACT_AS_USER_ID envEKWO_EINVOICE_DIRECTORY envEKWO_AGENT_POSTING envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Die Tool-Liste dieses Servers haben wir noch nicht gelesen; wir prüfen die Endpunkte reihum.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde über die Domain ekwo.ai bestätigt (die Registry prüft, wem die Domain gehört)
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: SUPABASE_ANON_KEY, EKWO_PASSWORD, EKWO_ACCESS_TOKEN, EKWO_DB_URL
Beides geht: Installiere ihn auf deinem Computer oder verbinde dich mit der Cloud-Version.
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.24.0) kam vor 9 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.
In derselben Kategorie: Finance Toolkit, SolidInvoice, Korea Tax Calculator
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Create and send invoices and quotes, manage clients, and track payments in SolidInvoice.
Korean tax calculation and tax-audit judgment MCP: 96 tools with statutory citations.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
The Model Context Protocol server for Ekwo OS. It lets an AI agent work on the books in your own Postgres: read the ledger, raise an invoice, post it, match a payment, prepare the VAT return — as you, under the row level security of your own installation.
There are two ways to reach it, and they are the same server.
https://mcp.ekwo.ai/mcpFor a client that adds remote servers rather than launching them — claude.ai, or any other that speaks Streamable HTTP. Nothing is installed, and no password or key is written into a configuration file.
https://mcp.ekwo.ai/mcp
Point a client at that address and it discovers the rest. An unauthenticated call is answered with 401 and a WWW-Authenticate header naming the server's protected-resource metadata (RFC 9728); the client follows it to the authorization server (RFC 8414), registers itself (RFC 7591, so it needs no credentials of its own) and sends the person to their browser to approve the connection. The scope asked for is books.
An agent reading this without a browser can start from /.well-known/oauth-protected-resource.
The books stay where they are: the hosted server holds none, and connects to the instance the person chooses when they approve it. On the same screen they decide whether the agent may write; otherwise it reads. The hosted server is operated by Ekwo Cloud, and signing in there needs an account — a free one, opened with an address and a six-digit code, which also gives the web application on the same books and a nightly backup of every company it links.
npx -y @ekwo-ai/mcp@latest
For a client that launches its own servers — Claude Desktop, Claude Code, any editor that reads .mcp.json — against any installation, with no account. Keep @latest in the command: from inside a clone of the repository, a bare npx @ekwo-ai/mcp finds the unbuilt workspace package and answers ekwo-mcp: command not found.
With the command line installed, ekwo mcp starts the same server — the same entry point, runStdio(), the same flags (--autopilot, --review) and the same environment: "command": "ekwo", "args": ["mcp"].
The server holds no privileges of its own. It signs in as the person using it, or is handed their access token, and everything it can do afterwards is exactly what that person can do: a viewer reads and cannot write, a member of one company cannot see another, a locked period refuses a posting. None of that is checked in this package — the policies and the triggers in the schema decide, and this server reports what they answered.
Three things it will never do:
{
"mcpServers": { "ekwo": { "command": "npx", "args": ["-y", "@ekwo-ai/mcp@latest"], "env": { "SUPABASE_URL": "https://YOURREF.supabase.co", "SUPABASE_ANON_KEY": "your anon (publishable) key", "EKWO_EMAIL": "you@example.com", "EKWO_PASSWORD": "your password" } } } }
That block goes in claude_desktop_config.json for Claude Desktop, or in .mcp.json at the root of a project for Claude Code. EKWO_ACCESS_TOKEN replaces the address and the password when you already hold a session; with the password, the session is kept in memory and refreshed, and nothing is written to disk.
For a self-hosted installation with no PostgREST in front of the database, or for tests.
{
"env": { "EKWO_DB_URL": "postgresql://…", "EKWO_ACT_AS_USER_ID": "the auth.users id this server acts for" } }
EKWO_ACT_AS_USER_ID is required, and that is the whole point of this mode. A database connection is nobody: auth.uid() is null, row level security is bypassed rather than satisfied, and a server running that way would be a way round the policies rather than a client of them. So every query runs inside a transaction that sets request.jwt.claims to that user and switches to the authenticated role, and the policies bind exactly as they do over the API. This mode needs the postgres package installed alongside the server; the recommended route needs no driver at all.
| Variable | Meaning |
|---|---|
SUPABASE_URL | https:// .supabase.co |
SUPABASE_ANON_KEY | The anon (publishable) key. A service_role key is refused. |
EKWO_EMAIL / EKWO_PASSWORD | The user this agent acts as |
EKWO_ACCESS_TOKEN | A session already in hand, instead of the two above |
EKWO_DB_URL | A direct Postgres connection, for a self-hosted installation |
EKWO_ACT_AS_USER_ID | Required with EKWO_DB_URL: the auth.users id to act for |
EKWO_NO_REGISTER_INVITE | Optional. 1 leaves the invitation to register out of the instructions |
EKWO_NO_CLOUD_OFFER | Optional. 1 leaves the offer of a free Ekwo Cloud account out of the instructions; so does CI |
EKWO_AGENT_POSTING | Optional. autopilot or review: how this session posts, as --autopilot and --review choose it. Unset, each company's agent_posting decides. See Review or autopilot |
EKWO_EINVOICE_DIRECTORY | Optional. The folder electronic invoices are sent to by einvoicing_issue with send. Unset, files are issued and kept, and sending is refused as no_transport |
EKWO_MCP_TOOLS | Optional. on_demand starts the session with the tools of a first session and lets the agent find and add the others; unset or all, every tool from the start. See Tools on demand |
EKWO_FISCAL_SYSTEM | Optional. The invoicing system einvoicing_fiscalise chains fiscal records under, as JSON: name, id, version, installation, producerName, producerTaxId, and the booleans a regime may ask (verifactuOnly, multipleTaxpayers, multipleTaxpayersNow). Unset, fiscalising is refused as no_fiscal_system; malformed, the server does not start |
A client lists a server's tools as soon as it is added, and so do the directories that index MCP servers. So with none of the variables above — or with half of them — the server still starts, still answers the list of tools, and every tool call returns a not_configured error that names the variables to set and where. It connects nowhere until then, and it offers the tools of the socle only: which modules an installation carries is read from its database.
Only absence is forgiven. A service_role key, in either slot, and an EKWO_ACT_AS_USER_ID that is not a uuid are values somebody wrote, and the server still refuses to start with them.
npm run build -w @ekwo-ai/mcp
node packages/mcp/scripts/introspect.mjs # starts it with no environment and lists the tools
The Dockerfile at the root of the repository builds the same server from the checkout; docker run -i --rm speaks MCP over stdio, with the variables passed as -e.
The same server, reached by URL instead of started by a client: handleHttpRequest answers the Streamable HTTP transport of MCP. It is stateless — each request builds a server, answers in JSON and closes it, with no session id and nothing kept — so it runs on a function platform, behind a load balancer, or in one process. A GET is answered 405: this server never speaks first, so there is no stream to open.
It does not decide who is calling: the host authenticates the request its own way, then hands in the connection that request may use.
import { handleHttpRequest } from '@ekwo-ai/mcp';
export default async function (request: Request): Promise { const who = await yourOwnAuthentication(request); // a token you issued if (who === undefined) return new Response(null, { status: 401 }); return handleHttpRequest(request, { supabaseUrl: who.supabaseUrl, // https:// .supabase.co anonKey: who.publishableKey, // never the service_role key apiKey: who.ekwoKey, // or: accessToken: who.session }); }
A connection is one of two things, never both:
create_api_key() issues it. It travels in the X-Ekwo-Api-Key header with no Authorization beside it, the schema's pre-request hook presents it (decision 0062), and the caller is on that key's one company with that key's capabilities. A key issued without a capability that writes gives an agent that reads.A service_role key is refused in all three slots, as on stdio. For node:http (or anything built on it), handleNodeRequest(req, res, connection, { origin }) is the same handler.
A remote MCP client expects the server to follow the authorization part of the MCP specification: OAuth 2.1 with PKCE, protected resource metadata (RFC 9728), authorization server metadata (RFC 8414) and dynamic client registration (RFC 7591). That belongs to the host, not to this package: the host signs the person in, issues its own tokens, and maps each one to a connection above. The database stays the only place that decides what may be read or written.
Every write names its company explicitly.
| Tool | What it does |
|---|---|
list_companies | The companies you are a member of, with your role on each |
get_company | Financial years, lock dates, journals, default accounts |
list_accounts | The accounts a company works with, by code prefix, type or name. include_all for the whole chart |
search_contacts | Customers and suppliers, by name, type or VAT number |
suggest_duplicate_contacts | The contacts that are probably one party, strongest first, one row per contact to absorb — the rows of one kept contact being one party: the contact to keep, a score, the evidence (the same VAT or registration number, the same bank account, the words of the name weighed by how few contacts carry them) and the simplest name the group carries, proposed for the kept contact. Writes nothing; merge_contacts joins a pair the user confirms |
contact_statement | The statement of account of one contact over a period: the balance carried forward, each posted line of their receivable and payable accounts with its running balance and how far it is matched, and the closing balance |
search_products | The catalogue: code, unit, price, account and tax of what is sold and bought |
list_documents | Invoices, credit notes and quotes, filtered |
get_document | One document with its lines and the entry it produced |
| render_invoice_pdf | The PDF of a sale invoice or credit note, as a PDF resource (base64) b
Nur der Anfang wird gezeigt; den Rest findest du im Repo