mcpField
O
okama-mcp

okama-mcp

本地服务
github.com/mbk-dev金融数据52 天前更新

关于 okama-mcp

okama-mcp 将 okama 投资组合工具包和 okama Planner 提供给兼容 MCP 的 AI 助手,适用于投资组合分析与财务规划。它涵盖历史指标、模拟和多阶段计划,并支持本地或自托管 HTTP 运行。

主要功能

  1. 01分析资产与投资组合回报
  2. 02回测投资组合并计算风险指标
  3. 03运行 Monte Carlo 预测和提款分析
  4. 04构建多阶段财务计划
  5. 05通过 stdio 或 Streamable HTTP 提供服务

适用场景

  1. 01比较资产历史、回报和相关性
  2. 02测试投资组合表现与回撤
  3. 03通过 Monte Carlo 模拟退休提款
  4. 04规划跨阶段的积累与退休

MCP 相关

向兼容 MCP 的客户端提供 okama 和 okama Planner 的金融工具。支持本地 `stdio` 和可自托管的 Streamable HTTP 传输方式。

配置

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

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

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

安装包
pypiokama-mcp3.1.0

工具

还没有获取到工具列表

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

详细介绍

okama-mcp

PyPI CI Python License: MIT

okama-mcp — 面向 AI 助手的投资分析

MCP(模型上下文协议)服务,可将 okama 投资组合工具包和 okama Planner 提供给 AI 助手使用,包括 Claude Desktop、Claude Code、Cursor、Codex 以及任何其他兼容 MCP 的客户端。

安装 okama-mcp 后,你可以向 AI 提出这样的问题:

“回测一个由 30% 黄金和 70% 房地产构成的投资组合,回测期限为过去 15 年。”

“对该投资组合运行蒙特卡洛退休预测,预测期限为 25 年,每月提取 1,000 美元并按通胀率调整。”

“SPY、BND 和 GLD 在 3% 无风险利率下的切点投资组合是什么?”

……AI 会使用 MCP 工具直接调用 okama,无需编写 Python 代码。

基于 FastMCP 构建。同一套代码支持两种传输方式: stdio(用于本地客户端)和 streamable-http(用于自托管)。 okama-mcp 免费且开源。可在本地或自己的服务上运行。HTTP 传输方式用于自托管;mcp.okama.io 提供的是项目 介绍页,而非公共 MCP 端点。客户端注册表工具和 Excel 导出 需要兼容的 Planner 配套组件以及已配置的本地 stdio 安装。

安装

开发状态(2026 年 10 月 26 日): main 分支正在准备 MCP 3.1.0 和 Planner 0.5.0;这两个版本均尚未发布。请使用下方的源码安装方法。 PyPI 上仍提供 MCP 3.0.0 和 Planner 0.4.1,以及早期的接口约定。

需要 Python ≥ 3.11(与 okama 本身的最低版本要求相同);需要 okama ≥ 4.0.0 和 okama-planner[reports]>=0.5.0,<0.6.0。

客户端数据模式(源码检出): 本地 MCP 默认仅允许匿名读取。 client_data_mode_set({"mode":"personal_data"}) 可启用完整的客户端增删改查(CRUD); {"mode":"anonymous"} 则会再次禁用客户端写入。该设置会按数据库持久保存,并在不同连接间生效。 uv sync 会安装固定版本的 Planner 0.5.0 源码修订版,以提供所需的访问 API。PyPI 上仍提供 Planner 0.4.1,因此在兼容的配套组件发布之前,准备中的版本仍无法发布; 请参阅安装与发布门槛。 市场和 finplan_* 工具仍可独立使用。有关早期版本的行为,请参阅 3.0 迁移说明。

最简单的方式——无需克隆仓库,也无需创建 venv——是使用 uv 或 pipx:

uvx okama-mcp stdio          # run straight from PyPI
# or
pipx install okama-mcp

也可以使用普通 pip:

pip install okama-mcp

警告

