Skip to main content
Glama
donation-log-mcp-server

donation-log-mcp-server

donation-log-mcp-server

A local MCP server for a tidy giving record: log donation drops with date, charity, item bags or dollars, your own condition notes, estimated-value education pointers (never tax advice), a "photos-kept-here" folder note, and a printable quarterly summary for your records binder.

  • JSON storage with path safety and auto-backup

  • CSV export for spreadsheets

  • No cloud. No accounts. Everything stays on this computer.

Made by Asdale Dynamics, LLC — beginner-friendly, plain-English tools. Distinct from receipt-bucket-mcp-server, which is for business receipts; this one is for personal giving records.

Education only — never tax advice. We never calculate a deduction, never claim a tax effect, and never replace a tax professional. See IRS Pub 526 / Pub 561 / Pub 1771 and a qualified tax professional with questions.


Tools the server offers

Tool

What it does

log_donation

Log one drop: date, charity, kind (items or dollars), bags/boxes/individual items or dollars, your own condition notes, personal notes, optional educational value estimate

set_photos_folder / get_photos_folder_note

Save/read a reminder note of where your donation photos live locally (photos are never stored or sent anywhere)

list_donations

List drops, optionally filtered by year and/or quarter (1-4)

quarterly_summary

Printable plain-text summary with totals for your records binder

totals

Quick numeric totals (counts, bags, boxes, items, dollars, value-estimate totals)

export_csv

Export all drops to a CSV inside the data folder (path-safety enforced)

value_education_pointer

Show the plain-English value-education reminder

Related MCP server: mileage-log

Storage layout

data/
  donations.json        <- your record (the only file that matters; copy it to back it up)
  backups/              <- auto-backups of donations.json (kept, oldest trimmed)
  exports/              <- your CSV exports land here (if you ask for them)
  • Path safety: export paths must be relative, stay inside data/, and end in .csv. Absolute paths (/tmp/...) and .. escapes are rejected.

  • Auto-backup: every save snapshots the previous donations.json into data/backups/; the newest 10 backups are kept.


Smoke-test guide (5 minutes, no account needed)

Prereq: Node.js 18.17+ (Node 20 tested). No npm packages required — zero dependencies.

1. Run the offline unit tests

npm test

Expected: all tests pass (totals, quarters, path safety, CSV, backups).

2. Handshake smoke test (initialize + tools/list)

Paste this whole block into your terminal:

