mcpField
N
Nordnet Portfolio

Nordnet Portfolio

本地服务
github.com/hpasic金融数据145 天前更新

关于 Nordnet Portfolio

Nordnet Portfolio 是用于读取 Nordnet 券商及投资组合信息的 MCP 服务,支持 QR 码登录,并向兼容 MCP 的客户端提供账户、证券和参考数据。

主要功能

  1. 01读取账户、余额和持仓
  2. 02查看交易、订单和交易记录
  3. 03查询和搜索证券
  4. 04通过 QR 码进行身份验证
  5. 05支持四个 Nordnet 市场主机

适用场景

  1. 01查看券商账户余额和持仓
  2. 02检查近期交易和有效订单
  3. 03通过搜索或标识符查找证券详情
  4. 04无需手动提取令牌即可连接 Nordnet 账户

MCP 相关

该服务向 MCP 客户端提供只读的 Nordnet 账户、投资组合、证券和参考数据工具。登录工具支持 QR 码验证,也可使用手动提供的会话令牌。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"hpasic-nordnet": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NORDNET_HOST",
"-e",
"NORDNET_SESSION_TOKEN",
"-e",
"NORDNET_CLIENT_ID",
"ghcr.io/hpasic/nordnet-mcp:latest"
],
"env": {
"NORDNET_HOST": "<NORDNET_HOST>",
"NORDNET_SESSION_TOKEN": "<NORDNET_SESSION_TOKEN>",
"NORDNET_CLIENT_ID": "<NORDNET_CLIENT_ID>"
}
}
}
}
启动命令docker run -i --rm -e NORDNET_HOST -e NORDNET_SESSION_TOKEN -e NORDNET_CLIENT_ID ghcr.io/hpasic/nordnet-mcp:latest
需要配置的环境变量
NORDNET_HOSTNordnet API host for your market, e.g. public.nordnet.se, public.nordnet.no, public.nordnet.dk, public.nordnet.fi
NORDNET_SESSION_TOKEN密钥Optional session token; omit to sign in via QR code with the nordnet_auth tool
NORDNET_CLIENT_IDOptional; set to NEXT if Nordnet returns NEXT_INVALID_SESSION

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

安装包
ocighcr.io/hpasic/nordnet-mcp:latest

工具

还没有获取到工具列表

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

详细介绍

nordnet-mcp

用于读取 Nordnet 投资组合数据的只读 MCP 服务。

它会向兼容 MCP 的客户端(例如 Claude Code、Claude Desktop 和 Cursor)提供 Nordnet 账户、持仓、交易、余额以及工具查询/搜索功能。

重要事项:

  • 本项目为非官方项目,与 Nordnet 无关联,也未获其认可或支持。
  • 本项目使用你现有的 Nordnet 会话,该会话可通过 QR 登录(见下文)或浏览器会话令牌建立。
  • 如果闲置,Nordnet 会话的有效期很短(几小时);但只要服务持续运行,它就会自行保持会话有效(见“状态”)。
  • 切勿提交令牌或分享你的 .env 文件。

状态

现在,服务可以自行登录:调用 nordnet_auth 工具(或者直接尝试任意 Nordnet 工具——401 响应会告知模型调用该工具),对话中便会显示 QR 码。用 Nordnet 移动应用扫描后,会自动建立会话,无需使用浏览器 DevTools,也无需复制粘贴 cookie。NORDNET_HOST 必须与 Nordnet 应用注册的市场相符(例如,挪威账户应使用 public.nordnet.no):QR 码中编码的是该市场域名下的登录链接,其他市场的应用会静默忽略扫描结果。在支持 MCP Apps 的宿主中,这会显示为实时 QR 图片;如果你尚未扫描,图片每隔 100 秒会自动轮换(5 分钟内最多显示 3 个码)。批准后,QR 码会消失,并发送后续消息,因此你无需重新输入最初的问题。是否能由此完全完成整个流程,还是仅免去重新输入,取决于宿主:有些宿主会立即提交,有些宿主(观察到的情况:Claude Desktop)会先将内容填入输入框,留待你发送——在后一种情况下,只需按一次 Enter 即可。对于不支持 MCP Apps 的宿主(例如 Claude Code),QR 码会以 ASCII 文本图案而非图片形式显示,也不会自动轮询——你告知模型已扫描并批准后,它会自行调用 nordnet_login_poll 完成登录。

