Skip to main content
Glama
cody1991

openfolio-ro-mcp

by cody1991
README.md
# openfolio-ro-mcp

Read-only [MCP](https://modelcontextprotocol.io) for [OpenFolio](https://codytang.cn). It talks to `https://codytang.cn/api/external/ro` — you do not clone the app.

Need **Node 20+** and an API key. Put the key in `OPENFOLIO_RO_KEY`.

```bash
npx -y openfolio-ro-mcp
```

If your npm registry is a mirror (e.g. Tencent), point npx at the public registry:

`npm_config_registry=https://registry.npmjs.org/`

Tools: `ro_catalog` (what exists), `ro_holdings` (broker positions), `ro_grid` (%-grids), `ro_grid_sweeps` (portfolio 30-day param sweep), `ro_logs` (server logs), `ro_mrmc` (watchlist + stored alerts). No orders. No live quote scan.

## Cursor / Claude / CodeBuddy

```json
{
  "mcpServers": {
    "openfolio-ro": {
      "command": "npx",
      "args": ["-y", "openfolio-ro-mcp"],
      "env": {
        "OPENFOLIO_RO_KEY": "<key>",
        "OPENFOLIO_ORIGIN": "https://codytang.cn",
        "npm_config_registry": "https://registry.npmjs.org/",
        "NPM_CONFIG_PREFIX": " "
      }
    }
  }
}
```

`NPM_CONFIG_PREFIX` (a single space) is a Cursor `ENOENT` workaround under `Cursor.app/.../resources/lib`. Omit it if npx already works.

## Codex

```toml
[mcp_servers.openfolio_ro]
command = "npx"
args = ["-y", "openfolio-ro-mcp"]
env = { OPENFOLIO_RO_KEY = "<key>", OPENFOLIO_ORIGIN = "https://codytang.cn", npm_config_registry = "https://registry.npmjs.org/" }
```

`OPENFOLIO_ORIGIN` 默认就是 `https://codytang.cn`,可省略;只有打别的主机时才改。

## Sweeps

`ro_grid_sweeps` is the 组合扫参 table: best 30-day trigger/callback, PnL, still-in-portfolio flag. Token needs `grid`. Live positions stay on `ro_grid`.

## Logs

`ro_logs` requires `module` or `search`. Default 50 rows, max 100.

## MRMC

`ro_mrmc` returns the watchlist and stored DXDX/DBJGXC alerts. OpenFolio scans the pool every 10 minutes during US regular + extended hours and writes `mrmc_alerts` (weekly TF skipped). There is no live compute. `.vix` → `.VIX.US`. Token needs `mrmc`. Codex should poll this and notify on new rows.

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct resource: catalog for discovery, holdings for positions, grid for grid performance, logs for system logs. There is zero overlap in purpose, so an agent can reliably select the right tool.

Naming Consistency5/5

All tools follow the consistent pattern 'ro_<noun>' (ro_catalog, ro_holdings, ro_grid, ro_logs), making the naming predictable and easy to infer.

Tool Count5/5

With just 4 tools, the set is tightly scoped to the read-only portfolio data domain. Each tool serves a clear, non-redundant purpose, and the count is well within the typical ideal range.

Completeness4/5

The tools cover the core read-only needs: discovery (catalog), holdings, grid positions, and logs. The catalog provides awareness of additional HTTP-only endpoints, so agents can at least know about them. Minor gap: some read-only data (e.g., individual grid trades) is not directly accessible via MCP, but the presence of the catalog mitigates this.

Maintenance

ActivityMaintained
ResponsivenessNo issues