Skip to main content
Glama
inity13

precisioncalc-mcp

PrecisionCalc MCP

A deterministic Model Context Protocol (MCP) server that gives LLM agents reliable, high-precision business, finance, and operational calculations.

LLMs routinely lose precision or hallucinate on multi-step financial formulas, currency conversions, business-day logic, and growth math. PrecisionCalc offloads that work to exact, transparent tools. Every monetary/financial value is computed with Python's decimal module (never floats), and every result is returned in a consistent, agent-parseable JSON envelope that includes the exact value, a human-readable value, the formula applied, the inputs used, the unit, and any assumptions/warnings.

v2 highlights: live + historical FX (ECB), 14 SaaS metrics, NPV/IRR, loan amortization, depreciation, a batch_calculate tool, per-country holidays, API-key auth + rate limiting + usage metering on the HTTP transport, structured JSON logging, optional OpenTelemetry tracing, and property-based tests.

🌐 Live hosted server (free, no install)

A public remote MCP server runs on Cloudflare's edge — point any Streamable-HTTP MCP client at it:

https://precisioncalc-mcp.pages.dev/mcp

Related MCP server: @halfords-pro/calculator

Install via npm (stdio, no hosting)

Run the server locally over stdio with a single command — nothing to deploy:

npx -y precisioncalc-mcp

Claude Desktop / any stdio MCP client (claude_desktop_config.json):

{ "mcpServers": { "precisioncalc": { "command": "npx", "args": ["-y", "precisioncalc-mcp"] } } }

This is the same deterministic engine as the hosted server, running on your machine.

{ "mcpServers": { "precisioncalc": {
    "type": "http", "url": "https://precisioncalc-mcp.pages.dev/mcp" } } }

The edge build (worker-src/) is a Cloudflare Pages Function that mirrors the Python engine using decimal.js — verified 17/17 exact output parity. Landing page + docs: https://precisioncalc-mcp.pages.dev.

Plans (hosted endpoint)

Plan

Price

Daily calls

Live/historical FX

batch_calculate

Free (no key)

$0

15 / day (per IP)

āŒ static only

āŒ

Starter

$12/mo

5,000 / day

āœ…

āœ…

Pro

$39/mo

50,000 / day

āœ…

āœ…

Checkout is Stripe (subscription). On success you get an API key instantly; send it as X-API-Key: <key> (or Authorization: Bearer <key>). Manage/cancel at /portal. When a limit is hit, tools return a structured status:"error" envelope with type, usage, and an upgrade block containing checkout URLs — so an agent can surface the paywall to the user and act on it. Self-host (below) for unlimited calls with your own keys.

Billing internals live in worker-src/billing.mjs (Stripe REST + Cloudflare KV for keys and daily counters). Server env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, PRICE_STARTER, PRICE_PRO, FREE_DAILY, STARTER_DAILY, PRO_DAILY, and a PRECISIONCALC_KV namespace binding (see wrangler.toml).

Rebuild/redeploy the edge server:

npm install          # decimal.js + esbuild
npm run deploy       # bundles worker-src -> site/_worker.js and deploys to Pages

What it does

11 tools, all returning a uniform structured response:

Tool

Purpose

calculate_metric

14 SaaS/business metrics (LTV, CAC, churn, MRR growth, NRR, GRR, Rule of 40, magic number, break-even, ...)

currency_convert

Convert 9 major currencies; static (offline) or live/historical ECB rates

business_days

Add/count business days, next/previous; US/UK/EU + any ISO country + custom holidays

compound_growth

Future value, present value, CAGR; 7 compounding frequencies incl. continuous

net_present_value

NPV / discounted cash flow of a cashflow series

internal_rate_of_return

IRR (Newton + bisection fallback)

loan_amortization

Level-payment loan: payment, totals, full schedule, extra-payment payoff

depreciation

straight-line / declining-balance / sum-of-years-digits schedules

batch_calculate

Run many calculations in one request

list_metrics

Discovery: every metric with descriptions + required params

health_check

Server status, version, capabilities

Consistent response envelope

Success:

{
  "status": "success",
  "value": "1600",                       // exact, full-precision (string for money/rates)
  "formatted_value": "$1,600.00",        // human-readable
  "formula": "LTV = (ARPU * gross_margin) / churn_rate",
  "inputs_used": { "arpu": "100", "gross_margin": "0.8", "churn_rate": "0.05" },
  "unit": "USD",
  "notes": ["LTV = (ARPU x gross_margin) / churn_rate.", "..."]
}

Error (never raised across the tool boundary):