{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05" } }
{ "jsonrpc": "2.0", "method": "notifications/initialized" }
{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "log_donation", "arguments": { "date": "2026-02-14", "charity": "Neighborhood Food Pantry", "kind": "items", "items": { "bags": 2 }, "itemDescription": "Canned goods and pasta", "condition": "brand new, before buy", "notes": "drive-by drop on 2/14" } } }
{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "log_donation", "arguments": { "date": "2026-05-02", "charity": "Neighborhood Food Pantry", "kind": "dollars", "dollars": 25, "estimatedValue": 25 } } }
{ "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "set_photos_folder", "arguments": { "photosFolderNote": "~/Pictures/donation-photos-2026" } } }
{ "jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": { "name": "quarterly_summary", "arguments": { "year": 2026, "quarter": 1 } } }
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": { "name": "export_csv", "arguments": { "exportPath": "exports/test-export.csv" } } }

Run it:

node src/server.mjs

…and paste the lines, or in one go:

printf '%s\n' \
  '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05" } }' \
  '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }' \
  '{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "log_donation", "arguments": { "date": "2026-02-14", "charity": "Neighborhood Food Pantry", "kind": "items", "items": { "bags": 2 }, "condition": "brand new, before buy" } } }' \
  '{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "quarterly_summary", "arguments": { "year": 2026, "quarter": 1 } } }' \
  | node src/server.mjs

Expected: one JSON response line per request, including a printable summary with Bags of items : 2, the value-education reminder (never tax advice), and an data/exports/test-export.csv file you can open in any spreadsheet app.

3. Path-safety smoke test

This should fail politely (not write anywhere else):

printf '%s\n' \
  '{ "jsonrpc": "2.0", "id": 9, "method": "tools/call", "params": { "name": "export_csv", "arguments": { "exportPath": "../nope.csv" } } }' \
  | node src/server.mjs

Expected: an error result explaining the path must stay inside the data folder.

4. Hook it up to your MCP client

Add to your client's MCP config:

{
  "mcpServers": {
    "donation-log": {
      "command": "node",
      "args": ["<full-path-to-this-folder>/src/server.mjs"]
    }
  }
}

Optional: set DONATION_LOG_DATA_DIR (relative to the current directory) to choose where the data folder lives. It defaults to data/ next to the source.


Privacy

  • Nothing leaves this computer. No network calls at runtime; no telemetry.

  • No accounts, no API keys, no secrets. The value education is baked into the tool text.

  • Photos are never stored by this server — set_photos_folder saves only your note pointing at a folder you manage.

Not tax advice

This project is educational tooling. Estimated values are your own homework ("what a thrift-store item in this condition might sell for") written down for your records. For anything tax-related, see IRS publications mentioned above and talk to a qualified professional.

License

MIT — see LICENSE. © Copyright (c) 2026 Asdale Dynamics, LLC

More from Asdale Dynamics: dylanasdale.github.io — AI explained like a friend would: plain English, step by step, never condescending.

Available Tools

8 tools
export_csvExport to CSVA

Export every logged donation to a CSV file inside the data folder. Path-safety rules apply: relative paths only, must stay inside the data folder, must end with .csv.

NameRequiredDescriptionDefault
exportPathYesRelative path inside the data folder, e.g. 'exports/q1-2026.csv'

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses path-safety rules: relative paths only, confinement to the data folder, and a required .csv extension. It does not mention overwrite behavior, whether directories are created, or what happens when constraints are violated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences with no wasted wording. It front-loads the purpose and then provides the path-safety constraints in a compact, scannable form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter export tool with full schema coverage and no annotations, the description covers the purpose and critical path-safety rules. It is nearly complete, though it could mention overwrite behavior or the shape of the result for the caller.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents the exportPath as a relative path inside the data folder. The description adds meaningful invocation constraints beyond the schema, especially the explicit .csv extension requirement and reinforced path-safety rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: exporting every logged donation to a CSV file in the data folder. It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools like list_donations, totals, or quarterly_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope 'every logged donation' and the CSV export purpose, suggesting a full export rather than a filtered view. However, there is no explicit guidance on when to choose this tool over alternatives such as list_donations or quarterly_summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_photos_folder_noteGet photos folder noteB

Read back the saved local-photos-folder reminder note.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. 'Read back' weakly implies a safe read, but the description does not say what happens when no note exists (empty string, null, error), whether the note is per-user or per-device, or where it is stored — significant gaps for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource and action front-loaded and no filler. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with no output schema and no annotations, the description should at least sketch the return shape (a note string, an object with metadata) and the absent-note case. Those are missing, though the tool is simple enough that the gap is moderate rather than fatal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly makes no claims about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('read back') with a specific resource ('the saved local-photos-folder reminder note'), which is enough for an agent to distinguish it from the setter sibling set_photos_folder. It stops short of explicitly naming that sibling as the write-side counterpart, so it is clear but not sibling-routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus set_photos_folder, no prerequisite (e.g. that a note must have been saved first), and no exclusion. Usage is only inferable from the 'get' vs 'set' naming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_donationsList donationsB

List logged donations, optionally filtered by year and/or quarter (1-4).

NameRequiredDescriptionDefault
yearNo
quarterNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It implies a read-only listing but says nothing about ordering, pagination, volume of results, or whether a quarter filter can be supplied without a year — a real risk given both parameters are independent and optional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded with the primary action and followed by the filter scope. No filler, no redundancy worth cutting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description covers purpose and optionality adequately. It nonetheless leaves gaps an agent needs: whether quarter requires year, and any hint about the returned record shape or result size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description partially compensates: it names both filters, marks them optional, and explains the quarter is on a 1-4 scale. However, it adds nothing about the year format (four-digit or otherwise) or the interaction between year and quarter, leaving meaning to be guessed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List logged donations') plus the optional filter dimensions, so an agent knows exactly what it retrieves. It never distinguishes itself from siblings like quarterly_summary or totals, which cover adjacent reporting needs, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'optionally' signals that unfiltered listing is valid, which implies a use case, but there is no explicit guidance on when to prefer this over totals, quarterly_summary, or export_csv. The agent must infer its role 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.

log_donationLog a donation dropB

Record one donation drop with date, charity, item bags/boxes or dollars, your own condition notes, optional personal notes, and an optional educational value estimate (never tax advice).

NameRequiredDescriptionDefault
dateYesDonation date, YYYY-MM-DD
kindYesPhysical items dropped off, or dollars given
itemsNoFor kind "items": counts, e.g. {"bags": 2} or {"boxes": 1, "individualItems": 5}
notesNoAny personal notes for your records
charityYesWhere you donated
dollarsNoAmount given (kind "dollars")
conditionNoYour own condition notes, e.g. 'gently used, all buttons intact'
estimatedValueNoOptional educational value estimate (your own homework, not tax advice)
itemDescriptionNoWhat was in the bags/boxes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden for a mutation tool. It does add one valuable boundary, framing estimatedValue as 'your own homework, not tax advice,' and calls the notes fields personal, but it says nothing about what a successful write returns, how item counts interact with kind, or error/validation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the enumeration mirrors the schema somewhat redundantly, but the 'your own' and 'never tax advice' qualifiers earn their place and nothing dangles.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With nine parameters, a nested items object, no annotations, and no output schema, the description is adequate but thin. It omits itemDescription entirely, doesn't clarify the bags/boxes/individualItems nesting, and says nothing about the returned result or validation outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the items-versus-dollars split and the self-reported nature of condition, notes, and estimatedValue, but adds no format or constraint detail beyond what the schema descriptions already state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Record one donation drop,' and enumerates the content of that record (date, charity, items/dollars, condition, notes, value estimate). This clearly sets it apart from read-side siblings like list_donations, totals, and quarterly_summary without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer this is the tool for logging a new donation rather than reading or summarizing. There is no explicit when-to-use condition, no mention of list_donations or quarterly_summary as alternatives, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quarterly_summaryPrintable quarterly summaryB

Render a printable, plain-text quarterly (or all-time/yearly) summary with totals for your records binder. Educational totals only, never tax advice.

NameRequiredDescriptionDefault
yearNo
quarterNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the output medium (plain-text, printable) and adds a scope disclaimer ('Educational totals only, never tax advice'), but stays silent on whether it mutates anything, what permissions are needed, or what the rendered output contains structurally. Useful but incomplete for an annotation-free tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core purpose front-loaded and the period scope folded into a parenthetical rather than a separate clause. The disclaimer sentence is slightly boilerplate but carries a genuine scope restriction, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-optional-parameter render tool with no output schema, this is close to sufficient. The remaining gaps are the default behavior when no arguments are supplied and any indication of what the printed summary contains, which an agent would need to set expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. The parenthetical '(or all-time/yearly)' does add real meaning by implying that omitting parameters yields an all-time summary and that year/quarter scope the period, which the bare integer schema does not convey. It still leaves the interaction between year and quarter, and the valid range for year, undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Render') with a specific resource ('printable, plain-text quarterly... summary with totals'), which clearly distinguishes it from siblings like export_csv (CSV format) and totals (raw numbers). It is clear without opening the schema, though it never names a sibling directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through 'quarterly (or all-time/yearly)' and 'for your records binder,' which hints the tool is for human-readable record keeping rather than data extraction. However, there is no explicit guidance on when to prefer this over totals or export_csv, and no stated preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_photos_folderSet local photos folder noteA

Save a reminder note of which local folder the donation photos live in. Photos are never stored or sent anywhere by this server; this only remembers your note.

NameRequiredDescriptionDefault
photosFolderNoteYese.g. 'C:/Users/me/Pictures/donations-2026' or '~/Documents/donation-photos'

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden, and it does add real value by clarifying that photos are never stored or transmitted and that only the user's note is remembered. However, it omits important behavioral facts: whether an existing note is overwritten, whether the path is validated or must exist, and the 500-character cap enforced by the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste: the action is front-loaded and the privacy caveat follows immediately as supporting context. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, non-destructive note setter with no output schema and no annotations, the description covers the essential purpose and the main misconception (photos are not uploaded). It falls short only on overwrite semantics and path validation, which are minor for this level of complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter includes concrete example values, so the schema already does the heavy lifting. The description reinforces that the value is a free-form note rather than an uploaded path or a validated directory reference, which is useful framing but not additional syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Save a reminder note of which local folder the donation photos live in.' This is clearly the write counterpart to the sibling get_photos_folder_note, though that sibling is not named explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool to call when the user wants to record where their photos are kept. There is no explicit when-to-use vs when-not-to-use guidance, and no mention of the read-side sibling or of what to do if a note already exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

totalsTotalsC

Quick numeric totals (donation count, bags, boxes, items, dollars, educational value estimate totals) with the same optional year/quarter filter.

NameRequiredDescriptionDefault
yearNo
quarterNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a cheap read-only aggregate and lists the metrics surfaced, but never states what happens when year or quarter is omitted (all-time vs. current period), whether the two filters interact, or what shape the response takes, which are the decisions an agent must make before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the outcome front-loaded and the metric list scoped inside a parenthetical. No filler, though the trailing "same optional year/quarter filter" clause is a dangling back-reference that costs a little clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two optional scalar filters, no output schema), and the description does name the returned metrics, which is the main missing piece such tools usually have. What remains missing is default-scope behavior and sibling differentiation, both of which matter given quarterly_summary exists next door.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters, so the description must compensate. "Optional year/quarter filter" only confirms both are optional and act as filters; it adds nothing on quarter range semantics, year formatting, or the effect of supplying one without the other.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Quick numeric totals" names the operation and the resource, and the parenthetical enumerates the specific metrics returned (donation count, bags, boxes, items, dollars, educational value). It stops short of distinguishing itself from the sibling quarterly_summary, so an agent cannot fully disambiguate the two from the text alone, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to reach for this tool versus quarterly_summary, list_donations, or export_csv, and no exclusion guidance. The phrase "the same optional year/quarter filter" gestures at shared context with a sibling but never says which one or what the tradeoff is, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

