mcpField
W
when-free

when-free

ローカル
github.com生産性03 週間前に更新

when-free について

when-freeは、会議調整向けのローカル空き時間ツールです。カレンダーフィードやICSファイルを読み取り、指定日時の空き枠を示し、貼り付けたメッセージからの日時抽出にも対応します。

主な機能

  1. 01Google、Outlook、iCloudの予定表を読み取り
  2. 02複数の予定表を統合
  3. 03メッセージから日付と時間帯を抽出
  4. 04時間の長さとタイムゾーンで枠を絞り込み
  5. 05CLI、MCP、HTTPで利用

活用シーン

  1. 01会議依頼への返信に空き時間を提示
  2. 02仕事用と個人用予定表を横断して候補を検索
  3. 03スクリプト向けに空き時間をJSONで出力
  4. 04別のタイムゾーンで空き時間を確認

MCP 対応

MCPサーバーは、設定済みカレンダーを使って空き時間と読み取り状況を返す`free_slots`および`check_calendars`をクライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"yauhenbichel-when-free": {
"command": "uvx",
"args": [
"when-free"
],
"env": {
"WHENFREE_CALENDARS": "<WHENFREE_CALENDARS>",
"WHENFREE_TZ": "<WHENFREE_TZ>"
}
}
}
}
起動コマンドuvx when-free
設定が必要な環境変数
WHENFREE_CALENDARSシークレットPrivate iCal addresses of your calendars, comma-separated. Optional if you saved them with `whenfree add`.
WHENFREE_TZTime zone for answers, like Europe/London. Default: the computer's.

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

パッケージ
pypiwhen-free0.4.1

ツール

3

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
tostringいいえ期間の最終日、YYYY-MM-DD。
daysstringいいえ特定の日付をカンマ区切りで指定します。ISO 日付が最も確実です:"2026-10-05, 2026-10-06"。次の形式も認識されます:"Thu 1 Oct, Fri 2 Oct"、"tomorrow"、"next week"。
fromstringいいえ期間の初日、YYYY-MM-DD。デフォルト:今日。
hoursstringいいえ提示する時間帯。形式は HH:MM-HH:MM(例:"10:00-16:00")、または "morning"、"afternoon"、"evening"。デフォルト:ユーザーが設定した時間帯。
messagestringいいえ候補日の日時を読み取るテキスト(例:空き時間を尋ねるメール)。明示的な日付を読み取り、ない場合は今日を基準とした表現("tomorrow"、"Thursday"、"next Tuesday"、"next week"、"any afternoon")を読み取ります。
timezonestringいいえ回答に使用するタイムゾーン(例:"Europe/London")。デフォルト:ユーザーのタイムゾーン。
weekendsbooleanいいえ期間に土曜日と日曜日を含めます。デフォルト:false。
min_minutesintegerいいえ返す時間枠の最短時間(分)。会議の長さに設定します。デフォルト:ユーザーの設定(通常は 60)。
all_day_busybooleanいいえ終日イベントを予定ありとして扱います。デフォルト:false。
include_busybooleanいいえ各日の予定をふさいでいるイベントとタイトルも返します。タイトルはプライベート情報です。ユーザーが表示を希望する場合にのみ尋ねてください。デフォルト:false。
buffer_minutesintegerいいえ各イベントの前後に確保する時間。デフォルト:ユーザーの設定(通常は 15)。

詳細

when-free

空いている時間を聞かれたときに、カレンダーを読み取って、すぐに貼り付けられる回答を返します。

テスト PyPI ライセンス:Apache-2.0

採用担当者のメッセージを入力すると、その日の空き時間が出力されます

  • メッセージを貼り付けると、空き時間がわかります。「来週の火曜日か水曜日、午前10時から午後4時」と読み取り、その日時だけを対象に回答します。
  • Google、Outlook、iCloud のカレンダー、または任意の .ics ファイルで使えます。複数のカレンダーを同時に利用できます。
  • **プライベートです。**コンピューター上で動作し、アカウントや API キーは不要で、カレンダーを変更することもありません。
  • **AI ツールからも使えます。**Claude、Cursor、その他の MCP クライアント、Open WebUI、n8n、Shortcuts、スクリプトに対応しています。
  • **ほかのデバイスでも使えます。**スマートフォン、タブレット、スマートウォッチ、Home Assistant(Alexa、Google Home、Siri からも利用できます)、macOS、Linux、Windows のメニューバーやステータスバーに対応しています。

