关于 Nordnet Portfolio
Nordnet Portfolio 是用于读取 Nordnet 券商及投资组合信息的 MCP 服务,支持 QR 码登录,并向兼容 MCP 的客户端提供账户、证券和参考数据。
主要功能
- 01读取账户、余额和持仓
- 02查看交易、订单和交易记录
- 03查询和搜索证券
- 04通过 QR 码进行身份验证
- 05支持四个 Nordnet 市场主机
适用场景
- 01查看券商账户余额和持仓
- 02检查近期交易和有效订单
- 03通过搜索或标识符查找证券详情
- 04无需手动提取令牌即可连接 Nordnet 账户
MCP 相关
该服务向 MCP 客户端提供只读的 Nordnet 账户、投资组合、证券和参考数据工具。登录工具支持 QR 码验证,也可使用手动提供的会话令牌。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e NORDNET_HOST -e NORDNET_SESSION_TOKEN -e NORDNET_CLIENT_ID ghcr.io/hpasic/nordnet-mcp:latestNORDNET_HOSTNordnet API host for your market, e.g. public.nordnet.se, public.nordnet.no, public.nordnet.dk, public.nordnet.fiNORDNET_SESSION_TOKEN密钥Optional session token; omit to sign in via QR code with the nordnet_auth toolNORDNET_CLIENT_IDOptional; set to NEXT if Nordnet returns NEXT_INVALID_SESSION本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/hpasic/nordnet-mcp:lateststdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
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.sepublic.nordnet.nopublic.nordnet.dkpublic.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 流程,也可以自行提供会话令牌:
- 在浏览器中登录
nordnet.se(或你所在地区的 Nordnet 域名)。 - 打开 DevTools。
- 前往 Application/Storage → Cookies。
- 选择 Nordnet 域名。
- 找到名为
NNX_SESSION_ID的 Cookie。 - 复制其值,并将其设为
.env中的NORDNET_SESSION_TOKEN(或 MCP 客户端的env块中的值)。 - 其值通常类似 UUID,例如
7f3a91c2-5648-4dbe-8a17-29c4e6b1f053。
Claude Desktop Extension(最简单——无需技术配置)
如果你只使用 Claude Desktop,且不熟悉终端、配置文件或 Docker,那么此选项正适合你:一键安装,无需任何其他软件。
- 从 Releases 页面下载
nordnet-mcp.mcpb。 - 打开 Claude Desktop → Settings → Extensions,然后将下载的文件拖入其中(或根据你的操作系统双击该文件)。
- 点击 Install。系统会询问你使用的 Nordnet 市场——选择所在国家并确认。
- 向 Claude 询问你的 Nordnet 账户。首次使用时,它会显示一个 QR 码;用 Nordnet 移动应用扫描即可完成登录。
就这么简单——无需 Python、uv 或 Docker。Claude Desktop 会使用其内置的 Python/uv 运行时自行运行服务(由 manifest.json 声明),方式与运行其他扩展相同。对于 Claude Code 或其他支持 MCP 的 Agent,请参阅上文的 MCP 客户端配置。
可用工具
账户
list_accounts— 列出所有账户及其类型和 IDget_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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。