使用 pip 时,建议使用专用虚拟环境:在大多数现代 Linux 发行版上,系统 Python 都标记为由外部管理(PEP 668),因此在 venv 外执行 pip install 会失败;而在共享环境中安装则可能导致依赖冲突。在 MCP 客户端配置中,将 command 指向 venv 内 okama-mcp 脚本的绝对路径——图形界面客户端无法读取 shell 的 PATH。uvx 和 pipx 会自动隔离安装,避免上述问题。

如需参与代码开发,请改为从源码安装:

git clone https://github.com/mbk-dev/okama-mcp
cd okama-mcp
uv python install 3.14
uv sync --python 3.14 --all-groups

在 Planner 0.5.0 发布之前,tool.uv.sources 会固定到不可变的开发版配套组件。发布门槛使用 uv sync --all-groups --no-sources 并要求依赖已发布;发布时不会使用源码替代。 已发布版本组合通过验收后,请移除开发版固定配置。

运行

# stdio — for Claude Desktop, Claude Code, Cursor (local IPC)
okama-mcp stdio

# streamable HTTP — for self-hosting on your own server
okama-mcp http --host 127.0.0.1 --port 8765

从源码检出目录运行时,请在每条命令前加上 uv run。 每个 worktree 都有自己的 .venv;默认会安装 test 和 dev 组。 uv.lock 在本地生成,不会提交,因此全新检出时会分别解析兼容的版本。Orca 会在启动 Agent 前运行 orca.yaml 中的引导程序;其源码 MCP 配置会在设置完成后使用 uv run --no-sync。

连接客户端

Claude Desktop

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):

{
  "mcpServers": {
    "okama": {
      "command": "uvx",
      "args": ["okama-mcp", "stdio"]
    }
  }
}

重启 Claude Desktop;该服务会显示在工具菜单中。

Claude Code

要让该服务在每个项目中都可用(从任何目录均可使用):

claude mcp add --scope user okama -- uvx okama-mcp stdio

从源码检出目录运行的开发者,也可以在项目根目录中运行 claude mcp add okama -- uv run okama-mcp stdio。

或者,在项目根目录提交 .mcp.json,让整个团队都能使用:

{
  "mcpServers": {
    "okama": {
      "command": "uvx",
      "args": ["okama-mcp", "stdio"]
    }
  }
}
Cursor

将该服务添加到项目中的 .cursor/mcp.json(或添加到 ~/.cursor/mcp.json,使其全局可用):

{
  "mcpServers": {
    "okama": {
      "command": "uvx",
      "args": ["okama-mcp", "stdio"]
    }
  }
}
Codex(CLI 和桌面版)

使用一条命令添加该服务:

codex mcp add okama -- uvx okama-mcp stdio

或者,在 ~/.codex/config.toml 中声明(也可以在受信任项目的项目级 .codex/config.toml 中声明):

[mcp_servers.okama]
command = "uvx"
args = ["okama-mcp", "stdio"]

Codex CLI、桌面应用和 IDE 扩展共用此配置——只需设置一次,即可在这三者中使用。

自托管(可流式传输的 HTTP)

在自己的服务器上运行 okama-mcp,并在 MCP 客户端之间共享:

okama-mcp http --host 127.0.0.1 --port 8765 --path /mcp

(从源码运行:uv run okama-mcp http ...)

然后,将 MCP 客户端指向 http://<your-server>:8765/mcp。在生产环境中,请在前面配置 nginx + TLS;现成示例位于 deploy/:

  • deploy/systemd/okama-mcp.service — systemd 单元(经过强化,以专用用户身份运行)
  • deploy/nginx/self-hosted.conf — nginx 虚拟主机:TLS,以及支持 SSE 的 /mcp 代理

该服务的设计就是开放的——可免费运行,无需注册。如果实例不能公开访问,请在 nginx 层限制访问(允许列表、VPN 或 HTTP 基本身份验证)。

工具目录

