LLM prices, cost estimates and break-even, plus your app's AI cost and margin per user.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. "Bearer <ingest key>" of a FiscaLLM app, for the tools that read that app's cost and margins. The price and estimate tools need no key.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
USD cost of the same call (same token counts) on each of several models, cheapest first. Use it to pick a model or to price a switch.
Model ids to compare.
Prompt tokens per call, including any cached ones.
Reply tokens per call.
Number of calls like this one, e.g. per user per month.
How many of the prompt tokens are read from the prompt cache.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http fiscallm https://fiscallm.com/api/mcp
Headers
Authorization (optional, not in the config above): Optional. "Bearer <ingest key>" of a FiscaLLM app, for the tools that read that app's cost and margins. The price and estimate tools need no key.USD cost of the same call (same token counts) on each of several models, cheapest first. Use it to pick a model or to price a switch.
| Argument | Type | Description |
|---|---|---|
| calls | integer | Number of calls like this one, e.g. per user per month. |
| models* | array | Model ids to compare. |
| inputTokens* | integer | Prompt tokens per call, including any cached ones. |
| cachedTokens | integer | How many of the prompt tokens are read from the prompt cache. |
| outputTokens* | integer | Reply tokens per call. |
{
"type": "object",
"required": [
"models",
"inputTokens",
"outputTokens"
],
"properties": {
"calls": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Number of calls like this one, e.g. per user per month."
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 2,
"description": "Model ids to compare."
},
"inputTokens": {
"type": "integer",
"minimum": 0,
"description": "Prompt tokens per call, including any cached ones."
},
"cachedTokens": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "How many of the prompt tokens are read from the prompt cache."
},
"outputTokens": {
"type": "integer",
"minimum": 0,
"description": "Reply tokens per call."
}
}
}USD cost of a call to a model from its token counts, at list price, and the total for a number of such calls.
| Argument | Type | Description |
|---|---|---|
| calls | integer | Number of calls like this one. |
| model* | string | Model id. |
| inputTokens* | integer | Prompt tokens per call, including any cached ones. |
| cachedTokens | integer | How many of the prompt tokens are read from the prompt cache. |
| outputTokens* | integer | Reply tokens per call. |
| cacheWriteTokens | integer | Prompt tokens written to the cache (Anthropic). |
{
"type": "object",
"required": [
"model",
"inputTokens",
"outputTokens"
],
"properties": {
"calls": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Number of calls like this one."
},
"model": {
"type": "string",
"description": "Model id."
},
"inputTokens": {
"type": "integer",
"minimum": 0,
"description": "Prompt tokens per call, including any cached ones."
},
"cachedTokens": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "How many of the prompt tokens are read from the prompt cache."
},
"outputTokens": {
"type": "integer",
"minimum": 0,
"description": "Reply tokens per call."
},
"cacheWriteTokens": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Prompt tokens written to the cache (Anthropic)."
}
}
}What FiscaLLM is and the ways to send it AI usage (OpenTelemetry, LiteLLM, SDK, HTTP), connect revenue, and read margins back.
No arguments.
{
"type": "object",
"properties": {}
}The app's AI cost over a period split by model and by feature. Needs the app's key.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days back to look, counting today. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "How many days back to look, counting today."
}
}
}Current list price of one model by id, e.g. "gpt-4o-mini" or "claude-sonnet-4-5". Includes the long-context rate and any announced change.
| Argument | Type | Description |
|---|---|---|
| model* | string | Model id. |
{
"type": "object",
"required": [
"model"
],
"properties": {
"model": {
"type": "string",
"description": "Model id."
}
}
}The app's AI cost, revenue, margin, share of revenue spent on AI, request count and daily series over a period. Needs the app's key.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days back to look, counting today. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "How many days back to look, counting today."
}
}
}AI cost, revenue and margin of each plan or product over a period. Needs the app's key.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days back to look, counting today. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "How many days back to look, counting today."
}
}
}Current list prices (USD per 1M tokens: input, cached input, output) for OpenAI, Anthropic and Google models, with announced price changes. Use it to find a model id or to compare prices.
| Argument | Type | Description |
|---|---|---|
| search | string | Only models whose id contains this text, e.g. "haiku" or "gpt-5". |
| provider | string | Only this provider's models. |
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Only models whose id contains this text, e.g. \"haiku\" or \"gpt-5\"."
},
"provider": {
"enum": [
"openai",
"anthropic",
"google"
],
"type": "string",
"description": "Only this provider's models."
}
}
}Each user's AI cost, revenue and margin over a period, the users losing the most money first. Needs the app's key.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days back to look, counting today. |
| limit | integer | |
| losingOnly | boolean | Only users whose AI cost is above their revenue. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "How many days back to look, counting today."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 500,
"minimum": 1
},
"losingOnly": {
"type": "boolean",
"default": false,
"description": "Only users whose AI cost is above their revenue."
}
}
}How many AI messages a month a subscriber can send before the model cost uses up what the plan earns, after the store or payment fee. Answers: does this plan price cover this model?
| Argument | Type | Description |
|---|---|---|
| model* | string | Model id. |
| feePercent | number | Store or payment fee. App stores take 15 to 30; Stripe about 3. |
| inputTokens | integer | Prompt tokens per message (system prompt and history). |
| cachedTokens | integer | How many of the prompt tokens are read from the prompt cache. |
| outputTokens | integer | Reply tokens per message. |
| monthlyPriceUsd* | number | The plan's price per month. |
| messagesPerMonth | integer | Optional: a user's expected messages a month, to get that user's margin. |
{
"type": "object",
"required": [
"model",
"monthlyPriceUsd"
],
"properties": {
"model": {
"type": "string",
"description": "Model id."
},
"feePercent": {
"type": "number",
"default": 15,
"maximum": 100,
"minimum": 0,
"description": "Store or payment fee. App stores take 15 to 30; Stripe about 3."
},
"inputTokens": {
"type": "integer",
"default": 1500,
"minimum": 0,
"description": "Prompt tokens per message (system prompt and history)."
},
"cachedTokens": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "How many of the prompt tokens are read from the prompt cache."
},
"outputTokens": {
"type": "integer",
"default": 400,
"minimum": 0,
"description": "Reply tokens per message."
},
"monthlyPriceUsd": {
"type": "number",
"description": "The plan's price per month.",
"exclusiveMinimum": 0
},
"messagesPerMonth": {
"type": "integer",
"minimum": 0,
"description": "Optional: a user's expected messages a month, to get that user's margin."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.