关于 Compute Finance Oracle
Compute Finance Oracle 是面向开发者和 Agent 的 stdio MCP 服务,提供实时 AI 模型价格。它还提供历史数据、模型可用性及本地 Claude Code 会话成本分析。
主要功能
- 01跨供应商查询实时模型价格
- 02SCU 与价格指数数据
- 03历史价格查询
- 04模型可用性数据
- 05本地 Claude Code 成本分析
适用场景
- 01比较当前模型价格
- 02估算模型计算成本
- 03路由前检查模型可用性
- 04查看 Claude Code 会话成本
MCP 相关
该 stdio 服务向 MCP 客户端提供 Compute Finance Oracle 公共数据和本地会话分析工具。连接应用授权后才会提供账户工具,其范围取决于授权内容。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
22收录的工具列表 · 更新于 今天
此工具无需参数。
详细介绍
@compute-finance/mcp
实时 AI 计算定价预言机——通过 Compute Finance Oracle 获取九家供应商的 LLM 模型实时价格(Anthropic、OpenAI、Google、DeepSeek、xAI 及其他四家)。
一个基于 stdio 的 MCP 服务。可在任何 MCP 客户端中使用。还可选装用于会话成本分析的 Claude Code 技能。
快速开始
Claude Code(推荐)
npx @compute-finance/mcp setup
这条命令会:
- 在用户级别注册 MCP 服务(
claude mcp add) - 安装 Claude Code 技能(
/cf-session-management、/cf-session-consumption、/cf-active-sessions、/cf-account) - 安装成本钩子——一个
UserPromptSubmit钩子,会将会话成本注入 Claude 的上下文,让每条回复都能显示你的花费
完成设置后,重启 Claude Code。
若要查询你自己的 Compute Finance 账户,也只需连接一次——请参阅你的账户。
也可以不安装技能和钩子,手动注册:
claude mcp add --scope user compute-finance -- npx @compute-finance/mcp
Cursor / VS Code / 任何 MCP 客户端
将以下内容添加到 MCP 配置(.cursor/mcp.json、VS Code 设置等):
{
"mcpServers": {
"compute-finance": {
"command": "npx",
"args": ["@compute-finance/mcp"]
}
}
}
从源码安装
git clone https://github.com/compute-finance/mcp.git
cd mcp
npm install && npm run build
npx . setup
工具
工具按层级前缀命名,分为三组。公共组和本地组无需 API 密钥或账户。
| 组别 | 前缀 | 工具访问的内容 |
|---|---|---|
| 公共数据 | data_get_*、compute_* | 通过未经身份验证的 GET 请求读取 Compute Finance Oracle 实时数据 |
| 本地会话 | render_*、analyze_*、telemetry_get_* | 读取此计算机上的 Claude Code 对话记录,按预言机实时费率计算价格,并将测量结果追加到 ~/.compute-finance/ 下的会话日志中;telemetry_get_history 可读取这些日志;不会上传任何内容 |
| 你的账户 | account_* | 仅在连接应用授权后注册,且仅包含该授权允许使用的工具。获得读取权限后,这些工具可读取账户余额、支出、密钥和历史记录;获得操作权限后,其中一些工具可操作账户——创建 API 密钥、冻结或解冻密钥、设置预算上限、配置自动充值 |
下文不会列出 account_* 工具:这些工具由交易所发布,本软件包不会复制其中任何工具。请参阅你的账户。
数据(实时预言机)
| 工具 | 描述 |
|---|---|
data_get_basket | 当前 SCU 指数中的所有模型,包含提供商、系列(例如 openai.gpt、anthropic.claude)、每百万个 token 的 base_* 和 billed_* 美元价格、各缓存组件的价格(读取、写入-5m、写入-1h)、推理输出价格和长上下文价格阶梯 |
data_get_price | 单个模型的价格(例如 anthropic/claude-opus-4.8)——指数成员和仅目录条目适用相同条款,包含相同的各缓存组件价格、推理价格和长上下文价格阶梯 |
data_get_scu | 当前标准计算单元——数值以及按方法论版本标注的 breakdown,其中列出每个系列的代表模型 |
data_get_breakdown | 仅包含各系列的混合成本明细——按方法论版本标注的判别联合类型,每个系列代表模型对应一个条目 |
data_get_cpi | 链上最近一次认证的完整计算价格指数——scuUsd、revisionVersion,以及该修订版本发布的原始价格和加价后价格 |
data_get_reconstitutions | 指数的历史变更——模型替换、SCU 变更前后数值 |
data_get_methodology | 方法论变更日志——每个版本及其公式摘要和规范链接,以及当前生效的版本 |
data_get_history | 指定日期范围内的 SCU 指数时间序列——粒度可选 per-revision、daily 或 weekly;对于空桶,日/周桶会沿用上一修订版本的值 |
data_get_model_price_history | Oracle 跟踪的任意模型的输入/输出美元价格时间序列——粒度语义与 data_get_history 相同,并在 unavailableRevisions 中显示追赶数据时的缺口 |
data_get_catalog | 所有有记录价格的模型,包括指数成员和非指数条目——indexMember 标志、带来源信息的当前价格、缓存和推理组件,以及上游原始 contextTiers / maxInputTokens |
data_get_model_price_at | 指定时间戳生效的单个模型输入/输出美元价格——如果模型当时代表其系列参与该修订版本,则来源为 manifest;否则为 catalog |
data_get_baseline | computeIndex 背后的冻结 SCU 分母——首次确认的修订版本中的 SCU,仅设置一次,之后永不重新计算 |
data_get_scu_at | 通过阶梯函数获取指定时间戳生效的 SCU 值——不进行插值,创世修订版本之前返回 null |
data_get_model_availability | 当前可提供服务的模型——列出目录中的所有模型及其 routable 标志、auto 指向的模型,以及结果的有效时间 computedAt / ttlSeconds |
模型通过其规范的供应商前缀 ID 标识——anthropic/claude-opus-4.8、openai/gpt-5.5、qwen/qwen-3.5-flash。所有接受模型参数的工具也接受不带前缀的名称(gpt-5.5),并使用规范 ID 返回结果。供应商标识不总是提供商键(alibaba → qwen、xai → x-ai、moonshot → moonshotai),因此应复用 API 返回的 ID,而不是自行拼接。data_get_scu、data_get_breakdown 和 data_get_reconstitutions 除外:它们会原样传递已认证的清单,因此报告不带前缀的模型键,因为 / 不是合法的清单键。
缓存价格来自 Compute Finance Oracle。当 Oracle 发布了相关缓存组件时,会话和用量报告会显示有效成本(考虑缓存);否则会显示名义成本(将输入价格应用于每种输入变体),并将该模型的有效成本标记为不可用。
除了缓存之外,Oracle 还会发布推理输出价格——reasoning.reasoningOutput,与其他所有组件采用相同的计价基准;对于没有可用推理价格的模型,整个 reasoning 区块为 null。这是目录数据。会话和用量报告不会按此收费:Claude Code 转录记录的是思考区块,而不是推理 token,且这些 token 已包含在 output_tokens 中。
每种价格都会以两种口径报告:base_* 是提供方的标价,Oracle 跟踪的所有模型都相同;billed_* 是 compute.finance 收取的价格,即 base × (1 + routing_fee_rate)。比较模型时看 base_*,编制预算时看 billed_*。每次响应只附带一次费率;当 Oracle 未发布该费率时,billed_* 为 null。会话和用量报告始终采用基础价格口径。
所有当前价格的答案都来自同一个地方:交易所据以计费的实时目录。索引成员资格决定 data_get_basket 和 compute_compare 会列出哪些模型,但不决定模型的价格,因此,只要目录对两个模型定价相同,它们的报价就相同。data_get_cpi 则是有意设计的例外——它提供最新链上修订所证明的价格;只有运营方发布下一次修订时,这些价格才会变化,因此可能滞后于目录。应将其视为证明记录,而不是报价。
有些模型在上下文长度超过一定值后会变贵。data_get_basket 和 data_get_price 会通过 context_tiers 发布这些价格阶梯,按 from_input_tokens 从小到大排列,并且始终至少有一级:第一级从 0 开始,并重申统一费率;因此,所有输入规模的价格都相同的模型恰好只有一级,无需判断模型是否分级定价。每一级都像其他价格一样包含 base_* 和 billed_*;只有统一费率会计入 SCU 指数。compute_estimate 和 compute_compare 根据请求的整个输入部分选择对应级别——包括提示词、缓存读取和缓存写入;这两种工具都不提供缓存折扣,因此这些部分在此都按完整输入费率计费。级别采用左闭右开的范围,因此输入量恰好达到阈值时会采用该级别。两者都会通过 applied_context_tier 返回选定级别,使价格所依据的费率一目了然。data_get_catalog 会原样传递 Oracle 文档,因此对于统一定价的模型,其中的 contextTiers 会缺省,而不是包含只有一级的阶梯。
价格阶梯来自目录端点;当端点无法提供某个模型的信息时——读取失败,或读取成功但目录中没有该模型(这是上游数据不同步,而非统一定价)——这两类工具会采用不同处理方式。data_get_basket 和 data_get_price 仍会提供价格,并将 context_tiers 设为 null,表示阶梯未知,而不是用只有一级的阶梯冒充未读取的阶梯。compute_estimate 和 compute_compare 则会报错:按统一费率报价会低估价格,而阶梯定价正是为了给较长上下文定价。
max_input_tokens 是模型接受的最大输入量;当模型未声明自身的上下文窗口时,该值为 null——这不表示没有上限:请求正文的大小上限仍然适用,只是没有针对该模型的限制。超过模型声明的窗口时,Oracle 会直接拒绝请求,因此 compute_estimate 和 compute_compare 会设置 exceeds_max_input_tokens。它们仍会给出价格估算:这些工具是只读的,需要调整上下文的 Agent 必须先知道价格;但该标记会明确指出,照当前提供的请求内容发送将会被拒绝。
价格还带有 provenance 标记,用于说明该数值经过了何种程度的核实:verified——运营人员记录了该价格的供应商来源;inferred——根据同类数值或供应商默认值推算得出,未记录来源;promotional——预计会结束的折扣标价。**所有数值均按所示价格计费;标记说明的是可信度,而非价格。**标记由人工设置,以运营人员上次检查时的情况为准,并非对供应商进行实时核查。每个缓存和推理组件在每处出现时都带有自己的标记,每个基础价格也一样:data_get_catalog 会为每个模型(无论是否为索引成员)标记 currentPrice.provenance;data_get_basket、data_get_price 和 compute_estimate 则使用 base_price_provenance 携带相同的一对值。档位遵循同一规则:首档沿用基础价格的标记,更高档位始终是目录中的价格,并在两个方向上都标记为供应商报价时使用的同一个标记。会话和用量报告会打印每个缓存乘数及其标记;当 oracle 未发布某个模型的缓存价格时,报告会说明这一点,且不打印标记。
价格说明模型的成本,绝不代表它是否能够提供服务。data_get_model_availability 回答的是后一个问题:公共池的路由列表——包含所有使用规范 ID 的目录模型及其 routable 标志,以及 auto 指向的模型。确定模型前请先调用它,以便在发出请求前排除无法提供服务的模型,而不是等到请求后才收到 503。此信号仅供参考:它在 computedAt 时刻有效,且仅在此后的 ttlSeconds 内有效;容量会自行变化,即使报告显示某模型可路由,发送请求仍可能失败——调用方仍需自行处理请求错误。该响应由交易所自身提供,并原样返回,不在此处计算存活状态,因此不会与必须遵从该响应的路由器产生分歧;响应缓存时间严格等于随其发布的 ttlSeconds,若该数值缺失或不可用,则完全不缓存,而不是采用其他读取操作使用的缓存时长。
私有报价不会列出。供应商向私有池提供的模型使用 handle/alias ID,永远不会进入公共目录:只有池所有者接受报价后才会列出,而且仅对绑定到该池的 API 密钥可见——无论是否连接账户,本服务都不会发送此类密钥。若要查看这些模型,请使用绑定到该池的 ct_live_* 密钥调用 GET /v1/models。
计算
| 工具 | 描述 |
|---|---|
compute_estimate | 根据输入/输出 token 数量计算模型的名义 USD 成本——base_usd_cost、routing_fee_usd、billed_usd_cost,按输入大小所选档位报价 |
compute_compare | 按工作负载成本对当前 SCU 索引中的所有模型进行排名,并按系列分组——每行显示相同的三项成本数据,每个模型均采用自身档位 |
渲染(Claude Code 技能)
| 工具 | 描述 |
|---|---|
render_session_report | 预先格式化的会话成本报告——供 /cf-session-management 使用 |
render_consumption_report | 预先格式化的单次推理明细——供 /cf-session-consumption 使用 |
render_active_sessions | 跨项目的近期会话概览——供 /cf-active-sessions 使用 |
报告会显示三个互不相关的计数:提示词(你输入的内容)、推理次数(助手回复——使用工具循环的会话中,每条提示词会产生多次推理)和工具调用次数(tool_use 块)。对于同一会话,这三个报告中的这组计数完全相同。
分析
| 工具 | 描述 |
|---|---|
analyze_session | 原始 JSON 会话分析(用于自定义 UI,不用于技能) |
analyze_inferences | 原始 JSON 推理逐项细分(用于自定义 UI,不用于技能) |
analyze_session 的反事实报价采用每个模型的基础费率,绝不会采用长上下文档位。每个请求都会单独选择档位,而一个会话的输入总量并不是一个超大的请求——一百个 5k-token 调用并不等于一个 500k-token 调用——因此按更高档位计算总价会导致多收费。对于上下文长度增加后价格更高的模型,这些行的数值预计会低于 compute_compare。
历史记录
| 工具 | 描述 |
|---|---|
telemetry_get_history | 已记录会话的汇总统计数据——累计费用、各配置文件的中位数、洞察 |
你的账户
以上内容都是公开数据或本地文件。要查询你的 Compute Finance 账户已花费的金额、哪些密钥处于启用状态,或距离限额还剩多少空间,请通过应用授权关联账户。
连接
- 在 compute.finance 中打开 设置 → 已连接的应用,点击授予访问权限,为应用命名并选择它可以执行的操作:读取(查看账户余额、用量和历史记录)和/或操作(管理账户密钥和限额)。如果你在组织中工作,请选择授权所针对的账户——授权会固定绑定到该账户,其他位置的任何会话都无法将其重定向。
- 复制
cfa_live_…令牌。它只会显示一次。 - 存储令牌:
npx @compute-finance/mcp setup --account
设置过程会通过标准输入请求令牌——输入内容会隐藏,而且令牌不会作为参数传入,因此不会进入 shell 历史记录或 MCP 配置文件。之后,令牌会存储在操作系统自带的凭据存储中:macOS 钥匙串(security)、Windows DPAPI(%APPDATA% 下只有你的 Windows 用户才能解密的 blob),或 Linux 上的 Secret Service(secret-tool,来自 libsecret)。这些平台均无需添加原生 npm 依赖。
存储前,设置过程会向交换服务验证令牌:交换服务拒绝的令牌不会被存储。如果无法连接交换服务,设置过程会发出警告,但仍会存储令牌,因此离线时输入的令牌会在服务端首次启动时再进行验证。在没有这些存储方式的系统上,设置过程不会存储任何内容,并会提示你使用 CF_APP_GRANT_COMMAND(见下文)。
重启 MCP 客户端。此时会出现 account_* 工具;如果没有凭据,这些工具不会注册,预言机和会话工具的行为则与之前完全相同。
服务从何处查找令牌
启动时按以下顺序查找,并在找到第一个可用来源后停止:
| 来源 | 用途 |
|---|---|
CF_APP_GRANT_COMMAND | 会在标准输出中打印令牌的 shell 命令——op read op://Private/compute-finance/token、pass show compute-finance、bw get password …。适用于任何操作系统上的任何机密管理器。此软件包不会存储任何内容。 |
| 操作系统凭据存储 | setup --account 写入的位置。 |
CF_APP_GRANT | 环境变量。适用于没有交互式存储方式的 CI。 |
无论令牌来自何处,都只会将其发送到 https 源,或回环主机上的 http 源,以便本地 API 正常工作。如果 CF_API_BASE 指向其他地址,启动时会拒绝该地址,且不会发送令牌。
授权可以和不可以做什么
- 授权仅限于创建时勾选的操作,并且仅适用于绑定的那个账户。它永远无法从账户中取出资金——不能提款、转账,也不能执行任何需要钱包签名的操作。这些操作仍由你的钱包掌控。
- **操作权限并非无害。**持有该权限的应用可以创建会花费账户余额的 API 密钥、更改或清除限制此类支出的预算上限,以及配置自动充值。即使授权绑定到组织,自动充值也始终适用于你自己的个人账户。只有在你愿意信任某个应用执行这三项操作时,才勾选操作权限;否则只授予读取权限。
- 由交易所决定每项授权可以调用哪些工具。
GET /v1/account-tools只会返回该授权有权访问的工具及其描述和输入架构;调用则通过POST /v1/account-tools/call发起。此软件包不会复制这些接口约定,因此交易所一旦更改,你无需在此处发布新版本即可获得更新。 - 拒绝就是拒绝。当交易所拒绝请求——授权被冻结、已撤销,或缺少工具所需的访问权限——工具会返回交易所给出的原文,指出缺少什么。它绝不会将其改写为空余额、空密钥列表或猜测结果。如果授权在启动时遭到拒绝,系统会注册一个包含该原文的
account_status工具,而不是报告没有账户。
撤销
请在创建授权的位置撤销:设置 → 已连接的应用 → 撤销。撤销是永久性的,会立即生效;你自己的会话和其他应用均不受影响。冻结则会暂停授权,并且可以解除。
之后请移除令牌的本地副本:
npx @compute-finance/mcp setup --forget-account
这只会清除操作系统凭据存储。通过 CF_APP_GRANT_COMMAND 或 CF_APP_GRANT 提供的令牌会保存在你放置它的位置;请在那里将其移除。
成本钩子
setup 命令会在 ~/.claude/settings.json 中安装一个 UserPromptSubmit 钩子。每次你发送消息时,钩子都会读取当前会话记录,根据实时预言机进行计价,并通过 additionalContext 将成本摘要注入 Claude 的上下文。随后 Claude 会在回复末尾追加一行 💰 Compute.Finance · …。
触发条件——只有同时满足以下三个条件时,钩子才会触发:
- 会话成本超过 $1
- 会话至少有 5 条用户提示词
- 距离上次触发已至少 10 分钟(按会话计算)
遇到任何错误(预言机不可用、缺少会话记录、解析错误)时,钩子都会静默退出——绝不会阻止你提交提示词。
手动安装
如果 setup 无法写入 settings.json,请手动添加钩子:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "npx @compute-finance/mcp hook-prompt"
}
]
}
]
}
}
卸载
从 ~/.claude/settings.json 中移除 UserPromptSubmit 条目。
隐私
所有数据都保留在你的机器上。未连接账户时,唯一的网络请求是对 api.compute.finance 发出的未认证 GET 请求——包括 /v1/oracle/* 下的预言机端点,以及在启动时读取一次、用于说明预言机响应格式的 OpenAPI 文档 /openapi.json。会话日志(~/.compute-finance/sessions.jsonl、~/.compute-finance/inferences.jsonl)绝不会上传。
连接账户后,授权令牌只会作为 Authorization: Bearer 标头发送到 api.compute.finance 上的 /v1/account-tools 和 /v1/account-tools/call,不会发送到其他任何地方。令牌绝不会写入配置文件、作为进程参数传递,也绝不会输出到 stdout、stderr 或工具答复中——包括诊断信息;诊断信息会在写入前进行脱敏。会话日志仍只包含本地测量数据,也仍绝不会上传。
链接
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。