mcpField
L
Llm Usage & Cost Tracker

Llm Usage & Cost Tracker

本地服务
github.comAI 与智能体62 天前更新

关于 Llm Usage & Cost Tracker

llm-usage-mcp 是本地优先的 LLM 调用成本追踪器,适合使用多个模型提供方的开发者。它将调用记录到本地 SQLite,并通过 MCP 工具和 CLI 提供支出查询、价格比较与提供方推荐。

主要功能

  1. 01将调用与成本记录到本地 SQLite
  2. 02支持 Anthropic、OpenAI、DeepSeek 和 Qwen
  3. 03查询支出并按维度汇总
  4. 04比较模型价格并按预算推荐
  5. 05提供本地调用捕获代理

适用场景

  1. 01汇总不同提供方的 LLM 调用支出
  2. 02按项目、模型或时间段分析成本
  3. 03估算工作负载在不同模型上的价格
  4. 04通过本地代理捕获 API 调用用量

MCP 相关

它提供 stdio MCP 服务,开放七种工具,用于查询支出、比较提供方、获取价格、推荐模型、列出提供方及手动记录用量。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"llm-usage": {
"command": "uvx",
"args": [
"llm-usage-mcp"
]
}
}
}
启动命令uvx llm-usage-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypillm-usage-mcp0.1.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

llm-usage-mcp

llm-usage-mcp

大模型用量与成本追踪器——你的本地优先支出监控工具

CI License: MIT Python 3.13+ Glama score

English | 中文

别再把大模型 API 账单当成一部只有月底才敢捂着眼睛看的恐怖片。了解你调用大模型实际花了多少钱——涵盖所有服务商,集中在一处,数据留在自己的机器上。向你的编码 Agent(MCP)提问,或输入命令(CLI)。

它是成本计量器,而不是路由器:它会告诉你花了多少钱,以及哪个服务商适合某项工作负载——但绝不会改动你的调用。它也可以与路由器或模型排行榜工具配合使用。

Claude Code 通过 llm-usage 回答“我花了多少钱?”

也可以直接在终端中使用——查看本周按服务商分类的支出,并在选定模型前比较不同服务商的成本:

llm-usage CLI:按服务商分类的每周支出以及跨服务商成本比较

为什么你会需要它

你会通过几个服务商调用大模型——Claude、GPT,还有 Qwen 和 DeepSeek 等中国模型。每家都会在自己的控制面板中计费,使用自己的货币,也有各自对“缓存 token”费用的计算规则。因此,最简单的问题——我花了多少钱,钱都花在哪儿了?——却要登录四个网站、查询人民币兑美元汇率,还得在深夜费力弄清楚“缓存上下文 token 折扣”到底是什么意思。大多数人只好听天由命,等着月底账单揭晓。

llm-usage-mcp 会将你的每次调用记录到一个本地存储中,根据服务商在调用发生时准确计算成本,并通过两种方式告诉你结果:

  • 向你的编码 Agent 提问。 它是一个 MCP 服务,因此 Claude Code、Cursor 或任何 MCP 客户端都能用通俗语言回答*“我这周在 Claude 上花了多少钱?”或“对于一次输入 10k、输出 2k 的调用,哪个服务商最便宜?”*
  • 或者输入命令。 它也是一个 CLI——llm-usage spend、llm-usage compare、llm-usage recommend——适合不想通过 Agent 来回操作时使用。

而且它不会打扰你:

  • 本地优先。 没有 SaaS 服务、无需注册、不收集遥测数据。所有数据只存放在 ~/.llm-usage/usage.db 这个 SQLite 文件中。隐私是它的特性,而不是一个设置选项。
  • 支持多家服务商,也支持中国模型。 Anthropic、OpenAI、DeepSeek、Qwen——全部支持流式和非流式调用。DeepSeek 和 Qwen 使用与 Anthropic、OpenAI 相同的记录流程,并非事后勉强补上的功能。更多服务商(Gemini、Bedrock、Moonshot 等)即将支持。

快速开始

