Fmind Freelance AI Architect Website について
Fmindのサーバーサイドレンダリングのポートフォリオサイトには、記事とLLMホスティング費用、MCPコンテキスト費用の計算ツールがあります。インフラ予算やMCPサーバーによるトークン増加分を検討する訪問者向けです。
主な機能
- 01オープンウェイトモデルのホスティング費用とマネージドAPI費用の比較
- 02ワークロード、ハードウェア、性能、APIの条件調整
- 03リクエスト単位と月単位のMCPトークン数の推定
- 04費用の算出方法、前提条件、日付付き情報源の表示
活用シーン
- 01LLMワークロードのホスティング予算の試算
- 02マネージドAPIとGKE上のモデルホスティングの比較
- 03選択したMCPサーバーによるコンテキスト増加分の把握
MCP 対応
サイトには、GitHub、Filesystem、Memory、Playwrightなど選択したサーバーの実測値を使うMCPコンテキスト費用計算ツールがあります。また、サイトのMCPサーバー検出エンドポイントについても説明しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://www.fmind.dev/mcpclaude mcp add --transport http fmind-portfolio https://www.fmind.dev/mcp{"mcpServers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}Cursor で開く{"servers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}VS Code で開く{"mcpServers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}{"mcpServers":{"fmind-portfolio":{"serverUrl":"https://www.fmind.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
10このツールにパラメーターはありません。
詳細
www
Médéric Hurier (Fmind) は、AI エージェント、MLOps、セキュリティを専門とするフリーランスのAIアーキテクトです。ウェブサイトは Python でサーバーサイドレンダリングされており、Litestar、strict Jinja、Tailwind CSS v4、DaisyUI v5、Granian を使用しています。ページごとの小規模な JavaScript コントローラーが、標準のナビゲーションとフォームを拡張します。クライアントフレームワーク、アプリケーションデータベース、実行時 CDN はありません。Google Analytics 4 は明示的な同意の後にのみ読み込まれます(アナリティクスとプライバシーを参照)。
LLM ホスティング予算ツールでは、GKE 上で選択したオープンウェイトモデルとマネージド API を比較できます。シンプルモードでは、ワークロード、任意の日次呼び出し回数、モデル(パラメーター数順に表示。Mixture-of-Experts モデルではアクティブパラメーターを使用)、料金プラン、日次利用時間帯を指定します。チームでは、ノードを常時稼働させる8時間の勤務日が既定です。ドキュメント処理ジョブとスケジュールされたワークフローでは、アクティブな時間帯に限ってノードが稼働するものとします。結果はコストに関する判断を先頭に示し、予算は丸めて表示します。正確なコスト、損益分岐点、セットアップの前提条件、方法、出典を含むすべてのセクションは、開閉式のウィジェットを使わず常に表示されます。コンパクトな 4B モデルは L4 の初期構成として利用できます。Mistral Small 4 は、ドキュメントに記載された NVFP4 シングル G4 構成を既定とし、コンテキスト上限は 16,384 トークンです。詳細設定では、カスタムのトークン予算、ハードウェア、パフォーマンス、API モードを指定できます。キャパシティの確認では、稼働時間とアクティブな時間帯を個別に扱います。速度に関する前提はすべて参考値です。合計にはコンピューティング費用と GKE の料金が含まれ、運用費用や追加サービスは含まれません。計算式、上限、出典情報については、日付入りのソーススナップショットを参照してください。
MCP コンテキストコスト計算ツールでは、実際の MCP サーバーがすべてのモデルリクエストに追加するトークン数を確認できます。利用者は計測済みのサーバー(GitHub の既定ツールセット、Filesystem、Memory、Playwright)を選択し、1日あたりのモデルリクエスト数を入力します。ページには、リクエストごとおよび30日間の月間トークン数、コンテキストに占める割合、ホスティング料金スナップショットに記載されたマネージド API の1,000リクエストあたりおよび月間の標準入力コストが表示されます。標準の GET フォームは JavaScript を必要とせず、UTM タグなど無関係なクエリキーは無視します。計算方法と出典情報を参照してください。これらの参考値はプロバイダーの請求額ではありません。
開発
mise、Buildx 対応の Docker Engine、および初回のツール/ブラウザーのインストールとイメージ/スキャナーのダウンロードに必要なネットワークアクセスが必要です。Python とその他のツールチェーンは mise.toml と mise.lock で固定されています。.mise/locks/ にはブラウザーツールの推移的な npm 依存関係が記録されており、ロックファイルの更新とともにコミットする必要があります。
mise install
mise run install
mise run watch
http://localhost:8080 を開いてください。別のポートを使う場合は、PORT=8081 mise run watch を実行します。.env.example に実行時変数が記載されています。.env ファイルは自動的には読み込まれません。既定の環境は development です。本番環境では ENVIRONMENT=production を設定します。リロードの監視対象は src/、content/、static/ です。環境や設定を変更した後は再起動してください。
src/www/app.py は不変の起動時スナップショットとルートを構築します。src/www/__main__.py は Granian を起動します。テンプレートは wheel のパッケージデータです。イメージは、分離された content/ と static/ のツリーを、ロックされた環境の隣にコピーします。AGENTS.md には、モジュールの担当範囲と不変条件が記載されています。
コンテンツとデザイン
src/www/data.pyには、ポートフォリオの事実情報、サービスの利用可否、HTML、JSON/JSON-LD、vCard、LLM テキストが含まれています。これらの各箇所で、オーナーの語り口と事実に関する主張を維持してください。
サイトでは、fmind/theme のライトモード専用 Fmind DESIGN.md を採用しています。白、ライトグレー、チャコール、ブルー #174EA6 を使用し、Google Sans で組んでいます。インターフェースの色は assets/css/input.css で管理し、構文の色は src/www/highlighting.py で管理しています。テストでは、明示的に指定された企業ブランドカラーの例外を除き、カラーパレットを検証します。Tailwind は src/www/templates/**/*.html をスキャンします。
フォントには、セルフホストの Google Sans と Google Sans Code のサブセットを使用しています。フォント生成ツールは、上流リリースを固定し、予約済みのロゴ合字を削除して、タイムスタンプを保持します。公開用のブランド素材は /logo.png と /banner.png です。非公開のポートレート原本は static/ の外に保管してください。build:portrait は、向きと ICC 情報を保持し、個人メタデータを削除した /portrait.jpg(長辺 2048px)を書き出します。
イベントでは /connect を共有してください。LinkedIn、vCard、ウェブサイト全体へのリンクが用意されています。/scan は noindex の QR ユーティリティです。どちらの連絡先カードも RSS コントロールを表示せず、Cookie 設定へのアクセスを維持します。画面が短い場合は、QR コードを引き続き表示できるよう、ポートレートを小さくします。UTF-8 の vCard 3.0 は、ポートフォリオデータから公開可能な職務情報とサニタイズ済みのポートレートを生成し、電話番号、住所、生年月日、正確な座標は含めません。
content/articles/ の記事では、厳格な TOML フロントマターを使用します。検証済みの記事コレクションは、公開時に下書きを除外し、すべての公開面に反映されます。build:images はレスポンシブな WebP 派生画像と SHA-256 の来歴ロックを生成し、check:images はファイルを書き込みません。図版は幅 1280px のカラムに収まります。最初の図版はブラウザーが選択した優先度で即時読み込みされ、後続の図版は遅延読み込みされます。導入テキストの下に配置されることがあるため、記事の図版は先読みしません。コードのハイライトはサーバーサイドで行い、コードを含む記事でのみコード用フォントを先読みします。article skill に従ってください。
意思決定ツールでは、型付きの Python 数式、標準の GET フォーム、日付付きの出典、明示的な計画上の制限を使用します。data.py:SITE_PAGES に登録し、site skill に従ってください。
タスク
mise.toml はフックと CI で使用する正式な契約です。すべてのタスクとエイリアスは mise tasks で確認できます。
| コマンド | 目的 |
|---|---|
mise run all | フォーマット、チェック、ビルド、pytest、OCI のビルド/スキャン/スモークテスト、Chromium のインストール、ブラウザー操作 |
mise run check | メタデータ/ロックファイル、Ruff、ty、dprint、シークレット、依存関係、Docker/IaC/ワークフローのスキャン、イメージの来歴、誤字 |
mise run test | ブランチカバレッジ 85% 以上、警告をエラーとして扱うオフライン pytest |
mise run check:tofu | バックエンド不要のプロバイダー検証、tflint、モックを使ったインフラストラクチャ計画のテスト |
mise run check:links | ネットワーク依存の外部リンク監査。マージゲートとは別に定期実行されます |
mise run test:browser | デスクトップ/モバイル版 Chromium での操作 |
mise run test:browser:cross | Firefox/WebKit による対象を絞った操作 |
mise run test:lighthouse:local | 一時的なローカルサーバーと、厳格な 14 項目の監査によるポートフォリオ/計算機マトリックス |
mise run build | 本番用 CSS、wheel、ソース配布物 |
mise run check:image | tmp/www-image.tar のビルドとスキャン |
mise run test:image [digest-ref] | 既存のアーカイブまたは指定されたリモートダイジェストのスモークテスト |
mise run check:image:deployed | Cloud Run のトラフィックを受け取るすべてのイメージを解決してスキャン |
mise run build:branding / build:fonts / build:images | レビュー済みアセットを必要に応じて再生成 |
mise run build:portrait <private-master.jpg> | サニタイズ済みの公開ポートレートをエクスポート |
mise run test:candidate / test:deployed | タグ付けされた候補と昇格後のトラフィックを対象とする CI リリースチェック。IMAGE_REF、GITHUB_SHA、gcloud が必要 |
mise run deploy <digest-ref> <commit-sha> | コミットラベルと全トラフィックを指定した手動のイメージロールアウト/ロールバック。本番環境を変更します |
all は順次実行され、ビルド出力とイメージアーカイブを再利用します。Docker/Buildx が必要ですが、クラウドの認証情報は必要ありません。アセット生成、clean、ウォッチャー、ライブスキャン、デプロイは必要に応じてのみ実行されます。clean は生成された出力を削除します。
Lighthouse は別に実行します。Chromium をインストールしてから、mise run test:lighthouse -- --base-url <origin> --mode portfolio を実行すると、ポートフォリオ、連絡先、プライバシー、アーカイブのインデックス、2 つの計算機を対象に、デスクトップ/モバイルで 14 項目の監査を実行します。smoke は 4 項目の監査を実行します。デフォルトの full はサイトマップに加えて 48 項目のストレス監査を実行します。パフォーマンス監査はビルドやフォント生成と並行して実行しないでください。ページごとの正確なスコアを維持してください。
クロスブラウザーのチェックには、install:browser:cross とPlaywright のシステムライブラリ、または PW_TEST_CONNECT_WS_ENDPOINT 経由で対応する公式ブラウザーコンテナーが必要です。週次/手動の品質ワークフローでは、一時的なランナーをプロビジョニングし、証跡を14日間保持します。ブラウザースイートはローカルポート8096を共有するため、順番に実行してください。本番環境のジャーニーには BROWSER_BASE_URL=https://www.fmind.dev を設定してください。設定しない場合、ローカルサーバーは自動的に起動・停止します。
デプロイ済みのコミットを確認した後、gh workflow run quality.yml -f target=production でそのワークフローを実行すると、クリーンなランナー上で公開サイトに対して Chromium、Firefox、WebKit、および同じ厳格な Lighthouse マトリクスを実行できます。デフォルトの local ターゲットではチェックアウトを検証します。本番モードでサービスがデプロイまたは変更されることはありません。他のワークステーションのワークロードがパフォーマンス測定に影響する場合は、失敗したレポートとスコアのしきい値を保持できるよう、ランナーの証跡を使用してください。
デプロイ
Cloud Run はプロジェクト www-fmind-dev、リージョン europe-west1 で https://www.fmind.dev/ を提供します。infra/ ではサービス設定、レジストリ、鍵なしの ID、アラート、分析を管理します。サービスレベルとリビジョンレベルの両方で最小インスタンス数を0、最大インスタンス数を5、CPU割り当てをリクエストベースにしてください。検証済みの実行環境では、CPU 1個、512 MiB、同時実行数32、リクエストタイムアウト30秒、5秒間隔での起動試行12回を使用します。起動時に記事の Markdown を一度だけビルドし、HTTP、LLM テキスト、MCP で使用します。最大インスタンス数はスケーリングを制限するもので、請求額の厳密な上限ではありません。トラフィック割り当てのないタグ付きリビジョンは、それぞれ個別に5インスタンスまでに制限されますが、サービスの最大数には含まれません。
main へのプッシュでは、完全なゲートを実行し、SBOM/来歴情報付きの非 root イメージをビルドしてプッシュした後、不変のダイジェストをスキャンしてスモークテストします。続いて、トラフィックを割り当てずに candidate タグのリビジョンを作成します。test:candidate では、そのリビジョンが IMAGE_REF/GITHUB_SHA と一致し、タグ付きの run.app URL でヘルス、プロファイル、MCP サーバーカードを提供することを確認します。確認に成功した場合に限り、CI はトラフィックの100%をその正確なリビジョンにルーティングします。候補の検証に失敗した場合、トラフィックは以前のリビジョンに残ります。最後に test:deployed で、トラフィックの100%を受け取る準備完了済みのリビジョンが IMAGE_REF と GITHUB_SHA に一致することを確認し、ゼロへのスケールダウンのチェックを維持したうえで、公開環境のヘルス、プロファイル、MCP ディスカバリーを検証します。CI が自動的にロールバックすることはありません。この昇格後のチェックに失敗した場合、所有者が以下の手動ロールアウトで直前に検証済みのダイジェストを再デプロイするまで、新しいリビジョンにトラフィックが残ります。デプロイ担当者にはログ読み取り権限がないため、エラーログの確認は独立したリリースチェックとして行います。Actions は SHA で固定し、Dependabot でエコシステムの更新を管理します。
Workload Identity Federation では、各 CI ID を main 上の単一のワークフローファイルにバインドします(SECURITY.md を参照)。OpenTofu はイメージを無視し、CI が管理するトラフィックを維持します。CI がインフラストラクチャを適用することはありません。トラフィックは検証済みのリビジョンに固定されるため、適用済みのサービステンプレートの変更が提供されるのは、次のデプロイでそのリビジョンが昇格した後です。
インフラストラクチャの変更には、レビュー済みの保存済みプランと、infra スキルによる所有者承認の適用が必要です。リモート状態は gs://www-fmind-dev-tfstate/infra/state にあります。ブートストラップ用バケットは別途管理され、バージョニングとパブリックアクセスの防止を強制する必要があります。アプリケーションをデプロイする前に、サービスの変更を調整してください。既存のCloud Run ドメインマッピングは引き続きプレビュー機能であり、Google は本番環境での使用を推奨していません。推奨されるロードバランサーへの移行には、コスト、DNS、ロールアウトに関する別途の判断が必要です。
手動でロールアウト/ロールバックする場合、mise run deploy europe-west1-docker.pkg.dev/www-fmind-dev/app/www-fmind-dev@sha256:<64-lowercase-hex> <40-lowercase-hex-commit> は、完全修飾されたリポジトリダイジェストと、そのビルド元のコミットを受け付けます。manual-candidate の下にトラフィックを受けない一意の名前のリビジョンを作成し、ダイジェスト、コミット、容量ポリシー、タグ付きのヘルスチェック/検出機能を検証してから、そのリビジョンにトラフィックをルーティングします。候補の作成に失敗した場合や置き換えられた場合も、配信中のトラフィックには影響しません。タグ、別のリポジトリ、短い SHA や大文字の SHA、追加のフラグは、gcloud の実行前にエラーになります。新しいダイジェストでは、まず check:image:digest <digest-ref> と test:image <digest-ref> を実行してください。次に IMAGE_REF=<digest-ref> GITHUB_SHA=<commit-sha> mise run test:deployed を実行し、ブラウザーでの操作フローとエラーログを確認してください。ロールバックに備えて、直前の完全修飾ダイジェストを保持してください。Semver の公開については、リリーススキルに従ってください。
脆弱性の報告と残存するアドバイザリのレビューは SECURITY.md が定めています。デプロイでは、修正可能な HIGH/CRITICAL の脆弱性とシークレットをブロックします。定期スキャンでは、修正されていない検出結果を保持します。このスキャンには読み取り専用の別個の ID を使い、main 上の security.yml だけがその ID を引き受けられます。GitHub の依存関係アラート、セキュリティ更新、シークレットスキャン、プッシュ保護は有効になっており、main の削除と強制プッシュは禁止されています。
アナリティクスとプライバシー
/privacy では、2 つのデータフローについて説明しています。Google Analytics 4(G-Z28QKD99V2、プロパティ 538730900)は、訪問者が同意バナーで同意した場合にのみ www.fmind.dev で読み込まれます。すべてのページのフッターに Cookie 設定が表示され、拒否すると _ga Cookie が削除されます。また、再度同意すると、スクリプトを重複して読み込むことなくアナリティクスへの同意が復元されます。CSP で許可されるのは、Google の GA4 スクリプト、ビーコン、ピクセルのホストのみです。ブラウザーテストでは、候補ページでこれらの選択肢を試す間、Google へのリクエストをインターセプトします。脳の google-analytics センサーは、毎日プロパティのデータを収集します。HTML の GET レスポンスでは、パス/ステータスの集計値、リファラーのホスト名、検証済みの UTM トークン、ヒューリスティックによるボット判定が出力されます。リダイレクトは対象外で、地域情報は空のままです。BigQuery のパーティションは、Cloud Logging での重複保持を行わずに 180 日で期限切れになります。アナリティクスでは、IP アドレス、生のユーザーエージェント、完全なリファラー、Cookie、セッション、トレース識別子を収集しません。別個の非公開 Cloud Run 運用ログには、IP アドレス、ユーザーエージェント、完全な URL が含まれる場合があり、30 日で期限切れになります。
範囲を限定した無料のレポートには、website-analytics スキルまたは uv run --locked python -m scripts.website_analytics を使用してください。データが不完全、または変化している場合、レポートの生成は失敗します。また、レポートはユニーク訪問者数やコンバージョンを測定するものではありません。本番環境のレポートを Git に含めないでください。
トレースは、標準の OTEL_EXPORTER_OTLP_* 変数を通じてオプトインします。運用ログではトレース ID/スパン ID を関連付けますが、アナリティクスには含めません。
クラウドのコスト、予算、最適化のレビューには、finops-analytics を使用してください。OpenTofu は、課金 API と非公開の EU データセット billing_export を管理します。Cloud Console → Billing → Billing export で Standard usage cost を有効にし、プロジェクト www-fmind-dev とこのデータセットを選択してください。その他のエクスポートタイプは無効のままにしてください。アカウント全体のエクスポートには、プロジェクトでフィルタリングしたオンデマンドクエリを使用し、ドライランを行って、スキャン上限を 100 MiB に設定する必要があります。コストを利用できると案内する前に、有効化とテーブルへのデータ到着を確認してください。初回のバックフィルには最大 5 日かかる場合があります。
エージェントからのアクセス
公開されている/agentsガイドが統合リファレンスです。MCP クライアントを https://www.fmind.dev/mcp に接続すると、認証不要の読み取り専用ツールを利用できます。対象は、ポートフォリオ、出版物、検索、サービス、ホスティング比較、MCP コンテキストコストです。compare_mcp_context_cost は、型指定された servers(すべてを対象とする場合は省略)と requests_per_day の引数を受け取り、トークン数、コンテキスト占有率、モデルごとの入力コスト、日付付きの情報源、共有可能なシナリオを返します。無効な値はエラーになります。ブラウザーからのリクエストには同一オリジン保護が適用され、リクエスト本文のサイズには上限があります。MCP は POST リクエストに対して、有限の JSON レスポンスを返します。GET/HEAD は Allow: POST を伴う 405 を返します。このサービスは通知ストリームやサブスクリプションを提供しません。ツールがプロビジョニング、LLM の実行、サービスの予約、メッセージの送信を行うことはありません。
/api/profile とその JSON Schema は、LLM テキスト、フィード、サイトマップ、JSON-LD と同じ起動時スナップショットを共有します。ホームページと記事の各ルートは Accept: text/markdown と Vary: Accept に対応しており、同点の場合は HTML が優先されます。固定された記事の .md URL も引き続き利用できます。text/markdown に対応していないリーダーは、JavaScript を使わずに、通常の記事 URL からサーバー側でレンダリングされた HTML を読むことができます。検索してから個々の記事を読む方法を推奨します。/llms-full.txt は、コレクション全体が必要で、その全体を処理できるリーダー向けの一括エクスポートです。API カタログ、MCP サーバーカード、パッケージ化された訪問者向けスキルで情報を見つけられます。プロトコルのネゴシエーションには server/discover を使用してください。訪問者向けスキルは、リポジトリのメンテナンス用スキルとは別です。
ID、ルクセンブルクでの勤務場所、サービスの提供状況は src/www/data.py で管理します。ホームページ、プロフィール JSON/MCP、LLM の概要は、これらの事実を共有します。記事の HTML と Markdown には著者が明記され、/llms-full.txt には各記事の日付と正規リンクが保持されます。ローカルの Lighthouse タスクで検索結果での表示を検証してください。インデックス登録とランキングの確認には、デプロイ後に Search Console で別途得られるエビデンスが必要です。
server.json は io.github.fmind/portfolio のウェブサイトのリリースを記録します。MCP Registry への公開は、ライブ環境での検証後に所有者が別途行う作業です。次のコマンドを実行してください。mcp-publisher validate server.json、mcp-publisher login github、続いて mcp-publisher publish。最新の登録内容はRegistry APIで確認してください。情報が見つかることは、クライアントで採用されることや AI の引用を保証するものではありません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。