{"name":"io.github.Thourum/billy-mcp","slug":"thourum-billy-mcp","title":null,"description":"Billy (billy.dk) accounting: invoices, journal entries, trial balance, with write protection.","url":"https://mcp.market/server/thourum-billy-mcp","rating":null,"grade":"B","score":78,"certified":false,"status":"active","category":"finance","tags":["finance"],"presence":{"score":21,"stars":1,"forks":0,"downloads_week":42,"last_push_at":"2026-07-10T01:24:18.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Thourum/billy-mcp","website":null,"version":"0.3.2","remotes":[],"packages":[{"registryType":"npm","identifier":"billy-mcp","version":"0.3.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"Billy API access token (create at mit.billy.dk -> Settings -> Access tokens)","isRequired":true,"format":"string","isSecret":true,"name":"BILLY_ACCESS_TOKEN"},{"description":"Write protection: read-only, confirm (default, requires elicitation-capable host), or full","format":"string","name":"BILLY_WRITE_MODE"},{"description":"Billy organization ID (auto-resolved when the token maps to a single company)","format":"string","name":"BILLY_ORGANIZATION_ID"},{"description":"Response language: en_US, da_DK, fr_FR, nl_NL, or de_DE","format":"string","name":"BILLY_LOCALE"}]}],"tools":[{"name":"approve_invoice","description":"Approve a draft Billy invoice (draft -> approved is the only allowed state change). Approval books the invoice; it cannot be reverted to draft.","write_action":false,"price_micros":0,"input_schema":null},{"name":"attach_file","description":"Attach an uploaded file to a Billy record (daybook transaction, invoice, or bill). Get the fileId from upload_file or list_files. Example: attach a receipt to journal entry #67 → ownerType 'daybookTransaction', ownerId '<transaction id>'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"batch_void_daybook_transactions","description":"Void many daybook transactions in one call with ONE user approval for the whole batch. Continues past individual failures and reports per-id results. Irreversible.","write_action":false,"price_micros":0,"input_schema":null},{"name":"billy_raw_request","description":"Escape hatch: call any Billy API v2 endpoint not covered by a dedicated tool. Examples: GET /currencies, /countries, /taxRates, /salesTaxReturns, /invoiceReminders, /files, /bankLines, /postings, /users. Write requests must wrap the body in a singular resource key, e.g. { \"daybookTransaction\": {...} }. WARNING: POST/PUT/DELETE have real accounting effects — prefer dedicated tools when available. N","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_bank_payment","description":"Record a bank payment in Billy to mark an invoice or bill as (partially) paid. Creates a bankPayment associated with the subject via 'invoice:<id>' or 'bill:<id>'. For invoices money is deposited (debit); for bills it is withdrawn (credit). WARNING: this posts a real accounting transaction.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_bill","description":"Create a supplier bill (expense) in Billy with one or more lines coded to expense accounts. Created as draft by default; pass state=approved to book it immediately.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_contact","description":"Create a new contact (customer or supplier) in Billy. Returns the created contact including its ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_contact_person","description":"Add a contact person (name and/or email) to an existing Billy contact. Emails are used to mail invoices.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_daybook_transaction","description":"Create a manual journal entry (daybook transaction) in Billy with balanced debit/credit lines. Validates balance client-side before asking for approval. Supports safe-retry deduplication via idempotencyKey. Created as draft by default; state=approved books it immediately.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_invoice","description":"Create an invoice (or credit note) in Billy with one or more lines. Created as draft by default; pass state=approved to approve immediately (approval assigns the invoice number and books it). Amounts are in the invoice currency.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_product","description":"Create a product in Billy, optionally with per-currency unit prices. Returns the created product including its ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_invoice","description":"Delete a Billy invoice (drafts only; approved invoices must be voided/credited instead). Returns meta.deletedRecords.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_script","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_account","description":"Get a single account from the Billy chart of accounts by ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_account_balances","description":"Account balances / trial balance computed from postings. Ask \"what is the balance of account 5211\" → accountNos: [\"5211\"]. Omit account filters for a full trial balance. Bound with minEntryDate/maxEntryDate for speed — the tool fetches and aggregates all matching postings server-side.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_bill","description":"Get a single Billy bill by ID, including its lines, balance and paid status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_contact","description":"Get a single Billy contact by its ID, including full address and settings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_invoice","description":"Get a single Billy invoice by ID, including its lines, balance and paid status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_organization","description":"Get the Billy organization (company) details: name, base currency, VAT settings, default payment terms, fiscal year, invoice numbering. Call this first to learn the organization ID and base currency used by other tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_product","description":"Get a single Billy product by ID, plus its per-currency prices.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_accounts","description":"List the chart of accounts in Billy. Use this to find account IDs for bill lines, product revenue accounts, and bank accounts for payments (look for isPaymentEnabled/isBankAccount).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_attachments","description":"List attachments (file↔record links). Filter by owner to see what's attached to a specific record; ownerReference is applied client-side within the page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_balance_modifiers","description":"List balance modifiers (payment associations) in Billy. Filter by subjectReference like 'invoice:<id>' or 'bill:<id>' to see which payments settled a specific invoice or bill. NOTE: subjectReference is not documented server-side; it is also enforced client-side within the fetched page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_bank_line_matches","description":"List bank line matches (bank reconciliation groupings). isApproved filter applied client-side within the page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_bank_lines","description":"List imported bank lines. Date and matched filters are applied client-side within the fetched page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_bank_payments","description":"List bank payments recorded in Billy. Useful to review what payments exist for reconciliation. NOTE: Billy only supports organizationId server-side for this endpoint; contactId/cashAccountId/date filters are applied client-side within the fetched page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_bills","description":"List supplier bills (expenses) in Billy with filters for supplier, state, paid status, date range and free-text search.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_contact_persons","description":"List contact persons (names/emails used for sending invoices) belonging to a Billy contact.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_contacts","description":"List contacts (customers and suppliers) in Billy. Supports free-text search and filtering. Use this to find a contact ID before creating invoices or bills.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_daybook_transactions","description":"List daybook transactions (manual journal entries) in Billy, filterable by state and entry date range.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_daybooks","description":"List daybooks in Billy. Find the daybook ID used for manual journal entries.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_files","description":"List files uploaded to Billy (receipts, invoices PDFs, etc.). Files are append-only via the API.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_invoices","description":"List invoices in Billy with filters for customer, state, date range and free-text search. Returns invoices plus meta.paging.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_postings","description":"List ledger postings (individual debit/credit entries). For balances/aggregates use get_account_balances instead. Date/void/text filters are applied client-side within the fetched page — narrow with accountId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_products","description":"List products in Billy. Use this to find a product ID before creating invoice lines. Supports free-text search.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_transactions","description":"List booked transactions. transactionNo/voucherNo filters are applied CLIENT-SIDE (Billy silently ignores them as query params) by scanning up to 5000 records — bound with dates when possible.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_contact","description":"Update an existing Billy contact. Only provided fields are changed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_product","description":"Update an existing Billy product. Only provided fields are changed. Providing prices replaces all existing prices.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_file","description":"Upload a local file (pdf/jpg/jpeg/png/gif ONLY — Billy rejects other types with a 422) to Billy and get its file ID. Files are append-only: they cannot be deleted or modified via the API afterwards. Use attach_file to link the uploaded file to a record.","write_action":true,"price_micros":0,"input_schema":null},{"name":"void_daybook_transaction","description":"Void a daybook transaction (journal entry) in Billy. Irreversible — voided entries cannot be reinstated.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":78,"grade":"B","scanned_at":"2026-09-26T05:14:16.175Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:14:16.222Z","components":{"code":{"score":25,"max":25,"notes":["18 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 78 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"billy-mcp","version":"0.3.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-07-10T01:24:53.347Z","repositoryUrl":"git+https://github.com/thourum/billy-mcp.git","weeklyDownloads":42}],"repo":{"found":true,"owner":"Thourum","repo":"billy-mcp","archived":false,"pushedAt":"2026-07-10T01:24:18Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/12977004?v=4","ownerCreatedAt":"2015-06-20T10:11:02Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/12977004?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":42,"license":"MIT","lastPushAt":"2026-07-10T01:24:18.000Z","score":21}}}},"grade_history":[],"reviews":[]}