get_finance_metrics
Calls GET /api/finance/metrics as the signed-in person · REST reference
Everything /summary reports except currency, plus a six-month revenue trend
Every field GET /api/finance/summary returns except currency, computed from the same aggregation over the same set (reversals excluded). Money is integer CENTS. availableBalance and totalAllocations are BOTH the voucher-pool total: the same number under two names, and neither reads the actual VOUCHER_POOL Account balance, so neither reflects money already spent on vouchers. The monthly trend buckets donations by createdAt over the trailing six calendar months including the current one, with no synthetic values. Unlike the totals, the buckets INCLUDE DISPUTED and REFUNDED gifts. month is a short English name ("Jan") with no year, so a 6-month window spanning a year boundary repeats no label but carries no year either. ITS 500 BODY IS NOT THE CANON ERROR SHAPE: it carries a second key, message, a fixed string alongside error.
Arguments
This tool takes no arguments.
Example call
A client sends this over the MCP session; Claude and other agents build it for you. The values are placeholders — the shape is real.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_finance_metrics",
"arguments": {}
}
}Result
On success (HTTP 200) the tool returns one text item holding the API's JSON, pretty-printed.
Live metrics and the six-month trend.
{
"availableBalance": 1,
"donationCount": 1,
"monthlyRevenue": [
{
"allocations": 1,
"amount": 1,
"month": "string"
}
],
"operationsTotal": 1,
"totalAllocations": 1,
"totalDonations": 1,
"utilizationRate": 1,
"voucherPoolTotal": 1,
"lastUpdated": "2026-01-15T12:00:00Z",
"operationsPercent": 1,
"voucherEquivalents": 1,
"voucherPoolPercent": 1,
"voucherUnitValue": 1
}Fields
| Field | Type | Description |
|---|---|---|
availableBalance | integer | CENTS. Identical to voucherPoolTotal; not the Account balance. |
donationCount | integer | |
lastUpdated | string (date-time) | ISO-8601, minted at request time. |
monthlyRevenue | array of object | Six buckets, oldest first. |
monthlyRevenue[].allocations | integer | Voucher-pool credit in that month, in CENTS. |
monthlyRevenue[].amount | integer | Gross gifts in that month, in CENTS. |
monthlyRevenue[].month | string | Short English month name, no year. |
operationsPercent | integer | NOT money — whole percent. |
operationsTotal | integer | CENTS. |
totalAllocations | integer | CENTS. Also identical to voucherPoolTotal. |
totalDonations | integer | CENTS. |
utilizationRate | number | NOT money — pool / gross as a fraction 0-1, 2dp. 0 when there are no donations. |
voucherEquivalents | number | NOT money — fractional voucher count, 2dp. |
voucherPoolPercent | integer | NOT money — whole percent. |
voucherPoolTotal | integer | CENTS. |
voucherUnitValue | integer | CENTS. |
When it fails
A failed call returns isError: true with the API's message as text.
403Authenticated, but the caller holds none of the required permissions.
What the model is shown
This is the tool exactly as the server lists it in tools/list. The description starts with the REST call it makes.
{
"name": "get_finance_metrics",
"description": "GET /api/finance/metrics — Every field `GET /api/finance/summary` returns except `currency`, computed from the same aggregation over the same set (reversals excluded). Money is integer CENTS. `availableBalance` and `totalAllocations` are BOTH the voucher-pool total: the same number under two names, and neither reads the actual `VOUCHER_POOL` Account balance, so neither reflects money already spent on vouchers. The monthly trend buckets donations by `createdAt` over the trailing six calendar months including the current one, with no synthetic values. Unlike the totals, the buckets INCLUDE DISPUTED and REFUNDED gifts. `month` is a short English name (\"Jan\") with no year, so a 6-month window spanning a year boundary repeats no label but carries no year either. ITS 500 BODY IS NOT THE CANON ERROR SHAPE: it carries a second key, `message`, a fixed string alongside `error`.",
"inputSchema": {
"type": "object",
"properties": {}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false
}
}