多阶段财务计划(连续 20 年每月投入 $1,000 到 70/30 的 SPY/AGG 投资组合,然后连续 25 年每月提取 $6,000,并按通胀率调整), 蒙特卡洛退休预测(30% 黄金 / 70% 房地产,连续 25 年每月提取 $1,000, 并按通胀率调整),以及 SPY/BND/GLD 的有效前沿:

财务计划预测扇形图——百分位区间及虚线阶段边界

蒙特卡洛预测扇形图——未来财富的百分位区间

有效前沿——SPY.US、BND.US、GLD.US(USD)

金融工具是无状态的——每次调用都要传入完整的投资组合规格。 可选的本地客户端工具使用稳定的注册表代码,并采用持久化的数据库级访问模式。 客户端创建操作不是幂等的:如果创建结果不明确,请在重试前检查注册表。 服务器会按内容哈希缓存开销较大的 okama 对象(Portfolio、EfficientFrontier), 因此使用相同规格重复调用时速度很快。

嵌套投资组合。 在接受资产列表的所有位置——PortfolioSpec/FrontierSpec 的 assets 字段,或比较工具的 portfolios 参数—— 条目都可以是代码字符串,也可以是嵌套投资组合对象(使用相同的规格结构)。 这样,你就可以将整个投资组合作为单个组成部分:例如,将 60/40 投资组合与黄金比较, 或将子投资组合放到有效前沿中。

搜索和元数据
工具用途
search_assets(query="", namespace?, asset_type?, oldest_first?, limit=50, offset=0)按名称 / 本地名称 / 股票代码 / ISIN 搜索,精确标识符和名称优先显示;当 has_more 为 true 时,继续使用 next_offset。按 okama 类型筛选,并按 first_date 排序;例如,namespace="MOEX", asset_type="ETF", oldest_first=true, limit=5 可找到在 MOEX 上市的最早五只 BPIF。
list_namespaces(kind="all"|"assets"|"macro")显示命名空间说明以及 usage:资产 / 宏观分类、是否支持资产收益,以及可用的 MCP 工具。
get_asset_info(symbol)单个代码的元数据 — 名称、国家、货币、类型、日期范围。
单项资产和比较
工具用途
get_asset_history(symbol, kind, first_date?, last_date?)单项资产的时间序列。kind ∈ {close_monthly, close_daily, adj_close, ror, dividends}。
compare_assets(symbols, ccy, ..., portfolios?, rf_return?, t_return?)并列统计(describe() 表格:CAGR、风险、各时段的回撤)以及每项资产的 Sharpe 和 Sortino。
get_correlations(symbols, ccy, ..., portfolios?)月收益率相关矩阵。
get_rolling_risk(symbols, ccy, window_months=12, ..., portfolios?)每项资产的滚动年化风险。
get_asset_returns(symbols, ccy, ..., portfolios?, period?, real=False)每项资产的收益指标:CAGR、累计收益、平均 / 实际平均收益、月几何平均收益、年度收益表。使用 inflation=False 时,名义指标仍可用,real_mean_return 为 null;real=True 要求 inflation=True。
get_rolling_returns(symbols, ccy, window_months=12, real=False, ..., portfolios?)每项资产的滚动 CAGR 和滚动累计收益。
get_benchmark_metrics(benchmark, symbols, ccy, ..., portfolios?, rolling_window?)各项资产相对于基准 / 指数的 Beta、相关性、年化跟踪差异和跟踪误差。
get_dividend_info(symbols, ccy, ...)每项资产的 LTM 股息率、5 年平均股息率、连续派息 / 增长年数。
投资组合回测
工具用途
analyze_portfolio(portfolio, rf_return=0, t_return=0)核心指标(CAGR、年均收益 / 风险、Sharpe、Sortino)以及 PortfolioSpec 的完整 describe()。
get_portfolio_drawdowns(portfolio)回撤时间序列 + 最大回撤 / 恢复期。
get_portfolio_var_cvar(portfolio, time_frame=12, level=1)历史风险价值和 CVaR。
get_portfolio_wealth_index(portfolio, full=False)财富指数序列(1000 的累计增长)。
get_rolling_cagr(portfolio, window_months=12, real=False)滚动 CAGR 时间序列(可选按通胀调整)。
get_cagr_probability(portfolio, years, cagr_target)在 N 年期间内,CAGR 低于目标(例如出现亏损)的历史概率。
蒙特卡洛 DCF
工具用途
monte_carlo_forecast(portfolio, mc, cashflow)使用五种现金流策略之一进行前向模拟(indexation、percentage、time_series、vanguard、cut_if_drawdown)。返回财富百分位区间、期末财富统计数据和存续指标。还包括资金加权 IRR 分布(百分位数 + 均值)。
get_portfolio_irr(portfolio, cashflow)针对供款 / 提款计划计算历史资金加权收益率(IRR)。
find_the_largest_withdrawals_size(portfolio, mc, cashflow, goal, ...)针对 goal 计算最大可持续提款额(蒙特卡洛):维持实际购买力、维持名义余额,或存续 N 年。
get_monte_carlo_cash_flow(portfolio, mc, cashflow, discounting?)未来现金流随时间变化的蒙特卡洛分布(百分位区间)。