目次

1 分で試す · カレンダーを追加する · 日常的な使い方 · メッセージを読み取る · ほかのツールから使う · ほかのデバイス · プライバシー · 設定 · 予定ありと見なされる条件 · 制限 · 問題が発生した場合 · 掲載先

1 分で試す

uv があれば、事前のインストールは不要です。

uvx when-free demo

インストールして使い続ける場合(Python 3.11 以降が必要です):

uv tool install when-free          # or: pipx install when-free
whenfree demo

Claude Desktop をお使いですか?以下をすべて省略できます。ワンクリック拡張機能をインストールしてください。

whenfree demo は来週の架空のカレンダーを作成し、それを使って採用担当者のメッセージに回答します。データは一切読み取らず、何も保存しません。

  > Hi! Thanks for applying. Could you share a few times on Tuesday, Wednesday or Thursday next week,
  > between 10am and 4pm? The interview takes about an hour.

  Free between 10:00 and 16:00 (Europe/London), slots of 60+ minutes, 15-minute buffer around events:
  - Tue 13 Oct: 11:45–12:45, 14:15–16:00
  - Wed 14 Oct: 12:15–14:15
  - Thu 15 Oct: 13:15–14:45

カレンダーを追加する

  1. カレンダーの非公開アドレスをコピーします。 .ics で終わるリンクです。

    カレンダー確認場所
    Google Calendar設定 → 左側でカレンダーをクリック → カレンダーの統合 → iCal 形式の非公開アドレス
    Outlook設定 → カレンダー → 共有カレンダー → カレンダーを公開 → ICS リンク
    iCloudカレンダー → カレンダーの横にある共有アイコン → 公開カレンダー(webcal:// リンクでも問題ありません)
    その他任意の .ics リンク、またはエクスポートした .ics ファイル
  2. whenfree add を実行して貼り付けます。 貼り付け中にアドレスは表示されません。まず確認が行われ、使える場合にのみ保存されます。

    $ whenfree add
    Paste the address and press Enter (it is not shown):
    Added 'personal': 412 events, 9 block time in the next 14 days.
    Saved in /Users/you/.config/when-free/config.toml, readable only by you. Now run: whenfree
    
  3. whenfree を実行します。 直近の営業日の空き時間が表示されます。

Mac では、pbpaste | whenfree add を実行すると、クリップボードからアドレスを直接渡せます。

アドレスは秘密にしてください。 パスワードのようなもので、持っている人は誰でもそのカレンダーを読めます。whenfree add 以外には渡さないでください。チャットやシェルコマンド、リポジトリに渡さないようにしてください。漏えいした場合は、カレンダーの設定でリセットしてください。

Google Calendar の手順

スマートフォンアプリにはアドレスが表示されないため、ブラウザーで操作してください。

  1. Google Calendar の設定を開きます。歯車アイコンをクリックし、設定を選択します。
  2. 左側の列のマイカレンダーの設定で、追加したいカレンダーをクリックします。自分の名前が付いたカレンダーには、招待が届きます。
  3. 下にスクロールしてカレンダーの統合を開き、iCal 形式の非公開アドレスをコピーします。末尾は basic.ics です。カレンダーを公開している場合にしか使えない「iCal 形式の公開アドレス」は使用しないでください。
  4. whenfree add を実行し、求められたらアドレスを貼り付けます。

「非公開アドレス」が見つかりませんか?職場や学校のアカウントでは、この設定が無効になっている場合があります。その場合は、カレンダーをエクスポートします(設定 → インポートとエクスポート → エクスポート)。ファイルを解凍し、whenfree add ~/calendars/work.ics を実行します。エクスポートはその時点のスナップショットなので、カレンダーを変更したら再度エクスポートしてください。

複数のカレンダー

追加したすべてのカレンダーで空いている場合にのみ、その時間帯は空きとして扱われます。

whenfree add --name work                 # a second calendar: asks for its address
whenfree add ~/calendars/family.ics      # an exported file instead of an address
whenfree check                           # can every calendar be read?

カレンダーは ~/.config/when-free/config.toml に保存されます。各カレンダーには name と url または path を含む [[calendar]] ブロックが設定されます。このファイルは手動で編集できます。whenfree init を実行すると、空のファイルが作成されます。

日常的な使い方

やりたいこと実行するコマンド
直近の営業日の空き時間を確認するwhenfree
メッセージで尋ねられた日時を確認するpbpaste | whenfree --message -(Mac のクリップボード)または whenfree --message invite.txt
来週の午後を確認するwhenfree --days "next week" --hours afternoon
特定の日を確認するwhenfree --days "Thu 15 Oct, Fri 16 Oct"
日付の範囲を指定するwhenfree --from 2026-10-12 --to 2026-10-16
90 分の会議が入る長さの時間帯だけを確認するwhenfree --min 90
各日の予定を確認するwhenfree --busy
別のタイムゾーンで結果を確認するwhenfree --tz America/New_York
スクリプト用の JSON を出力するwhenfree --format json
結果をコピーするwhenfree ... | pbcopy(時間帯の行だけがコピーされます)

標準出力に出力されるのは時間帯の行だけです。補足情報は標準エラー出力に送られるため、| pbcopy を使うと、返信に貼り付ける内容だけをコピーできます。

メッセージを読み取る

--message は通常のテキストから曜日と時間を見つけます。次のような表現を理解します。

  • さまざまな一般的な書き方の日付: Thu 1 Oct · Thursday the 1st of October · Monday, October 5th · 5 October · 2026-10-05 · Wednesday 30th
  • 時間: between 10:00am and 4:00pm · 10:00–16:00 · 9-5pm · 2 to 4 pm
  • 日付がない場合の語句(今日が10月1日木曜日の場合):
書かれた表現読み取られる内容
today · tomorrow · the day after tomorrow10月1日(木) · 2日(金) · 3日(土)
Thursday or Fridayこれから来る日(今日を含む):10月1日(木)、2日(金)
this Tuesday · next Tuesday今週の火曜日(すでに過ぎているため除外して明記) · 来週の火曜日、10月6日(火)
next week · this week · the week after nextその週の稼働日。今日以降
Tuesday or Wednesday next week10月6日(火)、7日(水)
any afternoon · Friday morning · evening12:00~17:00 · 09:00~12:00 · 17:00~20:00。ただし、時間が指定されている場合を除く

日付をどう読み取ったかは必ず表示されるので、メッセージと照らし合わせて確認できます。推測を避けるため、いくつかのルールがあります。

  • 明示された日付が優先されます。「Wednesday 30th, Thursday 1st」の上に「Next week:」という見出しがあっても、丸々1週間追加されることはありません。
  • 「Good morning」は挨拶であり、時刻ではありません。
  • すでに過ぎた曜日は除外され、必ず明記されます。「Wednesday 30th」は、最も近い30日の水曜日を意味するため、先週のメッセージなら先週の日付として読み取られます。
  • 日付のない語句は今日を基準にします。「tomorrow」と書かれた古いメッセージの場合は、--days を使って日付を自分で指定してください。

when-free がメールボックスに接続することはありません。メッセージを貼り付けるか、パイプで渡すか、ファイルに保存してください。

独自の言語モデルにメッセージを読み取らせる

自分でモデルを実行している場合は、代わりにそのモデルに読み取らせることができます。設定ファイルに次の内容を追加してください。

[extract]
command = ["ollama", "run", "llama3.2"]          # the prompt is sent on standard input
# command = ["my-cli", "ask", "{prompt}"]        # or placed where {prompt} is

コマンドはメッセージを受け取り、JSON を出力する必要があります:{"days": ["2026-10-05"], "hours": "10:00-16:00", "minutes": 60}。失敗した場合は、代わりにパターンマッチングが使われます。設定しない限り実行されず、1回の実行でスキップするには --no-extract を指定します。メッセージはそのコマンドの接続先に送信されるため、プライベートなテキストにはローカルモデルを使用してください。

他のツールから使う

どの方法でも同じ結果が得られ、読み取り専用で、明示的に指定しない限りイベントのタイトルは含まれません。

ツール使用方法セットアップ
Claude Desktopワンクリック拡張機能ダブルクリック
Claude Code(使うタイミングを把握するスキル付き)プラグイン2つのコマンド
Claude Code、Cursor、VS Code、任意の MCP クライアントMCP サーバー1行
Raycast、メッセージの右クリック(macOS)レシピ数分
Open WebUI、n8n、Shortcuts、Raycast、URL を呼び出すものなら何でもローカル HTTP サーバーwhenfree serve
関数呼び出しを使う独自のエージェントスキーマと呼び出し2つのコマンド
Pythonライブラリimport whenfree
Claude Code プラグイン

このプラグインには MCP サーバーと、Claude に使うタイミングを指示するスキルが含まれています。空き状況について尋ねたとき、いつ会えるかを尋ねるメッセージを貼り付けたとき、または時間を提案する前に使用します。

/plugin marketplace add YauhenBichel/when-free
/plugin install when-free@when-free

次に、まだ追加していない場合は、カレンダーを一度追加してください:uvx when-free add。

MCP:Claude、Cursor などのアシスタント
claude mcp add when-free -- uvx when-free mcp          # Claude Code

Cursor やその他の MCP クライアントでは、サーバーリストにこれを追加します。初回は uvx が when-free を取得するため、インストールは不要です。

{
  "mcpServers": {
    "when-free": { "command": "uvx", "args": ["when-free", "mcp"] }
  }
}

uv tool install でインストールした場合は、代わりに "command": "whenfree", "args": ["mcp"] を使用してください。MCP レジストリでは io.github.YauhenBichel/when-free として、mcprushおよびM8ven Trust Indexにも掲載されています。

あとは、*「採用担当者からのメッセージです。この時間帯のうち、どれなら空いていますか?」*と尋ねるだけです。アシスタントは free_slots を呼び出し、実際のカレンダーに基づいて回答します。

ツール機能
free_slots日ごとの空き時間です。days、または from と to、または message に加えて、hours、min_minutes、buffer_minutes、timezone、weekends、all_day_busy、include_busy を指定します
check_calendars各カレンダーを読み取れるかどうかと、イベント数を確認します。詳細や住所は含まれません

ツールが処理を完了できない場合、アシスタントは推測せず、読み取れるエラー(「カレンダー 'work' を読み取れませんでした」)を受け取ります。

HTTP:Open WebUI、n8n、Shortcuts、スクリプト
whenfree serve                    # http://127.0.0.1:8765, only reachable from this computer
curl -H "Authorization: Bearer $(cat ~/.config/when-free/token)" \
  'http://127.0.0.1:8765/free_slots?days=next%20week&hours=afternoon'
  • JSON ボディを指定して POST /free_slots を送信するか、クエリ文字列を指定して GET を送信します。/check_calendars も同様です。
  • 応答は {"ok": true, "text": "...", "data": {...}} または、ステータスコード 400 の {"ok": false, "error": "..."} です。
  • /openapi.json に OpenAPI の説明があります。Open WebUI、n8n、Shortcuts の設定については、レシピを参照してください。
  • トークンは初回実行時に作成され、~/.config/when-free/token に保存されます。このファイルを読み取れるのはあなただけです。または、WHENFREE_TOKEN で独自のトークンを設定できます。すべてのツール呼び出しにトークンが必要です。
  • このコンピューター以外のホスト宛てのリクエストは拒否されます。Web ページから呼び出せるのは、許可したオリジンからのみです:whenfree serve --allow-origin http://localhost:3000。--host 0.0.0.0 を指定するとネットワークからアクセスできるようになります。トークンだけで保護されるため、信頼できるネットワークでのみ使用してください。
関数呼び出しハーネス
whenfree schema                    # the tool definitions: name, description, inputSchema
whenfree schema --format openai    # the same, as {"type": "function", "function": {...}}
whenfree call free_slots --args '{"days": "next week", "hours": "10:00-16:00"}'

whenfree call は {"ok": true, "text": "...", "data": {...}} または、終了コード 1 の {"ok": false, "error": "..."} を出力します。引数は標準入力から渡すこともできます。

Python
from whenfree import api

result = api.find_free(api.Query(days="next week", hours="10:00-16:00", min_minutes=45))
for day in result["days"]:
    print(day["label"], day["free"])          # for example: Mon 12 Oct [['10:00', '11:45'], ['13:15', '16:00']]

find_free は、json.dumps ですぐに使える通常の辞書とリストを返し、安全に表示できるメッセージを含む api.Problem を送出します。カレンダーのテキストを取得する代わりに自分で渡すには、reader= を指定します。

ほかのデバイスで使う

デバイスまず実行するコマンドガイド
iPhone、iPad、Android、時計whenfree serve --lan を実行してから、whenfree devices add "My phone" を実行し、QR コードをスキャンしますスマートフォンとタブレット
Home Assistant、Alexa、Google Home、Siri、空き状況ライトwhenfree mqtt --broker mqtt://homeassistant.localスマートホームと音声操作
macOS メニューバー、Waybar、i3blocks、Polybar、GNOME、Windows トレイwhenfree now --format xbar(または waybar、i3blocks、…)デスクトップステータスバー
$ whenfree now
Busy until 15:30 · next free 15:45–17:00

デバイスに表示されるのは、空いているかどうかと空き時間だけで、イベントのタイトルは表示されません。各スマートフォンには個別のトークンがあり、取り消すことができます。読み取れないカレンダーは「不明」と表示され、「空き」とは表示されません。

プライバシー

  • コンピューター上で動作します。 カレンダーフィードを取得するだけで、それ以外の情報は取得しません。カレンダーへの書き込みやメッセージの送信は一切行いません。
  • カレンダーのアドレスは秘密のままです。 表示されることはなく、貼り付けている間も画面に表示されません。また、あなたしか読み取れないファイルに保存されます。エラーにはカレンダーのアドレスではなく、カレンダー名(「personal」など)が表示されます。
  • アシスタントに表示されるのは空き時間であり、予定ではありません。 アシスタントが include_busy を指定して要求しない限り、予定のタイトルは含まれません。また、そのオプションの説明では、タイトルが非公開であることをモデルに伝えます。予定の追加、変更、削除ができるツールはありません。また、カレンダーのアドレスを受け取るツールもありません。アドレスは、あなたから whenfree add にのみ渡されます。

設定

カレンダー以外はすべて任意です。設定は ~/.config/when-free/config.toml に保存され、コマンドラインフラグはファイルの設定より優先されます。

設定デフォルトフラグ意味
timezoneシステムのタイムゾーン--tz回答に使用するタイムゾーン。例:Europe/London
hours09:00-18:00--hours空き時間として提示する時間帯。morning、afternoon、evening も指定できます
min_minutes60--min提示する時間枠の最短時間
buffer_minutes15--buffer各予定の前後に確保する空き時間
weekendsfalse--weekends日付範囲に土曜日と日曜日を含めます
all_day_busyfalse--all-day-busy終日予定がある日は、1日を通して予定ありとして扱います
days_ahead7日付を指定しない場合に表示する、今後の営業日数
me[]辞退した招待が予定ありとして扱われないようにするための、あなたのメールアドレス
[[calendar]]--calendarname と url または path。カレンダーごとに1つのブロックを指定します。whenfree add がこれらを書き込みます
[extract] commandなし--no-extractあなた自身のモデルでメッセージを読み取るコマンド
環境変数

スクリプト、コンテナー、MCP クライアントの設定で使用します。すべて任意です。

変数意味
WHENFREE_CALENDARSカンマ区切りのカレンダーアドレスまたはパス。ファイル内のリストを置き換えます。機密情報:下記を参照
WHENFREE_CONFIG設定ファイルのパス
XDG_CONFIG_HOMEWHENFREE_CONFIG が設定されていない場合に、設定ファイルを探す場所:$XDG_CONFIG_HOME/when-free/config.toml。設定されていない場合は ~/.config/when-free/config.toml
WHENFREE_TZ回答に使用するタイムゾーン。ファイル内の timezone より優先されます
TZ上記のいずれでもタイムゾーンが指定されていない場合に使用する、システムのタイムゾーン
WHENFREE_TOKENトークンファイルの代わりに使用する、whenfree serve 用のトークン。機密情報
WHENFREE_NOW実行を再現できるようにするための、「現在」として使用する ISO 形式の日付と時刻

WHENFREE_CALENDARS にはパスワードが含まれます。 非公開カレンダーのアドレスを知っている人は、誰でもそのカレンダーを閲覧できます。この変数は API キーと同様に扱ってください。共有シェルプロファイル、コミットする MCP 設定、CI ログ、スクリーンショットには含めないでください。whenfree add が書き込む設定ファイルはあなたしか読み取れないため、可能な場合はこちらを使用してください。

予定ありとして扱われるもの

カレンダー内の項目時間をブロックしますか?
通常の予定はい。前後の空き時間もブロックします
空きとマークされた予定いいえ
キャンセルされた予定いいえ
辞退した招待(me にあなたのアドレスが含まれている場合)いいえ
終日予定いいえ。ただし、all_day_busy = true の場合は、空きとマークされていない限り、はい
繰り返しの予定各回が対象です。スキップされた日付は除外され、移動された予定は移動先の日付で扱われます

空き時間を差し引いた後の時間枠が min_minutes より短い場合、その時間枠は提示されません。今日については、過去の時刻ではなく、次の15分単位の時刻から開始します。

制限事項

  • 読み取り専用です。予約はしません。 カレンダーへの書き込みやメッセージの送信は行いません。
  • フィードの更新状況に依存します。 Google がシークレットアドレスを更新するまでには時間がかかるため、1 分前に追加された予定が表示されない場合があります。whenfree --busy を実行すると、読み取った内容を確認できます。
  • すべてのカレンダーを読み取れる場合のみ表示します。 1 つでも読み取れないカレンダーがあると、予定のない時間に見えてしまうため、空き時間枠は表示されません。
  • 繰り返しの予定。 日次、週次、月次(日付指定、または「第 1 月曜日」「最終金曜日」)および年次のルールは、間隔、終了日、回数、スキップした日付、変更された回を含めて展開します。まれなルール(BYSETPOS、週番号)には対応していません。その場合は最初の日付を予定ありとして扱い、その旨を注記します。
  • タイムゾーン は予定から取得します。タイムゾーンデータベースが認識しないタイムゾーン名(Outlook のエクスポートの一部など)は、お使いのタイムゾーンで読み取ります。

動作しない場合

表示される内容対処方法
No calendar is configuredwhenfree add を実行してください。手動でファイルを編集した場合は、url 行が空のままか、ファイルが保存されていません。メッセージにファイル名が表示されます
could not read the calendar 'personal' (...)アドレスが不完全か、シークレットアドレスではありません。判別できる場合は、メッセージにその旨が表示されます。コピー ボタンでもう一度コピーしてください
returned a web page, not a calendar または did not return iCalendar dataそのリンクはカレンダーフィードではありません。.ics で終わる必要があります
Nothing was savedwhenfree add がカレンダーを読み取れなかったため、変更は保存されていません。アドレスを修正して、もう一度実行してください
Google の設定に「シークレットアドレス」がない組織によって無効にされています。代わりにカレンダーをエクスポートしてください。Google Calendar の手順をご覧ください
追加したばかりの予定が表示されないフィードの更新には時間がかかります。制限事項をご覧ください
会議が予定ありとして扱われないwhenfree --busy を実行すると、読み取った内容を確認できます。辞退した招待、「空き時間」としてマークされた予定、終日の予定は予定ありとして扱われません。予定ありとして扱われる条件をご覧ください
whenfree checkすべてのカレンダーがいつでも読み取れるかどうかを示します

掲載先

どこかで利用したり、紹介記事を書いたりした場合は、Issue を作成してください。ここに掲載します。

開発

uv run --with pytest pytest -q        # a few seconds; no network

テストでは、tests/data/sample.ics の小規模なカレンダーと固定クロック(WHENFREE_NOW)を使用します。コードはコンポーネントごとにまとめられています。

コンポーネント内容使用可能なもの
core/ical、slots、status、render、errors:予定、予定の入っている時間、空き時間枠、現在の状況、文面。入力も出力もありませんなし
messages/dates、extract:メッセージから読み取った日付と時刻core
settings/config:設定ファイルと環境変数なし
calendars/sources:アドレスから取得したカレンダー、またはファイルから読み込んだカレンダーcore、settings
api.pyfind_free、status、check_calendars:すべてのフロントエンドの唯一のエントリーポイント上記の4つ
agents/tools、mcp:AI エージェントに提供するツールと MCP サーバーapi、core
web/server:ツールとスマートフォン向けの HTTP フロントエンドapi、agents、devices、calendars、core、settings
devices/widgets、pairing、feed、qr、mobile/:ステータスバー、スマートフォンとのペアリング、カレンダーフィード、スマートフォン用ページapi、core、settings
smarthome/mqtt、homeassistant:Home Assistant のディスカバリー機能を使った MQTT の公開api、core
cli/main、demo:whenfree コマンドすべて

tests/test_structure.py は、使用が許可されていないコンポーネントを別のコンポーネントがインポートすると失敗するため、ドメイン層をフロントエンドから独立させています。

CONTRIBUTING.md を参照してください。

ライセンス

Apache-2.0。

コメント

MCP は初めてですか?

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

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