从 git clone 到记录你的第一次调用,只需两分钟。本节介绍记录调用——让调用被记录下来。读取数据将在下一节介绍。

1. 安装

使用 uv(或 pipx)从 PyPI 安装——这会将三个控制台脚本放到你的 PATH 中:

uv tool install llm-usage-mcp   # or: pipx install llm-usage-mcp

想动手开发?也可以改为克隆项目并从源代码同步:

git clone https://github.com/zhaoyue722/llm-usage-mcp.git
cd llm-usage-mcp
uv sync

无论使用哪种方式,你都会获得三个控制台脚本:

  • llm-usage — 多命令 CLI。请参阅下文的通过命令行(CLI)。
  • llm-usage-mcp — stdio MCP 服务。
  • llm-usage-proxy — 向后兼容的别名;与 llm-usage proxy 完全相同。

下方的快速入门使用 uv run …(从源代码运行的工作流)。如果你从 PyPI 安装,脚本已在你的 PATH 中——去掉 uv run 前缀,并使用 claude mcp add llm-usage -- llm-usage-mcp 注册 MCP 服务。

2. 至少设置一个 API 密钥

你只需要为实际使用的提供商设置密钥;代理会始终启动,而针对缺少密钥的提供商的各路由请求会返回 503 configuration_error。

export ANTHROPIC_API_KEY=sk-ant-...
# and/or:
export OPENAI_API_KEY=sk-...
export DEEPSEEK_API_KEY=sk-...
export DASHSCOPE_API_KEY=sk-...   # Qwen

完整的环境变量参考:docs/configuration.md(或者将 .env.example 复制为 .env 并填写)。

3. 运行采集代理
uv run llm-usage-proxy

它仅绑定到 回环地址(127.0.0.1:5525)——无法从网络访问。代理会在服务端保存你的 API 密钥;客户端无需获取密钥。

4. 将编码 Agent 指向代理

代理为每个提供商提供一个路由。在客户端设置相应的 *_BASE_URL 环境变量:

提供商客户端环境变量值
AnthropicANTHROPIC_BASE_URLhttp://127.0.0.1:5525
OpenAIOPENAI_BASE_URLhttp://127.0.0.1:5525/openai/v1
DeepSeekDEEPSEEK_BASE_URL(或任何 OpenAI-SDK 基础 URL 覆盖项)http://127.0.0.1:5525/deepseek/v1
QwenDashScope OpenAI 兼容基础 URLhttp://127.0.0.1:5525/qwen/v1

示例——启动 Claude Code,并通过代理路由调用:

ANTHROPIC_BASE_URL=http://127.0.0.1:5525 claude
5. 确认已开始采集

通过你的 Agent(或任何指向代理的客户端)发起调用,然后检查记录是否已写入:

uv run llm-usage spend

每次调用都会连同 token、费用、延迟和用于幂等性的 request_id 一起写入 ~/.llm-usage/usage.db,并显示在该概览中。整个流程就是这样:一端采集,另一端获取答案。

查询你的支出

开始采集调用后,你可以通过两种方式查看数据。数据相同,数字也相同——选择适合当下情境的方式即可。

询问你的编码 Agent(MCP)

使用 Claude Code 注册 MCP 服务:

claude mcp add llm-usage -- uv --directory $(pwd) run llm-usage-mcp

然后在该会话中直接用自然语言提问:

我今天在 Anthropic 上花了多少钱?对于输入 10k token、输出 2k token 的调用,哪个提供商最便宜?

Claude 会选择合适的工具并返回数据。通过 stdio 暴露七种工具;完整的参数和返回值结构请参阅 docs/spec.md。

工具用途
query_spend在指定时间范围内统计总额和各分组汇总(按提供商/模型/项目/标签/日期分组)。
usage_summary提供 today/week/month/year 的概览——总额、排名靠前的提供商和模型,以及最大的一次调用。
compare_providers根据假设的工作负载(输入/输出 token 数),按费用对所有有定价的模型进行排名。
recommend_provider选择符合指定预算的最便宜的有定价模型。
get_pricing查看随项目提供的定价快照。
list_providers列出提供商及其模型,以及是否兼容 OpenAI 的标记。
record_usage手动写入方式——在未使用采集代理时记录调用。

