tricount-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tricount-mcpwho owes whom in this tricount? https://tricount.com/tXXXX"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tricount-mcp
English · Español
An MCP server to read and edit Tricount from any AI assistant that supports MCP: Claude, Cursor, VS Code (GitHub Copilot), Windsurf, Gemini CLI, Codex CLI, LM Studio, ChatGPT (as a remote connector) and others.
Ask things like:
"Who owes whom in this tricount? https://tricount.com/tXXXX"
"Which expenses include Bob?"
"Add Pizza, $24, I paid, split among everyone except Carol"
"Record that Alice sent me $5"
Don't code? Follow the quick start guide: step-by-step setup for your AI assistant, no programming needed.
Unofficial project. Not affiliated with Tricount or bunq. It uses a private API that was reverse-engineered from the mobile app, and it may stop working without notice. Read the disclaimers before using it.
Features
Tool | What it does |
| First step: validates the link and returns the members |
| Members, total spent, balances and suggested transfers to settle up |
| Transactions, filtered by who paid, who is involved, text and dates |
| How much a person paid, their share and their spending by category |
| Creates an expense: equal split, exact amounts or ratios |
| Records a reimbursement between two members |
| Deletes a transaction |
No Tricount account or password needed: the tricount link is enough, just like in the app.
Related MCP server: Splitwise MCP Server
How it works
The server sends the assistant a usage guide when it connects, and the important rules are also enforced in code:
The assistant asks for the tricount link and connects with
connect_tricount.It shows the members and asks which one is you. It doesn't guess: names can be similar, and a mistake charges expenses to someone else.
Creating or deleting requires
acting_as(the member you are); names that aren't in the tricount are rejected.It never saves directly: it first shows a preview and only saves once you confirm.
Amounts are split in whole currency units (pesos in CLP, cents in EUR or USD), so shares always add up exactly to the total.
Installation
Quick install with uv (recommended)
With uv installed you don't need to clone anything or install Python: the client downloads and runs the server from PyPI. Every MCP client needs the same command:
uvx tricount-mcpMost clients (Claude Desktop, Cursor, Windsurf, Gemini CLI, LM Studio, Cline…) take it in this format:
{
"mcpServers": {
"tricount": {
"command": "uvx",
"args": ["tricount-mcp"]
}
}
}The quick start guide lists where each app keeps its config, plus the formats for VS Code, Codex CLI and Claude Code.
Manual install (to modify the code)
You need Python 3.10 or newer and git.
git clone https://github.com/Javo2804/tricount-mcp.git
cd tricount-mcp
python -m venv .venvInstall the dependencies.
On Windows:
.venv\Scripts\python -m pip install -r requirements.txtOn macOS or Linux:
.venv/bin/python -m pip install -r requirements.txtCheck that it works with the sample tricount published by Tricount (read-only):
.venv/bin/python test_stdio.py https://tricount.com/tMjbqgwJxaikhUbkNz(On Windows, use .venv\Scripts\python instead of .venv/bin/python.)
Connect it to your assistant (manual install)
Any client that supports local (stdio) MCP servers works. Instead of uvx, use two absolute
paths:
Command: the virtual environment's Python,
.../tricount-mcp/.venv/bin/python, or on Windows...\tricount-mcp\.venv\Scripts\python.exe.Argument:
.../tricount-mcp/server.py.
In the common mcpServers format:
{
"mcpServers": {
"tricount": {
"command": "/path/to/tricount-mcp/.venv/bin/python",
"args": ["/path/to/tricount-mcp/server.py"]
}
}
}On Windows, write paths with double backslashes, for example:
"C:\\Users\\your-user\\tricount-mcp\\.venv\\Scripts\\python.exe". For other formats (VS Code,
Codex CLI, Claude Code), see the quick start guide
and replace the command and arguments. Restart the client after changing its config.
ChatGPT and web clients
Web clients can't launch processes on your computer: they need the server published on the internet over HTTP. See Deploy your own instance.
Optional settings
Variable | Purpose |
| Link or key of a tricount to use when you don't specify one |
| User-Agent sent to the API (see disclaimers) |
| If set, the server uses HTTP at |
In the mcpServers format, add variables with
"env": {"TRICOUNT_DEFAULT": "https://tricount.com/tXXXX"} inside the server entry.
Deploy your own instance
To use it from ChatGPT, claude.ai or with several people, deploy it as an HTTP server:
PORT=8080 .venv/bin/python server.pyThe MCP endpoint is http://<host>:8080/mcp (streamable HTTP, stateless). The repository includes
a Dockerfile. For example, on Google Cloud Run:
gcloud run deploy tricount-mcp --source . --project <your-project> --region <your-region> --allow-unauthenticated --max-instances 3 --memory 512MiThen add https://<your-service>/mcp as a custom connector in your client.
Important: deployed this way, the server has no authentication. Anyone who knows the URL can use it, although only with tricounts whose link they have. Share the URL only with the right people. If you need access control, add OAuth (the MCP SDK supports it) or put it behind an authenticated proxy.
Every confirmed write emits a JSON log line on stderr with the declared member (acting_as), the
tricount and the transaction. On Cloud Run it goes to Cloud Logging:
gcloud logging read "resource.type=cloud_run_revision AND jsonPayload.audit.action:*" --project <your-project> --limit 20Tests
test_stdio.py [link]: read test against an existing tricount.test_write.py [http-url]: creates its own throwaway tricount, exercises every write, checks the balances and deletes it at the end. Without arguments it uses stdio; with a URL (http://localhost:8080/mcp) it tests an HTTP server.
Disclaimers
Unofficial API. Tricount doesn't publish this API. It may change or be blocked at any time, and using it may not be allowed by their terms of service. Use it at your own risk and in moderation.
User-Agent. The API only accepts writes from clients that identify as Tricount's Android app; with any other User-Agent it replies "Group Expenses is no longer available in the bunq app". That's why the server sends the app's User-Agent, like the projects it builds on. You can change it with
TRICOUNT_USER_AGENT.Anyone with the link can edit. That's how Tricount works. The server can add expenses on behalf of any member.
acting_asprevents mix-ups, but it doesn't verify identity.Local session. The server registers with the API as an anonymous device and stores that session in
~/.tricount-mcp/session.json. It doesn't store your tricounts or your data.
Technical notes
Authentication: registers a "device" with a UUID and an RSA public key (
POST /v1/session-registry-installation) and uses the token it gets back. If the token expires, it registers again automatically.Before writing, it syncs the tricount to the session (
registry-synchronization).Reimbursements are stored with a negative amount, like the official app does. Some community documentation says they're positive, but that reverses them.
Reads are cached for 60 seconds per tricount.
Credits
Built on the research of:
mlaily/TricountApi: authentication and reading.
elrandar/tricount-api: write endpoints.
License
Available Tools
7 toolsconnect_tricountA
Primer paso al trabajar con un tricount: valida el link y devuelve su título y miembros. Después pregúntale al usuario cuál de esos miembros es él o ella, y usa ese nombre como acting_as en las herramientas que escriben.
Args: tricount: link (https://tricount.com/tXXXX) o key del tricount.
| Name | Required | Description | Default |
|---|---|---|---|
| tricount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses what the call returns (title + members) and implies validation failure on a bad link, but says nothing about error behavior, auth requirements, or whether a connection/session is persisted for later tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences plus a compact Args line; the purpose comes first and every sentence adds operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly covers the return values (title, members) and the cross-tool contract for acting_as, which is the key missing piece an agent would otherwise not know. Minor gaps remain around failure modes and session persistence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single parameter, so the description must compensate, and it does: it gives the accepted formats (https://tricount.com/tXXXX link or tricount key). It could still clarify how to obtain a key or what happens with malformed input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: it validates a tricount link/key and returns its title and members, and frames itself as the entry point ('primer paso'). It does not explicitly contrast with get_tricount_summary, which plausibly overlaps, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing guidance ('first step when working with a tricount') and a follow-up workflow: ask the user which member they are and pass that name as acting_as to the write tools. It points at the class of alternatives (write tools) but does not name the other read siblings or state when this tool is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_expenseA
Crea un gasto en un tricount. Sin confirm=true solo devuelve una vista previa.
El reparto se define con UNA de estas opciones (si no se da ninguna, se reparte en partes iguales entre todos los miembros):
split_among: lista de miembros, en partes iguales.
exact_amounts: monto exacto por miembro; debe sumar
amount.ratios: proporción por miembro (p. ej. {"Ana": 2, "Juan": 1}).
Args: acting_as: el miembro del tricount que es el usuario con quien conversas, tal como lo confirmó tras connect_tricount. "Yo", "me" o "conmigo" se refieren a este miembro. description: qué se compró. amount: monto total (positivo), en la moneda del tricount. paid_by: quién pagó ("yo" = acting_as). tricount: link o key del tricount. category: FOOD_AND_DRINK, GROCERIES, TRANSPORT, TRAVEL, ENTERTAINMENT, SHOPPING, RENT_AND_UTILITIES, HEALTHCARE, INSURANCE, OTHER; o un texto libre (categoría personalizada). expense_date: fecha del gasto (YYYY-MM-DD); por defecto hoy. confirm: true para guardar de verdad.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| ratios | No | ||
| confirm | No | ||
| paid_by | Yes | ||
| category | No | ||
| tricount | No | ||
| acting_as | Yes | ||
| description | Yes | ||
| split_among | No | ||
| expense_date | No | ||
| exact_amounts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the two-phase preview/commit semantics via confirm=true, the default-equal-split fallback, and the sum constraint on exact_amounts. It still omits permission/auth requirements and whether a preview returns a stable identifier for a later commit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the confirm/preview rule, then a scannable bulleted split block, then an Args section. Slightly verbose and mixes prose and PyDoc-style Args, but every section carries non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no annotations and no output schema, the description covers the critical unknowns: confirmation gating, split mutual exclusivity, and the exact_amounts sum invariant. What it lacks is any statement about the preview's return shape and what errors to expect on a mismatched sum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it defines acting_as, description, amount (positive, tricount currency), paid_by, tricount, category (with a full enum listing plus free-text fallback), expense_date format and default, plus the three split strategies. This is nearly a complete parameter glossary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Crea un gasto en un tricount') and immediately distinguishes behavior from siblings by disclosing the preview-by-default semantics ('Sin confirm=true solo devuelve una vista previa'). An agent can tell this apart from list_expenses or create_reimbursement without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains the default no-split behavior ('si no se da ninguna, se reparte en partes iguales entre todos los miembros') and enumerates three mutually exclusive ways to define the split. It does not, however, state when to prefer exact_amounts over ratios, nor does it reference siblings for related flows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reimbursementA
Registra un reembolso (transferencia) de un miembro a otro. Sin confirm=true solo devuelve una vista previa.
Args: acting_as: el miembro del tricount que es el usuario con quien conversas, tal como lo confirmó tras connect_tricount. "Yo", "me" o "conmigo" se refieren a este miembro. from_member: quién paga la deuda. to_member: quién recibe el dinero. amount: monto transferido (positivo). tricount: link o key del tricount. description: texto del movimiento. reimbursement_date: fecha (YYYY-MM-DD); por defecto hoy. confirm: true para guardar de verdad.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| confirm | No | ||
| tricount | No | ||
| acting_as | Yes | ||
| to_member | Yes | ||
| description | No | Reembolso | |
| from_member | Yes | ||
| reimbursement_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose the key trait: without confirm=true it only returns a preview (non-mutating), and acting_as must be confirmed via connect_tricount. It omits permissions, error behavior, and what the preview actually returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the preview/save rule are front-loaded in the first two sentences, followed by a readable Args block. The Args list is somewhat verbose but each line earns its place given 0% schema coverage; minor redundancy with field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover behavior and params, which it largely does, including the preview/commit distinction and all parameter meanings. It is slightly incomplete on return shape of the preview, error cases, and required permissions for a mutation-capable tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does so for all eight parameters: acting_as is defined with pronoun mapping ("Yo", "me" refer to this member), from/to member roles are disambiguated (payer vs receiver), amount is constrained positive, date defaults to today, and confirm means real save. This is meaning well beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Registra un reembolso (transferencia) de un miembro a otro" states a specific verb (register) and resource (a reimbursement/transfer between two members), which an agent can distinguish from create_expense. It stops short of explicitly naming or contrasting itself with the sibling expense/transfer tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Sin confirm=true solo devuelve una vista previa" gives a clear conditional for the dry-run vs commit mode, which is real usage guidance. However, it never says when to prefer this over create_expense or delete_entry, nor any prerequisite beyond the acting_as note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entryA
Elimina un movimiento (gasto, ingreso o reembolso) por su id. Sin confirm=true solo muestra qué se borraría. El id se obtiene con list_expenses.
Args: acting_as: el miembro del tricount que es el usuario con quien conversas, tal como lo confirmó tras connect_tricount. "Yo", "me" o "conmigo" se refieren a este miembro. entry_id: id del movimiento. tricount: link o key del tricount. confirm: true para borrar de verdad.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| entry_id | Yes | ||
| tricount | No | ||
| acting_as | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers the critical behavioral trait: the default is a non-destructive dry-run and confirm=true is required to actually delete. It omits irreversibility and permission requirements, but the safety pattern is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the destructive behavior and dry-run default in the opening sentences, then lists args compactly. The Args block is slightly verbose but each entry earns its place given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, but the description explains what the dry-run returns and what confirm does, and covers all parameters. Complete enough for an agent to invoke correctly, with minor gaps around permissions and reversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all four params. The acting_as explanation (the conversant member confirmed after connect_tricount, with 'yo/me/conmigo' mapping) adds real semantic value; entry_id and tricount are covered only briefly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (elimina) and resource (movimiento: gasto, ingreso o reembolso), identifying the entity precisely. It also links to list_expenses as the source of the id, which helps distinguish the workflow from create_expense/create_reimbursement, though it never explicitly contrasts with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly describes the two-step usage: without confirm=true it only shows what would be deleted, and confirm=true performs the deletion. It also tells the agent where to obtain entry_id via list_expenses. No explicit when-not-to-use vs alternatives, but the operational context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_member_detailB
Detalle de un miembro: cuánto pagó, cuánto le corresponde, su balance, a quién debe o quién le debe, y sus gastos por categoría.
Args: member: nombre del miembro (acepta coincidencia parcial). tricount: link o key del tricount.
| Name | Required | Description | Default |
|---|---|---|---|
| member | Yes | ||
| tricount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the returned data shape (balance, debts, per-category expenses), which is useful since there's no output schema, but says nothing about error behavior when a member doesn't match, permissions, or how an omitted tricount is resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The body is a single front-loaded sentence that earns its length by enumerating the returned fields, followed by compact standard Args. Little waste, though the field enumeration is slightly list-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no output schema and no annotations, the description adequately covers both parameters and the returned content. Missing only minor behavioral details (error/not-found handling).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'member' accepts partial matching and 'tricount' accepts either a link or a key. These format details add real meaning the bare schema (plain strings) does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get member detail) and enumerates exactly what the detail contains — paid, owed, balance, debts in both directions, and per-category expenses. It is clear, though it doesn't explicitly contrast itself with siblings like get_tricount_summary or list_expenses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given — nothing says when to pick this over get_tricount_summary or list_expenses, nor any prerequisite (e.g., that a tricount must be connected first). The use case is only inferable from the content list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tricount_summaryB
Resumen de un tricount: título, moneda, miembros, gasto total, balances de cada miembro y las transferencias sugeridas para saldar las deudas.
Args: tricount: link (https://tricount.com/tXXXX) o key del tricount.
| Name | Required | Description | Default |
|---|---|---|---|
| tricount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the returned content well (an overview with balances and settlement transfers), but it omits whether this is strictly read-only, whether authentication/connection is required, and any rate-limit or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two compact sentences, front-loading the purpose before the argument detail. No filler, though the Args block is minimal for a single parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully enumerates the return fields, which is a real strength. But with no annotations and no note about auth/connection requirements or why the sole parameter is optional, it is only adequate for a read tool in a connected service.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the parameter accepts either a link (https://tricount.com/tXXXX) or a key, which adds real meaning beyond the bare string/null schema. However, it does not clarify that the parameter is optional (required=false, default null), which is a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Resumen de un tricount') and enumerates exactly what the summary contains (title, currency, members, total, balances, suggested transfers). This distinguishes it from sibling tools like list_expenses or get_member_detail, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as list_expenses or get_member_detail. Usage is only implied by the word 'summary', and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_expensesA
Lista los movimientos de un tricount (más recientes primero), con filtros opcionales.
Args: tricount: link o key del tricount. paid_by: solo los que pagó este miembro. involving: solo los que incluyen a este miembro en el reparto. search: texto a buscar en la descripción o categoría. date_from: fecha mínima (YYYY-MM-DD), inclusive. date_to: fecha máxima (YYYY-MM-DD), inclusive. include_reimbursements: incluir reembolsos entre miembros. limit: máximo de resultados.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | ||
| date_to | No | ||
| paid_by | No | ||
| tricount | No | ||
| date_from | No | ||
| involving | No | ||
| include_reimbursements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses ordering, inclusivity of date filters, and the meaning of each filter, but omits permissions, rate limits, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then uses a compact Args list. Every line earns its place given the parameter count and lack of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 8 optional parameters and no annotations or output schema, the description covers purpose and parameter meanings well but does not describe the return structure or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains all 8 parameters in detail, including accepted formats (YYYY-MM-DD) and filter semantics, adding substantial meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lista') and resource ('movimientos de un tricount') and ordering ('más recientes primero'). It doesn't explicitly name alternatives (e.g., get_tricount_summary) to differentiate, so it's clear but not sibling-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining filters and scope, but offers no explicit when-to-use or when-not-to-use guidance, nor does it point to alternative tools like get_tricount_summary for aggregated views.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
connect_tricount - First observed
create_expense - First observed
create_reimbursement - First observed
delete_entry - First observed
get_member_detail - First observed
get_tricount_summary - First observed
list_expenses
TDQS
Scored across 7 tools
Each tool targets a clearly distinct operation: connect validates access, summary/member/list provide different read views, and create/delete handle writes. The overlap between get_tricount_summary and get_member_detail is resolved by granularity, so an agent can reliably select the right tool.
All tool names use a consistent snake_case verb_noun pattern: connect_tricount, get_tricount_summary, get_member_detail, list_expenses, create_expense, create_reimbursement, delete_entry. The verb 'connect' is a minor variation but still fits the predictable convention.
Seven tools are well-scoped for a Tricount expense-sharing client. The set covers connection, summaries, member detail, expense listing, and write operations without unnecessary bloat.
Core read and write workflows are covered, including creation and deletion of expenses and reimbursements. However, there is no update/edit operation for existing entries, which is a minor but noticeable gap for lifecycle coverage.
Maintenance
Related MCP Connectors
Split bills from your AI: read bills & balances, create equal splits, request settlements.
- TriphetuOAuthcom.triphetu
Plan group trips with your AI: itineraries, checklists, shopping, expenses and who owes whom.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Personal finance ledger for AI agents — query spending, track bills, forecast cash flow.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Splitwise expenses with atomic duplicate prevention, smart fuzzy matching, and support for flexible split ratios between two people.MIT
- FlicenseAqualityDmaintenanceConnects CashChat financial data to AI assistants, enabling users to manage transactions, view spending summaries, and track category breakdowns through natural language. It supports both local stdio and remote URL-based connections with secure OAuth 2.0 authentication.8-
- AlicenseAqualityBmaintenanceEnables AI agents to manage Splitwise expenses through natural language, including reading balances, splitting costs, and handling authentication and rate limits automatically.7MIT