mcpField
G
Ghostfolio MCP

Ghostfolio MCP

ローカル
github.com金融データ225 日前に更新

Ghostfolio MCP について

Ghostfolio MCP は、Ghostfolio の投資データに接続する Python 製 MCP サーバーです。AI エージェントや自動化ツール向けに読み取りと書き込みを提供し、読み取り専用モードやツールの絞り込みも設定できます。

主な機能

  1. 01保有資産、運用実績、配当、収益の取得
  2. 02口座、取引、残高の管理
  3. 03市場データの取得と銘柄検索
  4. 04取引のインポートとポートフォリオのエクスポート
  5. 05読み取り専用モードとタグによるツール選択

活用シーン

  1. 01投資ポートフォリオの実績を確認
  2. 02口座の取引、残高、配当を追跡
  3. 03過去の取引データを一括インポート

MCP 対応

ポートフォリオ、口座、取引、ベンチマーク、ウォッチリスト、市場データを扱う Ghostfolio のツールを MCP クライアントに公開し、読み取りと書き込みに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mhajder-ghostfolio": {
"command": "uvx",
"args": [
"ghostfolio-mcp"
],
"env": {
"GHOSTFOLIO_URL": "<GHOSTFOLIO_URL>",
"GHOSTFOLIO_TOKEN": "<GHOSTFOLIO_TOKEN>",
"GHOSTFOLIO_VERIFY_SSL": "<GHOSTFOLIO_VERIFY_SSL>",
"GHOSTFOLIO_TIMEOUT": "<GHOSTFOLIO_TIMEOUT>",
"READ_ONLY_MODE": "<READ_ONLY_MODE>",
"GHOSTFOLIO_DISABLED_TAGS": "<GHOSTFOLIO_DISABLED_TAGS>",
"LOG_LEVEL": "<LOG_LEVEL>",
"RATE_LIMIT_ENABLED": "<RATE_LIMIT_ENABLED>",
"RATE_LIMIT_MAX_REQUESTS": "<RATE_LIMIT_MAX_REQUESTS>",
"RATE_LIMIT_WINDOW_MINUTES": "<RATE_LIMIT_WINDOW_MINUTES>",
"TOOL_SEARCH_ENABLED": "<TOOL_SEARCH_ENABLED>",
"TOOL_SEARCH_STRATEGY": "<TOOL_SEARCH_STRATEGY>",
"TOOL_SEARCH_MAX_RESULTS": "<TOOL_SEARCH_MAX_RESULTS>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>"
}
}
}
}
起動コマンドuvx ghostfolio-mcp
設定が必要な環境変数
GHOSTFOLIO_URLGhostfolio base URL (e.g., https://domain.tld:3333)
GHOSTFOLIO_TOKENシークレットGhostfolio API token for authentication
GHOSTFOLIO_VERIFY_SSLVerify SSL certificates (true/false)
GHOSTFOLIO_TIMEOUTRequest timeout in seconds
READ_ONLY_MODEEnable read-only mode to restrict write operations
GHOSTFOLIO_DISABLED_TAGSComma-separated list of tags to disable tools for
LOG_LEVELLogging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
RATE_LIMIT_ENABLEDEnable rate limiting
RATE_LIMIT_MAX_REQUESTSMaximum requests per rate limit window
RATE_LIMIT_WINDOW_MINUTESRate limit window in minutes
TOOL_SEARCH_ENABLEDEnable FastMCP tool search transform
TOOL_SEARCH_STRATEGYTool search strategy (bm25 or regex)
TOOL_SEARCH_MAX_RESULTSMaximum tool search results returned by search_tools
MCP_HTTP_PORTPort for HTTP server (default: 8000)
MCP_TRANSPORTMCP transport type: stdio, sse, or http (alias: streamable-http)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypighostfolio-mcp1.8.1
ocighcr.io/mhajder/ghostfolio-mcp:1.8.1

ツール

38

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
account_idstringはい残高を取得する口座の ID

詳細

Ghostfolio MCP Server

AI エージェントが Ghostfolio の投資ポートフォリオを分析・管理できます

PyPI Python License

Pre-commit Checks Docker MCP Registry

インストール · ツール · 設定 · セキュリティ

Ghostfolio MCP Server は、Ghostfolio のポートフォリオ管理と金融データへの高度でプログラム可能なアクセスを提供するために設計された、Python ベースの Model Context Protocol(MCP)サーバーです。Ghostfolio の包括的な機能を通じて、投資ポートフォリオの照会、分析、管理を行うための最新の API を公開します。読み取り操作と書き込み操作の両方に対応し、堅牢なセキュリティ機能を備えているため、自動化ツール、金融ダッシュボード、カスタムのポートフォリオ管理アプリケーションとの統合に適しています。

✨ 機能

主な機能
  • 柔軟な期間を指定して、ポートフォリオのパフォーマンス、保有資産、ポジションを照会
  • 配当、リターン、資産配分などを含む包括的な投資データを取得
  • 詳細な市場データ、資産プロフィール、過去の価格情報にアクセス
  • ポートフォリオの指標、ベンチマーク、パフォーマンスの比較を監視
  • 複数の口座にわたる注文、取引、口座残高を追跡
  • 金融シンボル、株式、ETF、その他の資産を検索・照会
  • ユーザー情報、設定、口座の詳細を取得
管理操作
  • 異なる通貨やプラットフォームを使用する投資口座を作成・管理
  • 個別の取引やアクティビティを作成・削除・管理
  • 他のプラットフォームから取引や過去のデータをインポート
  • すべての書き込み操作を制限する読み取り専用モードを設定し、安全な監視を実現
  • 取引の一括インポートとポートフォリオデータの管理に対応
  • システムの健全性とプラットフォームの稼働状況を監視
高度な機能
  • レート制限と API セキュリティ機能
  • ポートフォリオのリアルタイム監視とパフォーマンス追跡
  • 包括的なログ記録と監査証跡
  • SSL/TLS 対応とタイムアウト設定
  • カスタムミドルウェアとタグベースのツールフィルタリングによる拡張
  • 大規模なツールカタログ向けのオプションのツール検索変換
  • HTTP トランスポートでのベアラートークンまたは OIDC/OAuth 認証

🚀 インストール

前提条件
  • Python 3.11~3.15
  • Ghostfolio インスタンスへのアクセス
  • 有効な Ghostfolio API トークン
PyPI からのクイックインストール

手軽に始めるには、PyPI からインストールします。

# Using UV (recommended)
uvx ghostfolio-mcp

# Or using pip
pip install ghostfolio-mcp

サーバーを実行する前に、Ghostfolio インスタンス用の環境変数を設定してください。

# Create environment configuration
export GHOSTFOLIO_URL=https://domain.tld:3333
export GHOSTFOLIO_TOKEN=your-ghostfolio-token

詳細については、https://pypi.org/project/ghostfolio-mcp/ をご覧ください。

ソースからインストール
  1. リポジトリをクローンします:
git clone https://github.com/mhajder/ghostfolio-mcp.git
cd ghostfolio-mcp
  1. 依存関係をインストールします:
# Using UV (recommended)
uv sync

# Or using pip
pip install -e .
  1. 環境変数を設定します:
cp .env.example .env
# Edit .env with your Ghostfolio URL and token
  1. サーバーを実行します:
# Using UV (recommended)
uv run ghostfolio-mcp

# Or using the installed command directly
ghostfolio-mcp
開発環境のセットアップ

追加のツールを使って開発する場合:

# Clone and install with development dependencies
git clone https://github.com/mhajder/ghostfolio-mcp.git
cd ghostfolio-mcp
uv sync --group dev

# Run tests
uv run pytest

# Run with coverage
uv run pytest --cov=src/

# Run linting and formatting
uv run ruff check .
uv run ruff format .

# Run type checking
uv run ty check .

# Setup prek hooks
uv run prek install

🔧 設定

環境変数

空白または空白文字のみの値は未設定として扱われ、デフォルト値が使用されます。 ブール値の設定では、true/false、1/0、yes/no、on/off(大文字と小文字は区別されません)を使用できます。 それ以外の値が設定されるとサーバーの起動時に停止するため、入力ミスによって読み取り専用モードや TLS 検証が意図せず無効になることはありません。

# Ghostfolio Connection Details
GHOSTFOLIO_URL=https://domain.tld:3333
GHOSTFOLIO_TOKEN=your-ghostfolio-token

# SSL Configuration
GHOSTFOLIO_VERIFY_SSL=true
GHOSTFOLIO_TIMEOUT=30

# Read-Only Mode
# Set READ_ONLY_MODE true to disable all write operations (put, post, delete)
READ_ONLY_MODE=false

# Disabled Tags
# Comma-separated list of tags to disable tools for (empty by default)
# Example: GHOSTFOLIO_DISABLED_TAGS=portfolio,symbol
GHOSTFOLIO_DISABLED_TAGS=

# Logging Configuration
LOG_LEVEL=INFO

# Rate Limiting (requests per minute)
# Set RATE_LIMIT_ENABLED true to enable rate limiting
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=60
RATE_LIMIT_WINDOW_MINUTES=1

# Tool Search Transform (Optional)
# Set TOOL_SEARCH_ENABLED true to replace full tool listings with search_tools + call_tool
TOOL_SEARCH_ENABLED=false
# Search strategy: bm25 (natural language) or regex (pattern match)
TOOL_SEARCH_STRATEGY=bm25
# Maximum number of tools returned by search_tools
TOOL_SEARCH_MAX_RESULTS=5

# Sentry Error Tracking (Optional)
# Set SENTRY_DSN to enable error tracking and performance monitoring
# SENTRY_DSN=https://[email protected]/6789
# Optional Sentry configuration
# SENTRY_TRACES_SAMPLE_RATE=1.0
# SENTRY_SEND_DEFAULT_PII=false
# SENTRY_ENVIRONMENT=production
# SENTRY_RELEASE=1.2.3
# SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# SENTRY_PROFILE_LIFECYCLE=trace
# SENTRY_ENABLE_LOGS=true

# MCP Transport Configuration
# Transport type: 'stdio' (default), 'sse' (Server-Sent Events), or 'http' (HTTP Streamable)
# 'streamable-http' is accepted as an alias for 'http'. Any other value stops
# the server at startup.
MCP_TRANSPORT=stdio

# HTTP Transport Settings (used when MCP_TRANSPORT=sse or MCP_TRANSPORT=http)
# Host to bind the HTTP server (default: 127.0.0.1)
# MCP_HTTP_HOST=127.0.0.1
# Port to bind the HTTP server (default: 8000)
# MCP_HTTP_PORT=8000
# Optional bearer token for authentication (leave empty for no auth)
# MCP_HTTP_BEARER_TOKEN=

# OIDC / OAuth Authentication (optional, for remote hosting)
# Set all four to enable; takes precedence over MCP_HTTP_BEARER_TOKEN
# OIDC_CONFIG_URL=https://id.example.com/.well-known/openid-configuration
# OIDC_CLIENT_ID=
# OIDC_CLIENT_SECRET=
# OIDC_BASE_URL=https://ghostfolio-mcp.example.com
# Optional OIDC settings
# OIDC_REDIRECT_PATH=/auth/callback
# OIDC_REQUIRED_SCOPES=
# OIDC_ALLOWED_REDIRECT_URIS=
# OIDC_VERIFY_ID_TOKEN=false
# OIDC_FORWARD_RESOURCE=false
Sentry によるエラー追跡とモニタリング(任意)

サーバーでは、エラー追跡、パフォーマンスモニタリング、デバッグに Sentry を任意で利用できます。Sentry の統合は完全に任意で、設定されている場合にのみ初期化されます。

インストール

Sentry によるモニタリングを有効にするには、オプションの依存関係をインストールします:

# Using UV (recommended)
uv sync --extra sentry
設定

.env ファイルで SENTRY_DSN 環境変数を設定して、Sentry を有効にします:

# Required: Sentry DSN for your project
SENTRY_DSN=https://[email protected]/6789

# Optional: Performance monitoring sample rate (0.0-1.0, default: 1.0)
SENTRY_TRACES_SAMPLE_RATE=1.0

# Optional: Include personally identifiable information (default: false).
# When true, tool inputs and outputs (portfolio data) are sent to Sentry.
SENTRY_SEND_DEFAULT_PII=false

# Optional: Environment name (e.g., "production", "staging")
SENTRY_ENVIRONMENT=production

# Optional: Release version (auto-detected from package if not set)
SENTRY_RELEASE=1.2.2

# Optional: Profiling - continuous profiling sample rate (0.0-1.0, default: 1.0)
SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0

# Optional: Profiling - lifecycle mode for profiling (default: "trace")
# Options: "all", "continuation", "trace"
SENTRY_PROFILE_LIFECYCLE=trace

# Optional: Enable log capture as breadcrumbs and events (default: true)
SENTRY_ENABLE_LOGS=true
機能

有効にすると、Sentry は次の情報を自動的に取得します:

  • 例外とエラー:コンテキスト情報を含む、処理されなかったすべての例外
  • パフォーマンス指標:リクエスト/レスポンスの時間とトレース
  • MCP の統合:MCP サーバーのアクティビティとインタラクションの詳細
  • ログとブレッドクラム:デバッグ用のアプリケーションログとイベントの記録
  • コンテキストデータ:環境、クライアント情報、リクエストパラメーター
Sentry DSN の取得
  1. sentry.io で無料アカウントを作成します
  2. 新しい Python プロジェクトを作成します
  3. プロジェクトの設定から DSN をコピーします
  4. .env ファイルに設定します
Sentry の無効化

Sentry は完全に任意です。SENTRY_DSN を設定しない場合、サーバーは Sentry と統合されずに通常どおり動作し、モニタリングデータも収集されません。

🧰 利用可能なツール

アカウント管理ツール
  • get_accounts:ポートフォリオ内のすべてのアカウントを、アカウント種別と残高を含めて取得します
  • get_account_balances:特定のアカウントの残高を取得します
  • create_account:ポートフォリオに新しいアカウントを作成します
  • delete_account:ポートフォリオから既存のアカウントを削除します(破壊的な操作)
  • get_account_details:特定のアカウントの詳細を取得します
  • update_account:既存のアカウントの設定または詳細を更新します
  • transfer_account_balance:2 つのアカウント間で現金残高を移動します
  • create_account_balance:残高履歴の特定の日付のアカウント残高を設定します(デフォルトは今日)
  • delete_account_balance:アカウントの残高履歴から単一の項目を削除します
ポートフォリオと取引の管理ツール
  • get_portfolio_performance:リターン、ベンチマーク、パフォーマンス指標など、ポートフォリオのパフォーマンスデータを取得します
  • get_portfolio_holdings:配分や資産の内訳など、ポートフォリオの保有資産とポジションを取得します
  • get_portfolio_details:アカウント、ポジション、概要など、ポートフォリオの包括的な詳細を取得します
  • get_position:データソースから特定のシンボルのポジション詳細を取得します
  • get_investments:キャッシュフローと拠出額を期間別にまとめた投資データを取得します
  • get_dividends:配当金の支払いと利回りを期間別にまとめた配当データを取得します
  • get_orders:ポートフォリオ内のすべてのアクティビティ/注文を取得します。アカウントで絞り込むこともできます
  • create_activity:タグを付けることもできる、ポートフォリオ内の新しい取引/アクティビティを 1 件作成します(BUY、SELL、DIVIDEND、INTEREST、FEE など)
  • update_activity:タグを含め、既存のアクティビティ/取引を更新します。指定しないフィールドは現在の値が保持されます
  • delete_activity:ID を指定して単一のアクティビティ/取引を削除します(破壊的な操作)
ベンチマークツール
  • get_benchmarks:設定済みのすべてのベンチマークを取得します
  • get_benchmark_performance:特定の日付以降のポートフォリオのパフォーマンスをベンチマークシンボルと比較します
ウォッチリストツール
  • get_watchlist:ユーザーのウォッチリスト内のすべての項目を取得します
  • add_to_watchlist:ユーザーのウォッチリストにシンボルを追加します
  • remove_from_watchlist:ユーザーのウォッチリストからシンボルを削除します
為替レートツール
  • get_exchange_rate:指定した日付の、指定した通貨シンボルの為替レートを取得します
データエクスポートツール
  • export_portfolio:ポートフォリオのアクティビティ/取引データを JSON としてエクスポートします
市場データとシンボルツール
  • get_market_data_for_asset:特定の資産の市場データを取得します
  • add_market_data_points:資産の市場データポイントを 1 つ以上追加します(通常は MANUAL データソースです。Ghostfolio は自動取得されるソースへの書き込みを拒否します)
  • get_symbol_data:データソースから特定の資産のシンボルデータを取得します
  • get_historical_data:特定の日付における特定のシンボルの過去データを取得します
  • lookup_symbols:クエリ文字列を使ってシンボルを検索します
  • get_asset_profile:特定のシンボルの資産プロフィール情報を取得します
  • upsert_asset_profile:任意の countries および sectors の配分を含む資産プロフィールを作成または更新します(冪等性があり、作成時の Ghostfolio の HTTP 500 エラーを許容し、後続の PATCH を信頼できる情報源として利用します)
  • delete_asset_profile:資産プロフィールを削除します(破壊的な操作です。バックエンドのルールによっては、関連するアクティビティや市場データも削除される場合があります)
データインポートツール
  • import_transactions:ポートフォリオに取引をインポートします(一括インポート操作)
  • get_dividends_for_import:特定のシンボルについて、インポート用にフォーマットされた過去の配当データを取得します
システムとプラットフォームのツール
  • get_health:Ghostfolio バックエンドサービスのシステム稼働状況を取得します
  • get_platforms:口座の追跡に利用できるプラットフォーム(ブローカー、取引所など)の一覧を取得します
ユーザー管理ツール
  • get_user_info:ユーザー情報と設定を取得します

🔒 セキュリティと安全性の機能

読み取り専用モード

サーバーは、安全に監視できるよう、すべての書き込み操作を無効にする読み取り専用モードをサポートしています。

READ_ONLY_MODE=true

このモードを有効にすると、すべての情報への完全な読み取りアクセスを許可したまま、ポートフォリオデータへの変更をすべて防止します。

タグベースのツールフィルタリング

無効にするタグを設定して、特定のカテゴリのツールを無効にできます。

GHOSTFOLIO_DISABLED_TAGS=portfolio,symbol,import

利用可能なタグは次のとおりです。

  • account - 口座管理ツール(口座の作成、削除、更新、取得)
  • portfolio - ポートフォリオ分析とパフォーマンスのツール
  • symbol - シンボル検索とデータのツール
  • import - データインポートツール
  • asset - 資産プロフィールツール
  • user - ユーザー情報ツール
  • system - システム稼働状況とプラットフォーム情報のツール
  • activities - アクティビティ/取引管理ツール(アクティビティの作成、更新、削除)
  • watchlist - ウォッチリスト管理ツール
  • exchange-rate - 為替レートツール
  • export - データエクスポートツール
  • benchmark - ベンチマークツール
レート制限

サーバーは、API の利用を制御し、不正利用を防ぐためのレート制限をサポートしています。有効にすると、スライディングウィンドウアルゴリズムを使って、クライアントごとにリクエスト数を制限します。

.env ファイルで次の環境変数を設定して、レート制限を有効にします。

RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=60    # Maximum requests allowed per window
RATE_LIMIT_WINDOW_MINUTES=1   # Window size in minutes

RATE_LIMIT_ENABLED が true に設定されている場合、サーバーはレート制限ミドルウェアを適用します。環境に応じて RATE_LIMIT_MAX_REQUESTS と RATE_LIMIT_WINDOW_MINUTES を調整してください。レート制限が有効な場合、両方の値を 1 以上にする必要があります。無効な場合、これらの値は読み込まれません。

大規模なツールセットのツール検索

FastMCP のツール検索を使うと、ツールが多数あるサーバーのプロンプトサイズを削減できます。 有効にすると、list_tools は次の 2 つの合成ツールを返します。

  • search_tools:一致するツールを検索し、完全なスキーマを返します
  • call_tool:名前を指定して、検出した任意のツールを実行します

次のようにして有効にします。

TOOL_SEARCH_ENABLED=true
TOOL_SEARCH_STRATEGY=bm25      # bm25 or regex
TOOL_SEARCH_MAX_RESULTS=8      # optional, default is 5

bm25 は自然言語のクエリに対応し、regex は決定論的な照合に使う正規表現の pattern 入力を使用します。ツール検索が有効な状態で、別の戦略を指定するか、 TOOL_SEARCH_MAX_RESULTS を 1 未満にすると、起動時にサーバーが停止します。 無効な場合、これらの設定は読み込まれません。

ツール検索では、既存の可視性制御(読み取り専用モードと無効化されたタグ)が引き続き適用されます。

SSL/TLS の設定

サーバーは SSL 証明書の検証とカスタムタイムアウト設定に対応しています。

GHOSTFOLIO_VERIFY_SSL=true    # Enable SSL certificate verification
GHOSTFOLIO_TIMEOUT=30         # Connection timeout in seconds
トランスポートの設定

サーバーは、さまざまなデプロイシナリオに対応する複数のトランスポートプロトコルをサポートしています。

STDIO トランスポート(デフォルト)

デフォルトのトランスポートでは、標準入力/出力を使って通信します。標準入力/出力を介して通信するツールとのローカルでの使用や統合に最適です。

MCP_TRANSPORT=stdio
HTTP SSE トランスポート(Server-Sent Events)

ネットワークベースでデプロイする場合は、Server-Sent Events を使った HTTP を利用できます。これにより、リアルタイムストリーミングを使って HTTP 経由で MCP サーバーにアクセスできます。

MCP_TRANSPORT=sse
MCP_HTTP_HOST=127.0.0.1        # Localhost
MCP_HTTP_PORT=8000           # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token

SSE トランスポートでベアラートークンを使用する場合、クライアントはリクエストにトークンを含める必要があります。

curl -H "Authorization: Bearer your-secret-token" http://localhost:8000/sse
HTTP Streamable トランスポート

HTTP Streamable トランスポートは、リクエスト/レスポンスのストリーミングに対応した HTTP ベースの通信を提供します。ウェブとの統合や HTTP エンドポイントを必要とするツールに最適です。

MCP_TRANSPORT=http
MCP_HTTP_HOST=127.0.0.1        # Localhost
MCP_HTTP_PORT=8000           # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token

Streamable トランスポートでベアラートークンを使用する場合:

curl -H "Authorization: Bearer your-secret-token" \
     -H "Accept: application/json, text/event-stream" \
     -H "Content-Type: application/json" \
     -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
     http://localhost:8000/mcp

注:HTTP トランスポートでは、jsonrpc フィールドと id フィールドを含む適切な JSON-RPC 形式が必要です。一部の操作では、サーバーでセッションの初期化も必要になる場合があります。

ヘルスエンドポイント

どちらの HTTP トランスポート(sse と http)でも GET /health を提供し、サーバーがリクエストを処理している場合は 200 ok を返します。ベアラートークンや OIDC ログインは不要で、Ghostfolio にも接続しません。そのため、Ghostfolio が停止しても MCP サーバーが異常と判定されることはありません。Docker イメージの HEALTHCHECK ではこのエンドポイントを使用します。

curl http://localhost:8000/health
OIDC/OAuth 認証(任意)

マシン間のクライアントには静的なベアラートークンで十分ですが、多くの MCP クライアントは Dynamic Client Registration を用いた OAuth でしか認証できません。そのようなクライアントに対応するため、サーバーは FastMCP の OIDCProxy を使用して、既存の OIDC ID プロバイダー(Authentik、Keycloak、PocketID、Auth0、Entra ID、...)の手前で OAuth インターフェースとして動作できます。クライアントはこのサーバーに登録して認証し、サーバーが上流のフローを仲介します。Ghostfolio の認証情報がクライアントに渡ることはありません。

これは sse と http のトランスポートにのみ適用されます。

クライアントの登録

ID プロバイダーで機密クライアント(クライアント ID とシークレット)を作成し、リダイレクト URI を OIDC_BASE_URL と OIDC_REDIRECT_PATH を連結したものに設定します。例:https://ghostfolio-mcp.example.com/auth/callback。

設定
MCP_TRANSPORT=http
MCP_HTTP_HOST=0.0.0.0
MCP_HTTP_PORT=8000

# All four are required to enable OIDC
OIDC_CONFIG_URL=https://id.example.com/.well-known/openid-configuration
OIDC_CLIENT_ID=your-client-id
OIDC_CLIENT_SECRET=your-client-secret
# Public URL where this server is reachable, used to build its OAuth endpoints.
# Must be HTTPS (except on localhost), as required for an OAuth issuer.
OIDC_BASE_URL=https://ghostfolio-mcp.example.com

OIDC の設定は完全に任意です。これらを設定しなければ既存の動作が維持され、設定が不完全な場合は中途半端に有効化されるのではなく、警告が表示されて無視されます。OIDC を設定すると、MCP_HTTP_BEARER_TOKEN より優先されます。

任意の設定:

# Callback path registered on the identity provider (default: /auth/callback)
OIDC_REDIRECT_PATH=/auth/callback

# Comma-separated scopes required on presented tokens
OIDC_REQUIRED_SCOPES=openid,profile

# Comma-separated allowed client redirect URI patterns (wildcards accepted)
OIDC_ALLOWED_REDIRECT_URIS=https://example.com/*

# Verify the id_token instead of the access token (default: false)
OIDC_VERIFY_ID_TOKEN=false

# Forward the RFC 8707 'resource' indicator upstream (default: false)
OIDC_FORWARD_RESOURCE=false

OIDC_ALLOWED_REDIRECT_URIS を設定すると、フローを完了できるクライアントを制限できます。設定しない場合、クライアントが登録する任意のリダイレクト URI が受け入れられるため、https://example.com/* のように、想定されるホストを設定してください。

ID プロバイダーが不透明な(JWT ではない)アクセストークンを発行する場合は、OIDC_VERIFY_ID_TOKEN=true を設定してください。その場合、代わりに id_token が検証されます。

OIDC_FORWARD_RESOURCE はデフォルトで無効です。これは、RFC 8707 のリソースインジケーターを実装していない ID プロバイダーが認可リクエストを invalid_request で拒否し、同意の直後にログインが失敗するためです。プロバイダーがリソースインジケーターに対応している場合にのみ有効にしてください。どちらの場合も、トークンのオーディエンスバインディングには影響しません。

OAuth の状態の永続化

クライアント登録と暗号化されたトークンは、FastMCP のデータディレクトリ内のディスクに保存されます。このディレクトリが永続化されていない場合、再起動のたびにすべてのクライアントが再登録・再認証を行う必要があります。Docker イメージでは FASTMCP_HOME=/data が設定されているため、ここにボリュームをマウントしてください。

docker run -v ghostfolio-mcp-data:/data --env-file .env ghcr.io/mhajder/ghostfolio-mcp:latest
リバースプロキシの背後で実行する

OIDC_BASE_URL には外部から到達可能な HTTPS URL を指定する必要があります。また、プロキシは Host ヘッダーを変更せずに転送する必要があります。そうしないと、このサーバーが通知する OAuth メタデータのホストが誤ったものになります。

📊 データソース

Ghostfolio は、マーケットデータとシンボルに複数のデータソースをサポートしています。

  • YAHOO - Yahoo Finance のデータソース
  • COINGECKO - 暗号資産データ用の CoinGecko
  • MANUAL - 手動入力データ
  • その他、Ghostfolio インスタンスで設定されたデータソース

データソースパラメーターが必要なツールを使用する場合は、資産の種類に応じた適切なソースを指定してください。

🐳 Docker の使用

簡単にデプロイできるよう、GitHub Packages で Docker イメージを利用できます。このイメージは、ポート 8000(/mcp)で Streamable HTTP トランスポートを実行します。

docker pull ghcr.io/mhajder/ghostfolio-mcp:latest

OIDC 認証が有効な場合は、コンテナーを再作成しても OAuth クライアント登録が保持されるよう、/data にボリュームをマウントしてください。

Open WebUI

Open WebUI 0.6.31 以降では、このイメージに直接接続できます。別個の MCPO イメージ(ghcr.io/mhajder/ghostfolio-mcpo)は、現在公開されていません。Open WebUI で、Admin Settings > Integrations > External Tool Servers に移動し、タイプを MCP (Streamable HTTP) にして、URL に http://<host>:8000/mcp を指定して接続を追加し、Bearer 認証には MCP_HTTP_BEARER_TOKEN を設定してください。

OIDC 認証が有効な場合は、こちらが優先され、Bearer トークンは受け付けられません。OIDC_BASE_URL + /mcp の URL を使い、認証方式として OAuth 2.1 を選択してください。Open WebUI はクライアントとして自身を登録するため、OIDC_ALLOWED_REDIRECT_URIS を設定する場合は、Open WebUI の URL を含めてください。

🤝 貢献

貢献を歓迎します。開発環境のセットアップ、チェック、コミットメッセージの形式については、CONTRIBUTING.md をご覧ください。バグや機能リクエストには、イシューテンプレートをご利用ください。

セキュリティ上の問題を発見した場合は、SECURITY.md の説明に従って、非公開で報告してください。

📜 ライセンス

GNU Affero General Public License v3.0 以降。詳細はLICENSEをご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。