以此方式获取的会话仅保存在内存中——立即应用于正在运行的服务,但绝不会写入 .env 或磁盘上的其他位置。如果服务进程因任何原因重启,令牌就会丢失,你需要重新登录;将令牌写回 .env 可以避免这种情况,但会带来安全代价(令牌以明文形式存放在文件中),除非实际使用中这造成了太大干扰,否则不值得这样做——如果确实如此,再重新权衡这一取舍。 如果 App 视图本身被重新挂载(例如重新打开已完成身份验证的对话),只要会话仍然有效,就绝不会显示 QR 码——这一点会检查两次,且两次都会直接向 Nordnet 验证(而不只是检查“是否存在令牌字符串”,因为存在但已失效的令牌不应被视为有效):一次是在服务器端,在 nordnet_auth 原本要生成新订单之前;另一次是在视图本身中,在显示收到的任何内容之前,因为这些内容可能是过去结果的过期重播,而不是新调用的结果。无论哪种情况,你都会看到一条简短的“已登录”,而不是无谓地生成新的 QR 码。

登录后,只要服务持续运行,它还会像在 nordnet.se 上保持浏览器标签页打开一样,自行维持会话有效——因此通常不会仅仅因为闲置而需要重新进行身份验证。只有服务进程实际运行时,这项功能才有效;如果停止运行的时间超过 Nordnet 的闲置时限,下次启动时就需要重新登录。

如果你不想使用 QR 登录,仍可手动提供会话令牌——请参阅手动设置令牌。

功能

  • 只读访问 Nordnet 投资组合/账户数据
  • 提供 16 个 MCP 工具,涵盖账户、金融工具、参考数据和登录
  • QR 码登录——无需手动提取令牌
  • 支持 Nordnet 瑞典、挪威、丹麦和芬兰主机
  • 基于环境变量配置
  • 打包为 Python CLI 入口点:nordnet-mcp
  • 为非技术用户提供一键安装的 Claude Desktop Extension

快速开始

1. 安装 uv

如果你尚未安装 uv:

curl -LsSf https://astral.sh/uv/install.sh | sh
2. 设置市场

在用于启动服务的工作目录中创建 .env 文件(使用 uv run --directory ... 时,通常为仓库根目录):

cat > .env <<'EOF'
NORDNET_HOST=public.nordnet.se
# NORDNET_CLIENT_ID=NEXT
EOF

NORDNET_CLIENT_ID 为可选项。Nordnet 会话 ID 似乎与创建它们的客户端绑定。如果 Nordnet 返回 NEXT_INVALID_SESSION,请添加 NORDNET_CLIENT_ID=NEXT 并重启服务。

支持的主机:

  • public.nordnet.se
  • public.nordnet.no
  • public.nordnet.dk
  • public.nordnet.fi

无需预先设置 NORDNET_SESSION_TOKEN——QR 登录流程(见上文状态说明)无需令牌即可获取会话,并在服务进程运行期间将其保存在内存中。如果你不想依赖此流程,也可以在此处自行设置 NORDNET_SESSION_TOKEN;请参阅手动设置令牌。

3. 在本地运行服务

从本地克隆的仓库运行:

git clone https://github.com/hpasic/nordnet-mcp.git
cd nordnet-mcp
uv run nordnet-mcp

如果 .env 不在仓库根目录,请在启动服务前于 shell 中导出相关变量。

MCP 客户端配置

Claude Code
{
  "mcpServers": {
    "nordnet": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/nordnet-mcp",
        "nordnet-mcp"
      ]
    }
  }
}
Claude Desktop/通用 stdio MCP 客户端
{
  "mcpServers": {
    "nordnet": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/nordnet-mcp",
        "nordnet-mcp"
      ],
      "env": {
        "NORDNET_SESSION_TOKEN": "your_token_here",
        "NORDNET_HOST": "public.nordnet.se"
      }
    }
  }
}
Claude Desktop/通用 stdio MCP 客户端(Docker)
{
  "mcpServers": {
    "nordnet": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "NORDNET_SESSION_TOKEN=your_token_here",
        "-e", "NORDNET_HOST=public.nordnet.se",
        "ghcr.io/hpasic/nordnet-mcp:latest"
      ]
    }
  }
}

注意:

  • 将 /absolute/path/to/nordnet-mcp 替换为本地克隆仓库的路径。
  • 通过 MCP 客户端的 env 块提供凭据通常是最简单的方式。
  • 如果 Nordnet 返回 NEXT_INVALID_SESSION,请在 env 块中添加 "NORDNET_CLIENT_ID": "NEXT"(Docker 用户则添加 -e NORDNET_CLIENT_ID=NEXT)——请参阅上文说明。
  • 会话过期时,请再次调用 nordnet_auth,或手动刷新令牌并重启服务。

手动设置令牌