value_education_pointerValue education pointerA

Show the plain-English reminder about how estimated value is meant to be used (education only, never tax advice).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose the nature of the content (a reminder, educational, explicitly not tax advice), which is useful behavioral context for a zero-parameter read, but it does not state that the call is read-only, side-effect free, or that the returned text is static and identical on every call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted clauses; the parenthetical adds real disambiguation about scope rather than noise. It could be marginally tighter but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema tool, the description covers what is returned in enough detail (a plain-English educational reminder) and flags the important caveat that it is not tax advice. Slight gap: no indication of whether the text is fixed or context-dependent, though that is low-risk here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case. The description is consistent with that by describing a self-contained retrieval of fixed content with no filtering or options implied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Show') and a concrete resource ('the plain-English reminder about how estimated value is meant to be used'), so an agent knows this returns static explanatory content rather than donation data. It is distinct from the data-oriented siblings like totals or quarterly_summary, though it never explicitly says it takes no input and returns a fixed blurb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(education only, never tax advice)' implies the context in which this content matters, but there is no explicit statement of when to call it versus explaining value directly or calling a sibling. Usage is inferable rather than stated.

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.

  1. 8 tool updatesv1.0.0
    • First observedexport_csv
    • First observedget_photos_folder_note
    • First observedlist_donations
    • First observedlog_donation
    • First observedquarterly_summary
    • First observedset_photos_folder
    • First observedtotals
    • First observedvalue_education_pointer

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools are clearly distinct: logging, listing, exporting, and the paired photos-folder note tools have unambiguous roles. The one soft overlap is totals vs quarterly_summary, which both aggregate with identical year/quarter filters and differ mainly in presentation format, but the descriptions do clarify the distinction.

Naming Consistency3/5

Verbs are snake_case and verbs-first for most tools (set_photos_folder, get_photos_folder_note, list_donations, log_donation, export_csv), which is good. However, quarterly_summary, totals, and value_education_pointer are bare noun phrases with no verb, so the pattern is mixed even though it remains readable.

Tool Count5/5

Eight tools is well within the comfortable range for a single-domain personal logging server. Each tool maps to a distinct task (log, list, aggregate x2, export, advise x2, photo-folder note) without obvious bloat.

Completeness3/5

The surface covers create, read/list, aggregate, and export, but there is no update or delete donation tool, so a mistyped entry or an accidentally logged donation cannot be corrected — a notable gap for a record-keeping system. There is also no single-record fetch or finer (month-level) filtering, though those are workarounds via list_donations.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables local-only review and organization of Apple Notes on macOS with safety-gated moves, snapshots, one-use authorization, and rollback, without deletion or content editing.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Logs deductible driving trips, manages effective-dated mileage rates, computes per-category summaries, and exports CSV for accountants, all locally with no network calls.
    9
    0
    MIT