Focuslog について
Focuslogは、個人分析やAIアシスタント向けのデスクトップ活動記録MCPサーバーです。ウィンドウタイトルを記録してAPMを算出し、キーワード除外とローカルのOllamaによる匿名化を組み合わせてタイムラインを作成します。LinuxのX11環境向けです。
主な機能
- 01アクティブウィンドウのタイトルを定期記録
- 02キーボードとマウスの操作からAPMを算出
- 03連続した活動をまとめてタイムライン化
- 04キーワードフィルターとOllamaによる匿名化
- 05ウィンドウタイトルの整形と短縮
活用シーン
- 01一定期間のデスクトップ活動の振り返り
- 02個人の活動量やAPMの分析
- 03匿名化した活動タイムラインのAIアシスタントへの提供
MCP 対応
FastMCPを使って `get_activity_log` ツールを公開し、MCPクライアントから匿名化・集約済みの活動タイムラインを取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
FocusLog:デスクトップアクティビティ MCP サーバー
デスクトップでのアクティビティを記録し、アクション数/分(APM)を算出して、必要に応じてクリーンで匿名化された作業タイムラインを提供するバックグラウンドサーバーです。個人分析や AI アシスタント向けのデータソースとして設計されています。
このサーバーは、通信に FastMCP、AI による匿名化に Ollama、アクティビティの追跡に標準的な Linux ツールを使用します。
機能
- アクティビティの記録:現在フォーカスされているウィンドウのタイトルを定期的に記録します。
- APM の追跡:キーボードとマウスのアクティビティに基づいて、アクション数/分(APM)を算出します。
- タイムラインの集約:連続するアクティビティをまとめて、圧縮された読みやすいタイムラインを作成します。
- 2 段階の匿名化:
- ハードコードされたフィルター:ユーザーが定義した機密キーワードを確実に削除します。
- LLM による匿名化:ローカルの Ollama モデルを使って、その他の個人を特定できる情報もインテリジェントに削除します。
- タイトルのサニタイズ:過度に長いウィンドウタイトルを整理して短縮します。
- 信頼性と設定の柔軟性:ログローテーション、正常なシャットダウンに対応し、すべての設定を別個の
config.pyファイルで管理します。 - Systemd サービス:信頼性を最大限に高めるため、常駐型のバックグラウンドサービスとして実行できます。
要件
システム依存関係
重要
互換性に関する注意:このサーバーは、X11 ディスプレイサーバー上で動作する Linux デスクトップ環境専用に設計されています。X11 エコシステムのツールに依存するため、Windows、macOS、ネイティブの Wayland セッションでは動作しません。
次のコマンドラインツールとライブラリをインストールしてください。
xdotool:アクティブなウィンドウタイトルの取得に使用します。xprintidle:ユーザーのアイドル時間の確認に使用します。ollama:ローカルの LLM の実行に使用します。- PyGObject:D-Bus 通信(画面ロックの検出に使用)に使用します。
Debian/Ubuntu/Linux Mint では、次のコマンドですべてインストールできます。
sudo apt update
sudo apt install xdotool xprintidle python3-gi python3-gi-cairo gir1.2-gtk-3.0
Ollama については、公式のインストール手順に従ってください。インストール後、モデルを取得してください。
ollama pull gemma3
Python の依存関係
このプロジェクトには Python 3.8 以降が必要です。パッケージの管理には仮想環境を使用します。
インストールとセットアップ
-
リポジトリをクローンします:
git clone https://github.com/your-username/focuslog.git cd focuslog -
仮想環境を作成します: システムの
PyGObjectライブラリにアクセスできる仮想環境を作成する必要があります。python3 -m venv venv --system-site-packages -
環境を有効にして、パッケージをインストールします:
source venv/bin/activate pip install -r requirements.txt deactivate(
deactivateと入力すると、環境を終了できます)。 -
設定ファイルを作成します:
cp config.py.example config.py -
設定を編集します: テキストエディターで
config.pyを開きます。- 必ず
FORBIDDEN_KEYWORDSリストに、常に削除したい個人データを追加してください。 - 必要に応じて、
OLLAMA_MODELやMCP_PORTなどの設定を調整します。
- 必ず
使い方
手動での起動(テスト用)
テストのためにサーバーを手動で実行するには、まず仮想環境を有効にします。
source venv/bin/activate
python focuslog.py
サーバーが起動し、コンソールにログが表示されます。停止するには Ctrl+C を押してください。
サービスとして実行する(推奨)
継続的かつ安定してバックグラウンドで動作させるには、FocusLog を systemd ユーザーサービスとして実行するのがおすすめです。ログイン時にサーバーが自動的に起動し、クラッシュした場合も再起動します。
-
サービスファイルを準備します:
cp focuslog.service.example focuslog.service -
focuslog.serviceを編集します: ファイルを開き、プレースホルダーのパスを実際のパスに置き換えます。WorkingDirectory=/home/your_username/path/to/focuslog-> 例:WorkingDirectory=/home/dw/projects/focuslogExecStart=...->venv/bin/pythonとfocuslog.pyのパスも更新します。- 重要:
User=やGroup=の行は追加しないでください。systemd --userが自動的に処理します。
-
サービスをインストールして有効にします:
mkdir -p ~/.config/systemd/user cp focuslog.service ~/.config/systemd/user/ systemctl --user daemon-reload systemctl --user enable --now focuslog.service--nowフラグを指定すると、次回以降のログイン時に有効になるだけでなく、すぐに起動します。 -
サービスを管理します:
- ステータスを確認:
systemctl --user status focuslog.service - ログを表示:
journalctl --user -u focuslog.service -f(ライブで追跡するには-fを指定) - 停止:
systemctl --user stop focuslog.service - 起動:
systemctl --user start focuslog.service
- ステータスを確認:
動作の仕組み
サーバーは、主に次の2つのバックグラウンドスレッドを実行します。
- APM センサー:0.5秒ごとにユーザー入力を確認し、アクティビティの「ティック」カウンターを更新します。
- ロガー:10秒ごとに、次の処理を行います。
- 現在アクティブなウィンドウのタイトルを取得します。
- タイトルをサニタイズします(短縮し、カスタムルールを適用します)。
- 直近1分間のティック数を基に、現在の APM を計算します。
- サニタイズしたタイトルと APM を SQLite データベースに保存します。
MCP クライアント経由で get_activity_log ツールが呼び出されると、次の処理を行います。
- データベースから生データを取得します。
- 重複しないすべてのウィンドウタイトルに対して2段階の匿名化を行い、パフォーマンス向上のため結果をキャッシュします。
- データを整理されたタイムラインに集約します。
- タイムラインを文字列として返します。
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。