如果你不想依赖 QR 流程,也可以自行提供会话令牌:

  1. 在浏览器中登录 nordnet.se(或你所在地区的 Nordnet 域名)。
  2. 打开 DevTools。
  3. 前往 Application/Storage → Cookies。
  4. 选择 Nordnet 域名。
  5. 找到名为 NNX_SESSION_ID 的 Cookie。
  6. 复制其值,并将其设为 .env 中的 NORDNET_SESSION_TOKEN(或 MCP 客户端的 env 块中的值)。
  7. 其值通常类似 UUID,例如 7f3a91c2-5648-4dbe-8a17-29c4e6b1f053。

Claude Desktop Extension(最简单——无需技术配置)

如果你只使用 Claude Desktop,且不熟悉终端、配置文件或 Docker,那么此选项正适合你:一键安装,无需任何其他软件。

  1. 从 Releases 页面下载 nordnet-mcp.mcpb。
  2. 打开 Claude Desktop → Settings → Extensions,然后将下载的文件拖入其中(或根据你的操作系统双击该文件)。
  3. 点击 Install。系统会询问你使用的 Nordnet 市场——选择所在国家并确认。
  4. 向 Claude 询问你的 Nordnet 账户。首次使用时,它会显示一个 QR 码;用 Nordnet 移动应用扫描即可完成登录。

就这么简单——无需 Python、uv 或 Docker。Claude Desktop 会使用其内置的 Python/uv 运行时自行运行服务(由 manifest.json 声明),方式与运行其他扩展相同。对于 Claude Code 或其他支持 MCP 的 Agent,请参阅上文的 MCP 客户端配置。

可用工具

账户
  • list_accounts — 列出所有账户及其类型和 ID
  • get_account_info — 余额和购买力
  • get_positions — 持仓及盈亏
  • get_trades — 已执行的交易(过去 0–7 天)
  • get_ledgers — 各币种余额
  • get_orders — 活跃订单
  • get_daily_transactions — 今日交易
金融工具
  • get_instrument — 金融工具详情(支持批量查询)
  • lookup_instrument — 按 ISIN 或市场 ID 查找
  • search_stocks — 通过自由文本搜索股票
  • check_suitability — 检查金融工具是否可交易
参考信息
  • get_countries — 国家列表
  • get_instrument_types — 金融工具类型
  • get_search_attributes — 搜索筛选属性
登录
  • nordnet_auth — 开始(或重新开始)二维码登录;支持的宿主会将其渲染为 MCP App 图片,否则显示 ASCII 艺术图
  • nordnet_login_poll — 仅限应用使用,轮询待处理的登录,并在批准后完成登录

开发

uv sync --group dev
uv run pytest -q
uv build
发布桌面扩展

CI 会在每次推送到 main 时验证并打包 nordnet-mcp.mcpb,并将其发布到 GitHub 的 latest Release——这与 Docker 的 :latest 标签一样,始终指向最新版本,而不是按版本发布的独立构件。无需手动操作;Claude 桌面扩展(最简单,无需技术设置)的下载链接始终指向该 Release 中的构件。

如需在本地执行(例如,推送前检查更改是否正常):

npx @anthropic-ai/mcpb validate .
npx @anthropic-ai/mcpb pack . nordnet-mcp.mcpb

.mcpbignore 会将打包内容限制为 uv 运行时所需的文件(manifest.json、pyproject.toml、src/、server/),而不是整个仓库。

安全说明

  • 不要提交 .env。
  • 不要在问题或日志中粘贴会话令牌。
  • 二维码登录流程不会向模型或 MCP App 视图暴露会话令牌,而是直接将其应用到运行中服务的内存客户端,且绝不会写入磁盘。如果你改为手动设置 NORDNET_SESSION_TOKEN,请像对待密码一样保护对应的 .env 文件,因为它确实包含密码。
  • 令牌的有效期较短;如果遇到 401/会话过期错误,请调用 nordnet_auth(或手动获取新令牌),不要将其视为不可恢复的故障。
  • 本服务在设计上仅支持只读操作。

限制

  • 如果会话处于空闲状态,其有效期较短(约几小时),无论会话是如何获取的。后台保活机制(参见状态)只有在服务进程实际运行时才会生效。
  • 通过二维码获取的会话仅保存在内存中,服务重启后不会保留,因此重启后必须重新登录。如果这在实际使用中造成太大不便,请改用手动设置令牌。
  • 二维码登录需要 Nordnet 移动应用;如果无法使用,请改为提供手动提取的浏览器会话令牌。
  • 二维码登录和保活机制依赖 Nordnet 的非官方行为,可能会在不另行通知的情况下发生变化——本项目封装的 API 也有相同的注意事项。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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