mc 参数接受 distribution_parameters,用于覆盖拟合的分布(例如,固定的 Student-t df);请参阅下方的 MCSpec 结构。

金融计划(多阶段)

计划是按顺序排列的阶段序列,每个阶段都有自己的投资组合、期限和现金流机制。各个情景会串联起来:Monte Carlo 情景在一个阶段结束时的余额,就是它在下一阶段开始时的余额,因此退休阶段的资金取决于累积阶段在同一情景中产生的结果,而不是该结果的某个百分位。只要投资组合或缴款/提款机制在整个期限中途发生变化,就应使用这些工具,而非 monte_carlo_forecast。

工具用途
finplan_forecast(plan, success_threshold=0)对整个计划进行 Monte Carlo 预测:财富百分位区间、终值统计、生存指标、最终余额高于 success_threshold 的情景占比、各阶段边界处的余额分布,以及 IRR 分布。
finplan_backtest(plan, discounting?, first_date?)使用历史数据回放同一计划,即进行路径随时间变化的回测。计划中每个阶段的投资组合所覆盖的时间窗口都必须至少与计划期限一样长。
分布诊断
工具用途
get_distribution_fit(portfolio, mc)收益分布拟合优度:拟合参数、Jarque-Bera、Kolmogorov-Smirnov 检验(所选分布及所有分布),以及回测误差(理论值与经验均值/VaR/CVaR 的对比)。
get_return_moments(portfolio, mc, rolling_window?)偏度和峰度时间序列:逐步扩展计算;指定窗口(月)时则采用滚动计算。
optimize_students_df(portfolio, mc, var_level?)找出最能匹配经验 VaR/CVaR 的 Student-t 分布自由度。
get_cagr_distribution(portfolio, mc, percentiles?, score?)各百分位对应的模拟 CAGR,以及 CAGR 小于或等于 score 的概率(例如,score=0 → 亏损概率)。
DCF(历史现金流分析)
工具用途
get_dcf_wealth_index(portfolio, cashflow, discounting?, include_negative_values?, discount_rate?)使用现金流计划计算历史财富指数(名义 FV 或折现后的 PV)。
get_dcf_cash_flow_ts(portfolio, cashflow, discounting?, remove_if_wealth_index_negative?, discount_rate?)历史缴款/提款时间序列(FV 或 PV)。
get_dcf_wealth_with_assets(portfolio, cashflow)计算投资组合及各项底层资产的历史财富指数。
get_survival_period(portfolio, cashflow, threshold?, discount_rate?)历史资金可持续性:可持续年限和资金耗尽日期。
get_initial_investment_values(portfolio, cashflow, discount_rate?)初始投资的现值(PV)和终值(FV)。
有效前沿
工具用途
build_efficient_frontier(frontier)完整的 EF 数据表(风险/平均收益/CAGR,以及各资产权重)。
get_tangency_portfolio(frontier, rf_return, rate_of_return)EF 上夏普比率最高的投资组合。
get_min_variance_portfolio(frontier)全局最小方差投资组合。
get_most_diversified_portfolio(frontier, target_return?)EF 上多元化程度最高的投资组合(使多元化比率最大化)。
宏观
工具用途
get_inflation(currency, first_date?, last_date?, include_cumulative?, include_rolling?, include_describe?)指定货币(USD、EUR、RUB 等)的通胀序列。可选:累计通胀、12 个月滚动通胀、describe() 表。
get_central_bank_rate(country, first_date?, last_date?, frequency="monthly"|"daily", include_describe?)央行政策利率(US→US_EFFR、EU/ECB→EU_MRO、RUS→RUS_CBR、UK/GB→UK_BR、ISR→ISR_IR、CN/CHN→CHN_LPR1,或完整符号)。提供月度或日度序列;可选 describe() 表。
get_indicator(symbol, first_date?, last_date?, include_describe?)来自 RATIO 命名空间的宏观指标(例如 USA_CAPE10.RATIO);仅提供国家代码时,默认使用该国的 CAPE10。
图表

