Nestling について
Nestlingは、赤ちゃんの睡眠、授乳、おむつ、日記データを読み取り記録するTypeScriptクライアント、CLI、MCPサーバーです。Nestlingユーザー向けで、書き込みは新規記録の作成に限られます。
主な機能
- 01赤ちゃんのプロフィールと日々の記録の読み取り
- 02睡眠、授乳、おむつ、日記の記録
- 03CLIまたはTypeScriptライブラリでの利用
- 04柔軟な時刻形式の解析
- 05新規データの作成のみ
活用シーン
- 01赤ちゃんの最近の睡眠や授乳履歴の確認
- 02MCP対応アシスタントからのおむつ交換記録
- 03ターミナルからの日記記録の追加
- 04指定した赤ちゃんの日々のデータの読み取り
MCP 対応
Nestlingのアカウントや赤ちゃんのデータをMCPツールとして公開し、記録の読み取りと睡眠、授乳、おむつ、日記の新規作成に対応します。ローカルクライアント向けのstdioと、リモート接続向けのHTTPをサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
nestling-ts
Nestling baby tracking app向けのTypeScriptクライアント、CLI、MCP サーバーです。Nestlingアカウントの睡眠、授乳、おむつ、日誌データを、ターミナルやTypeScript/Bunライブラリ、またはClaude、ChatGPTなどのAI アシスタント向けModel Context Protocolサーバーを通じて読み取り、記録できます。
新規作成のみ可能です。 APIでは、アプリと同期する新しい記録を追加できます。既存の記録の更新や削除はできないため、データは常に安全です。
要件
- Bun 1.3以上 — このパッケージはビルド手順なしでTypeScriptソースを提供するため、Bunで実行する必要があります(Nodeでは実行できません)。
- Nestlingアカウント(GoogleまたはAppleでサインイン)
- Nestling APIトークン(アプリで生成します:Settings → Data → API Token)
インストール
npmから:
bun add -g nestling-ts
# provides `nestling` and `nestling-mcp`
# or add it to a project as a library
bun add nestling-ts
ソースをチェックアウトした場合:
cd nestling-ts
bun install
bun link # makes `nestling` available globally
CLI
クイックスタート
nestling login
# API Token: (from Nestling app → Settings → Data → API Token)
# Timezone: Europe/London
# ✓ Authenticated as [email protected]! Found 1 child(ren).
nestling babies
# • Eloise (id: abc-123) 8 months old
bun linkを実行していない場合は、代わりにパッケージスクリプトを使用してください:
bun run --cwd /path/to/nestling-ts nestling -- login
bun run --cwd /path/to/nestling-ts nestling -- babies
コマンド
# Sleep
nestling sleep history --days 3
nestling sleep log --start "yesterday 8pm" --end "today 6:30am"
nestling sleep log --start 2026-05-07T20:00:00Z --end 2026-05-08T06:30:00Z
# Feed
nestling feed history --days 2
nestling feed log --at "now" --type Bottle --amount 180
nestling feed log --at "30m ago" --type Breastfeeding --side Left
# Nappy
nestling nappy history --days 2
nestling nappy log --at "5 minutes ago" --type Wet
# Diary
nestling diary history --days 7
nestling diary log --at "today 3pm" --text "First time clapping!" --tags milestone,funny
# Multiple babies
nestling --baby "Eloise" sleep history
すべてのhistoryコマンドは、機械可読な出力を得るための--jsonに対応しています。--babyフラグでは、名前またはIDで特定の子どもを選択できます(デフォルトは最初の子どもです)。
時刻の形式
すべての時刻引数では、人が読みやすい柔軟な形式を使用できます:
| 形式 | 例 |
|---|---|
| ISO 8601 | 2026-05-07T20:00:00Z |
| 日付+時刻 | 2026-05-07 8pm、2026-05-07 20:00 |
| 相対的な日付 | today 3pm、yesterday 8:30pm、tomorrow 7am |
| 時刻のみ(今日) | 3pm、3:30pm、15:30 |
| 相対的な時刻 | now、5 minutes ago、2 hours ago、30m ago |
時刻は、設定済みのタイムゾーン(環境変数NESTLING_TIMEZONEまたは~/.config/nestling/config.json内のtimezone)を使用して解決されます。
認証
設定は~/.config/nestling/config.jsonに保存されます。
- 対話形式でログイン:
nestling login - 環境変数(設定ファイルより優先されます):
NESTLING_API_TOKENNESTLING_TIMEZONE(任意)
ライブラリの使用
import { Nestling } from "nestling-ts";
const client = new Nestling({
apiToken: process.env.NESTLING_API_TOKEN!,
});
// Authenticate
await client.signIn();
// Account & babies
const user = await client.getUser();
const babies = await client.babies.list();
const baby = await client.babies.get(babies[0].id);
// History (all take a DateRange)
const range = {
start: new Date("2026-05-01T00:00:00Z"),
end: new Date("2026-05-08T00:00:00Z"),
};
await client.sleep.list(baby.id, range);
await client.feed.list(baby.id, range); // breast | bottle | solids | expressing
await client.nappies.list(baby.id, range); // wet | dirty | both
await client.diary.list(baby.id, range); // journal entries & milestones
// Log new entries
await client.sleep.create(baby.id, {
start: "2026-05-07T20:00:00Z",
end: "2026-05-08T06:30:00Z",
});
await client.feed.create(baby.id, {
timestamp: "2026-05-07T12:00:00Z",
type: "Bottle",
amountMl: 180,
});
await client.nappies.create(baby.id, {
timestamp: "2026-05-07T14:00:00Z",
type: "Wet",
});
await client.diary.create(baby.id, {
timestamp: "2026-05-07T15:00:00Z",
text: "First time clapping!",
tags: ["milestone"],
});
await client.close();
クラウドとの互換性
nestling-tsは、APIで扱う名前を使いやすく保ちながら、iOS互換のクラウドモデルに書き込みます。たとえば、client.feed.create()ではamountMlとdurationSecondsを受け付け、Supabaseではフィードのペイロードキーamountとdurationとして保存します。エントリのペイロードは、現在のiOS同期実装に合わせて、entries.dataにJSON文字列として書き込まれます。
新しいツールやSupabaseへの直接書き込みを追加する場合は、ルートREADMEの標準的なエントリーワイヤーフォーマットに従ってください。特に、フィードの値にはBreastfeeding、Bottle、Solids、Expressingを、おむつの値にはWet、Dirty、Bothを、睡眠のsource値にはmanualまたはtimerを使用してください。
MCP サーバー
nestling-tsは、nestling-mcpバイナリとしてMCP サーバーを提供します。ライブラリを一連のMCPツールとしてラップしており、Claude、ChatGPTなど、MCPに対応するほかのLLMインターフェースからAI エージェントが呼び出せます。
サーバーは2つのトランスポートモードに対応しています:
- stdio(デフォルト) — Claude Desktop、Claude Code、Cursorなどでのローカル利用向けです。
- HTTP(
--http) — Claudeのカスタムコネクター、ChatGPTのカスタムコネクター、またはネットワーク経由のMCP互換クライアント向けの、リモートStreamable HTTPトランスポートです。
Claude Desktop / Claude Code(stdio)
ソースのチェックアウト先を指定します:
{
"mcpServers": {
"nestling": {
"command": "bun",
"args": ["run", "nestling-mcp"],
"cwd": "/absolute/path/to/nestling-ts",
"env": {
"NESTLING_API_TOKEN": "your-token-from-nestling-app",
"NESTLING_TIMEZONE": "Europe/London"
}
}
}
}
注: コマンドには
node/npxではなく、bun/bunxを指定してください。このパッケージは生のTypeScriptとして公開されており、Bunがそのまま実行します。
Claude カスタムコネクター(リモート MCP/HTTP モード)
ホステッド(最も簡単 — セットアップ不要):
- Claude で カスタマイズ → コネクター → カスタムコネクターを追加 に移動します(Pro/Max)。または、組織のオーナーに追加を依頼します(Team/Enterprise)。
- URL に
https://mcp.nestling-app.com/mcpを設定し、追加 をクリックします。 - Claude のサインインページが開いたら、Nestling の 設定 → データ → API トークン から API トークンを貼り付けます。
- 完了です。Claude が赤ちゃんのデータを読み取り、記録できるようになります。
ngrok もポート設定もセルフホストも不要です。各ユーザーは OAuth を通じて、自分のトークンで認証します。
セルフホストの場合:
MCP サーバーを HTTP モードで実行します。
# Single-user (token from env)
export NESTLING_API_TOKEN="your-token"
bun run nestling-mcp -- --http
# Nestling MCP server (HTTP) listening on http://localhost:8787/mcp
# Multi-user (no env token; each request authenticates via Bearer header)
bun run nestling-mcp -- --http
# Users pass their own token as Authorization: Bearer <token>
PORT=3000 bun run nestling-mcp -- --http を実行すると、カスタムポートを設定できます。
外部からアクセスできるようにするには、サーバーを HTTPS の背後に配置します(Cloudflare Tunnel、nginx など)。Claude は Anthropic のクラウドから接続するため、localhost は使用できません。
ChatGPT カスタムコネクター
ChatGPT では、GPT Builder のカスタムコネクターとして MCP ツールサーバーを使用できます。ホステッドエンドポイントを使うか、独自のサーバーを実行します。
- ホステッド URL を使うか、サーバー上で
bun run nestling-mcp -- --httpを実行します。 - ChatGPT の GPT Builder → アクション → 「アクションを追加」に移動します。
- サーバー URL に
/mcpエンドポイントを設定します。 - 認証方式に Bearer を設定し、Nestling API トークンを貼り付けます。
- ChatGPT が MCP プロトコルを通じてツールを自動的に検出します。
ツール
| ツール | 用途 |
|---|---|
get_capabilities | 検出:利用可能なデータソースとツール |
get_user | アカウントのプロフィール(メールアドレス、ユーザー ID) |
list_babies | 赤ちゃんの一覧(他のすべてのツールに id を渡します) |
get_baby | 赤ちゃんの詳細(ニックネーム、生年月日など) |
list_sleep | 指定した期間の赤ちゃんの睡眠セッション |
list_feeds | 指定した期間の授乳記録(母乳、哺乳瓶、固形食) |
list_nappies | 指定した期間のおむつの記録 |
list_diary | 指定した期間の日記の記録 |
create_sleep | 新しい睡眠セッションを記録(開始時刻と終了時刻) |
create_feed | 新しい授乳を記録(母乳、哺乳瓶、固形食、搾乳) |
create_nappy | おむつ交換を記録 |
create_diary | 新しい日記を記録 |
読み取りツールはデータを返し、書き込みツールは新しい記録を作成します(更新や削除はできません)。
レスポンスエンベロープ
{
"data": [...],
"totalResults": 12
}
エラーエンベロープ
{
"error": "BabyNotFoundError",
"message": "Baby not found: abc",
"category": "not_found",
"retryable": false,
"recovery": "Use client.babies.list() (or the list_babies MCP tool) to get valid baby IDs."
}
セキュリティ
- 新規作成のみ可能 — API は新しい記録を追加できますが、既存の記録を更新または削除することはできません。
- ユーザー単位のアクセス制限 — Supabase Auth を通じて通常の Nestling ユーザーとして認証します。行レベルセキュリティにより、自分の赤ちゃんとデータ(および共有されたデータ)のみアクセスできます。
- サービスキー不使用 — Supabase の anon キーを使用し、サービスロールキーは使用しません。anon キーは安全に配布でき、RLS で保護されたアクセスのみを許可します。
- ローカルまたはセルフホストのリモート — stdio モードでは、認証情報はお使いのマシンに保存されます。HTTP モードでは、各ユーザーが自分の Bearer トークンを使ってセッションごとに認証します。
- ユーザーごとの分離 — HTTP サーバーはトークンごとに個別の認証済みセッションを作成します。ユーザーは Supabase RLS を通じて、自分のデータのみアクセスできます。
- 有効期間の短いセッション — Supabase JWT は 1 時間後に期限切れとなり、自動更新されます。長期間有効な API トークンは、セッションの初期設定にのみ使用されます。
API トークンの取得
- スマートフォンでNestlingアプリを開きます。
- Settings → Data → API Tokenに移動します。
- Copy Tokenをタップします。
- トークンをMCP設定または環境変数に貼り付けます。
トークンはアカウントに紐付けられています。API Tokenをもう一度タップすれば、いつでもトークンを取り消せます。新しいトークンを生成すると、古いトークンは無効になります。
API リファレンス
new Nestling(options)
| オプション | 型 | 備考 |
|---|---|---|
apiToken | string | NestlingアプリのAPIトークン |
読み取りメソッド
client.babies.list()→Baby[]client.babies.get(babyId)→Babyclient.sleep.list(babyId, range)→SleepEntry[]client.feed.list(babyId, range)→FeedEntry[]client.nappies.list(babyId, range)→NappyEntry[]client.diary.list(babyId, range)→DiaryEntry[]
書き込みメソッド
client.sleep.create(babyId, input)→string(新しいエントリーID)client.feed.create(babyId, input)→stringclient.nappies.create(babyId, input)→stringclient.diary.create(babyId, input)→string
エラークラス
NestlingError—category、retryable、recoveryを含む基底クラスAuthenticationError— 認証情報が正しくないか、セッションの有効期限が切れていますBabyNotFoundError— 不明な赤ちゃんIDですInvalidDateRangeError—start >= end、または入力がDate型ではありません
開発
bun install
bun link # register `nestling` and `nestling-mcp` on your PATH
bun test # run the test suite
bun run lint # tsc --noEmit
bun run nestling # run the CLI (e.g. bun run nestling -- babies)
bun run mcp # start the MCP server locally
音声アシスタント
Siri
iOSアプリに組み込まれているため、設定は不要です。次のように話しかけてください。
- 「Nestlingでおむつを記録」
- 「Nestlingで睡眠を開始」
- 「Nestlingで母乳を記録」
- 「Nestlingで哺乳瓶を記録」
iOS 16以降のショートカットアプリを通じて動作します。
Alexa
alexa/ディレクトリには、音声で授乳、睡眠、おむつを記録するセルフホスト可能なAlexaスキルが含まれています。ご自身のAWSアカウントでLambda関数として実行されます。
音声コマンド
| 実行したい操作 | 話しかける内容 |
|---|---|
| 睡眠を開始する | "Alexa, tell Nestling to start sleep" |
| 睡眠を終了する | "Alexa, tell Nestling to stop sleep" |
| 睡眠を一時停止/再開する | "Alexa, tell Nestling to pause sleep" |
| おしっこで濡れたおむつを記録する | "Alexa, tell Nestling to log a wee nappy" |
| うんちで汚れたおむつを記録する | "Alexa, tell Nestling to log a poo nappy" |
| おしっことうんちの両方で汚れたおむつを記録する | "Alexa, tell Nestling to log a wet and dirty nappy" |
| 授乳を開始する | "Alexa, tell Nestling to start nursing" |
| 左右を切り替える | "Alexa, tell Nestling to switch sides" |
| 授乳を終了する | "Alexa, tell Nestling to stop nursing" |
| 哺乳瓶を記録する | "Alexa, tell Nestling to log a 120 ml bottle" |
| 固形食を記録する | "Alexa, tell Nestling to log sweet potato" |
| 最後の睡眠を確認する | "Alexa, ask Nestling for the last sleep" |
| 最後の授乳を確認する | "Alexa, ask Nestling for the last feed" |
| 最後のおむつを確認する | "Alexa, ask Nestling for the last nappy" |
nappy/diaperとwee/peeのどちらも使用できます。
前提条件
- CloudFormationスタックとLambda関数をデプロイする権限を持つAWSアカウント
- Alexa Developerアカウント(無料)
- 赤ちゃんを1人以上登録したNestlingアカウント
- Nestlingアプリから取得したAPIトークン(Settings → Data → API Token for AI Access)
- Node.js 20以降とnpm
- SAM CLI
デプロイ
cd alexa
npm install
npm run build
sam build
sam deploy --guided
SAMから次の情報が求められます。
| パラメーター | 説明 | 例 |
|---|---|---|
NestlingApiToken | アプリのAPIトークン | (base64文字列) |
Timezone | 音声で伝える時刻に使用するIANAタイムゾーン | Europe/London |
スタックのデプロイ後、出力からLambda ARNをコピーします。
Alexa に接続する
- Alexa Developer Console を開きます
- 新しい Custom スキルを作成します(ホスティングでは「Provision your own」を選択します)
- Build → Interaction Model → JSON Editor に移動します
alexa/skill/interactionModel.jsonの内容を貼り付けます- Endpoint で AWS Lambda ARN を選択し、Lambda ARN を貼り付けます
- Save Model をクリックしてから、Build Model をクリックします
- Alexa シミュレーターまたはデバイスでテストします
更新
コードを変更した後、または新しい API トークンを取得した後:
cd alexa && npm run build && sam build && sam deploy
セキュリティ
- API トークンは暗号化された Lambda 環境変数(
NoEcho)として保存されます - ログに記録されたり、Alexa の応答に含まれたりすることはありません
- Supabase のクエリはすべて Row Level Security を通じて実行されるため、トークンは自身のデータにのみアクセスできます
制限事項
- 作成のみ。 更新や削除はできません。新しいエントリはアプリに自動で同期されます。
- Bun のみ。 CLI とライブラリには Bun が必要です。Alexa スキルは Node.js を使用します(Lambda としてデプロイされます)。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。