query_spend 和 usage_summary 默认设置 include_failed=false,以免部分流式响应记录影响总额;可通过该参数选择启用。

从命令行(CLI)

通过 CLI 查询相同的问题——在一个 llm-usage 控制台下提供 8 个子命令,适合打字比询问 Agent 更快的情况。

以下示例假设 llm-usage 已加入你的 PATH——可以运行 source .venv/bin/activate 或 uv tool install .。否则,请在每条命令前加上 uv run(例如,uv run llm-usage spend)。

$ llm-usage
 Local-first LLM spend capture + query, exposed over MCP.

 Commands
   proxy      Run the local LLM capture proxy on 127.0.0.1.
   compare    Project the cost of a hypothetical workload across every priced model.
   models     Browse the local pricing catalog.
   recommend  Recommend the cheapest priced model for a workload + budget.
   spend      Show recorded spend over a calendar period.
   status     Snapshot of the local install: DB, proxy, providers, pricing.
   providers  List configured providers with key state, wire-format, model count.
   about      Show version, author, license, and the project homepage.
命令回答的问题
compare给定一项工作负载,哪个最便宜?
models它们的实际收费是多少(每百万个 Token)?
recommend我还剩 $0.04——用哪个模型才不会让我破产?
spend我刚才花了多少钱?
status一切真的都在正常运行吗?
providers本地配置了什么?
about这是什么?在哪里报告 Bug?
proxy运行捕获代理(与 llm-usage-proxy 相同)。

所有命令都遵循以下约定:

  • --json 会输出与对应 MCP 工具返回结果相同的 Pydantic 结构。可直接通过管道传给 jq。
  • --color {auto,always,never} 会遵循 NO_COLOR 和 TTY 检测。配色采用柔和、低对比度的深色主题,深夜 11 点使用也不伤眼。
  • 筛选标志(--provider、--model)对提供商名称不区分大小写,对模型名称区分大小写;作为白名单使用时可重复指定。
  • --version / -V 会打印版本并退出。--install-completion {bash|zsh|fish|powershell} 会安装 Tab 补全脚本——重启一次 Shell 后,每个标志都可以通过 <Tab> 补全。
compare

按指定的 n 个输入 Token / m 个输出 Token 调用的预估成本,对所有有定价的模型进行排名。最便宜的排在前面,并显示相较于最便宜模型的百分比。默认视图会合并同时具有相同模型系列根名称和相同价格的行,因此 gpt-5-mini 和 gpt-5-mini-2025-08-07 会合并为一行,并标记为 ×2。传入 --all 可查看目录中的所有行。

# How does an 8k-in / 2k-out call price out today?
$ llm-usage compare --in 8000 --out 2000

# Just OpenAI's models:
$ llm-usage compare --in 8000 --out 2000 --model gpt-5-mini --model gpt-5-nano

# Same projection, JSON for a script:
$ llm-usage compare --in 8000 --out 2000 --json | jq '.ranked[0]'

llm-usage compare 按预估成本对模型进行排名

models

目录浏览器。与 compare 类似,但回答的是“这个模型怎么收费?”,而不是“我的工作负载要花多少钱?”。默认按提供商的字母顺序排列每百万个 Token 的费率;使用 --sort input 或 --sort output 可切换排序方式,查找任一方向上最便宜的模型。缓存费率默认隐藏(使用 --cache 显示),因为大多数模型都没有缓存费率,空列只会浪费宽度。

# Full catalog, deduped.
$ llm-usage models

# OpenAI's nano models only, with cache rates:
$ llm-usage models --provider openai --match nano --cache

# Cheapest input rate first — quick "what's the floor right now?":
$ llm-usage models --sort input
recommend

选出一个模型。按 --provider、--model 和 --budget 筛选,然后返回最便宜的匹配项及两个备选项。推理说明会解释其假设和选择结果,方便你核实,而不是盲目信任。

