Skip to main content
Glama

Expense Claim Helper

A local travel expense workspace that connects itineraries, receipts, fictional travel policies, and reviewable claim documents. Runs offline after installation. No paid API, account, telemetry, company integration, or invoice authenticity check.

Desktop workspace

Start in three commands

Python 3.11 or later is required. From this repository:

python3 -m venv .venv && .venv/bin/python -m pip install -e '.[dev]'
ECH_DATA_DIR=data/demo .venv/bin/python examples/seed_demo.py
.venv/bin/ech --data-dir data/demo serve

Open http://127.0.0.1:8898. The demo contains three fictional itineraries and a real OCR export from ten generated fictional receipts. An additional duplicate is excluded by default, and an intentionally mismatched lodging expense demonstrates review. Repeat seeding safely: identical items are reused. All cities, vendors, invoice numbers, and policy rates are invented.

For an empty workspace, use ech --data-dir data/private serve. On some macOS environments, hidden editable-install .pth files must be made visible: chflags nohidden .venv/lib/python3.*/site-packages/*.pth.

Related MCP server: POS Support MCP Server

What you can do

  • Record timed trips, destination tiers, participants, classes, expenses, receipts, and payment sources.

  • Import receipt-ocr-csv CSV or JSON. Match only unambiguous date windows, preserve duplicate flags, and review unmatched or excluded records.

  • Calculate exact integer-cent allowances, lodging caps, required receipts, class restrictions, and employee differences.

  • Generate actual XLSX, PDF, DOCX, and ZIP claim packages with detail rows, totals, signature placeholders, numbered receipt references, a policy snapshot, and SHA-256 attachment manifests.

  • Track submission, approval, partial or full reimbursement, reminders, outstanding claims, and employee advance balance.

  • View mobile-friendly trip lists, enter expenses, preview remaining items, download reports, and update statuses in the local Web UI.

  • Export native JSON/CSV archives, readable expenses, or ledger cash flows; restore a portable archive into an empty workspace; create timestamped backups.

  • Use six MCP tools through the official Python SDK. AGENTS.md contains the complete noninteractive interface.

An example claim

.venv/bin/ech --data-dir data/demo check --json
.venv/bin/ech --data-dir data/demo claim preview --trip 1 --json
.venv/bin/ech --data-dir data/demo claim build --trip 1 --format xlsx,pdf,docx,zip --json
.venv/bin/ech --data-dir data/demo claim list --json

Review warnings before submitting any claim. Receipt validation findings are included in preview and frozen report flags, separately from policy eligibility; CLI/MCP warning envelopes retain them. The built files live under data/demo/claims/<claim-code>/. Files and receipt bytes are frozen at creation. Status changes update the tracker; previously generated documents retain their original creation status. Building the same exhausted scope returns the existing claim, and can add previously unrequested formats without rewriting existing artifacts. New expenses produce a new claim containing only remaining items. Claiming a month splits daily allowances by local calendar date; expense rows belong to their entered dates.

.venv/bin/ech claim status CLM-20261015-ABC123 submitted --date 2026-10-16
.venv/bin/ech claim status CLM-20261015-ABC123 approved --date 2026-10-17
.venv/bin/ech claim status CLM-20261015-ABC123 paid --amount 250.00 --date 2026-10-20
.venv/bin/ech due --as-of 2026-11-20 --json

Replace the example code with a real generated code. --amount is cumulative money received, so a later 300.00 records only another 50.00. Repeating an unchanged transition is idempotent. The sequence is unsubmitted → submitted → approved → paid; partial payment retains a positive outstanding amount and remains eligible for overdue reminders.

Policy and calculation rules

The initial data/policy.yaml is copied from the fictional default. Edit it before generating claims. The complete example is examples/policy.yaml. No rate is a legal or organizational recommendation.

Tier

Lodging / person / night

Meals / person / day

Local transport / person / day

A

400.00

80.00

40.00

B

300.00

60.00

30.00

C

200.00

50.00

20.00

The default half-day rule uses the configured local timezone. A same-day trip of at most six hours earns half a day, otherwise one day. For a multiday trip, departure at or after noon earns half a day; return at or before noon earns half a day; intermediate dates earn one day. calendar_day can replace this rule. Overlapping trips are rejected. Distinct trips on one date share at most one allowance day, assigned chronologically within a selected claim scope; previously claimed units take precedence. Annual travel-day statistics apply the same one-day cap, without multiplying by participants.

Lodging eligibility is min(actual, tier cap × nights × participants). Classes must match the allowed flight/train list. Required missing receipts make that expense ineligible. Company-paid rows have zero employee reimbursement. Meal/local transport allowance mode adds daily allowance rows and sets corresponding actual-expense reimbursement to zero; actual mode reimburses actual eligible rows instead. Half-cent allowance results are rounded down per trip/date after participant multiplication.

Self-paid difference is computed per actual expense before allowances. It does not subtract the separate daily allowances and is not the final net personal cost. advance_balance is included employee cash expenses minus recorded receipts of reimbursement, floored at zero; it is distinct from eligible unpaid claims. Excluded duplicates contribute to neither claims, expense statistics, nor cash-flow exports. An explicit review can include them again.

Six independently calculated acceptance cases cover half days, full days, cross-month/year travel, different tiers, participants, lodging caps, and class rules. A cross-month tier-B trip from January 30 at 15:00 to February 2 at 10:00 earns three days and 270.00 allowance. A 760.00 two-night lodging expense yields 600.00 eligible and a 160.00 difference. Total claim eligibility is 870.00, split 735.00 in January and 135.00 in February.

Data, imports, and backups

--data-dir overrides ECH_DATA_DIR, which overrides ./data. All paths may be selected at runtime. SQLite contains records; receipts/ contains copied originals; claims/ contains frozen sources and reports. Default timezone is Asia/Shanghai; offset-aware trip input is converted to that timezone.

A configuration file is read from data/config.yaml or --config PATH:

timezone: Asia/Shanghai
policy_file: policy.yaml
unsubmitted_days: 14
unpaid_days: 30
max_receipt_mb: 30

Receipt CSV fields include date,amount,tax,currency,vendor,category,invoice_no,file,duplicate_of,id. Relative file paths resolve beside the CSV. The source tax value remains in the original OCR export; this helper claims the supplied inclusive total and does not recalculate tax. Same-date multiple-trip matches remain unmatched. Use expense review ID --trip ID after inspection. File hashes and stable row identities prevent duplicate ingestion.

.venv/bin/ech import-receipts examples/receipts.csv --auto-match --json
.venv/bin/ech export --format csv --kind expenses --out output/expenses.csv
.venv/bin/ech export --format csv --kind ledger --out output/cash-flows.csv
.venv/bin/ech export --format json --out output/archive.json
.venv/bin/ech --data-dir data/restored import output/archive.json
.venv/bin/ech backup

CSV defaults to UTF-8 BOM. Native archives contain tables and original bytes; CSV archives use entity,payload rows, distinct from readable expense/ledger exports. Restore requires an empty library; identical archive reimport is a no-op. Backup ZIPs contain SQLite, effective configuration, policy, receipts, claims, and portable.json. Extract and import portable.json for a different filesystem location. Use a fresh default configuration when restoring; custom external policy paths are not relocated. Backup before manual database, policy, or filesystem changes. Existing exports require explicit --yes to overwrite.

Verification and limitations

.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/pytest --cov=expense_claim_helper --cov-report=term-missing

The test suite verifies all six MCP tools and an actual stdio client, CLI/HTTP error boundaries, six manual calculation cases, immutable snapshots, repeated imports/claims, partial payments, receipt integration, portable restores, XLSX totals, DOCX/PDF structure, and ordered ZIP attachments. docs/validation.json records local results. CI runs Ruff and pytest on Ubuntu with Python 3.11 and 3.12. Locally verified on macOS with Python 3.12; CI status is separate from this local result.

One currency per library; no FX conversion, invoice authenticity checks, company submissions, bank connections, OCR, network notifications, or multi-user login. Reminders are computed when queried. Itineraries represent one employee/group and cannot overlap. Editing a claimed expense is blocked; corrections require a separate explicit adjustment workflow outside this version. Approval history cannot be reversed. Unlimited company policy languages, tax handling, pooled group per diems, and split-night allocations are outside scope. The built-in PDF font supports Latin text; use English city codes for PDF output. Use DOCX/XLSX for Unicode records. Receipt copying/restoration requires POSIX O_NOFOLLOW (Linux/macOS); Windows is not supported in this release.

Roadmap: explicit reversible adjustment claims, configurable Unicode PDF fonts, and optional organization-specific document templates. MIT licensed.

Available Tools

6 tools
add_expenseC

Write an expense and copy an optional local receipt. Money is a decimal string.

NameRequiredDescriptionDefault
noteNo
amountYes
nightsNo
paid_byNoemployee
receiptNo
trip_idYes
expense_dateNo
travel_classNo
category_nameYes

TDQS

C2.7/5.0
Behavior2/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 discloses that this is a write operation and that a receipt file is copied locally, but says nothing about required permissions, duplicate handling, what the tool returns (e.g., a new expense id), or whether the trip must already exist.

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 no filler, and the money-format rule is stated plainly. The receipt clause ("copy an optional local receipt") is slightly awkwardly phrased and would read better as "receipt is a local file path that will be copied".

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

Completeness2/5

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

For a 9-parameter mutation tool with no annotations, no output schema, and no schema coverage, the description is far too thin. It omits return value, defaults behavior, unit semantics for nights/amount, and any validation or error conditions.

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% across 9 parameters, so the description should compensate and does so only for two: amount ("decimal string") and receipt (optional local file to copy). Critical fields like nights, paid_by, expense_date, travel_class, and category_name receive no explanation of format or semantics beyond their titles.

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?

"Write an expense" gives a specific verb and resource, so an agent knows this creates an expense record. It does not distinguish itself from siblings like add_trip or build_claim beyond the resource noun, but the 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?

No statement of when to use this versus add_trip, build_claim, or the claim-listing tools, and no prerequisites such as whether trip_id must reference an existing trip. The agent must infer usage entirely from the name.

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

add_tripC

Write an itinerary with ISO times; identical input reuses the trip.

NameRequiredDescriptionDefault
end_atYes
originYes
start_atYes
city_tierNoB
transportNotrain
destinationYes
participantsNo
purpose_codeNoSAMPLE

TDQS

C2.6/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden, and it does disclose two genuinely non-obvious traits: times must be ISO-formatted and identical input reuses an existing trip rather than creating a duplicate. It still omits permissions, what happens with the defaulted fields, and what the call returns.

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

Conciseness3/5

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

A single compact clause pair with no filler and the key constraint front-loaded, so nothing is wasted. The terseness is efficient but tips into under-specification given eight parameters.

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

Completeness2/5

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

For an eight-parameter write operation with no annotations, no output schema, and zero schema descriptions, two short clauses are far from sufficient. An agent can attempt a call but cannot know field semantics, defaults, or the result shape.

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 coverage is 0%, so the description is the only source of parameter meaning, yet it only constrains start_at/end_at to ISO format. Origin, destination, transport, city_tier, purpose_code, and participants are left entirely unexplained, including what values purpose_code or city_tier accept.

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

Purpose3/5

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

The verb 'write' plus the resource 'itinerary' signals creation of a trip record, but the wording drifts from the tool name (trip vs itinerary) and never states that it registers a travel segment with origin/destination and times. It also gives no basis for distinguishing it from siblings like travel_days or add_expense.

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 guidance on when to call this versus add_expense, build_claim, or travel_days, nor any prerequisite or exclusion. The only routing-adjacent information is a reuse behavior, which is not a usage condition.

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

build_claimC

Write immutable claim snapshots and local reports; reserve claimed items.

NameRequiredDescriptionDefault
monthNo
formatsNo
trip_idsYes

TDQS

C2.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 does disclose important traits such as immutability and reserving claimed items, but it omits permissions, idempotency, side effects on existing claims, and output details.

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?

The description is a single, front-loaded sentence with no wasted language. It is concise, though the brevity leaves important details unspecified.

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

Completeness2/5

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

For a mutation tool with no annotations, no output schema, and three parameters at 0% schema description coverage, the description is under-specified. It conveys core purpose but omits parameter meaning, usage guidance, and many behavioral details an agent needs.

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

Parameters1/5

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

Schema description coverage is 0%, and the description mentions none of the three parameters: trip_ids, month, or formats. It does not compensate for the undocumented parameter semantics at all.

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 clear verb and resource set: writing immutable claim snapshots and local reports, plus reserving claimed items. It does not explicitly differentiate this tool from siblings such as list_pending_claims, but the core operation is identifiable.

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 guidance on when to use this tool versus alternatives like list_pending_claims or add_expense. The description gives no preconditions, exclusions, or workflow context.

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

check_missingC

Read missing/orphan files, amount mismatches and duplicate/unmatched warnings.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Read' weakly implies a non-mutating operation and the listed finding categories hint at the report contents, but there is no statement about scope, permissions, cost, or whether it is read-only in practice.

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 efficient sentence with no filler, and the enumerated finding types are front-loaded. The phrasing 'duplicate/unmatched warnings' is slightly compressed but not wasteful.

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 no output schema, the description must convey what comes back, and it only partly does by naming finding categories. It omits the scope of the scan and the shape of the result, leaving an agent unable to predict the response for a zero-argument call.

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, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-related omissions exist.

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

Purpose3/5

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

The description enumerates the categories of findings (missing/orphan files, amount mismatches, duplicate/unmatched warnings), which conveys it is an anomaly-reporting tool, but the verb 'Read' is odd for a check/validation operation and the scope (which records or claims are checked) is never stated. Nothing in the text ties it to the travel/expense/claims domain implied by its siblings.

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 run this check, what preconditions exist, or how it relates to siblings like list_pending_claims or build_claim. The agent must infer usage entirely from the name and the enumerated finding types.

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

list_pending_claimsC

Read reminders, unpaid amounts and employee advance balance.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full behavioral burden. It implies a read-only operation by saying 'Read', but gives no information about permissions, return format, pagination, or whether the data is scoped to a user or organization.

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?

The description is a single efficient sentence with no wasted words and is front-loaded with the action 'Read'. It is concise, though its terseness contributes to gaps in other dimensions rather than being a structural flaw.

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 no output schema or annotations, the description should explain what the returned data looks like. It lists three return categories, which is helpful, but does not clarify format, aggregation level, or how pending claims relate to reminders and advance balances.

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 has zero parameters and schema coverage is 100%, so the baseline score of 4 applies. There are no parameter semantics to clarify beyond what the empty schema already communicates.

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

Purpose3/5

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

The description names three data categories it reads (reminders, unpaid amounts, advance balance) but never explicitly says it lists pending claims, leaving the resource implicit in the tool name. It is understandable in isolation but does not clearly differentiate itself from siblings like build_claim or check_missing.

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 guidance about when to use this tool versus alternatives such as check_missing or build_claim, and no prerequisites or exclusions are stated. The agent must 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.

travel_daysB

Read annual local-calendar travel days, capped at one day per date.

NameRequiredDescriptionDefault
yearYes

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, and it does disclose one real trait: results are capped at one day per date. However, it says nothing about permissions, whether the read is guaranteed non-mutating, or the shape of the returned data.

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?

One tight sentence with the scope and the dedup constraint front-loaded; nothing is wasted. It is perhaps too short given the gaps elsewhere, but every word earns its place.

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?

A simple one-param read with no output schema needs only light coverage, and the cap-per-date note helps. Still, an agent cannot infer the return format (list of dates, count, objects) or what 'local-calendar' means in practice.

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% for the single 'year' parameter, so the description must compensate. 'Annual' and 'local-calendar' clarify that the year is interpreted in the local calendar, but format expectations or bounds are not stated.

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 (read) and resource (annual travel days) and adds the scope qualifier 'local-calendar.' It is clear what the tool returns, though it never contrasts itself with siblings like add_trip or check_missing.

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 only: the word 'annual' and the required year argument suggest fetching a year's worth of travel days. There is no explicit when-to-use, when-not-to-use, or pointer to an alternative tool.

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. 6 tool updatesv0.1.1
    • First observedadd_expense
    • First observedadd_trip
    • First observedbuild_claim
    • First observedcheck_missing
    • First observedlist_pending_claims
    • First observedtravel_days

TDQS

B3.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct action or resource: adding trips, adding expenses, validating missing items, building claims, listing pending claims, and calculating travel days. There is no overlap in purpose, and the boundary between write operations (add_trip, add_expense, build_claim) and read operations (check_missing, list_pending_claims, travel_days) is clear.

Naming Consistency4/5

Most tool names follow a predictable verb_noun pattern (add_trip, add_expense, check_missing, build_claim, list_pending_claims). The only deviation is travel_days, which is a noun phrase rather than a verb-led name, but it remains readable and unambiguous.

Tool Count5/5

Six tools is well within the typical 3–15 range for a focused workflow assistant. Each tool appears to earn its place by covering a distinct step in the expense claim lifecycle, with no obviously redundant tools.

Completeness3/5

The surface covers creating trips and expenses, checking for issues, building claim snapshots, listing pending claims, and calculating travel days. However, there are no update or delete operations for trips or expenses, and no way to read or list individual existing records beyond aggregated warnings and pending summaries, leaving notable lifecycle gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables local, deterministic management and search of point-of-sale support data—branches, terminals, incidents, and incident history—with read-only queries and mutating tools over stdio using simulated SQLite data.
    11
    -
  • A
    license
    A
    quality
    A
    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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables offline management of sales contracts, customer receipts, traceable earnings accruals, actual payouts, and personal finance forecasts through a local stdio interface.
    MIT