MCP tools: Budgeting

Read the budget status of all projects, retainers and the burn-rate forecast, and maintain budgets, expenses and member rates.

Prerequisites
  • Budgeting module enabled.
  • For write and delete tools the Admin or Owner role (create_expense only needs Member).

list_budget_overview

Lists all projects with their budget status as a traffic light: ok, warning (from 80%), over_budget (from 100%), no_cap (budget without a cap) or no_budget. Includes consumed hours and – for admins and owners only – budget amount and consumed amount (null for others). Draft budgets are ignored; only billable time entries count. Requirements: role Viewer or higher, key scope "read" or higher, module "Budgeting" enabled. This tool takes no parameters.

get_project_budget

Returns a project's budget including consumed hours and – for admins and owners only – consumed amount. Returns null if the project has no budget. Requirements: role Viewer or higher, key scope "read" or higher, module "Budgeting" enabled.

projectId
Required · string — ID of the project.

list_retainers

Lists all retainer budgets with period-aware consumption: when reset monthly, only consumption since periodStart counts; nextResetAt gives the next reset time. Amounts for admins and owners only. Requirements: role Viewer or higher, key scope "read" or higher, module "Budgeting" enabled. This tool takes no parameters.

get_budget_forecast

Burn-rate forecast per project (weekly consumption over the last four weeks, trend up/down/stable/no_data, weeks to exhaustion, expected exhaustion date, weekly history of the last eight weeks) plus an organization-wide capacity summary (members, weekly hours, actual hours, utilization). Monetary fields for admins and owners only. Requires at least the Member role. Requirements: role Member or higher, key scope "read" or higher, module "Budgeting" enabled. This tool takes no parameters.

list_expenses

Lists expenses of the organization, by date descending; optionally for one project. Result: { expenses: [...] }. Requires at least the Member role. Requirements: role Member or higher, key scope "read" or higher, module "Budgeting" enabled.

projectId
Optional · string — Only expenses of this project.
limit
Optional · number — Maximum number of results (default 50, max 200).

list_member_rates

Lists all members with their current bill rate (billRate), role label and currency. The internal cost rate (costRate) is visible to admins and owners only. Requirements: role Viewer or higher, key scope "read" or higher, module "Budgeting" enabled. This tool takes no parameters.

create_budget

Creates a project budget; it is active immediately. Admin/owner only. The tool itself does not check whether the project already has a budget. Requirements: role Admin or higher, key scope "write" or higher, module "Budgeting" enabled.

projectId
Required · string — ID of the project the budget applies to.
budgetType
Required · string · fixed_fee | fixed_hours | time_and_materials | non_billable | retainer — Budget type: fixed_fee, fixed_hours, time_and_materials, non_billable or retainer.
totalAmount
Optional · number — Budget cap in cents (500000 = EUR 5,000).
totalHours
Optional · number — Hour cap of the budget (e.g. 200).
currency
Optional · string · Default: EUR — Currency code. Default: EUR.
billRateOverride
Optional · number — Overrides the bill rate for this budget, in cents per hour.
resetMonthly
Optional · boolean — Resets the consumption counter monthly (for retainers).

update_budget

Updates budget fields; only the fields you send are changed. Admin/owner only. Requirements: role Admin or higher, key scope "write" or higher, module "Budgeting" enabled.

id
Required · string — ID of the budget.
budgetType
Optional · string · fixed_fee | fixed_hours | time_and_materials | non_billable | retainer — Budget type: fixed_fee, fixed_hours, time_and_materials, non_billable or retainer.
totalAmount
Optional · number — Budget cap in cents (500000 = EUR 5,000).
totalHours
Optional · number — Hour cap of the budget (e.g. 200).
currency
Optional · string — Currency code. Default: EUR.
billRateOverride
Optional · number — Overrides the bill rate for this budget, in cents per hour.
resetMonthly
Optional · boolean — Resets the consumption counter monthly (for retainers).
status
Optional · string · draft | active | closed — New budget status.

activate_budget

Moves a draft budget to active: it sets periodStart to now and stores the consumption so far (hours and amount) as a baseline snapshot. Admin/owner only; a budget that is not a draft returns an error. Requirements: role Admin or higher, key scope "write" or higher, module "Budgeting" enabled.

id
Required · string — ID of the budget.

create_expense

Logs an expense in the organization. Description and amount are required; without a date today is used, and the expense is billable by default. Requirements: role Member or higher, key scope "write" or higher, module "Budgeting" enabled.

description
Required · string — Description of the expense.
amount
Required · number — Amount in cents (e.g. 5000 = 50 EUR).
projectId
Optional · string — Optional project link.
billable
Optional · boolean · Default: true — Whether the expense can be billed on. Default: true.
markupPercent
Optional · number · Default: 0 — Markup in percent when billing on (default: 0).
date
Optional · string — Expense date (YYYY-MM-DD). Default: today.

set_member_rate

Sets or updates a team member's bill rate (and optionally cost rate); an existing entry of the organization is overwritten and effectiveFrom is set to now. Fields you do not send (role label, cost rate, bill rate) are cleared, so always send every value you want to keep. Admin/owner only. Requirements: role Admin or higher, key scope "write" or higher, module "Budgeting" enabled.

supabaseId
Required · string — Supabase user ID of the member (field supabaseUserId from list_members or supabaseId from list_member_rates).
billRate
Optional · number — Bill rate in cents per hour (e.g. 15000 = 150 EUR/h).
costRate
Optional · number — Internal cost rate in cents per hour (visible to admins only).
roleLabel
Optional · string — Role label, e.g. "Senior Developer".
currency
Optional · string · Default: EUR — Currency code. Default: EUR.

delete_budget

Permanently deletes a budget. Admin/owner only; requires a key with the delete scope. Requirements: role Admin or higher, key scope "delete" or higher, module "Budgeting" enabled.

id
Required · string — ID of the budget.

delete_expense

Permanently deletes an expense. Admin/owner only; requires a key with the delete scope. Requirements: role Admin or higher, key scope "delete" or higher, module "Budgeting" enabled.

id
Required · string — ID of the expense.

Common pitfalls

  • Amounts for admins only

    Monetary amounts and cost rates are visible to admin and owner only; other roles get null but still see hours and percentages.

  • Amounts in cents

    totalAmount, amount, billRate, costRate and billRateOverride are given in cents or cents per hour.

  • set_member_rate overwrites

    Fields you do not send (role label, cost rate, bill rate) are cleared. Always send every value you want to keep.

  • No duplicate check in create_budget

    The tool does not check whether the project already has a budget. Check first with get_project_budget.

Keep reading

Still have a question or a problem?

Visit support

Last reviewed on 2026-09-26