An MCP server that connects AI assistants to Poke — your iMessage-based AI agent. AIアシスタントをPoke(iMessageベースのAIエージェント)に接続するMCPサーバー。
Send instructions to Poke by voice, from Claude, from your terminal, or anywhere that supports MCP. 音声、Claude、ターミナル、またはMCP対応のどこからでもPokeに指示を送れます。
Poke is an AI assistant you interact with over iMessage. It can send emails, manage your calendar, set reminders, and more — all through a simple text conversation. poke-bridge lets you trigger Poke programmatically from any MCP-compatible client or script.
PokeはiMessageで使えるAIアシスタントです。メール送信、カレンダー管理、リマインダー設定など、テキストで会話するだけで実行できます。poke-bridgeを使えば、MCP対応のクライアントやスクリプトからPokeをプログラム的に操作できます。
Your client (VoiceOS / Claude / terminal / cron)
↓
poke-bridge (MCP server)
↓
Poke API (POST /inbound/api-message)
↓
Poke acts on your instruction
↓
Reply arrives in iMessage
クライアント(VoiceOS / Claude / ターミナル / cron)
↓
poke-bridge(MCPサーバー)
↓
Poke API(POST /inbound/api-message)
↓
Pokeが指示を実行
↓
iMessageに返信が届く
| Tool | What it does |
|---|---|
send_to_poke | General-purpose — send any message or instruction |
poke_reminder | Set a reminder with a task + time |
poke_draft_email | Ask Poke to draft or send an email |
poke_schedule | Add a calendar event via Poke |
| ツール | 機能 |
|---|---|
send_to_poke | 汎用 — メッセージや指示を送信 |
poke_reminder | タスクと時間を指定してリマインダーを設定 |
poke_draft_email | メールの下書きや送信をPokeに依頼 |
poke_schedule | Poke経由でカレンダーにイベントを追加 |
| Variable | Required | Default | Description |
|---|---|---|---|
POKE_API_KEY | Yes | — | Your Poke V2 API key from Kitchen |
POKE_SOURCE | No | poke-bridge | Label prefixed to messages so Poke knows where they came from (e.g. VoiceOS, Claude Desktop, Cursor) |
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
POKE_API_KEY | はい | — | Kitchenから取得したPoke V2 APIキー |
POKE_SOURCE | いいえ | poke-bridge | メッセージに付けるラベル。Pokeがどこから送られたか分かるようにします(例:VoiceOS、Claude Desktop、Cursor) |
git clone https://github.com/gabeperez/poke-bridge.git
cd poke-bridge
npm install
macOS / Linux:
cp start.sh.example start.sh
chmod +x start.sh
Open start.sh and replace your_v2_key_here with your Poke V2 API key.
start.shを開いて、your_v2_key_hereをPoke V2 APIキーに置き換えてください。
Windows:
copy start.cmd.example start.cmd
Open start.cmd and replace your_v2_key_here with your Poke V2 API key.
start.cmdを開いて、your_v2_key_hereをPoke V2 APIキーに置き換えてください。
⚠️start.shandstart.cmdare gitignored. Your key will never be committed. ⚠️start.shとstart.cmdはgitignoreされています。キーがコミットされることはありません。
VoiceOS is a voice productivity app that lets you control your computer by speaking. Add poke-bridge as a custom integration: VoiceOSは音声でコンピュータを操作できる生産性アプリです。poke-bridgeをカスタムインテグレーションとして追加してください:
Settings → Integrations → Custom Integrations → Add
| Field | Value |
|---|---|
| Name | 🌴 Poke |
| Launch command (macOS) | /absolute/path/to/poke-bridge/start.sh |
| Launch command (Windows) | C:\absolute\path\to\poke-bridge\start.cmd |
Then speak naturally: 自然に話しかけてください:
Why a wrapper script? VoiceOS throws ENAMETOOLONG if you pass inline env vars (KEY=value command). The wrapper script exports your key cleanly before launching the server. On Windows, .sh files won't work — use start.cmd instead.
なぜラッパースクリプトが必要? VoiceOSはインライン環境変数(KEY=value command)を渡すとENAMETOOLONGエラーを起こします。ラッパースクリプトはサーバー起動前にキーをきれいにエクスポートします。Windowsでは.shファイルは動かないので、代わりにstart.cmdを使ってください。
Add to your Claude Desktop config: Claude Desktopの設定ファイルに追加してください:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonmacOS / Linux:
{
"mcpServers": {
"poke": {
"command": "/absolute/path/to/poke-bridge/node_modules/.bin/tsx",
"args": ["/absolute/path/to/poke-bridge/poke-bridge.ts"],
"env": {
"POKE_API_KEY": "your_v2_key_here",
"POKE_SOURCE": "Claude Desktop"
}
}
}
}
Windows — use tsx.cmd and backslashes:
{
"mcpServers": {
"poke": {
"command": "C:\\path\\to\\poke-bridge\\node_modules\\.bin\\tsx.cmd",
"args": ["C:\\path\\to\\poke-bridge\\poke-bridge.ts"],
"env": {
"POKE_API_KEY": "your_v2_key_here",
"POKE_SOURCE": "Claude Desktop"
}
}
}
}
Restart Claude Desktop after saving. 保存したらClaude Desktopを再起動してください。
Same config as Claude Desktop above. Add to your editor's MCP settings file and restart. 上記のClaude Desktopと同じ設定です。エディターのMCP設定ファイルに追加して再起動してください。
The Poke API is a single POST call. Poke APIは1つのPOSTリクエストで呼び出せます。
macOS / Linux:
curl -X POST https://poke.com/api/v1/inbound/api-message \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "will it rain today?"}'
Windows CMD — use escaped double quotes, no single quotes:
curl -X POST https://poke.com/api/v1/inbound/api-message -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" -d "{\"message\": \"will it rain today?\"}"
Expected response: 期待されるレスポンス:
{"success": true, "message": "Message sent successfully"}
#!/bin/bash
export POKE_API_KEY="your_v2_key_here"
curl -s -X POST https://poke.com/api/v1/inbound/api-message \
-H "Authorization: Bearer $POKE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "The build finished. Please add a note to my todo list."}'
Or trigger from any script after a long job: 長時間のジョブの後にスクリプトからトリガーすることもできます:
run_my_long_job.sh && \
curl -s -X POST https://poke.com/api/v1/inbound/api-message \
-H "Authorization: Bearer $POKE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Job done. Send me a summary of what ran today."}'
Use a Get Contents of URL action: URLの内容を取得アクションを使います:
https://poke.com/api/v1/inbound/api-messageAuthorization: Bearer YOUR_KEY, Content-Type: application/json{"message": "your instruction here", "source": "Shortcuts"}Pair it with a Siri phrase for fully voice-triggered Poke on iPhone or Apple Watch. Siriフレーズと組み合わせれば、iPhoneやApple Watchから完全に音声でPokeを操作できます。
Poke receives messages via API as a webhook — they don't show on your side of the iMessage thread, but Poke acts on them and replies normally in iMessage. Every message sent through this bridge is prefixed with [poke-bridge] (or your custom POKE_SOURCE) so Poke has context about where it came from.
PokeはAPI経由でメッセージを受信します。iMessageのスレッドにはあなた側には表示されませんが、Pokeはそれに基づいて行動し、iMessageで通常通り返信します。このブリッジを通じて送られるメッセージにはすべて[poke-bridge](またはカスタムのPOKE_SOURCE)がプレフィックスとして付き、Pokeがどこから送られたか把握できます。
poke-bridge/
├── poke-bridge.ts # MCP server source (TypeScript)
├── poke-bridge.mjs # Runtime entrypoint used by launch scripts
├── start.sh # Launch wrapper for macOS/Linux (gitignored)
├── start.sh.example # Template — copy to start.sh and add your key
├── start.cmd # Launch wrapper for Windows (gitignored)
├── start.cmd.example # Template — copy to start.cmd and add your key
├── package.json
├── tsconfig.json
├── .gitignore
└── README.md
This bridge uses the Poke V2 API: このブリッジはPoke V2 APIを使用しています:
POST https://poke.com/api/v1/inbound/api-message
Authorization: Bearer YOUR_V2_KEY
Content-Type: application/json
{"message": "[poke-bridge] your instruction here", "source": "poke-bridge"}
⚠️ The legacy/api/v1/inbound-sms/webhookendpoint andpk_-prefixed V1 keys are not supported. Create a V2 key in Kitchen. ⚠️ レガシーの/api/v1/inbound-sms/webhookエンドポイントとpk_プレフィックスのV1キーはサポートされていません。KitchenでV2キーを作成してください。
PRs welcome. Ideas for new tools: poke_search, poke_task, poke_note. Follow the existing pattern in poke-bridge.ts and update this README.
PRを歓迎します。新しいツールのアイデア:poke_search、poke_task、poke_note。poke-bridge.tsの既存のパターンに従って、このREADMEも更新してください。
MIT