Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Frihet-io/frihet-mcp --skill expenses-and-vendorsgit clone --depth 1 https://github.com/Frihet-io/frihet-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/frihet-io/frihet-mcp/expenses-and-vendors)<a href="https://agentmods.dev/skills/frihet-io/frihet-mcp/expenses-and-vendors"><img src="https://agentmods.dev/badge/skills/frihet-io/frihet-mcp/expenses-and-vendors/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/frihet-io/frihet-mcp/expenses-and-vendors"><img src="https://agentmods.dev/badge/skills/frihet-io/frihet-mcp/expenses-and-vendors.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00086 | $0.01672 |
| Opus 5.5 | $0.00034 | $0.00669 |
| Sonnet 5.5 | $0.00017 | $0.00334 |
| Haiku 4.5 | $0.00009 | $0.00167 |
Grade A, and why
expenses-and-vendors scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 74 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Expenses & Vendors (expenses-and-vendors)
Respond in the user's language (English or Spanish). Keep expense proposals and accounting questions distinct from authorized changes in Frihet.
Supported tools in this workflow
- Expenses (read-only):
list_expenses,get_expense - Expenses (write, requires
confirm: true):create_expense,update_expense - Vendors (read-only):
list_vendors,get_vendor - Vendors (write, requires
confirm: true):create_vendor,update_vendor
1. Reviewing expenses and vendors
- Expense queries:
- Call
list_expenseswith optional filters (from,to,category,vendorId,limit,offset,after). - Call
get_expense(id) when the user needs full detail on a specific expense (including storedpaidDate,taxDeductible,vendor, andvendorId).
- Call
- Vendor queries:
- Call
list_vendors(limit,offset,after) andget_vendor(id) to inspect supplier records (id,name,email,phone). - Dedicated government-identifier fields (NIF/CIF/VAT) and precise street addresses are intentionally omitted from the reviewed vendor DTOs.
- Call
- Pagination truth (exploratory single-page default vs. exhaustive requests):
- Always check
total,limit,offset, andnextCursoronlist_expensesandlist_vendors. - Never present a single page as the complete set of expenses or vendors when
nextCursoris present ortotal > data.length. For general browsing, return the first page immediately and state clearly that the response is a partial page (e.g.,Showing 20 of 65 expenses); when the user explicitly requests all records, a full sort, or an exact sum across all pages, paginate usingafter(nextCursor) oroffsetuntil all pages are retrieved (or until a clear safety limit is reached, disclosing the exact coverage).
- Always check
2. Recording a new expense (create_expense)
- Required inputs & zero-invention rule:
create_expenserequires four explicit business fields plus confirmation:description(non-empty string)amount(positive number, in the schema's monetary unit)date(YYYY-MM-DD— determines the expense's accounting and future tax-report period)taxDeductible(boolean— records an explicit internal tax-deductible classification without filing any return)confirm: true
- Optional fields:
category,vendor(supplier name). - Never invent
description,amount,date, ortaxDeductible. Do not assume an expense is tax-deductible (taxDeductible: true) or non-deductible (false) by default, and do not guess the expense date or amount if the user did not state them. If any ofdescription,amount,date, ortaxDeductibleis missing, do not calllist_vendors,list_expenses, orget_business_contextfirst—ask the user directly for only the specific required fields that are actually missing (for example, if the user already provideddateandtaxDeductiblebut omittedamountordescription, ask only for the missingamount/descriptionand confirmation without re-asking fordateortaxDeductible) before callingcreate_expense.
- Authorization & lasting/external effects disclosure:
- Before executing an unauthorized
create_expense, disclose:- The
dateselects the accounting and future tax-report period (no tax return is filed, and the connector does not mark the expense paid). - When
vendoris provided and no exact vendor match exists, Frihet may create and link the vendor in a separate backend step that can remain even if the subsequent expense write fails. create_expensecan deliverexpense.createdevents to active owner-configured webhooks, notify eligible workspace admins or accountants in-app and via Novu, and award first-use referral activation credits.
- The
- Minimum necessary calls: Make the minimum calls needed to complete the user's task. When the user's prompt already supplies
description,amount,date, and an explicittaxDeductiblechoice along with authorization to record the expense, callcreate_expensewithconfirm: truedirectly without asking a second confirmation question or performing redundant pre/post reads, unless a lookup (list_vendors/get_expense) is needed to disambiguate an incomplete input, verify an uncertain write outcome, or satisfy an explicit verification request.
- Before executing an unauthorized
- Post-creation reporting:
- Report the new
id,description,amount,date,taxDeductible,category/vendor/vendorId(when stored), andexternalEffects. Do not claim the expense was paid, reimbursed, or filed with a tax authority.
- Report the new
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 74 lines · 86 tokens per session scan A c468bb7754e1
expenses-and-vendors is a skill published in the GitHub repository Frihet-io/frihet-mcp (12 stars, last pushed today), licensed MIT. It adds 86 tokens to every session and 1,672 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-28.
Other skills, from other repositories
escalation
Escalate a disputed refund to the billing lead.
expense-report
Generate a detailed expense breakdown by category for a given period. Use when the user asks for an expense report, spending summary, Ausgabenübersicht, cost analysis, or wants to understand where their money is going.
refunds
Process customer refunds.
create-invoice
Create and optionally send a new invoice to a client. Use when the user wants to invoice someone, bill a client, or create a new Rechnung or faktura.
monthly-reconciliation
Perform a complete monthly financial reconciliation - review all transactions, match invoices, check outstanding payments, and prepare for tax filing. Use when the user wants to close the month, do monthly bookkeeping, or perform a Monatsabschluss (zamknięcie miesiąca).
corporate-tax-registration
Prepare the corporate tax registration (Fragebogen zur steuerlichen Erfassung for a GmbH/UG) through a guided chat. Use when a newly founded GmbH/UG needs its Steuernummer, the user asks what to do after the notary appointment, or wants to register the company with the Finanzamt. Final submission happens in the Norman…