Nordnet Portfolio について
Nordnet Portfolioは、Nordnetの証券口座とポートフォリオ情報を読み取るMCPサーバーです。QRコードログインに対応し、MCP対応クライアントに口座、銘柄、参照データを提供します。
主な機能
- 01口座、残高、保有銘柄の読み取り
- 02取引、注文、取引履歴の確認
- 03銘柄の検索と照会
- 04QRコードによる認証
- 054つの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 サーバーです。
Nordnet の口座、保有ポジション、取引、残高、銘柄の検索・照会機能を、Claude Code、Claude Desktop、Cursor などの MCP 対応クライアントに公開します。
重要:
- このプロジェクトは非公式であり、Nordnet とは提携しておらず、Nordnet による推奨やサポートも受けていません。
- 既存の Nordnet セッションを使用します。セッションは QR ログイン(以下を参照)またはブラウザーのセッショントークンを使って確立します。
- Nordnet のセッションは、アイドル状態が続くと数時間で期限切れになります。ただし、サーバーの実行中はセッションが自動的に維持されます(「ステータス」を参照)。
- トークンをコミットしたり、
.envファイルを共有したりしないでください。
ステータス
サーバーが自動でログインできるようになりました。nordnet_auth ツールを呼び出すか、任意の Nordnet ツールを試してください。401 が返されると、モデルはログインを呼び出すよう指示され、会話に QR コードが表示されます。Nordnet モバイルアプリでスキャンすると、自動的にセッションが確立されます。ブラウザーの DevTools も、Cookie のコピー&ペーストも不要です。NORDNET_HOST は、Nordnet アプリが登録されている市場と一致している必要があります(たとえば、ノルウェーの口座なら public.nordnet.no)。QR コードにはその市場のドメイン上のログインリンクが含まれており、別の市場向けのアプリではスキャンしても何も起こりません。MCP Apps 対応のホストでは、スキャンされるまで最大 5 分間に 3 回、100 秒ごとに自動更新されるライブ QR 画像として表示されます。認証が承認されると QR コードは消え、フォローアップメッセージが送信されるため、最初に依頼した内容を再入力する必要はありません。この処理が最後まで自動で完了するか、再入力だけを省けるかはホストによって異なります。一部のホストではすぐに送信されますが、Claude Desktop では、確認できた範囲で入力欄に内容が事前入力され、送信はユーザーに委ねられます。その場合、あとは Enter キーを押すだけです。MCP Apps に対応していないホスト(たとえば Claude Code)では、QR コードは画像ではなく ASCII アートのテキストで表示され、自動ポーリングも行われません。スキャンして承認したことをモデルに伝えると、モデルが nordnet_login_poll を呼び出してログインを完了します。
この方法で取得したセッションはメモリ内にのみ保持され、実行中のサーバーにはすぐに適用されますが、.env やその他のディスク上の場所に書き込まれることはありません。何らかの理由でサーバープロセスが再起動するとトークンは失われ、再度ログインする必要があります。.env に書き戻せばそれを避けられますが、トークンが平文ファイルに保存されるというセキュリティ上の代償があります。実際に使ってみて不便すぎるとわかった場合を除き、その代償を払う価値はありません。必要であれば、このトレードオフを改めて検討してください。
すでに認証済みの会話を開き直すなどして、App ビュー自体が再マウントされた場合でも、有効なセッションがある間は QR コードは表示されません。これは Nordnet に対してリアルタイムで 2 回確認されます。単に「トークン文字列があるか」だけを確認するのではありません。存在していても無効なトークンは有効なセッションとして扱えないためです。1 回目はサーバー側で、nordnet_auth が新しい注文を生成する前に確認します。2 回目はビュー自体で、渡された内容を表示する前に確認します。渡された内容は、新しい呼び出しの結果ではなく、過去の結果が再生された古い内容である可能性があるためです。いずれの場合も、不要な新しい QR コードではなく、「すでにログインしています」というメッセージだけが表示されます。
ログイン後は、nordnet.se を開いたままのブラウザータブと同じように、サーバーの実行中はセッションも自動的に維持されます。そのため、アイドル状態が続いただけで再認証が必要になることは通常ありません。この機能はサーバープロセスの実行中にのみ有効です。Nordnet のアイドルタイムアウトを超える時間サーバーを停止すると、次回の起動時に再度ログインが必要になります。
QR ログインを使わない場合は、引き続きセッショントークンを手動で指定できます。詳しくはトークンの手動設定を参照してください。
機能
- Nordnet のポートフォリオ/口座データに読み取り専用でアクセスできます
- 口座、金融商品、参照データ、ログインに対応する 16 個の MCP ツール
- QR コードログイン — トークンを手動で抽出する必要はありません
- Nordnet Sweden、Norway、Denmark、Finland のホストに対応
- 環境変数によるセットアップ
- Python CLI エントリーポイント
nordnet-mcpとしてパッケージ化 - 技術的な知識がないユーザー向けのワンクリック Claude Desktop Extension
クイックスタート
1. uv をインストールする
まだ uv をインストールしていない場合:
curl -LsSf https://astral.sh/uv/install.sh | sh
2. 市場を設定する
サーバーの起動に使用する作業ディレクトリ(通常、uv run --directory ... を使う場合はリポジトリのルート)に .env ファイルを作成します。
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 がリポジトリのルートにない場合は、サーバーを起動する前にシェルで環境変数をエクスポートしてください。
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(または MCP クライアントのenvブロック)でNORDNET_SESSION_TOKENに設定します。 - 値は通常、
7f3a91c2-5648-4dbe-8a17-29c4e6b1f053のような UUID 形式です。
Claude Desktop Extension(最も簡単 — 技術的なセットアップは不要)
Claude Desktop を使っていて、ターミナル、設定ファイル、Docker に慣れていない場合は、こちらがおすすめです。ワンクリックでインストールでき、別途ソフトウェアを用意する必要はありません。
- リリースページから
nordnet-mcp.mcpbをダウンロードします。 - Claude Desktop → Settings → Extensions を開き、ダウンロードしたファイルをドラッグ&ドロップします(OS によってはダブルクリックでも開けます)。
- Install をクリックします。利用している Nordnet 市場を尋ねられるので、国を選んで確定します。
- Nordnet の口座について Claude に質問します。初回は QR コードが表示されるので、Nordnet モバイルアプリでスキャンしてログインを完了します。
これで完了です。Python、uv、Docker は必要ありません。Claude Desktop は、他の拡張機能と同じように、内蔵の Python/uv ランタイムを使ってサーバーを実行します(manifest.json で指定されています)。Claude Code やその他の MCP 対応エージェントを使う場合は、上記の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— QR コードログインを開始(または再開)します。対応ホストでは MCP App の画像として表示し、それ以外では ASCII アートとして表示しますnordnet_login_poll— アプリ専用です。保留中のログインをポーリングし、承認後に完了します
開発
uv sync --group dev
uv run pytest -q
uv build
デスクトップ拡張機能の公開
CI は nordnet-mcp.mcpb の検証とパッケージ化を行い、main へのプッシュごとに GitHub の latest リリースへ公開します。これはバージョンごとのリリースアーティファクトではなく、:latest Docker タグと同じ「常に最新」の方式です。手動での作業は不要です。Claude Desktop Extension(最も簡単。技術的な設定は不要) のダウンロードリンクは、常にそのリリースのアセットを参照します。
ローカルで実行する場合(たとえば、変更をプッシュする前に問題がないか確認する場合)は、次のようにします。
npx @anthropic-ai/mcpb validate .
npx @anthropic-ai/mcpb pack . nordnet-mcp.mcpb
.mcpbignore により、バンドルには uv ランタイムが必要とするもの(manifest.json、pyproject.toml、src/、server/)だけが含まれます。リポジトリ全体が含まれるわけではありません。
セキュリティに関する注意
.envをコミットしないでください。- セッショントークンを課題やログに貼り付けないでください。
- QR ログインのフローでは、セッショントークンがモデルや MCP App のビューに公開されることはありません。実行中のサーバーのメモリー内クライアントに直接適用され、ディスクに書き込まれることもありません。代わりに
NORDNET_SESSION_TOKENを手動で設定する場合は、.envファイルにパスワードが含まれているものとして扱ってください。実際にパスワードが含まれているためです。 - トークンの有効期間は短いため、401 またはセッション期限切れのエラーが発生した場合は、致命的なエラーとして扱わず、
nordnet_authを呼び出す(または手動で新しいトークンを取得する)ようにしてください。 - このサーバーは設計上、読み取り専用です。
制限事項
- セッションは、取得方法にかかわらず、アイドル状態が続くと数時間で期限切れになります。バックグラウンドのキープアライブ(ステータスを参照)が有効なのは、サーバープロセスが実際に実行されている間だけです。
- QR コードで取得したセッションはメモリー内にのみ保存され、サーバーを再起動すると失われるため、再起動後は再度ログインが必要です。実際の使用でこれが支障となる場合は、代わりに手動でトークンを設定してください。
- QR ログインには Nordnet モバイルアプリが必要です。利用できない場合は、ブラウザーから手動で抽出したセッショントークンを指定してください。
- QR ログインとキープアライブの仕組みは、Nordnet の非公式な動作に依存しているため、予告なく変更される可能性があります。このプロジェクトがラップするその他の API にも同じ注意が当てはまります。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。