{
  "status": "error",
  "error": {
    "type": "missing_parameter",
    "message": "Missing required parameter 'churn_rate'.",
    "hint": "Include 'churn_rate' in params. See list_metrics for the full schema."
  }
}

Project structure

precisioncalc-mcp/
ā”œā”€ā”€ server.py                 # MCP server: tool definitions + transports
ā”œā”€ā”€ security.py               # API-key auth + token-bucket rate limit + metering (ASGI)
ā”œā”€ā”€ observability.py          # Structured JSON logging + optional OpenTelemetry
ā”œā”€ā”€ requirements.txt / pyproject.toml
ā”œā”€ā”€ Dockerfile / .dockerignore
ā”œā”€ā”€ fly.toml / render.yaml    # One-click hosting configs
ā”œā”€ā”€ .env.example
ā”œā”€ā”€ calculations/
│   ā”œā”€ā”€ _util.py              # Decimal coercion, validation, formatting
│   ā”œā”€ā”€ metrics.py            # 14 business/SaaS metrics + catalog
│   ā”œā”€ā”€ currency.py           # FX: static + Frankfurter (live/historical) providers
│   ā”œā”€ā”€ business_days.py      # Region-aware holidays (built-in + `holidays` lib)
│   ā”œā”€ā”€ growth.py             # FV / PV / CAGR
│   └── finance.py            # NPV / IRR / loan amortization / depreciation
ā”œā”€ā”€ schemas/responses.py      # Response envelope helpers
ā”œā”€ā”€ examples/agent_example.py # End-to-end MCP client demo
ā”œā”€ā”€ site/                     # Static landing/docs page (Cloudflare Pages)
└── tests/                    # 49 unit tests + Hypothesis property tests

Requirements

  • Python 3.11+ (developed/tested on 3.12)

  • Core: mcp, python-dateutil

  • Recommended: uvicorn + starlette (HTTP transport), holidays (per-country calendars)

  • Optional: opentelemetry-sdk (tracing), pytest + hypothesis (tests)

The server auto-detects the SDK layout and works with mcp >= 2.0 (MCPServer), mcp 1.x (FastMCP), or the standalone fastmcp package.


Run it locally

cd precisioncalc-mcp
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt          # or: pip install -e ".[all]"

# stdio transport (default; how MCP clients launch it)
python server.py            # or: precisioncalc-mcp   (console entrypoint)

# Streamable HTTP transport (endpoint: /mcp)
python server.py http
PRECISIONCALC_API_KEYS=key1,key2 PRECISIONCALC_FX_PROVIDER=frankfurter python server.py http

Demo + tests:

python examples/agent_example.py         # live end-to-end over stdio
python tests/test_calculations.py        # 28 core tests (no pytest needed)
python tests/test_v2.py                  # 17 v2 tests
python tests/test_properties.py          # Hypothesis property tests
# or simply:  pytest -q

Register with an MCP client (stdio)

{ "mcpServers": { "precisioncalc": {
    "command": "python", "args": ["/absolute/path/to/precisioncalc-mcp/server.py"] } } }

Deploy

Docker

docker build -t precisioncalc-mcp .
docker run --rm -p 8000:8000 -e PRECISIONCALC_API_KEYS=your-key precisioncalc-mcp
docker run --rm -i precisioncalc-mcp python server.py stdio

Fly.io

fly launch --no-deploy
fly secrets set PRECISIONCALC_API_KEYS=key1,key2
fly deploy

Render.com

Push to GitHub, then New + → Blueprint and point at the repo (render.yaml). Set PRECISIONCALC_API_KEYS as a secret in the dashboard.


Configuration (env vars)

Var

Default

Purpose

PRECISIONCALC_HOST / PRECISIONCALC_PORT

127.0.0.1 / 8000

HTTP bind

PRECISIONCALC_API_KEYS

(empty)

Comma-separated keys. Empty = open mode (still metered/limited by IP)

PRECISIONCALC_RATE_LIMIT_PER_MIN / _BURST

120 / 40

Token-bucket limits

PRECISIONCALC_METRICS_PATH

/metrics

Usage-metrics endpoint

PRECISIONCALC_FX_PROVIDER

static

static or frankfurter (live/historical ECB)

PRECISIONCALC_FX_TTL / _TIMEOUT

3600 / 4

FX cache TTL / HTTP timeout (s)

PRECISIONCALC_LOG_LEVEL / _LOG_JSON

INFO / 1

Logging

PRECISIONCALC_OTEL

0

1 enables OpenTelemetry tracing if SDK present


Tools & parameters

calculate_metric(metric, params, currency="USD")