# Cheapest priced model, full stop.
$ llm-usage recommend

# Anything Anthropic that fits under one cent for a 1k/1k call:
$ llm-usage recommend --provider anthropic --budget 0.01

# Of these three specific candidates, which wins?
$ llm-usage recommend --model gpt-5-mini --model claude-sonnet-4-6 --model qwen-max

v1 仅按成本排名。--task 为可选参数,会显示在推理文本中;它不会影响选择(此工具不是大模型,无法理解自由文本)。

spend

读取 SQLite。默认视图显示 usage_summary 概览——总金额、排名前三的提供商、排名前三的模型,以及金额最大的单次调用。传入 --group-by 可切换到汇总模式。

# Headline for this week.
$ llm-usage spend

# This month grouped by model, JSON for a dashboard:
$ llm-usage spend --period month --group-by model --json | jq

# Spend on a specific project tag, day-by-day:
$ llm-usage spend --group-by day --project my-side-thing

时间段边界按 UTC 日历计算:today = 自 UTC 时间 00:00 起,week = 自星期一开始,month = 自每月 1 日开始,year = 自 1 月 1 日开始。默认排除失败和部分流式传输的行;使用 --include-failed 可将其纳入。

llm-usage spend 概览——总额、排名靠前的提供商、金额最大的调用

status

一个屏幕显示四个部分:数据库、捕获代理、提供商、定价。这是用于确认“一切是否真的在正常运行”的命令。此命令为只读——在全新安装后、尚未启动代理或 MCP 服务时运行,会显示 database not initialized,而不会悄悄创建文件。

$ llm-usage status

# Skip the network probe (offline, CI, slow link):
$ llm-usage status --no-net

# Machine-readable for a healthcheck script:
$ llm-usage status --json
providers

按提供商查看配置。内容比 status 中的 Providers 区块更丰富:增加了传输格式标志(openai-compat: yes/no),并提供可选的 --models 展开项,列出每个提供商下所有有定价的模型。

$ llm-usage providers
$ llm-usage providers --models   # expand each provider with its model list
about

首页面板:版本、作者、许可证和项目主页。它是面向用户的 --version 补充信息——字段读取自已安装的软件包元数据,因此与 PyPI 上显示的信息一致。

$ llm-usage about

# Machine-readable, for a script or an issue template:
$ llm-usage about --json

支持的提供商

提供商身份验证非流式流式缓存定价
Anthropicx-api-key是是cache_creation + cache_read
OpenAIBearer是是嵌套的 prompt_tokens_details.cached_tokens
DeepSeekBearer是是prompt_cache_hit_tokens / _miss_tokens
Qwen(DashScope)Bearer是是通常在 OpenAI 兼容端点中省略

更多支持即将推出。 Google Gemini、AWS Bedrock、Moonshot(Kimi)、Zhipu GLM、MiniMax 等已列入 docs/post_v1_providers.md 的规划。

定价来源。 定价数据是 LiteLLM 定价 JSON 的精简快照,随 GitHub Action 每周刷新(refresh-pricing.yml)。对于 LiteLLM 尚未收录的模型,则通过 pricing_overrides.json 在本地补充。

配置

所有配置都通过环境变量(或仓库根目录下的 .env 文件)设置。默认值经过合理设置——启动代理无需配置任何内容。完整参考见:docs/configuration.md。你最可能需要修改以下三个配置:

变量默认值用途
LLM_USAGE_DB_URLsqlite:///$HOME/.llm-usage/usage.db本地数据库的位置。
LLM_USAGE_PROXY_PORT5525捕获代理端口(仅限环回地址)。
LLM_USAGE_<PROVIDER>_BASE_URL各提供商的官方端点将提供商指向反向代理 / 网关——在网络受限地区很实用。

Docker

项目中包含一个精简的 Dockerfile,仅用于自动化 MCP 注册表验证(例如 Glama),以确认打包后的服务能够启动并响应 MCP 内省。仍建议在本地通过 uvx llm-usage-mcp 运行服务——这是一个本地优先的工具,而不是托管服务。

许可证

MIT。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。