precisioncalc-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@precisioncalc-mcpCalculate the LTV with ARPU $100, margin 80%, churn 5%"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_calculatetool, 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{ "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 |
|
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 PagesRelated MCP server: finance-calc-mcp
What it does
11 tools, all returning a uniform structured response:
Tool | Purpose |
| 14 SaaS/business metrics (LTV, CAC, churn, MRR growth, NRR, GRR, Rule of 40, magic number, break-even, ...) |
| Convert 9 major currencies; static (offline) or live/historical ECB rates |
| Add/count business days, next/previous; US/UK/EU + any ISO country + custom holidays |
| Future value, present value, CAGR; 7 compounding frequencies incl. continuous |
| NPV / discounted cash flow of a cashflow series |
| IRR (Newton + bisection fallback) |
| Level-payment loan: payment, totals, full schedule, extra-payment payoff |
| straight-line / declining-balance / sum-of-years-digits schedules |
| Run many calculations in one request |
| Discovery: every metric with descriptions + required params |
| 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 testsRequirements
Python 3.11+ (developed/tested on 3.12)
Core:
mcp,python-dateutilRecommended:
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 httpDemo + 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 -qRegister 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 stdioFly.io
fly launch --no-deploy
fly secrets set PRECISIONCALC_API_KEYS=key1,key2
fly deployRender.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 |
|
| HTTP bind |
| (empty) | Comma-separated keys. Empty = open mode (still metered/limited by IP) |
|
| Token-bucket limits |
|
| Usage-metrics endpoint |
|
|
|
|
| FX cache TTL / HTTP timeout (s) |
|
| Logging |
|
|
|
Tools & parameters
calculate_metric(metric, params, currency="USD")
Rates/margins are decimals (0.05 = 5%).
metric | params | unit |
|
| currency |
|
| currency |
|
| ratio |
|
| months |
|
| currency |
|
| percent |
|
| percent |
|
| percent |
|
| currency |
|
| units |
|
| percent |
|
| percent |
|
| percent |
|
| 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;
valueis serialized as a string to prevent float loss in JSON, with a separate prettyformatted_value. Precision = 50 sig figs.Rates/margins are decimals (
0.05= 5%), documented in every tool.FX:
staticUSD-based table (as_of2024-06-01) is the offline default;frankfurterprovider 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);
countis inclusive;addaccepts negatives; custom holidays unioned; any ISO country viaholidayslib.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 machinetype+ actionablehint.HTTP hardening is opt-in via env: API keys, token-bucket rate limiting,
/metricsusage.SDK compatibility shim runs on
mcp>=2.0,mcp 1.x, or standalonefastmcpunchanged.
Monetization hooks
Auth โ
PRECISIONCALC_API_KEYS; requests needX-API-KeyorAuthorization: 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::RateProvideris the drop-in point for a licensed feed.
Roadmap (post-v2)
Redis-backed rate limiting + billing-grade usage metering.
Persisted historical FX + more providers; multi-currency carry through metrics.
Bond pricing/yield, WACC, options (Black-Scholes), tax/VAT, unit conversions.
Prometheus exporter + Grafana dashboard alongside OTel traces.
Published PyPI package + Docker image on GHCR; hosted multi-tenant SaaS.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityCmaintenanceA comprehensive MCP server that turns any AI assistant into a powerful mathematical computation engine, providing 52 advanced functions, 158 unit conversions, financial calculations, and secure AST-based evaluation.1813MIT
- AlicenseAqualityDmaintenanceAn MCP server and CLI providing business, financial, and tax calculations including math expressions, income tax estimates, loan amortization, depreciation, and more.102MIT
- Flicense-qualityDmaintenanceProvides precise decimal arithmetic and Excel-style rounding for accounting and tax calculations via MCP protocol.9
- Flicense-qualityCmaintenanceAn advanced calculator MCP server that provides a wide range of mathematical operations over streamable HTTP, enabling users to perform complex calculations via natural language with any MCP client.
Related MCP Connectors
A paid remote MCP for Equibles, built to return verdicts, receipts, usage logs, and audit-ready JSON
Hosted MCP for stocks, options, Greeks, brokers, order previews, alerts, and workflows.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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