Rates/margins are decimals (0.05 = 5%).

metric

params

unit

ltv

arpu, churn_rate, gross_margin(=1)

currency

cac

total_spend, new_customers

currency

ltv_cac_ratio

ltv, cac

ratio

payback_period_months

cac, monthly_revenue_per_customer, gross_margin(=1)

months

contribution_margin

revenue, variable_costs

currency

gross_margin

revenue, cogs

percent

churn_rate

customers_lost, customers_at_start

percent

mrr_growth_rate

beginning_mrr, ending_mrr

percent

arr

mrr

currency

break_even_units

fixed_costs, price_per_unit, variable_cost_per_unit

units

nrr

starting_mrr, expansion_mrr, contraction_mrr, churned_mrr

percent

grr

starting_mrr, contraction_mrr, churned_mrr

percent

rule_of_40

growth_rate, profit_margin

percent

magic_number

current_quarter_revenue, prior_quarter_revenue, prior_quarter_sm_spend

ratio

currency_convert(amount, from_currency, to_currency, date=None, live=None)

USD, EUR, GBP, JPY, CAD, AUD, CHF, CNY, INR. date (YYYY-MM-DD) or live=true uses live/historical ECB rates (frankfurter.app), with automatic static fallback on any network failure. Returns rate, provider, is_live, and timestamps.

business_days(operation, start_date, days=None, end_date=None, region="US", custom_holidays=None)

operation: add_business_days | count_business_days (inclusive) | next_business_day | previous_business_day. region: US | UK | EU | NONE, or any ISO country code when the holidays package is installed (DE, FR, CA, AU, JP, IN, ...).

compound_growth(operation, rate, years, present_value, future_value, begin_value, end_value, compounding="annually", currency="USD")

operation: future_value | present_value | cagr. compounding: daily | weekly | monthly | quarterly | semiannually | annually | continuous.

net_present_value(rate, cashflows, currency="USD")

NPV = Ī£ CFā‚œ/(1+rate)įµ—. cashflows[0] = period 0 (usually the negative outlay).

internal_rate_of_return(cashflows, guess=0.1)

Per-period rate where NPV = 0. Requires a sign change in the cashflows.

loan_amortization(principal, annual_rate, term_months, extra_payment=0, currency="USD", include_schedule=false)

Returns monthly payment, months-to-payoff, total interest, total paid, and (optionally) the full month-by-month schedule.

depreciation(method, cost, salvage_value, useful_life_years, currency="USD")

method: straight_line | declining_balance | sum_of_years_digits. Returns the full yearly schedule; book value converges to salvage_value.

batch_calculate(calls)

calls: list of {"tool": <name>, "arguments": {...}} (max 100). One item failing never aborts the batch.

list_metrics() / health_check()

Discovery + status. No parameters.


Example MCP tool-call payloads

{ "name": "calculate_metric",
  "arguments": { "metric": "rule_of_40", "params": { "growth_rate": 0.30, "profit_margin": 0.15 } } }
{ "name": "currency_convert",
  "arguments": { "amount": 5000, "from_currency": "EUR", "to_currency": "GBP", "date": "2024-01-15" } }
{ "name": "net_present_value",
  "arguments": { "rate": 0.10, "cashflows": [-10000, 3000, 4200, 6800] } }
{ "name": "loan_amortization",
  "arguments": { "principal": 250000, "annual_rate": 0.065, "term_months": 360, "include_schedule": false } }
{ "name": "batch_calculate",
  "arguments": { "calls": [
    { "tool": "internal_rate_of_return", "arguments": { "cashflows": [-10000, 3000, 4200, 6800] } },
    { "tool": "depreciation", "arguments": { "method": "declining_balance", "cost": 50000, "salvage_value": 5000, "useful_life_years": 5 } }
  ] } }

Design decisions & assumptions

  • Decimal everywhere money/rates matter; value is serialized as a string to prevent float loss in JSON, with a separate pretty formatted_value. Precision = 50 sig figs.

  • Rates/margins are decimals (0.05 = 5%), documented in every tool.

  • FX: static USD-based table (as_of 2024-06-01) is the offline default; frankfurter provider adds live + historical ECB rates with in-memory TTL cache and graceful static fallback.

  • Business days: holidays computed per-year (floating US, Easter-based UK/EU); count is inclusive; add accepts negatives; custom holidays unioned; any ISO country via holidays lib.

  • IRR uses Newton's method with a bracketed bisection fallback; requires a sign change.

  • Errors never cross the tool boundary as exceptions — always status:"error" with a machine type + actionable hint.

  • HTTP hardening is opt-in via env: API keys, token-bucket rate limiting, /metrics usage.

  • SDK compatibility shim runs on mcp>=2.0, mcp 1.x, or standalone fastmcp unchanged.


