> ## Documentation Index
> Fetch the complete documentation index at: https://docs.consile.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Uniconta

> Debtors, creditors, chart of accounts with balances, entries, VAT and inventory directly from Uniconta, plus guardrailed work in the daily journal. Connected with a dedicated Server-Login User and a Company ID.

*[Læs siden på dansk](https://docs.consile.ai/connectors/uniconta.md)*

The Uniconta connector gives your AI access to your accounts in Uniconta: debtors
with their invoices, orders, entries and open items, creditors and debt,
the chart of accounts with balances, ledger entries, VAT codes, inventory
transactions and inventory, without exports or spreadsheets. It can also work in
the daily journal: create, edit and delete journal lines and post exactly the
lines you point out, always behind clear guardrails. You connect with a
dedicated **Server-Login User** (username and password) and a **Company ID**
via a form in the portal, not with a login redirect. Your AI never sees the
login itself.

> [!NOTE]
>
> **Read + guardrailed write.** Managed MCP for Uniconta, EU-hosted. 21 tools
> only read. The 4 write tools only work in the daily journal and change nothing in
> Uniconta without an explicit confirmation (`confirm: true`). Without it, you only
> get a preview. Posting only happens for the lines you have seen and confirmed.
> Nothing else in Uniconta can be changed. An administrator can set the individual
> user to **Read only**. See [Actions & guardrails](https://docs.consile.ai/en/essentials/actions-and-guardrails.md).

> **Access**
>
> Read + guardrailed write in the daily journal. Read only can be chosen per user

> **Authentication**
>
> Server-Login User + Company ID

> **Hosting**
>
> Hosted in the EU · Frankfurt

* **Price:** 299 DKK/month excl. VAT. No lock-in,
  cancel at any time. The price covers 1 user and 1 company (agreement). Each extra
  user and each extra agreement costs 149.50 DKK/month excl. VAT. See
  [Pricing](https://docs.consile.ai/en/portal/pricing.md). Uniconta is also included in
  [the Consile Studio membership](https://docs.consile.ai/en/portal/membership.md) and
  [the free edition](https://docs.consile.ai/en/portal/free-edition.md).
* **Users:** whoever buys Uniconta automatically gets the included access.
  If more colleagues need Uniconta in their AI, an administrator gives them
  access under **Team** in the portal (next to Uniconta on the person's page) and
  chooses their access level at the same time (see
  [Access level per user](#access-level-per-user)). An extra user
  is billed pro rata from the day access is given. A colleague without access
  can still see the tools in their AI, but every lookup is refused with a message to
  ask an administrator for access. One access covers all your Uniconta agreements.
  If you have [the Consile Studio membership](https://docs.consile.ai/en/portal/membership.md), an administrator
  instead gives one membership licence per person, and it also covers Uniconta.
  The access level is still chosen per person. See [Team](https://docs.consile.ai/en/portal/team.md).
* **Multiple companies:** one connection covers one company (one Company ID). If you
  have several companies, an administrator adds them directly on the connector's
  page in the portal: the **Connections** card → **Add agreement**. Each extra agreement
  gets its own address, for example `https://mcp.consile.ai/uniconta-2/mcp`, and
  is connected with **Connect** and its own Company ID. Add each address as its own
  connector in your AI. See [Connect Uniconta](https://docs.consile.ai/en/connect/connect-uniconta.md#multiple-companies).
* **Endpoint:** `https://mcp.consile.ai/uniconta/mcp` (your own named connector in Claude).

## Prerequisites

**1. Subscription**

The connector must be bought in the [portal](https://app.consile.ai). See
[Buy a connector](https://docs.consile.ai/en/portal/buy-a-connector.md).

**2. Your AI connected**

See [Connect Claude](https://docs.consile.ai/en/connect/connect-claude.md) or
[Connect ChatGPT](https://docs.consile.ai/en/connect/connect-chatgpt.md).

**3. Uniconta connected**

Create a dedicated Server-Login User in Uniconta and enter the username,
password and Company ID in the portal. See [Connect Uniconta](https://docs.consile.ai/en/connect/connect-uniconta.md).

## What can it do? (tools)

You do not need to know the tool names. You ask in natural language, and your AI
picks the right one itself. The connector provides 25 tools: 21
only read, and 4 write in the daily journal. A user who is on **Read only**
only gets the 21 (see [Access level per user](#access-level-per-user)). If you
bought Uniconta before October 7, 2026, an administrator must first activate the six
daily journal tools (see [Activating the daily journal](#activating-the-daily-journal)). Here
they are grouped by what they answer:

**Companies**

| Tool | What it does |
| - | - |
| `list_companies` | The Uniconta company the connection works in (CompanyId, name, CVR, country): the company with the Company ID the connection is set up with. Other companies the server user has access to are not shown. If the Company ID does not match a company the server user has access to, the list is empty. All other lookups also read only that Company ID |

**Debtors**

| Tool | What it does |
| - | - |
| `list_debtors` | Debtors with account, name, currency, balance, overdue amount and credit limit. Can search by name, account or CVR |
| `list_debtor_open_items` | Open (unpaid) debtor items: receivables/aging with remaining amount |
| `list_debtor_invoices` | Issued debtor invoices with amount, VAT, total and paid flag |
| `list_debtor_orders` | Sales orders with order number, amount and status |
| `list_debtor_transactions` | Entries for one debtor account: date, voucher, invoice, amount and text. Mention the account number, otherwise you get all ledger entries |

**Creditors**

| Tool | What it does |
| - | - |
| `list_creditors` | Creditors (suppliers) for questions about debt and expenses: account, balance, overdue amount, payment method |
| `list_creditor_open_items` | Open (unpaid) creditor items: supplier debt with remaining amount |
| `list_creditor_transactions` | Entries for one creditor account: date, voucher, invoice, amount and text. Mention the account number, otherwise you get all ledger entries |

**Finance / general ledger**

| Tool | What it does |
| - | - |
| `list_gl_accounts` | The chart of accounts with account, name, type, balance and figures for this year and last year |
| `get_account_balance` | The balance on one general ledger account from the account number (for example `1010`). Answers "what is the balance on account X?" directly |
| `list_gl_transactions` | Ledger entries: date, account, voucher, text, amount, VAT and entry type |
| `list_vat_codes` | VAT codes with rates (Vat, name, rate, account, VAT type) |

**Inventory**

| Tool | What it does |
| - | - |
| `list_inventory_items` | Items with item number, name, prices, unit, group, EAN and stock quantity (can be sorted, fetched page by page, limited to selected fields and show user-defined fields) |
| `list_product_groups` | Item groups (group, name) for categorizing items |
| `list_inventory_transactions` | Inventory transactions/item movements: item, date, quantity (negative for sales), customer/supplier, invoice number and amount |
| `list_recently_added_items` | Most recently added items. Not available yet: the tool only answers with a message saying so (see below) |

**Advanced**

| Tool | What it does |
| - | - |
| `query` | Read rows from any Uniconta entity with raw filters, sorting, paging and field selection (can only read) |
| `aggregate` | Groups and sums any entity and returns only totals per group |

**Daily journal (reading)**

| Tool | What it does |
| - | - |
| `list_journals` | The company's daily journals with key, name, voucher series, default account and contra account, default VAT, whether the journal is blocked, and the number of unposted lines |
| `list_journal_lines` | The unposted lines in one daily journal: line id, date, account and contra account, VAT codes, text, amount (positive = debit), voucher, invoice, due date, project and dimensions. Can be narrowed by account and date range. Posted lines are found under `list_gl_transactions` |

### Writing in the daily journal (4 guardrailed tools)

These four tools are the only ones that change anything in Uniconta, and they only
work in the daily journal. Customers, suppliers, items, invoices and posted entries
cannot be changed. A call without `confirm: true` never changes anything, but shows
exactly which change would be sent. Normally your AI shows you the
preview and only calls again with `confirm: true` once you have said yes.

| Tool | What it does | Requires confirmation? |
| - | - | - |
| `create_journal_lines` | Creates 1-50 unposted journal lines in a daily journal: ledger, debtor or creditor lines with optional contra account, VAT codes, voucher, invoice reference, due date, project and dimensions. Nothing is posted | Always |
| `update_journal_lines` | Edits 1-50 unposted lines by line id. Each line is read first, and only the fields you specify are changed | Always |
| `delete_journal_line` | Deletes one unposted line. The line is fetched and shown in the preview first | Always |
| `post_journal_lines` | Posts the line ids you specify (at most 50 per call), never the whole journal. Cannot be undone | Always, and only if the lines are unchanged since the preview |

The tools are called `uniconta__<tool>` (for example `uniconta__get_account_balance`)
when your AI calls them. You only need to ask the question in natural language.

> [!NOTE]
>
> **Questions about the newest item cannot be answered yet.** Uniconta stores no
> creation date on items, and the tool `list_recently_added_items` is not
> available yet: it only answers with a message saying so. If you want to see the
> items that most recently had an inventory movement, ask for items sorted by
> latest movement (`list_inventory_items` with `sortBy: last_movement`).

> **[Building on top yourself? See the API reference](https://docs.consile.ai/developers/tools/uniconta.md)**
>
> Full reference with all 25 tools, arguments, filters, paging,
> guardrail fields and return values.

## How the guardrail works

The guardrails are built into the Uniconta tools:

1. **All four write tools are dry-run by default.** A call without
   `confirm: true` never changes anything in Uniconta. You get a structured
   preview of exactly the change (method, path and content) that would be
   sent, with a summary of the number of lines and totals.
2. **The change is only carried out with `confirm: true`.** In accounting there is
   no write without consequences, so there are no exceptions. Posting also requires
   a check value from the preview and therefore always takes two calls.
3. **Posting has an extra guardrail.** `post_journal_lines` only posts the
   line ids you specify, at most 50 at a time and never the whole journal.
   The preview shows each line, the totals and how many other unposted
   lines in the journal are **not** included. If a line's date, account, contra
   account, amount, VAT, text, voucher, invoice or due date has changed between
   preview and confirmation, the posting is refused, and nothing is posted.
   Posting cannot be undone.
4. **The result is checked.** After the posting, the connector reads the
   journal again and reports which lines were posted, which, if any, are
   still unposted, and how many lines are left in the journal.
5. **Only unposted lines can be changed.** Posted entries can neither be edited
   nor deleted in Uniconta. Corrections are made with a new reversing entry.
6. **One journal at a time.** Lines are always addressed by their line id within
   one daily journal. A blocked journal is refused.
7. **Edits keep the rest of the line.** `update_journal_lines` only changes the
   fields you specify. The confirmation call applies your changes to the line as it
   looks at that time.
8. **Uniconta has the last word.** If the server user lacks rights, or
   Uniconta does not know an account, Uniconta refuses the change. Your AI is shown
   Uniconta's reason, so it can correct the proposal, and nothing is changed.

In practice your AI normally shows you the plan first and only sends `confirm: true`
once you have said yes. It is the call with `confirm: true` that actually changes
something in Uniconta.

> [!TIP]
>
> Read the whole confirmation model, which applies across all write connectors,
> under [Actions & guardrails](https://docs.consile.ai/en/essentials/actions-and-guardrails.md).

## Activating the daily journal

The six daily journal tools were released on October 7, 2026:
`list_journals`, `list_journal_lines` and the four write tools. New tools are
never added to your AI unless you choose to add them.

* **Bought before October 7, 2026:** the six tools are switched off for the
  organization until an administrator activates them. Until then, your AI has
  the other 19 read tools. The Uniconta page in the portal says *6 new tools
  since you bought Uniconta*. An administrator clicks **Activate all 6** or switches
  them on one by one, for example only the two that read.
* **Bought on October 7, 2026 or later:** all 25 tools are switched on from
  day one.

An administrator can also switch any tool off for the whole
organization. See [Tools and new tools](https://docs.consile.ai/en/portal/tools.md).

## Access level per user

An administrator can choose the access level for each user in the portal under
[Team](https://docs.consile.ai/en/portal/team.md): click the user's name, and for Uniconta choose
between **None**, **Read only (21)**, **Full access (25)** and **Custom**,
where you choose exactly the tools the user gets (see
[Custom access](https://docs.consile.ai/en/portal/team.md#custom-access)). The numbers count the tools
the organization has switched on.

| Level | Tools | What your AI can do |
| - | - | - |
| **Read only** | 21 | Read accounts, debtors, creditors, inventory and daily journals. No write tools. |
| **Full access** (default) | 25 | Everything above plus the 4 guardrailed write tools in the daily journal. |

* Both levels cost the same.
* The level applies to the user's access to all your Uniconta agreements.
* If a user is on **Read only**, Consile blocks all write operations on the
  server for that user: the write tools do not show in the user's AI, and a
  call to them is refused without anything being changed.
* If a user has not been given a level, **Full access** applies. The level
  only gives the tools the organization has switched on. If the daily journal is not
  activated yet, a user with **Full access** gets the 19 tools you already
  had.
* If an open conversation has already fetched the tool list, the write tools can
  still be there until the user starts a new conversation. Calls to them are
  refused.
* Only administrators can change the level. If you choose a level for a user who
  does not have access to Uniconta yet, the user gets access at the same time. If
  it is an extra user, you confirm the purchase first.

> [!NOTE]
>
> Uniconta also decides for itself. If the server user only has read access in
> Uniconta, Uniconta refuses all writes, whatever the level in Consile. If your AI
> should be able to create and post journal lines, the server user needs write
> access to the daily journal and the right to post. See
> [Connect Uniconta](https://docs.consile.ai/en/connect/connect-uniconta.md).

## Try asking

> **Balances & chart of accounts**
>
> > *"What is the balance on account 1010 right now?"*
>
> > *"Show the chart of accounts with balances for the revenue and expense accounts."*

> **Debtors & liquidity**
>
> > *"Which debtors have the largest open items right now?"*
>
> > *"Show unpaid invoices for customer 1024."*

> **Creditors & entries**
>
> > *"How much do we owe our suppliers in total?"*
>
> > *"Show the ledger entries on account 1010 for May."*

> **Inventory & sales**
>
> > *"How many units did we sell of item group X this year?"*
>
> > *"Show the contribution margin per item group across the whole item register."*

> **Daily journal (write)**
>
> > *"Create a journal line in the daily journal: 1,250 DKK office supplies on account 3617 with contra account 5820, dated today."* (you get a preview and must confirm)
>
> > *"Show the unposted lines in the daily journal, and post the ones I approve."* (posting always requires a preview and your confirmation)

> [!TIP]
>
> Mention the account number or the debtor account in the question if you know it.
> That gives a precise answer right away. Several tools can also be narrowed by
> date range.

## Limitations

* **Only writes in the daily journal:** the read tools, including `query` and `aggregate`,
  can only read and cannot change anything. The only changes the connector can
  make are the four daily journal tools above, and they always require your
  confirmation. Customers, suppliers, items,
  invoices and posted entries cannot be changed.
* **Writing requires rights in Uniconta:** the server user needs
  write access to the daily journal and the right to post. With a pure read role,
  all read tools work, but Uniconta refuses every write, and nothing is
  changed.
* **Requires a Server-Login User:** a regular user or a "Workapp
  user" does not work. A dedicated user must be created with **User type =
  Server user**. See [Connect Uniconta](https://docs.consile.ai/en/connect/connect-uniconta.md).
* **Check the connection after setup:** ask your AI a simple question, for example
  about the balance on an account. If the username, password or Company ID is wrong,
  you get an error instead of an answer: a message that Uniconta refused the login
  and that a reconnect is needed (`reconnect required`), or the general error "Tool
  invocation failed." An administrator then disconnects and reconnects
  with correct values, or asks your AI for a new connection link in the
  connector that belongs to the agreement (for example `uniconta-2`). If you ask
  *"Which Uniconta company are you connected to?"*, and your AI finds no company,
  the login works, but the Company ID is wrong. See
  [If a lookup fails](https://docs.consile.ai/en/connect/connect-uniconta.md#if-a-lookup-fails).
  If you set an expiry on the server user in Uniconta, the connection stops
  working when it expires.
* **Results are limited in size:** each lookup returns up to 50 rows by default
  (max. 1,000). A broad lookup without narrowing in a large
  entries table can take a long time or fail. So narrow it down with a search,
  account or date range, or use `aggregate` for totals per group.
* **User-defined fields:** the company's own fields only exist on the
  `…ClientUser` variants (for example `InvItemClientUser`). On the base entity, a
  filter on a user-defined field is ignored without an error message.
* **Missing rights give an error, not an empty answer:** if
  the server user or the company lacks rights to, for example, an entries table,
  Uniconta refuses the lookup. Your AI gets the general error "Tool invocation failed." instead
  of "0 rows". Give the server user read access to the parts of the
  accounts you want to ask about.

Is something not working as expected? See [Troubleshooting](https://docs.consile.ai/en/troubleshooting.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.