finledger
FinLedger
세 가지 조회 영역을 가진 로컬 금융 원장이며, 에이전트가 이를 질의할 수 있도록 MCP 서버를 제공합니다:
expenses: 지출 계좌. 동료 상환 내역과 대사됩니다.
investments: 증권사 잔고, 보유 종목, 거래 내역
income: 급여(총액, 공제액, 실수령액)
지출과 투자는 저장소만 공유하며 그 외에는 공유하는 것이 없습니다. 계정에는 명시적인 domain이 있으며 모든 지출 쿼리는 이를 통해 조인되므로, 주식 매수 건이 상환 매처에 도달할 수 없습니다.
매처는 규칙 우선(rules-first) 방식입니다. 확신이 없으면 기권합니다. 매치가 순 지출을 줄이려면 사람이나 에이전트의 확인이 먼저 필요합니다.
실제 거래, 급여 명세서, API 키는 사용자 머신에만 보관됩니다 (~/.finledger/ledger.db, .env). 이 저장소는 코드와 합성(synthetic) 평가 집합만 제공합니다.
설치
Python 3.10+가 필요합니다. 원장, 매처, MCP 루프, 평가 하네스는 표준 라이브러리로 구현되어 있습니다. pypdf는 선택 사항이며 급여 명세서 PDF를 가져올 때만 필요합니다.
pip install -e .Related MCP server: notion-household-finance-mcp
MCP 서버
python3 -m finledger.mcp_server --db ~/.finledger/ledger.db18개 도구가 expenses_*, investments_*, income_* 네임스페이스로 제공되며, savings_rate, accounts, sync, reconcile가 추가로 있습니다.
Cursor 예시 (~/.cursor/mcp.json):
{
"mcpServers": {
"finledger": {
"command": "python3",
"args": ["-m", "finledger.mcp_server"]
}
}
}기본 원장 경로는 ~/.finledger/ledger.db입니다.
CLI
finledger sync
finledger reconcile
finledger review
finledger servefinledger serve는 :8770에서 로컬 데스크를 엽니다. macOS에서는 scripts/Expense Desk.command를 더블클릭할 수도 있습니다.
선택적 실시간 소스 (자격 증명은 .env에 넣고 절대 커밋하지 마세요):
소스 | 방법 |
shim.finance (카드 + Venmo) |
|
SnapTrade (체킹 계좌 + 증권 계좌) |
|
카드 CSV 백필 |
|
급여 명세서 PDF |
|
.env.example을 .env로 복사하세요.
공개 평가
공개된 골드 집합은 합성 데이터입니다. scripts/make_sample_data.py로 생성되며 data-sample/에 있습니다. 모든 거래 행은 synthetic: true로 표시됩니다. 이는 매처 동작(clean match, fan-in, bundling, peer-outbound parent, merchant credits, weak notes, cross-source twins)에 대한 커버리지 집합입니다. 익명화된 실제 데이터가 아닙니다.
python3 scripts/eval_public.py
# equivalent:
python3 -m reconcile.eval --matcher rules_v0이 저장소에서 재현할 수 있는 수치
data-sample/에서 rules_v0(윈도우 ±90일, 자동 매치 임계값 0.75)로 측정했습니다:
지표 | 값 |
평가 가능한 예시 | 22 ( |
exact-set 정확도 | 72.7% (16/22) |
edge P / R / F1 | 81.2% / 61.9% / 70.3% |
자동 매치 정밀도 | 85.7% (n=14; 12 tp, 2 fp) |
골드 매치에 대한 자동 매치 재현율 | 66.7% |
이 수치를 새로고침하려면 python3 scripts/eval_public.py를 다시 실행하세요. 샘플에 남아 있는 두 개의 false positive는 실제 매처 약점이며, 이모지 재현율 상향(recall-lift) 규칙이 과도하게 적용된 것도 포함됩니다.
이 저장소에 없는 것
개발 중에는 약 92개의 레이블이 지정된 예시로 구성된 비공개 골드 집합이 사용되었습니다. 여기에는 실제 인물과 실제 구매 내역이 포함되어 있어 공개되지 않았습니다. 샘플 수치를 해당 집합의 재현으로 취급하지 마십시오. 다른 말뭉치, 다른 규모, 다른 점수입니다.
이 저장소는 100% 자동 매치 정밀도를 주장하지 않습니다.
매처
reconcile/README.md를 참조하세요. 요약:
이름 | 동작 |
| ±$1 및 날짜 윈도우 내의 가장 가까운 청구. 없으면 비어 있음. |
| 금액 적합성 + 날짜 + 메모/가맹점 중복, 거부권 포함. 신뢰도 >= 0.75이면 자동 매치, 아니면 기권. |
|
|
샘플 말뭉치에 레이블을 지정하려면 python3 labeling/app.py를 사용하세요 (기본값은 data-sample/).
라이선스
MIT
Available Tools
18 toolsaccountsC
Every connected account, split by domain (expense vs investment).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for disclosing behavior. It only states content ('Every connected account...') without revealing whether the operation is read-only, what exactly is returned (e.g., names, balances), or if any side effects exist. This is insufficient for an agent to anticipate the tool's 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 description is a single, brief sentence with no wasted words. It is concise and the key qualifier ('split by domain') is placed at the end, which is acceptable given its brevity. It could arguably carry more information, but as written it is efficient.
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?
Given the absence of an output schema and annotations, the description should clarify what the agent receives when calling this tool. It only says 'Every connected account' without specifying the structure or content of the response (e.g., list of account names, balances). This is a notable gap for a tool that is likely an overview endpoint, leaving the agent to guess the return format.
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?
The tool has zero parameters, so there is nothing to explain beyond what the schema already conveys (empty properties). The description does not need to add parameter semantics, and the baseline for a parameter-less tool is appropriately high.
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 identifies the resource (connected accounts) and a distinguishing attribute (split by domain), but it lacks a clear verb stating what the tool does (e.g., lists, retrieves, summarizes). This makes the action vague, though it does suggest an overview role compared to the more specific sibling 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?
No guidance is given on when to use this tool versus the many specific siblings like expenses_spend or investments_balances. The description implies it provides a broad account view, but does not explicitly tell the agent when this is preferred over the domain-specific tools, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_notesA
Free-text goals, career plans, and constraints written by the user. These are statements of intent, not figures derived from the ledger — do not treat them as data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently discloses that the content is user-authored intent rather than derived figures. It also warns against treating the notes as data, preventing misuse. The behavior is simple (returns the notes), and the description sufficiently conveys the nature of what is returned.
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?
A single, dense sentence that front-loads the purpose ('Free-text goals, career plans, and constraints') and then immediately provides the crucial caveat about not treating them as data. No wasted words; every clause earns its place.
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 simple, parameterless tool with no output schema, the description is essentially complete. It tells the agent what the tool returns and how to interpret it. One could argue it could explicitly state 'returns the full set of notes,' but the implication is already strong. The warning about non-data usage adds important context.
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?
The tool has zero parameters, so the schema provides no constraint information. Per the rubric, the baseline for 0 parameters is 4, and the description adds no parameter-related meaning because there are none to describe. The description does not need to compensate for parameter coverage gaps.
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 clearly identifies the resource as user-written free-text notes about goals, career plans, and constraints. It distinguishes itself from the sibling financial tools by explicitly contrasting with ledger-derived figures, so an agent can tell it apart without opening schemas.
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 provides implicit usage guidance: these notes are qualitative intent, not quantitative data, so they should not be used for financial calculations. This effectively tells the agent when to use this tool (for context) and when not to (for numeric analysis). It stops short of naming alternatives but the sibling list makes the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_outstandingA
What is still owed to you. Only charges with at least one confirmed reimbursement are counted as shared; charges nobody has paid toward are excluded because the data cannot distinguish a shared cost from an ordinary purchase.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states that only charges with at least one confirmed reimbursement are counted, and transparently explains the data limitation that excludes unpaid charges. This provides concrete behavioral context beyond the tool name.
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 well-structured sentences: the first immediately states the purpose, and the second explains the filtering rule. Every clause adds value without redundancy or wasted words.
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 zero-parameter, no-output-schema tool, the description provides sufficient context: it tells the agent what data is returned (charges owed) and the rationale for exclusions. The only minor ambiguity is whether the output is a list or a sum, but the phrase 'charges' implies a list. An agent can confidently invoke this 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?
The tool has zero parameters, so the description correctly adds nothing about them. Per the rubric, a zero-parameter tool receives a baseline 4, and the description appropriately avoids unnecessary parameter-related information.
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 the tool lists charges still owed to the user, and clarifies the specific subset (shared charges with confirmed reimbursement) by explaining the exclusion of ordinary purchases. It gives a clear purpose but does not explicitly name sibling tools for other expense views.
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 when to use this tool (to see outstanding shared charges) and explains why certain charges are excluded due to data limitations. However, it does not mention alternative tools or provide explicit when-not-to-use scenarios beyond the exclusion logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_recurringD
Charges repeating on a roughly monthly cadence at a stable amount, with annualized cost.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether the tool is read-only, has side effects, or what the output format is. The only hint is that it involves 'annualized cost', but it never clarifies the tool's behavior or side effects.
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 description is a single sentence and concise in length, but it is not structured to convey the tool's function. It lacks an action verb and does not front-load the purpose. The sentence reads as a definition of recurring charges rather than a tool description, so it fails to be useful despite its brevity.
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?
Given no parameters and no output schema, the description is the only source of guidance. It is incomplete because it does not state what the tool returns or how an agent should invoke it. An agent has no idea what to expect from this tool, making it inadequate for even a simple call.
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?
The tool has zero parameters, so the empty input schema fully covers parameter requirements. Per the calibration baseline for zero parameters, a 4 is appropriate; the description adds no parameter information because none is needed.
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 lacks a verb and does not state what action the tool performs. It describes a category of charges ('Charges repeating...') rather than an operation such as 'list' or 'retrieve'. This is more than a tautology but still vague; an agent cannot tell whether the tool returns recurring expenses, creates them, or computes annualized costs.
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 siblings like expenses_spend, expenses_outstanding, or reconcile. No context, prerequisites, or exclusions are provided. The description gives no hint of how it differs from its peers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_resolveB
Record a decision on an inbound payment. Pass charge_ids to link reimbursements. Empty charge_ids = not a reimbursement. disposition=charge_missing when it is a repayment but the parent charge(s) are not in the ledger. Decisions survive re-runs.
| Name | Required | Description | Default |
|---|---|---|---|
| charge_ids | No | ||
| inbound_id | Yes | ||
| disposition | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions 'Decisions survive re-runs', which hints at idempotency or persistence, but it does not explain the side effects of recording a decision, whether it is reversible, what permissions are needed, or what the response looks like. For a write operation with no annotation coverage, this is a significant gap.
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 description is compact: three sentences, with the primary purpose in the first sentence. It front-loads the core action and then explains key parameter semantics. There is no fluff, and every sentence contributes. It could be slightly more structured, but it is efficient and clear.
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?
Given the simplicity of the tool (3 params, no nested objects) and no output schema, the description covers essential usage logic for the disposition and charge_ids. However, it leaves questions about return values, error handling, and the exact meaning of the 'linked' disposition. With no annotations and no output schema, an agent may need more context to call this correctly in all scenarios.
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 adds meaning to charge_ids ('link reimbursements', empty means not a reimbursement) and clarifies the disposition enum (specifically charge_missing). It does not explicitly describe 'linked' but the context implies it. The description provides meaningful semantic information beyond the bare schema definition, covering most parameters adequately.
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 ('Record a decision') and a specific resource ('an inbound payment'), which is clear and unambiguous. It also hints at the distinction from sibling tools by focusing on decisions and reimbursements, but it does not explicitly differentiate from alternatives like reconcile or expenses_review_queue. The purpose is clear enough for an agent to understand what the tool does, but not why to choose it over 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?
The description provides explicit guidance on parameter usage: 'Pass charge_ids to link reimbursements', 'Empty charge_ids = not a reimbursement', and 'disposition=charge_missing when it is a repayment but the parent charge(s) are not in the ledger.' This tells an agent when to set specific dispositions, which is valuable. However, it does not give guidance on when to use this tool versus alternatives (e.g., reconcile vs expenses_resolve). The usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_review_queueA
Inbound payments the matcher would not auto-match, best candidate first. These need a human or agent decision via expenses_resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations to rely on, so the description carries the full burden. It does not state whether this is a read-only operation, whether it requires any authentication, or what side effects (if any) exist. The phrasing 'inbound payments the matcher would not auto-match' implies a read/list operation, but this is not explicit. The description provides no behavioral details beyond the content, leaving the agent to guess about safety and effects.
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 sentences with zero waste. The first sentence states the tool's purpose and sorting, the second gives the immediate next action. All key information is front-loaded and no redundant details are present.
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?
The tool is simple (one optional parameter, no output schema), and the description provides the essential context: what the queue contains, how it's ordered, and what to do with the items. It does not describe the output structure, but that may be implied as a list of payments. Missing explicit read-only status is a minor gap but not critical for usage in a review context. Overall, the description covers the core needs despite omitting parameter details.
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?
The schema has a single parameter 'limit' with 0% description coverage and no description in the tool description. The description says nothing about 'limit'—its meaning, default, allowed values, or behavior. While 'limit' is a common term for pagination or result size, the tool description does not clarify it, and with no schema description the agent must infer. This is a gap given the description had room to explain it.
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 is specific: it identifies the tool as a queue of inbound payments that the matcher did not auto-match, sorted by best candidate. This clearly distinguishes it from the sibling expenses_resolve (the action tool) and other expense tools. The verb 'review' is implicit in 'queue' and the context is unambiguous.
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?
It explicitly states that these payments need a decision via expenses_resolve, telling the agent the intended follow-up action. This differentiates the tool from others and gives clear 'when to use' context. However, it does not explicitly discuss when NOT to use it (e.g., auto-matched payments are handled elsewhere), nor does it weigh alternatives like reconcile or expenses_spend. Still, the guidance is strong enough for a clear call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_runwayC
Spending-account balances plus trailing monthly net burn.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Trailing window, default 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the output concept (balances + net burn) but does not disclose any side effects, return format, or requirements such as authentication or data freshness. There's no indication of whether this is a read-only operation, which is a notable gap given the lack of annotations.
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 description is extremely concise—a single noun phrase with no wasted words. It front-loads the two key outputs. However, it is so terse that it relies entirely on the reader's prior knowledge of financial runway concepts, and the lack of a verb makes it less clear as an instruction.
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?
Given there is no output schema and no annotations, the description alone must explain what the tool returns and when to use it. It fails to clarify the meaning of 'runway' or how this differs from other expense tools. An agent cannot confidently determine the return format, the units of the burn, or whether 'spending-account' includes all cash accounts. It is under-specified for a tool with no required parameters and a single optional one.
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?
The schema documentation covers the 'months' parameter at 100% (it has a description and default value). The tool description adds no additional semantics beyond what the schema already provides, which matches the baseline score of 3. There is no extra context about how months affects the calculation or what values are appropriate.
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 identifies the resource as 'spending-account balances' and specifies the data type 'trailing monthly net burn', which distinguishes it from siblings like expenses_spend (which likely returns raw spending) and expenses_outstanding. However, it uses a noun phrase rather than an explicit verb like 'get' or 'calculate', leaving the action implied.
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 the many expense-related siblings. The description does not state that this aggregates balances and burn for runway analysis, nor does it contrast this with tools like expenses_spend or expenses_recurring. An agent would have to infer its purpose from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expenses_spendA
Spend in a window, grouped. Returns gross, reimbursed, and net. Net subtracts only CONFIRMED reimbursements — an unreviewed auto-match is a proposal, not a fact.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ISO date, inclusive. Defaults to today. | |
| start | No | ISO date, inclusive. Defaults to month start. | |
| group_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds a valuable nuance: net subtracts only CONFIRMED reimbursements, and unreviewed auto-matches are proposals, not facts. It also indicates a read-only nature by saying 'Returns...' but does not mention additional behaviors like pagination or performance. This is a meaningful disclosure for a query tool.
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 description is two crisp sentences. The first states the core purpose in five words, and the second adds a critical behavioral detail. There is no redundant wording, and the most important information is front-loaded.
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?
Given no output schema, the description explains the return values (gross, reimbursed, net) and the key nuance about confirmed reimbursements. It does not detail the output structure (e.g., array of groups) or expand on grouping, but for a simple query tool this is adequate. The sibling set is large, yet the description's focus on window+grouped is sufficient to disambiguate from most alternatives.
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?
The schema already describes start and end (ISO dates, inclusive) but leaves group_by undocumented. The description adds nothing beyond the schema; it mentions 'grouped' but does not explain the grouping options or their implications. With schema coverage at 67%, the description does not compensate for the missing group_by semantics, so a baseline of 3 is appropriate.
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 clearly states the tool reports spend over a time window, grouped, with gross, reimbursed, and net figures. It is specific enough to distinguish from siblings like expenses_recurring or expenses_outstanding, though it does not explicitly name an alternative. The verb 'spend' and the scope 'window, grouped' make the purpose unambiguous.
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 for grouped spend summaries over a date range, but it provides no exclusions or explicit alternatives. An agent might infer when to use it but is not told when not to use it or which sibling tool would be better for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
income_contributionsC
Payroll deductions year-to-date, each classified savings / cost / offset, plus employer contributions.
| Name | Required | Description | Default |
|---|---|---|---|
| year | 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 of behavioral disclosure. It only describes the content (deductions and classifications) but says nothing about behavior such as sorting, aggregation, default year handling, read-only nature, or any side effects. This is a significant gap for a tool with zero annotation coverage.
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 description is a single concise sentence with no fluff. It communicates the core idea efficiently. However, it omits critical details, so it's concise but under-specified, not a model of well-structured completeness.
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 tool with one optional parameter and no output schema, the description is insufficient. It doesn't clarify what 'year-to-date' means, how the optional year affects results, what the return format looks like, or any edge cases. An agent would likely need to trial-and-error to use it correctly.
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?
The only parameter, 'year', has zero schema description coverage. The tool description does not mention 'year' at all, so an agent cannot infer its purpose (e.g., filters by year, defaults to current year). The description fails to add any meaning beyond the schema's bare type definition.
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 the tool lists payroll deductions year-to-date with classifications and employer contributions. It is specific about the resource (payroll deductions) and the verb (lists). It partially distinguishes from siblings like income_summary or income_statements by focusing on deductions and contributions, but doesn't explicitly name alternatives, so it's not a 5.
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 guidance is provided on when to use this tool versus income_summary, income_statements, or other siblings. There is no mention of prerequisites, exclusions, or typical scenarios. The description implies it's about payroll deductions but lacks any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
income_statementsC
Individual pay statements in a window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ISO date, inclusive. Defaults to today. | |
| start | No | ISO date, inclusive. Defaults to month start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior itself. It only states 'Individual pay statements' without indicating read-only nature, result format, pagination, or any side effects. This is essentially no behavioral transparency, failing the minimal disclosure expected for an unannotated tool.
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 description is extremely short, but it is under-specified rather than concise. It lacks a verb and clear scope, making the brevity ineffective. Every sentence should earn its place; this one states the obvious but not enough.
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, no annotations, and only two optional parameters, the description still leaves critical ambiguities: what constitutes a 'pay statement', whether results are aggregated, and what the response looks like. An agent cannot fully determine the tool's behavior from this description.
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 100%: both parameters (start and end) have clear descriptions (ISO date, inclusive, defaults). The tool description adds no extra meaning beyond the schema, so the baseline score of 3 applies despite the thin description.
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 names the resource ('pay statements') and a timeframe ('in a window'), but it omits a clear verb (e.g., 'list', 'retrieve') and does not distinguish from sibling tools like income_summary. The phrase 'in a window' is vague without specifying the range semantics beyond what the parameters imply.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or scenarios where another tool (e.g., income_summary) would be more appropriate, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
income_summaryA
Year-to-date earnings from payroll. IMPORTANT: net_pay_ytd is only what reached a bank account; payroll_savings_ytd (401k/Roth/HSA/ESPP) also belongs to the user. Use disposable_ytd = net_pay + payroll_savings when judging whether income covers spending. imputed_offset_ytd is booked as both an earning and a deduction and nets to zero.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It discloses that imputed_offset_ytd nets to zero and explains the semantics of net_pay_ytd (only banked amount) and payroll_savings_ytd. This is useful and transparent about data meaning, but it does not state that the tool is read-only or mention any constraints/permissions, which is a gap given the lack of annotations.
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 description is efficiently written, with the core purpose front-loaded first, followed by critical caveats. Every sentence carries meaningful information—no filler. The structure guides the reader from the general function to the specific calculation and the offset nuance.
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?
While it explains key fields and the disposable calculation, it omits the meaning of the 'year' parameter and does not explicitly describe the full set of returned fields (though they are partially listed). It also lacks any comparison to sibling tools, leaving the agent uncertain about when to choose this over income_statements or income_contributions. Partial completeness only.
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?
The single parameter 'year' is completely undocumented in the schema (coverage 0%). The description does not mention 'year' at all, though the phrase 'year-to-date' might imply its purpose. This is insufficient: the agent is left to infer that 'year' filters the summary, and the description fails to compensate for the schema 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 ('earnings from payroll') and the resource ('income_summary'). It clearly indicates the tool provides a year-to-date summary, and the mention of specific fields (net_pay_ytd, payroll_savings_ytd, imputed_offset_ytd) further distinguishes it from sibling tools like income_statements or income_contributions.
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?
Provides explicit guidance for using the output ('Use disposable_ytd = net_pay + payroll_savings when judging whether income covers spending'), which tells the agent how to interpret the data. However, it does not explicitly mention alternative tools or conditions for preferring this over income_statements or income_contributions, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investments_balancesB
Latest balance per investment account, plus the total.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the output content, not whether the operation is read-only, the freshness of the data, or any error conditions. For a balance query, read-only behavior is implied but not explicit, and no other behavioral traits are disclosed.
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 description is a single, tightly-worded sentence that communicates the essential output without any waste. It is front-loaded with the core purpose and includes the total as a secondary element. Every word contributes to understanding.
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 simple, parameterless tool, the description is reasonably complete. It indicates the result is a per-account breakdown plus a total, which implies a structured response. However, it doesn't specify the return format (e.g., JSON object vs. array) or any nuances like sorting or currency, but those are minor gaps given the simplicity.
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?
The tool has zero parameters, so the schema is trivially covered. The baseline for 0 params is 4, and since the description doesn't need to explain parameters, there is no penalty. The description adds no parameter semantics because there are none to explain.
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 clearly states the tool returns 'latest balance per investment account, plus the total.' It specifies the resource (investment balances) and the output (per-account and total), which distinguishes it from sibling tools like investments_transactions or investments_holdings. However, it doesn't explicitly differentiate itself from investments_summary, which might also return balances, so it falls short of a 5.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention any conditions that would favor this over investments_summary or holdings, nor does it state any prerequisites or typical use cases. Agents are left to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investments_holdingsC
Current holdings, aggregated by ticker across accounts by default.
| Name | Required | Description | Default |
|---|---|---|---|
| by_symbol | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the aggregation behavior and 'by default' but does not disclose the effect of the 'by_symbol' parameter, whether the output is a list or summary, or any other side effects. This is minimal and does not bridge the gap left by missing annotations.
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 description is a single, concise sentence with no filler. It front-loads the core purpose and aggregation. However, its brevity sacrifices necessary detail, but for conciseness alone it is effective and well-structured.
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?
Given there is no output schema, no annotations, and a single parameter with no description, the tool description is insufficient for an agent to fully understand what to expect or how to use the parameter. It does not describe the return format (e.g., array of objects, fields), the effect of 'by_symbol', or differentiate clearly from sibling tools. This is a significant completeness gap.
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?
The sole parameter 'by_symbol' is a boolean with no schema description (0% coverage). The tool description does not explain what this parameter does or how it modifies the output. It only mentions 'by default', which is vague and does not clarify the parameter's role. Since schema coverage is zero and the description adds nothing, this is a critical 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 clearly indicates it provides current holdings, aggregated by ticker across accounts by default. It distinguishes from balances (account-level) and transactions (activity) implicitly, but does not explicitly name alternatives or contrast with sibling tools like investments_balances. The verb 'holdings' plus aggregation context is specific enough.
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. The phrase 'by default' hints at behavior but does not explain when to choose this over investments_balances or investments_summary. No exclusions or conditions are given, leaving the agent to infer usage from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investments_summaryB
Portfolio value plus what actually entered and left over a trailing window. BUY/SELL are excluded from cash figures — they move money within an account, not into or out of it.
| Name | Required | Description | Default |
|---|---|---|---|
| months | 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. It discloses that the result covers a trailing window and specifically that BUY/SELL are excluded from cash figures because they are internal transfers. This is useful, non-obvious behavioral context. It omits other potential behaviors (e.g., output format, defaults), but for a summary read tool this is reasonable.
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 sentences, no filler. The core purpose is front-loaded, and the crucial exclusion is explained clearly in the second sentence. Every word earns its place.
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?
Although the tool is simple (one optional parameter, no output schema), the description fails to explain the months parameter at all, which is essential for correct invocation. It also does not describe the return format or whether there are any edge cases. The description is insufficient for an agent to use the tool correctly without guessing.
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?
The only parameter, months, receives zero explanation in the description. The schema provides only a type of integer with no description, so an agent has no idea what 'months' does (period length? trailing window duration?). The description does not compensate for this 0% schema coverage, leaving the tool ambiguous to invoke.
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 clearly states what the tool reports: portfolio value and cash inflows/outflows over a trailing window. It also clarifies the exact scope by excluding BUY/SELL from cash figures. This is a specific and meaningful purpose, but it does not explicitly differentiate from sibling tools like investments_balances or investments_transactions, so it misses the top score.
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 when to use the tool (to see net cash movement and portfolio value) and explains a key exclusion (BUY/SELL). However, it gives no explicit guidance on when to prefer this over the many sibling investment tools, nor does it mention any conditions or alternatives. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investments_transactionsD
Investment activity in a window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ISO date, inclusive. Defaults to today. | |
| start | No | ISO date, inclusive. Defaults to month start. |
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 of disclosing behavior. It fails to mention even basic traits such as whether the tool returns a list, how results are ordered, whether partial date ranges matter, or if there are any limits. The phrase 'in a window' only hints at a date range, but no further behavior is described.
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 description is a single short sentence, which is technically concise, but it is under-specified rather than efficiently informative. The sentence wastes no words, yet it also fails to convey essential meaning, so it does not earn its place. It is too short to be useful.
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?
The tool has no annotations, no output schema, and a description that provides almost no context. For a tool that likely returns investment transactions, the description lacks critical details like the nature of the activity, the response format, pagination, or any distinctions from sibling tools. It is completely inadequate for an agent to understand or use the tool correctly.
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 100%—both 'start' and 'end' are documented with their defaults and inclusivity. The description adds no additional meaning beyond the schema, which already specifies date types and defaults. Therefore, a baseline score of 3 is appropriate.
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 'Investment activity in a window' is vague and does not clearly state what the tool does. While the name implies transactions, the description uses the ambiguous noun 'activity' without specifying that it lists transactions or what form the output takes. It does not distinguish itself from siblings like investments_balances, investments_holdings, or investments_summary, so an agent cannot tell what this tool uniquely provides.
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 its siblings. The description offers no conditions, exclusions, or alternatives. Given the many investment-related sibling tools, the absence of any routing information makes it impossible for an agent to choose this tool correctly based on context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcileB
Re-run the matcher over inbound payments. Confirmed decisions are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral information. It states that confirmed decisions are preserved, implying re-processing may alter unconfirmed ones, but it does not disclose whether the operation is destructive, what side effects occur, whether it requires specific permissions, or what the return value looks like. The description is insufficient for an agent to understand the full impact of invoking this tool.
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 description is two short sentences with no wasted words. The core action is front-loaded, and the constraint about preserved decisions is stated clearly. This is an exemplary level of conciseness for a tool with no parameters.
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 tool with no output schema and no annotations, the description should cover essential operational details. It only mentions the action and one behavioral constraint, leaving out crucial context such as what happens to non-confirmed payments, whether the operation is reversible, any prerequisites, or expected results. This incompleteness makes it difficult for an agent to call the tool with confidence.
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?
The tool has zero parameters, so the schema provides no meaningful information. The description doesn't need to explain parameters, but it also doesn't add any parameter-specific context. Given the 0-parameter baseline rule, a 4 is appropriate—the description is not lacking any necessary parameter semantics because there are none.
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 clearly states the action (re-run the matcher) and the object (inbound payments), and adds that confirmed decisions are preserved. This distinguishes it from typical expense/income tools, though it does not explicitly name a sibling alternative. The verb and resource are specific enough for an agent to understand the purpose.
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 any alternative. The description does not mention any conditions, prerequisites, or scenarios where reconciliation is appropriate, nor does it reference any sibling tools. This is a clear absence of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
savings_rateA
What share of earnings is being kept, combining payroll savings with what survives spending. Income is year-to-date and spend is a trailing window, so the ratio is an estimate — read the caveats array before quoting the number.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the ratio is an estimate due to mismatched time windows (YTD income vs trailing spend) and instructs reading the caveats array. This adequately conveys the estimation trait, though it doesn't list specific caveats.
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 sentences with no waste: the first defines the metric, the second captures the estimation nuance and directs attention to caveats. Front-loaded definition, though slightly more structuring around usage could improve scannability.
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 zero-parameter, no-annotation tool, the description effectively communicates purpose, estimation nature, and the caveats array. It does not specify return format or units, but the mention of caveats implies output structure. Complete enough for correct invocation.
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?
The tool accepts no parameters, so the description correctly adds nothing about parameter behavior. The baseline for zero-param tools is 4, and the description sufficiently explains the tool's computation without needing parameter details.
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 computation: 'share of earnings being kept' combining payroll savings and post-spending survival. It clearly distinguishes from sibling tools like income_summary or expenses_spend by focusing on the ratio, not raw amounts.
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 the tool is for estimating savings rate and explicitly warns to read caveats before quoting. It does not name alternatives or exclusions, but the context (zero parameters, focused purpose) makes when-to-use clear from its definition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
syncB
Pull every source into the store. Idempotent and additive; never deletes.
| Name | Required | Description | Default |
|---|---|---|---|
| card_csv_path | No | Optional Ramp-style CSV to backfill. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It states 'Idempotent and additive; never deletes,' which gives critical safety information. However, it doesn't mention potential side effects like network timeouts, data volume, or whether existing data is overwritten (though additive implies it isn't). This is adequate but not exhaustive.
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 description is exactly two sentences, front-loading the main purpose in the first sentence and key behavioral traits in the second. There is zero waste, and every word contributes to understanding the tool's function and safety.
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?
Given the tool's simplicity (one optional param, no output schema, no annotations), the description covers the core purpose and safety profile. However, it lacks any mention of when to invoke sync relative to other operations or what happens if the parameter is omitted. This is a noticeable gap that prevents full completeness.
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 100% because the only parameter (card_csv_path) is already described as 'Optional Ramp-style CSV to backfill.' The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
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 clearly states the primary action: 'Pull every source into the store.' This is a specific verb and resource, making the tool's purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like reconcile, though the phrasing is distinctive enough that an agent can infer its role.
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 guidance is provided on when to use this tool versus alternatives. The description doesn't mention any prerequisites, conditions, or exclusions. An agent is left to guess whether sync should be run before reconcile or other expense tools, which is a significant gap.
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.
18 tool updates
v0.1.0- First observed
accounts - First observed
context_notes - First observed
expenses_outstanding - First observed
expenses_recurring - First observed
expenses_resolve - First observed
expenses_review_queue - First observed
expenses_runway - First observed
expenses_spend - First observed
income_contributions - First observed
income_statements - First observed
income_summary - First observed
investments_balances - First observed
investments_holdings - First observed
investments_summary - First observed
investments_transactions - First observed
reconcile - First observed
savings_rate - First observed
sync
TDQS
Scored across 18 tools
Each tool has a clearly defined role within its domain: expenses, investments, income, savings, or general ledger management. The distinct prefixes (expenses_, investments_, income_) prevent cross-domain confusion, and within domains, tools like spend vs. outstanding vs. runway vs. review_queue are semantically distinct. Even the less prefixed tools (reconcile, sync, accounts) are obviously separate from the financial queries.
The dominant pattern is domain-prefix + descriptive noun (e.g., expenses_spend, investments_balances, income_summary), which is highly consistent. However, a few tools like reconcile, sync, accounts, and savings_rate do not follow the prefix scheme, creating minor inconsistency. The syntax is all snake_case with no verb conjugations, so the deviation is not jarring.
Eighteen tools is on the higher end of typical MCP servers, but the breadth of the domain—expenses, investments, income, savings, notes, accounts, sync—justifies the count. Each tool addresses a specific financial question or action, and none feel redundant. The size is slightly above the ideal 3-15 range but well within the acceptable limit for a comprehensive financial ledger service.
The tool surface covers the core lifecycle of financial data aggregation: reading balances, transactions, and summaries, plus actions like reconciliation and decision resolution. There are minor gaps, such as no direct way to create or edit transactions or notes, but these are likely handled externally or intentionally read-only. The inclusion of sync and review queues ensures operational completeness for the stated purpose.
Maintenance
Related MCP Connectors
Personal finance ledger for AI agents — query spending, track bills, forecast cash flow.
Personal finance for your AI agent: money goals, a budget, and a weekly review of your accounts.
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with local Beancount accounting ledgers through structured tools for viewing accounts, balances, and transactions, as well as inserting/removing transactions and answering natural-language questions via BeanQuery. Provides deterministic, validated, and auditable financial data operations with offline-first functionality.1-
- AlicenseNot gradedqualityDmaintenanceProvides tools for querying and writing finance records in a Notion-backed household finance workspace, enabling management of budgets, expenses, savings, and debt through natural language.MIT
- AlicenseBqualityBmaintenanceEnables AI agents to manage personal finances with deterministic, grounded tools for cash-flow projection, drift detection, reconciliation, and Todoist integration. All figures trace back to a local SQLite database.55MIT
- FlicenseAqualityBmaintenanceEnables AI agents to create accounts, record balanced double-entry transactions, query balances, and reconcile accounts against a SQLite-backed ledger through four MCP tools.4-