Monetization hooks

  • Auth — PRECISIONCALC_API_KEYS; requests need X-API-Key or Authorization: Bearer.

  • Rate limiting — per-key token bucket (per-IP in open mode); swap for Redis to scale.

  • Usage metering — in-memory counters exposed at /metrics; the seam for per-key billing.

  • FX provider — calculations/currency.py::RateProvider is the drop-in point for a licensed feed.


Roadmap (post-v2)

  1. Redis-backed rate limiting + billing-grade usage metering.

  2. Persisted historical FX + more providers; multi-currency carry through metrics.

  3. Bond pricing/yield, WACC, options (Black-Scholes), tax/VAT, unit conversions.

  4. Prometheus exporter + Grafana dashboard alongside OTel traces.

  5. Published PyPI package + Docker image on GHCR; hosted multi-tenant SaaS.

Available Tools

11 tools
batch_calculateAInspect

Run many calculations in one request to cut agent round-trips.

Each item is {"tool": <name>, "arguments": {...}}. Results are returned in order; a failure in one item never aborts the batch (its slot holds an error envelope). Batchable tools: calculate_metric, currency_convert, business_days, compound_growth, net_present_value, internal_rate_of_return, loan_amortization, depreciation, list_metrics.

Args: calls: List of {"tool": str, "arguments": object} items (max 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
callsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/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 important behaviors: results are returned in order, failures in individual items do not abort the batch, each failure slot holds an error envelope, and there is a maximum of 100 items. This goes beyond basic expectations and adds meaningful behavioral context.

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 moderately sized and front-loads the purpose. Each section (item format, error behavior, batchable tools) earns its place. It could be slightly more compact, but the structure is clear and logical.

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?

Given that an output schema exists, return value details need not be described. The description covers the core semantics: batch behavior, tool whitelist, ordering, partial failure handling, and item structure. It is complete enough for an agent to invoke the tool correctly.

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 schema only defines 'calls' as an array of objects with no property details. The description compensates by specifying the exact item structure ({tool, arguments}) and the maximum length (100), which is essential for correct invocation. However, it does not explicitly state that the tool names must be from the provided list, though that is implied.

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 uses a specific verb ('Run many calculations') and specifies the resource (calculations) and the batch context. It clearly distinguishes this tool from siblings by positioning it as a batch wrapper over the listed individual tools.

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

Usage Guidelines4/5

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

It explicitly states the goal ('to cut agent round-trips') and lists alternative individual tools that can be batched, giving clear context for when to use this tool versus calling a single tool directly. It does not explicitly state when not to use it, but the implication is strong.

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

business_daysAInspect

Business-day arithmetic honoring weekends and regional public holidays.

Operations: add_business_days (needs days, may be negative) | count_business_days (needs end_date, inclusive) | next_business_day | previous_business_day.

Regions: US, UK, EU, NONE (weekends only) are built in and offline. If the optional holidays package is installed, ANY ISO country code also works (DE, FR, CA, AU, JP, IN, ...). custom_holidays (YYYY-MM-DD list) are added.

Args: operation: One of the four operations above. start_date: Anchor date, ISO YYYY-MM-DD. days: Business days to add (add_business_days; negative allowed). end_date: End date (count_business_days), ISO. region: US | UK | EU | NONE | ISO country code. custom_holidays: Optional extra holiday dates (YYYY-MM-DD).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
regionNoUS
end_dateNo
operationYes
start_dateYes
custom_holidaysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It excels in specifying key behaviors: count_business_days is inclusive, add_business_days accepts negative days, built-in regions work offline, and custom holidays are additive. It does not document error handling or return types, but the output schema is present to cover the return format.

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 extremely well-organized: it starts with a one-sentence purpose, then a compact list of operations, followed by region details and a structured argument list. Every sentence adds necessary information without redundancy, and the formatting makes it easy to scan.

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

Completeness5/5

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

Given the tool's moderate complexity (6 parameters, 4 operations, multiple region modes), the description covers all essential aspects: operation semantics, parameter formats, region behavior, and custom holidays. An output schema is present, so the absence of return-type details is acceptable. The only minor omission is behavior when an unsupported region is used without the holidays package, but this is implicitly handled by the 'optional package' note.

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

Parameters5/5

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

The schema provides only names and types, leaving all meaning to the description. The description explains each parameter in detail: operation options, ISO date format, negative day support, end_date necessity for counting, valid region values, and custom_holidays format. This fully compensates for the 0% schema coverage.

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 clear purpose: 'Business-day arithmetic honoring weekends and regional public holidays.' It then enumerates four specific operations, making the tool's function unambiguous. This distinguishes it from sibling tools like currency conversion or financial metrics, which are clearly different domains.

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

Usage Guidelines4/5

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

The description provides strong contextual guidance: it lists supported regions, mentions the optional holidays package for broader country coverage, and specifies which parameters apply to which operation. However, it does not explicitly state when to use this tool over alternatives or when it would be inappropriate, falling short of a full usage-guide.

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

calculate_metricAInspect

Compute a business / SaaS / finance metric with exact decimal precision.

Supported metric values -> params keys (rates/margins are decimals, 0.05 = 5%):

  • ltv -> arpu, churn_rate, [gross_margin=1]

  • cac -> total_spend, new_customers

  • ltv_cac_ratio -> ltv, cac

  • payback_period_months-> cac, monthly_revenue_per_customer, [gross_margin=1]

  • contribution_margin -> revenue, variable_costs

  • gross_margin -> revenue, cogs

  • churn_rate -> customers_lost, customers_at_start

  • mrr_growth_rate -> beginning_mrr, ending_mrr

  • arr -> mrr

  • break_even_units -> fixed_costs, price_per_unit, variable_cost_per_unit

  • nrr -> starting_mrr, expansion_mrr, contraction_mrr, churned_mrr

  • grr -> starting_mrr, contraction_mrr, churned_mrr

  • rule_of_40 -> growth_rate, profit_margin

  • magic_number -> current_quarter_revenue, prior_quarter_revenue, prior_quarter_sm_spend

Call list_metrics for full schemas.

Args: metric: Name of the metric to compute. params: Object of named numeric parameters for the chosen metric. currency: ISO currency code used to format monetary results.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYes
paramsYes
currencyNoUSD

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses exact decimal precision, that rates/margins are decimals (0.05 = 5%), optional defaults like [gross_margin=1], and that currency only formats monetary results. It does not discuss error handling or edge cases, but the provided behavior is substantial.

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 long but every line earns its place. The intro is front-loaded, the metric-to-params list is well-structured with code blocks and bullets, and the Args section mirrors the schema. There is no redundancy or filler.

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

Completeness5/5

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

Given the tool's complexity (14 metrics, varying params), the description is thorough: it explains precision, param mappings, defaults, and formatting, and points to list_metrics for full schemas. Since an output schema exists, omitting return-value details is acceptable. This description is fully adequate for a complex compute tool.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully by mapping each metric to its required parameter keys, showing optional defaults in brackets, and explaining the decimal convention. It also clarifies that currency is for formatting. This gives the agent complete parameter semantics beyond the generic schema.

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 clear verb+resource: 'Compute a business / SaaS / finance metric with exact decimal precision.' It then lists 14 supported metric names, giving a precise scope that differentiates it from sibling calculators like currency_convert or business_days.

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 description implicitly defines usage by listing the metrics it supports and directs users to call list_metrics for full schemas, but it never explicitly states when to choose this tool over alternatives like compound_growth, net_present_value, or currency_convert. There are no exclusions or trade-off notes.

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

compound_growthAInspect

Compound-interest / growth math (future value, present value, or CAGR).

Operations: future_value (needs rate, years, present_value) | present_value (needs rate, years, future_value) | cagr (needs begin_value, end_value, years). rate is an annual decimal (0.08 = 8%). compounding: daily | weekly | monthly | quarterly | semiannually | annually | continuous.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNo
yearsNo
currencyNoUSD
end_valueNo
operationYes
begin_valueNo
compoundingNoannually
future_valueNo
present_valueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses the annual decimal rate format, the allowed compounding frequencies, and which parameters are needed for each operation. It does not mention edge cases (e.g., negative years) or the exact return format, but for a pure calculation tool, this level of detail is adequate and useful.

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 compact and well-structured: it opens with the overall purpose, then lists operations and parameters in a clear format. The use of backticks and pipes makes it scannable. Every sentence adds value, and there is no repetition of schema defaults or obvious filler.

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

Completeness5/5

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

Given the tool's complexity (9 parameters, 3 operations), the description covers the necessary operating contexts: what each operation computes, the inputs it needs, and the rate/compounding semantics. Since an output schema exists, return-value details are not required. The description is sufficient for an agent to select and invoke the tool correctly for typical use cases.

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 description coverage is 0%, so the description must compensate. It explains the meaning of 'rate' (annual decimal), 'compounding' (allowed values), and enumerates which parameters are required for each operation. It does not explicitly describe 'currency' or 'begin_value'/'end_value' beyond their role in operations, but the operation context makes their purpose clear. This meaningfully supplements the bare schema.

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 clearly identifies the tool as compound-interest/growth math with specific operations (future value, present value, CAGR). It distinguishes itself from siblings like net_present_value and loan_amortization by focusing on single-sum growth calculations. The verb 'compound-interest / growth math' is specific and the listed operations clarify the resource.

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

Usage Guidelines4/5

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

The description explains when to use the tool by listing the three operations and the required parameters for each. It implicitly differentiates from siblings (e.g., using this instead of net_present_value for simple growth). However, it does not explicitly state alternatives or exclusion scenarios, so it stops short of a full 'when-not-to-use' guideline.

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

currency_convertAInspect

Convert an amount between major currencies with Decimal precision.

Supported: USD, EUR, GBP, JPY, CAD, AUD, CHF, CNY, INR. Returns the converted amount, exact cross-rate, provider, and timestamps.

Rates: static offline table by default. A date (YYYY-MM-DD) or live=true uses live/historical ECB rates (frankfurter.app); on any network failure the server falls back to static rates with a warning note.

Args: amount: Amount in from_currency (>= 0). from_currency: Source ISO 4217 code. to_currency: Target ISO 4217 code. date: Optional historical date (YYYY-MM-DD) -> live provider. live: Force live (true) or static (false); null = auto.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
liveNo
amountYes
to_currencyYes
from_currencyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full burden and discloses important behavior: Decimal precision, fallback to static rates on network failure with a warning, the meaning of the live parameter, and the return fields (converted amount, cross-rate, provider, timestamps).

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 structured into a clear summary, supported currencies, rate behavior, and an Args section. Each sentence adds useful information, and the document is front-loaded with the core purpose.

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

Completeness5/5

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

The tool has five parameters and no annotations, but the description covers all behaviors, fallbacks, and output fields, and even notes the return format despite an output schema being present. It is fully complete for agent invocation.

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

Parameters5/5

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

The input schema lacks descriptions, but the description provides thorough explanations for all five parameters, including constraints (amount >= 0), types (ISO 4217 codes), and options for date and live. This gives agents everything needed to invoke the tool correctly.

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: 'Convert an amount between major currencies with Decimal precision.' It lists supported currencies and return fields, clearly distinguishing this from sibling financial tools like calculate_metric or loan_amortization.

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

Usage Guidelines4/5

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

The description explains default static rate behavior and when to use live/historical rates via date or live=true, providing clear context. It does not explicitly compare to alternatives, but the tool's unique conversion purpose makes usage self-evident.

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

depreciationAInspect

Asset depreciation schedule.

Methods: straight_line | declining_balance (double-declining) | sum_of_years_digits. Returns Year-1 depreciation plus the full yearly schedule (book value converges to salvage_value).

Args: method: Depreciation method (see above). cost: Initial asset cost. salvage_value: Residual value at end of life (<= cost). useful_life_years: Whole years (> 0). currency: ISO code for formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault
costYes
methodYes
currencyNoUSD
salvage_valueYes
useful_life_yearsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool returns Year-1 depreciation plus the full yearly schedule and that book value converges to salvage_value. It also lists the accepted methods, giving a good sense of behavior.

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 well-organized: a one-line summary, a methods list, a return behavior note, and a compact Args list. Every sentence provides necessary information without waste.

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

Completeness5/5

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

Given that the output schema exists, the description needn't detail return structure, but it already states the output shape. Combined with the parameter explanations, it is complete for this calculation tool.

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

Parameters5/5

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

The Args section adds meaning beyond the bare schema, explaining each parameter with constraints (cost, salvage_value <= cost, useful_life_years > 0) and the currency formatting. This fully compensates for the 0% schema description coverage.

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 'Asset depreciation schedule' and then enumerates the three supported methods. This clearly identifies the tool as a depreciation calculator and distinguishes it from sibling financial calculators like loan_amortization.

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

Usage Guidelines4/5

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

The description sets clear context: it is for computing depreciation schedules with specified methods. It doesn't explicitly compare to alternatives, but the purpose is distinct enough among siblings, so there's clear context without exclusions.

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

health_checkAInspect

Return server health/status metadata (name, version, tools, capabilities).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of safety disclosure. 'Return server health/status metadata' clearly indicates a read-only operation with no side effects, and listing the specific metadata fields provides a transparent expectation of the response. It does not describe potential caveats (e.g., network latency) but is sufficiently transparent for a health check.

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 a single, concise sentence that fully captures the tool's purpose and output without extraneous words. It is properly front-loaded with the verb 'Return' and immediately specifies the resource.

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

Completeness5/5

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

Given that the tool has no parameters and an output schema is present, the description is complete for its simplicity. It fully explains what the tool returns, and there is no missing context for an agent to invoke it correctly.

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 the schema coverage is trivially 100%. The description adds no parameter-specific detail because none is needed, which matches the baseline for parameter-free tools.

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 uses the verb 'Return' with a specific resource 'server health/status metadata' and explicitly lists the contents (name, version, tools, capabilities). This clearly distinguishes it from the sibling tools, which are all financial calculations, making 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.

Usage Guidelines4/5

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

The description implies usage via its role as a health check, and the tool is unique among siblings, so no alternatives are needed. However, it does not explicitly state when to use it (e.g., for monitoring connectivity) or any exclusions, but the context is clear from the name and description.

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

internal_rate_of_returnAInspect

Internal Rate of Return: the per-period rate where NPV == 0.

Solved with Newton's method + a bisection fallback. Requires at least one negative and one positive cashflow.

Args: cashflows: List of >= 2 numbers, e.g. [-10000, 3000, 4200, 6800]. guess: Optional starting rate for Newton's method (decimal).

ParametersJSON Schema
NameRequiredDescriptionDefault
guessNo
cashflowsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

The description discloses the numerical method (Newton's method + bisection fallback) and the prerequisite sign pattern, which is useful. However, it does not cover failure modes like multiple IRRs or non-convergence, and there are no annotations to provide additional safety/permission context.

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 concise and well-structured: definition, algorithm note, requirement, and argument list. Every sentence serves a purpose, with no redundancy.

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?

Given that an output schema exists, return values need no explanation. The description covers the mathematical definition, algorithm, prerequisite, and parameter details. It lacks discussion of edge cases (e.g., multiple IRRs), but is otherwise adequate for a straightforward calculator.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates thoroughly. It explains cashflows with a concrete example and defines guess as a decimal starting rate for Newton's method, giving both format and purpose.

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 explicitly defines 'the per-period rate where NPV == 0', which is a clear and specific statement of the tool's purpose. This distinguishes it from sibling tools like net_present_value, which calculates NPV rather than the rate.

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 description implies the tool is for calculating IRR but does not explicitly state when to use it over alternatives. It mentions a constraint (at least one negative and one positive cashflow) but lacks scenario-based guidance or exclusions.

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

list_metricsAInspect

List every supported metric with description, required and optional params.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 states the tool lists every supported metric, implying a read-only operation, but does not disclose any additional behavioral traits such as response size, pagination, or authentication requirements. This is adequate for a simple list operation, but not rich.

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 a single sentence that leads with the verb and clearly states the scope. Every word earns its place; there is no filler or redundancy.

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

Completeness5/5

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

Given the tool's simplicity (no input parameters) and the presence of an output schema, the description sufficiently covers what the tool does. It explains the content of the listing (description, required/optional params), making it complete for its context. The output schema can handle return value details.

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 the input schema is empty, so the baseline is 4. The description does not need to add parameter semantics. It does clarify that the output includes parameter information for each metric, which is helpful context beyond the schema.

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 uses a specific verb ('List') and resource ('every supported metric'), and specifies what is included (description, required and optional params). This clearly distinguishes it from sibling tools like calculate_metric which perform calculations rather than listing metadata.

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 description implies usage: to discover available metrics and their parameters. However, it does not explicitly state when to use this tool versus alternatives, nor mention any prerequisites or exclusions. For a simple listing tool, the context is fairly clear, but no formal guidance is provided.

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

loan_amortizationAInspect

Level-payment loan: monthly payment, total interest, payoff, and schedule.

payment = P * r / (1 - (1 + r)^-n), r = annual_rate/12, n = term_months.

Args: principal: Loan amount (> 0). annual_rate: Nominal annual rate as a decimal (0.06 = 6%). term_months: Number of monthly payments (> 0). extra_payment: Optional extra principal each month (shortens the term). currency: ISO code for formatting. include_schedule: If true, return the full month-by-month schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoUSD
principalYes
annual_rateYes
term_monthsYes
extra_paymentNo
include_scheduleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description provides useful behavioral details: the exact payment formula, the conversion of annual_rate to monthly, the effect of extra_payment ('shortens the term'), and the conditional return of the schedule via include_schedule. It does not cover edge cases or rounding, but the core calculation behavior is transparent.

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 well-structured: a one-line summary, the formula (useful for transparency), and a clean Args list. Every sentence adds value, and there is no fluff or redundancy. The front-loaded summary gives immediate clarity.

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?

Given the six parameters, no annotations, and 0% schema coverage, the description covers the calculation logic and parameter semantics well. An output schema exists, so return values need not be described. However, it omits explicit usage exclusions and error-handling behavior, leaving a minor gap.

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

Parameters5/5

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

The schema has 0% description coverage, so the description fully compensates by explaining all six parameters: principal (>0), annual_rate (decimal, with example), term_months (>0), extra_payment (optional, shortens term), currency (ISO formatting), and include_schedule (conditional schedule return). This is highly valuable beyond the raw schema.

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 'Level-payment loan: monthly payment, total interest, payoff, and schedule,' which clearly specifies the tool's function and outputs. The verb is implicit but unambiguous, and the resource (loan amortization) is distinct from sibling tools like compound_growth and depreciation.

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 description implies usage for level-payment, fixed-rate loans through the formula and parameter details, but it does not explicitly state when to use this tool versus alternatives (e.g., compound_growth, NPV). No exclusions or alternative tool names are mentioned, so guidance is only implied.

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

net_present_valueAInspect

Net Present Value (discounted cash flow) of a periodic cashflow series.

NPV = sum(CF_t / (1 + rate)^t), t = 0..n. Index 0 is period 0 (typically the negative initial investment).

Args: rate: Discount rate per period as a decimal (0.10 = 10%). cashflows: List of >= 2 numbers, e.g. [-10000, 3000, 4200, 6800]. currency: ISO code for formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateYes
currencyNoUSD
cashflowsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It explains that period 0 is the initial investment, the rate is a decimal, and the currency is used for formatting. This adds valuable detail about input interpretation and output formatting, though it stops short of describing error handling or edge cases.

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 well-organized: a concise summary, the formula, and a clear args list. Every sentence adds necessary detail without redundancy. The structure is easy to scan and front-loads the core purpose.

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

Completeness5/5

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

Given the tool's moderate complexity and the presence of an output schema (so return values need not be described), the description is complete. It specifies the formula, period indexing, minimum cashflow length, and parameter formats, leaving no critical behavioral gaps.

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

Parameters5/5

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

The input schema provides no descriptions (coverage 0%), so the description's parameter explanations are essential. It fully clarifies rate (decimal per period), cashflows (list of >=2 numbers with an example), and currency (ISO code for formatting), adding meaning far beyond the schema's bare type definitions.

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 clearly identifies the tool as computing Net Present Value (discounted cash flow) of a periodic cashflow series. It provides the formula and explains the timing convention, which distinguishes it from sibling financial tools like internal_rate_of_return and compound_growth.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: to compute NPV for a series of periodic cash flows. It does not explicitly name alternatives or state exclusions, but the mathematical definition precisely scopes its application, making the usage unambiguous.

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. Dates show when Glama detected each change.

  1. 11 tool updatesv2.0.0
    • First observedbatch_calculate
    • First observedbusiness_days
    • First observedcalculate_metric
    • First observedcompound_growth
    • First observedcurrency_convert
    • First observeddepreciation
    • First observedhealth_check
    • First observedinternal_rate_of_return
    • First observedlist_metrics
    • First observedloan_amortization
    • First observednet_present_value

TDQS

A4.4/5.0
Disambiguation5/5

Each tool addresses a distinct calculation domain: metric computation, currency conversion, business day arithmetic, compound growth, NPV/IRR, amortization, depreciation, batching, and health. No two tools appear to perform the same function.

Naming Consistency4/5

All names use lowercase with underscores creating a predictable style, though some follow verb_noun (calculate_metric) while others are noun phrases (business_days, net_present_value). The convention is consistent enough that an agent can infer tool purposes.

Tool Count5/5

With 11 tools, the set is well-scoped for a financial calculation server. Each tool represents a meaningful capability, and the batch_calculate tool efficiently aggregates without inflating the surface.

Completeness5/5

The server covers a comprehensive range of financial calculations: business metrics, currency conversion, time arithmetic, time-value-of-money, loans, and depreciation. The inclusion of batch_calculate and health_check rounds out operational needs. No major gaps are evident.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server and CLI providing business, financial, and tax calculations including math expressions, income tax estimates, loan amortization, depreciation, and more.
    10
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing deterministic accounting tools for AI agents, including bank statement parsing, document classification, money math, and webhook verification.
    1
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/inity13/precisioncalc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server