每个工具都会渲染一张 PNG 图像(默认尺寸为 1500×900),并将其作为 MCP 图像内容返回 — Claude Desktop 等客户端会以内嵌方式显示。每个图表工具也都接受可选的 width / height(像素,300–4000),用于自定义尺寸和宽高比;还接受可选的 save_path — 此时图表也会写入该文件,并返回文件路径。对于不会在界面中渲染 MCP 图像的客户端(例如 Claude Code 终端),请使用 save_path:请求将图表“保存到 /tmp/chart.png”,然后打开文件引用。注意:在可自托管(streamable-http)部署中,save_path 写入的是服务端文件系统,而非客户端计算机。

工具图表
plot_wealth_index(portfolio)投资组合财富指数(+ 通胀线)。
plot_drawdowns(portfolio)随时间变化的回撤深度。
plot_monte_carlo(portfolio, mc, cashflow)蒙特卡洛预测扇形图(百分位区间)。
plot_finplan_forecast(plan)财务计划预测扇形图:百分位区间,带虚线阶段边界和阶段标签。
plot_irr_distribution(portfolio, mc, cashflow)蒙特卡洛情景中的 IRR 直方图(带百分位标记)。
plot_qq(portfolio, mc)历史收益与拟合分布(norm/lognorm/t)的 Q-Q 图。
plot_hist_fit(portfolio, mc, bins?)历史收益直方图,叠加拟合分布的 PDF。
plot_efficient_frontier(frontier)EF 曲线及单个资产点。
plot_transition_map(frontier, x_axe="risk")转换图:有效前沿上各资产的权重(x 轴 = 风险或 CAGR)。
plot_assets(symbols, ccy, ..., portfolios?)单个资产的财富指数对比。
plot_macro(symbols, first_date?, last_date?, frequency="monthly"|"daily")通胀 / 央行利率 / CAPE10 序列折线图。叠加多个符号(例如 ["USA_CAPE10.RATIO", "EUR_CAPE10.RATIO"])。frequency='daily' 仅适用于 .RATE 符号。

查找符号并选择工具

从 list_namespaces() 开始:其原始 namespaces 描述映射会保留,usage 则说明各命名空间支持的内容。使用 search_assets(namespace="INDX") 浏览指数目录,或使用 search_assets(query="bitcoin", namespace="CC") 搜索加密货币。搜索结果行包含 namespace 和 supports_asset_returns(未知时为 null)。

搜索不区分大小写;完全匹配的符号 / 代码 / ISIN 优先,其次是名称完全匹配、前缀匹配和其他匹配。限定范围的查询会按字面匹配标点符号。设置 oldest_first=true 后,日期顺序优先。符号顺序用于打破并列。结果会先排序,再分页:重复相同的查询和筛选条件,并将 offset=next_offset 传入,直到 has_more=false。count 表示所有筛选后匹配项的数量;truncated 表示当前页并非全部结果,包括多页结果中的最后一页。分页基于当前目录;调用之间的数据更新可能会改变分页边界。

RATE、INFL 和 RATIO 是宏观经济序列。分别使用 get_central_bank_rate、get_inflation 和 get_indicator 读取其值和元数据。例如,RUS_RUB.RATE 表示存款利率,而 OKID.INDX 是投资回报指数:两者是不同的输入。资产工具会拒绝宏观符号,并提示相应的下一步调用;它们绝不会将其替换为指数。请单独查找预期的指数,再比较收益率。在实现支持之前,未知的上游命名空间没有已公布的 MCP 路由。

规范结构

复杂工具接受 JSON 对象,其完整输入架构由 Pydantic 生成,并在 MCP tools/list 中提供:嵌套字段、必填值、约束、默认值和现金流变体对客户端均可见。定义位于 src/okama_mcp/schemas.py;以下是主要结构:

// PortfolioSpec
{
  "assets":   ["GLD.US", "VNQ.US"],  // each entry: a ticker OR a nested PortfolioSpec
  "weights":  [0.3, 0.7],            // optional, must sum to 1.0
  "ccy":      "USD",
  "first_date": "2010-01",
  "last_date":  "2024-12",
  "rebalancing_strategy": {            // mirrors okama.Rebalance
    "period": "year",                  // month | quarter | half-year | year | none
    "abs_deviation": 0.05,             // optional, |actual - target| threshold, 0 < x <= 1
    "rel_deviation": 0.1               // optional, |actual / target - 1| threshold, > 0
  },
  "inflation": true
}

// MCSpec
{
  "distribution":  "norm",            // norm | lognorm | t
  "period_years":  25,
  "scenarios":     500,                // ≥ 1, no upper limit
  "percentiles":   [5, 50, 95],
  "random_seed":   42,                 // optional, for reproducibility
  "distribution_parameters": null      // optional; null = fit from history (MLE). Lengths: norm [mu, sigma]; lognorm/t [shape|df, loc, scale]. Any element null = fit that one (e.g. [4, null, null])
}

// CashflowSpec — discriminated by `type`
{ "type": "indexation",       "initial_investment": 1000000, "frequency": "month", "amount": -1000, "indexation": "inflation" }
{ "type": "percentage",       "initial_investment": 1000000, "frequency": "year",  "percentage": -0.04 }
{ "type": "time_series",      "initial_investment": 100000,  "events":    { "2030-06": -50000 }, "time_series_discounted_values": false }
{ "type": "vanguard",         "initial_investment": 1000000, "percentage": -0.04, "floor_ceiling": [-0.025, 0.05], "indexation": "inflation" }
{ "type": "cut_if_drawdown",  "initial_investment": 1000000, "frequency": "year",  "amount": -60000, "indexation": "inflation",
  "crash_threshold_reduction": [[0.2, 0.4], [0.5, 1.0]] }

// FinPlanSpec — a plan is a sequence of stages, chained per scenario
{
  "stages": [
    { "portfolio": { "assets": ["SPY.US", "AGG.US"], "weights": [0.7, 0.3] },
      "period_years": 20, "name": "accumulation",
      "cashflow": { "type": "indexation", "initial_investment": 100000, "frequency": "year", "amount": 12000, "indexation": 0.03 } },
    { "portfolio": { "assets": ["SPY.US", "AGG.US"], "weights": [0.3, 0.7] },
      "period_years": 25, "name": "retirement",
      "distribution": "t", "distribution_parameters": [5, null, null],
      "cashflow": { "type": "percentage", "initial_investment": 100000, "frequency": "year", "percentage": -0.04 } }
  ],
  "initial_investment": 100000,       // balance the first stage starts with
  "discount_rate": null,               // optional; null lets okama use inflation
  "scenarios": 500,
  "random_seed": 42,                   // optional
  "percentiles": [10, 50, 90],
  "name": "retirement plan"
}

// FrontierSpec
{
  "assets":   ["SPY.US", "BND.US", "GLD.US"],
  "ccy":      "USD",
  "bounds":   [[0.0, 0.7], [0.1, 1.0], [0.0, 0.3]],   // optional
  "n_points": 20,
  "rebalancing_strategy": { "period": "year" },
  "inflation": false
}

// Nesting — a portfolio used as a single component (works in PortfolioSpec /
// FrontierSpec `assets`, and the `portfolios` argument of the comparison tools):
{
  "assets": [
    "GLD.US",
    { "assets": ["SPY.US", "AGG.US"], "weights": [0.6, 0.4], "symbol": "bench6040.PF" }
  ],
  "weights": [0.3, 0.7]              // one weight per top-level entry
}

开发

本项目遵循 TDD(参见 AGENTS.md)。每次更改代码后都运行:

uv run pytest -q
uv run ruff check .

运行实时 API 集成测试(会访问 api.okama.io):

uv run pytest -m integration

项目结构

src/okama_mcp/
├── server.py          # FastMCP instance + registration entry point
├── transport.py       # CLI: `okama-mcp stdio | http`
├── schemas.py         # PortfolioSpec, MCSpec, CashflowSpec, FrontierSpec, FinPlanSpec
├── cache.py           # TTL+LRU cache keyed by sha256 of canonical spec
├── serialization.py   # pandas → JSON-safe with smart truncation
├── errors.py          # Translate okama exceptions to actionable MCP errors
└── tools/
    ├── search.py, asset.py, asset_list.py
    ├── portfolio.py, monte_carlo.py, finplan.py
    ├── frontier.py, macro.py
    └── plots.py

许可证

MIT — 与 okama 本身采用相同的许可证。

Planner 和本地客户端工作流

Planner 工具需要配套组件提供 okama_planner.ai;本地客户端模式还需要 PlannerClientAccess。uv sync 会解析固定的兼容源。缺少 API 时会安全失败。配置好的本地 stdio 会公开 17 个客户端工具和 Excel 导出功能(共 70 个工具);HTTP 不提供客户端或本地报告工具。

默认的 anonymous 模式会返回化名,并拒绝所有持久化客户端写入。个人详细信息由 Planner 维护。调用 client_data_mode_set 并设置 mode="personal_data",即可读取完整记录、创建、更新或删除客户,并通过 Planner 的 API 保存居住地备注和计划版本。调用该工具并设置 mode="anonymous",即可恢复匿名访问。client_data_mode_get 会显示已保存的模式;使用同一数据库的连接共享此模式,且重启后仍会保留。

删除操作会一并删除所选客户关联的 Planner 记录。稀疏更新会保留未提供的字段;在 Planner 允许的情况下,显式设置为 null 会清除可选字段。两种模式下,预测和报告均保持匿名。错误消息为固定文本,不包含私人值、数据库详细信息或文件系统路径。 旧版 --allow-personal-data 标志仅在尚无已保存设置时初始化该设置;它不会覆盖通过 MCP 显式保存的模式。会议和有界历史记录分页使用相同的访问策略。此前打包的接收信息技能已停用。 参见配置和工具契约及 语言行为。

探索 okama 系列项目

提供投资和财务规划工具。

项目可帮助你完成的工作
okama.io使用交互式网页工具探索投资组合。
okama使用 Python 分析投资和投资组合。
okama Data API获取历史市场和经济数据。
okama-macro处理通胀和央行利率序列。
okama Planner制定财务计划并管理客户规划历史记录。

加入 okama 社区 →

提问、分享示例并讨论财务规划。

评论

支持 Markdown

第一次接触 MCP?

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

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