Claude Artifacts MCP:閲覧者が開くたびに更新されるライブ競合ダッシュボード
公開されたClaudeのアーティファクトは、閲覧者自身のアカウントを使ってMCPコネクタを呼び出します。TikTok、YouTube、Instagramで9ブランドを検証し、開くたびにかかるコストを算出しました。

2026年7月、Claudeは公開アーティファクトに新しい機能を追加しました。ページが開かれるたびに、閲覧者自身のclaude.ai接続を通じてMCPコネクタを呼び出せます(Claude Code week 29 digest)。開いた全員に最新データを表示する競合ダッシュボードに適した仕組みです。2026-11-05のシンガポール時間00:18から01:05にかけて、EveryInfraのリモートMCPサーバー経由で9ブランドの最近の投稿を取得しました。データ呼び出しは39回で、うち38回が課金、1回が返金となり、合計$0.021128でした。
ダッシュボードのデータ元はGoPro、Insta360、DJIの3ブランドです。残る6ブランド(Zara、Bershka、Mango、Garmin、Whoop、Oura)については、より多くのアカウントタイプを示すため、第2ラウンドでテストしました。レイテンシのデータと「データの落とし穴」セクションでは、この6ブランドを使用しています。
Claude側については、この記事全体が設定例です。ダッシュボードページのコードを作成し、手元のマシンで実際のレスポンスをそのコードに流して再現しました。claude.aiでは公開していません。
最も有用な知見は、当社のツールアノテーションに関するものです。EveryInfraのデータツールeveryinfra_call_apiは、現在readOnlyHint: falseとdestructiveHint: trueを宣言しています。これは当社ツールの現在のアノテーションであり、データツールに対するClaudeプラットフォームのルールではありません。
実際の影響は次のとおりです。Claudeのページランタイムは、このツールの結果をキャッシュしません。また、ページから自動更新のwatchメソッドでこのツールを呼び出すこともできません。そのため、ページ側で独自にキャッシュを持つ必要があります。
つまり、独自のキャッシュを持たないページは、開かれるたびに課金されます。10人が1日3回開く場合、月900回の表示で8,100回の課金呼び出しとなり、月$4.50です。結果をアーティファクトの共有ストレージに保存し、6時間ごとに更新すれば、同じ利用でも月$0.60で済みます。
金額はわずかです。本当のコストは待ち時間と1分あたりの制限です。最も遅い同期呼び出しには69秒かかりました。また、スタンドアップ前に10人がページを開くと、1つの共有キーに1分間で90回の呼び出しが集中します。

claude artifacts mcpとは:ページを開いたときにデータを取得する仕組み
アーティファクトとは、Claudeが作成し、他の人に見せられるものです。ドキュメント、スライド、デザイン、ダッシュボード、小さなツールなどが該当します。ヘルプセンターによると、アーティファクトは共有でき、データを保存でき、アプリに接続することもできます(What are artifacts?、2026-11-05閲覧)。2026-09-16より前に作成されたアーティファクトは、現在「レガシーアーティファクト」となっています。この記事で扱うのは「アプリへの接続」の部分です。ページを開くと、claude.aiのコネクタを通じてMCPサーバー上のツールを呼び出し、その結果を描画します。
最も詳しいのはClaude Codeのドキュメントです(Artifacts、2026-11-05閲覧)。公開されたページは、誰かが閲覧するたびにMCPコネクタを呼び出せます。そのため、ページには作成時のセッションのスナップショットではなく、最新のデータが表示されます。ページは読み込み時にデータを取得します。一定間隔で、または閲覧者が更新コントロールを操作したときに更新することもできます。レスポンスは閲覧者のブラウザにキャッシュされるため、ページを開き直すと、まずキャッシュされたデータが描画され、その後更新されます。
Claudeはページを公開する際、そのページが呼び出せるコネクタを宣言します。ページは宣言の範囲外のものを呼び出せません。対象となるのは、claude.aiアカウントのコネクタだけです。Claude Codeの.mcp.jsonにあるローカルサーバーは、Claudeがページを作成している間はデータを提供できます。公開後のページからは呼び出せません。
Claude Code側では、この機能は2026年7月13日〜17日の週(v2.1.207〜v2.1.212)にリリースされました。ダイジェストによると、ページは「誰かが閲覧するたびに」コネクタを呼び出せ、各呼び出しは閲覧者自身の接続を通じて実行されます(第29週ダイジェスト)。claude.aiのチャット内のアーティファクトには、それより前の2025-10-21にMCPと永続ストレージが追加されています(Turn ideas into interactive AI-powered apps)。2026-09-16のリリースノートには、デザイン、スライド、ドキュメントがどの会話でも使えるようになったと記載されています(リリースノート)。
| 事実 | 情報源の記載内容 | 情報源と閲覧日 |
|---|---|---|
| アーティファクトからのコネクタ呼び出しに対応するプラン | Pro、Max、Ultra、Team、Enterprise(Web版とデスクトップ版) | support.claude.com 17153992、2026-11-05 |
| このようなページの公開に必要なClaude Codeの最小バージョン | v2.1.209 | code.claude.com/docs/en/artifacts、2026-11-05 |
| 閲覧者が使うのは誰の接続か | 閲覧者自身のコネクタ。ページが認証情報を見ることはありません | code.claude.com/docs/en/artifacts、2026-11-05 |
| 初回の呼び出し | 各閲覧者が、最初のコネクタ呼び出しの前に承認します | 同じページ |
| アクションごとに承認が必要なツール | アーティファクトでは使用不可 | support.claude.com 17153992、2026-11-05 |
| ページのストレージ | アーティファクトあたり最大20 MB、テキストのみ、個人用と共有用 | support.claude.com 17153992、2026-11-05 |
| 公開リンク | ヘルプセンター:アプリに接続したアーティファクトでは「Anyone with the link」は使えません。Claude Codeのドキュメント:公開共有は可能ですが、サインインしていない閲覧者や組織外の閲覧者にはライブセクションが表示されません | support.claude.com 9547008およびcode.claude.com、2026-11-05 |
| 組織設定のスイッチ | Organization settingsの「Enable artifact connectors」 | code.claude.comおよびsupport.claude.com 16994751、2026-11-05 |
利用条件:プラン、アプリ、管理者設定
ヘルプセンターの「Connect your apps to an artifact」セクションには、Pro、Max、Ultra、Team、Enterpriseが記載されています。対応アプリはWeb版とデスクトップ版のClaudeです(support 17153992)。同じページには、アーティファクトには「Cloud code execution and file creation」設定が必要だとも書かれています。Freeプランはこのリストに含まれていません。
カスタムコネクタはすべてのプランで使えますが、Freeプランでは1つまでに制限されています(Get started with custom connectors using remote MCP)。ただし、Freeアカウントではコネクタを呼び出すアーティファクトを作成できません。そのため、このダッシュボードには少なくとも1つの有料プランが必要です。
料金は、2026-11-05に閲覧したClaudeの料金ページに基づいています(claude.com/pricing)。Proは年間プランで月額$17、月払いで$20です。Maxは$100から、Ultraは$200です。
Teamのスタンダードシートは年間プランで月額$20、月払いで$25です。プレミアムシートは$100または$125です。Enterpriseは1シートあたり$20に加え、API料金での従量課金となります。10人のチームでTeamのスタンダードシートを月払いで契約すると、シート料金は月$250です。この金額と比べると、以下で説明するデータコストはごくわずかです。
TeamとEnterpriseでは、2つのスイッチが追加されます。1つ目は、組織全体でアーティファクトのオン/オフを切り替えるスイッチです。2つ目は、アーティファクトからのコネクタ呼び出しを制御するスイッチです。Claude Codeのドキュメントによると、これはOrganization settings > Capabilitiesの「Enable artifact connectors」にあります(Artifacts)。
同じスイッチは、claude.aiのチャットで作成したページにも適用されます。管理者ガイドには、見落としやすい点が補足されています。管理者は、アーティファクトがアクセスできるアプリを制限できません。また、使用量は各ユーザー自身の上限にカウントされます(Artifacts admin guide for Team and Enterprise plans)。
公開後は誰の接続で実行されるか
これは最も重要なルールで、情報源の記載も明確です。公開されたページがコネクタを呼び出すとき、その呼び出しにはページを閲覧している人のアカウントが使われます。公開した人のアカウントは使われません。同じダッシュボードを開いた2人でも、アカウントがアクセスできる範囲が異なるため、表示されるデータが異なる場合があります。ページが誰かの認証情報を見ることはありません。呼び出しはclaude.aiがページに代わって行います。
各閲覧者は、ページが最初にコネクタを呼び出す前に承認します。承認しなかった閲覧者や、そのコネクタを接続していない閲覧者にも、ライブセクションを除いたページは表示されます(Artifacts, "How connector calls work for viewers"、2026-11-05閲覧)。ヘルプセンターにも同じ内容が書かれています。共有または公開されたアーティファクトであっても、各自が自分のアプリを接続します(support 17153992)。

このダッシュボードでは、「閲覧者自身の接続」に2つの形があります。どちらを使うかによって、誰にコストが発生し、誰のレート制限にカウントされるかが変わります。1つ目は、コネクタでOAuthサインインを使用するケースです。各自がコネクタを追加する際に、自分のEveryInfraアカウントにサインインします。以降、ページから呼び出すたびに、その人の残高から料金が差し引かれ、その人の1分あたりのレート制限にカウントされます。
2つ目は、コネクタで1つの共有APIキーを使用するケースです。TeamまたはEnterpriseのOwnerがコネクタを追加し、リクエストヘッダーにキーを入力します。ヘルプセンターによると、これにより、そのコネクタを使う全員が、そのAPIキーに付与されたアクセス権で利用できるようになります(support 11175166)。形式上は、各自が「自分の接続」を使っていることになります。しかし実際には、すべてのコストが1つのEveryInfraアカウントに発生し、すべての呼び出しがそのアカウントの利用分としてカウントされます。
ライブデータが表示されない人は2種類います。ルールはヘルプセンターの共有に関する記事に記載されています(Share artifacts、2026-11-05閲覧)。アプリに接続するアーティファクトやClaudeを使うアーティファクトでは、「Anyone with the link」によるリンク共有は利用できません。組織外から招待した人には、Claudeやコネクタを使う部分が機能しません。組織外の人は、1つのアーティファクトにつき最大50人まで招待できます。
Claude Codeのドキュメントには、コネクタを使うページを公開共有できると書かれています。ただし、claude.aiにサインインしていない閲覧者や組織外の閲覧者に対しては、コネクタの呼び出しは実行されません。公開リンクについては2つの情報源の記載が食い違っています。一方で、組織外の人にはライブデータが表示されないという結果は一致しています。この記事では、より厳しいヘルプセンターのルールに従い、ダッシュボードを組織内でのみ共有します。
最近のRedditでも、この点に関するスレッドがいくつも立っています。あるユーザーは、Claude Codeでデータベースを使った採用ダッシュボードを作成し、Claudeのライセンスを持たないマネージャーに見せる方法を質問していました。返信では、組織内共有にはサインインしたメンバーが必要であり、公開リンクではコネクタの呼び出しが実行されないと説明されています(r/ClaudeCodeのスレッド)。別のスレッドでは、どのチームメイトにもダッシュボードが空のまま表示されました(r/ClaudeAIのスレッド)。
原因は同じルールでした。ページが使うすべてのコネクタを、利用者それぞれが自分で接続して承認する必要があります。そのため、各ライブセクションに、接続すべきコネクタ名を記した短い注記を入れてください。Claude Codeのドキュメントも同じ方法を勧めています。
呼び出し制限:情報源に書かれていること、書かれていないこと
2026-11-05に、claude.com、support.claude.com、code.claude.com、docs.claude.comにあるアーティファクトのコネクタに関するページを確認しました。いずれのページにも、アーティファクトからのコネクタ呼び出しについて「1分あたりの呼び出し回数」や「1日あたりの呼び出し回数」といった数値は記載されていません。管理者ガイドには、アーティファクトの使用量が各ユーザーの利用上限にカウントされるとだけ書かれています。手元にインストールしたClaude Codeに含まれるランタイムの型定義には、rate_limitedというエラーコードがあり、「reserved, never returned today」(予約済みで、現時点では返されない)という注記が付いています。
つまり、正直に答えるとこうなります。Claudeはこれらのページの呼び出し上限を公開していません。実際に制限となりうるのは、以下に記載された上限と、コネクタサーバー自体のレート制限です。
| 制約 | 値 | 出典 | ダッシュボードへの影響 |
|---|---|---|---|
| claude.aiとデスクトップでのツール結果のサイズ | 約150,000文字 | claude.com/docs/connectors/building、2026-11-05 | TikTokの投稿20件で約50,000バイト |
| claude.aiとデスクトップでのツール呼び出しのタイムアウト | 240秒 | 同じページ | 最も遅い同期呼び出しは69秒 |
| ページランタイムの応答待ち上限 | 約130秒 | 手元のClaude Code 2.1.309に含まれるランタイム型定義、バージョン0.2.96(公開ドキュメントではなく、変更される可能性あり) | 遅いプラットフォームには非同期処理とポーリングが必要 |
| アーティファクトのストレージ | 1件あたり20 MB、テキストのみ | support.claude.com 17153992 | 必要なフィールドだけに絞って保存する |
| 外部への招待 | アーティファクトあたり最大50人、招待相手はライブセクションを利用できない | support.claude.com 9547008 | 組織内で共有する |
| EveryInfraの1分あたりの制限 | デフォルトでアカウントあたり60回、全キーの合計 | everyinfra.com/pricing、2026-11-05 | キーを共有すると、チーム全体で1分あたり60回 |
| EveryInfraのキーごとの制限 | キーごとにより低い制限を設定できる。テスト用のキーは1分あたり10回だった | 2026-11-05、シンガポール時間00:19:51に429レスポンス | ダッシュボード専用のキーを用意する |
3行目には短い補足が必要です。Claude Codeには、artifactランタイムの型定義のローカルコピーが同梱されています。確認したのは、Claude Code 2.1.309に付属するバージョン0.2.96です。それによると、ページはclaude.use("mcp")から呼び出し関数を取得し、応答を約130秒待ちます。
このファイルは公開されたWebページではなく、変更される可能性があります。そのため、現時点での動作としてのみ扱います。同じルールを公開ドキュメントが扱っている場合は、公開ドキュメントを優先します。
ダッシュボードに必要なデータ:3つのプラットフォームと3つの機能
ダッシュボードは小さく保ちました。各ブランドにTikTok、YouTube、Instagramの3行があります。各行には、1日あたりの投稿数、再生数の中央値またはいいね数の中央値、TikTokのエンゲージメント率、フォロワー数、最新投稿からの経過日数を表示します。表の下には、直近30日間のTikTokの投稿ごとの再生数をプロットします。データはEveryInfraの3つの機能から取得します。価格は、2026年11月5日のシンガポール時間00:15に読み取ったカタログのprice_usdの値です(カタログ)。
| プラットフォーム | 機能 | 送信したパラメータ | 1回あたりの料金 | 同期・非同期 | ページで使うフィールド |
|---|---|---|---|---|---|
| TikTok | tiktok/user_videos | username、limit 20(最大50) | $0.000556 | 同期 | 投稿日時、再生数、いいね数、コメント数、シェア数、固定表示フラグ、フォロワー数、認証済みフラグ |
| YouTube | youtube/user_posts | チャンネルのurl、limit 20(最大50) | $0.000556 | 同期 | タイトル、相対形式の投稿日時、再生数、登録者数 |
instagram/user_posts | username、limit 20(デフォルト30、最大200) | $0.000556 | 非同期:送信時に課金、ポーリングは無料 | 投稿日時、メディアの種類、いいね数、コメント数 |
3つとも料金は件数単位ではなく呼び出し単位です。1件でも50件でも料金は同じで、結果が空の場合は返金されます。各プラットフォームのページはTikTokデータAPI、YouTubeデータAPI、InstagramデータAPIです。
各プラットフォームの公式APIを使わないのはなぜでしょうか。YouTube Data APIのデフォルトのクォータは1日10,000ユニットです(YouTubeのクォータコスト、2026-11-03更新)。他のチャンネルも読み取れますが、自分のGoogle Cloudプロジェクトが必要です。Instagram Business Discoveryでは、他のプロフェッショナルアカウントのフォロワー数、いいね数、コメント数を読み取れます。ただし、自分のプロフェッショナルアカウントとアクセストークンが必要です(Meta開発者ドキュメント)。
TikTokの/v2/video/list/で取得できるのは、アクセスを許可したユーザー本人の公開動画だけで、1ページあたり最大20件です(TikTok開発者ドキュメント)。競合のアカウントは読み取れません。同僚全員が開くページの裏で、アカウントとトークンを3組管理することになります。コネクタが1つなら運用も楽です。
各セルの計算方法:投稿頻度、中央値、エンゲージメント率
ページはすべての数値を表示時に計算します。キャッシュには生のフィールドだけを保存するため、データを取得し直さなくても計算式を変更できます。「1日あたりの投稿数」は、固定表示されていない投稿の数を、それらの投稿のうち最も古いものから取得時刻までの日数で割った値です。YouTubeの投稿日時は「3w ago」「2mo ago」のような相対表記です。日数に換算すると、精度は1週間または1か月単位になります。そのため、YouTubeのセルはおおよその規模を示すだけです。
「直近30日間の投稿数」は使いません。理由は後述のテスト2のとおりで、投稿の多いアカウントでは20件で30日をカバーできないからです。
このページでは、再生数といいね数に平均値ではなく中央値を使っています。ソーシャル投稿の再生数は大きくばらつくためです。GoProのYouTube動画の最新20本では、最も多いものが4.4M回、通常の動画で最も少ないものが21,000回でした。一、二本のヒットがあるだけで平均値は大きく引き上げられ、日によって大きく変動します。TikTokのエンゲージメント率は、投稿ごとに、いいね数、コメント数、シェア数の合計を再生数で割って算出します。セルにはその率の中央値を表示しています。
YouTubeの機能はいいね数を返さず、Instagramの機能は再生数を返しません。これらのセルは空のままにし、ページは他の数値で埋めません。「フォロワー数」は1件目の投稿者フォロワー数から取得します。Instagramの機能はこれを返さないため、そのセルも空です。
空欄のセルは意図的なものです。10人が毎日確認するページには、大きなリスクが1つあります。セルの意味が変わっても、誰も気づかないことです。たとえば、ある日Instagramの機能が再生数を返し始めたとします。
エンゲージメントのセルが空欄から値に変わり、見た人は競合が戦略を変えたと考えるでしょう。そのため、ページでは各列の見出しの下に、フィールド名と対象プラットフォームを記載しています。データのないセルにはダッシュを表示します。
ステップ1:EveryInfraをClaudeのコネクタとして追加(設定例)
EveryInfraには、2つの支払いモデルに対応する2つのリモートMCPアドレスがあります。以下の手順は設定例です。今回のテストでは、Web版のClaudeにはサインインしていません。画面上の名称は2026-11-05時点のClaudeヘルプセンターに基づいているため、実際の表示と照らし合わせて確認してください。
1つ目の方法では、メンバーそれぞれが自分のEveryInfraアカウントを使います。アドレスはhttps://api.everyinfra.com/mcp/allです。認証情報なしでリクエストすると、401とWWW-Authenticateヘッダーが返ります。このヘッダーはメタデータドキュメントを指しており、そのauthorization_serversフィールドにEveryInfraのサインインサービスが記載されています。
このテストはシンガポール時間2026-11-05 00:12に実施しました(メタデータドキュメント)。これはMCPの標準的なフローです。サーバーがRFC 9728に基づいて保護リソースのメタデータを公開し、クライアントはそれを使って認可サーバーを見つけます(MCPの認可仕様、2025-11-25、RFC 9728)。
Claudeのコネクタのドキュメントによると、そのOAuthクライアントは2025-03-26、2025-06-18、2025-11-25の認可仕様に準拠しています。コールバックアドレスはhttps://claude.ai/api/mcp/auth_callbackです(Build an MCP server for Claude)。このアドレスでは24個のツールが一覧表示されます。
2つ目の方法では、チーム全体で1つのキーを使います。アドレスはhttps://api.everyinfra.com/mcpです。コネクタを追加するときに、「リクエストヘッダー」にAuthorization: Bearer <EVERYINFRA_API_KEY>を入力します。このアドレスでは12個のツールが一覧表示され、受け付ける認証はキーのみです。ここで注意すべき制限が1つあります。
Claudeのコネクタのドキュメントでは、静的ヘッダーによる認証情報は一部の組織向けのベータ機能とされています(コネクタの認証、2026-11-05閲覧)。それ以外の組織のオーナーには、「リクエストヘッダー」の項目自体が表示されません。また、ドキュメントによると、このキーは個人ではなく組織の認証情報です。メンバー全員のリクエストに同じキーが付与されます。
| `/mcp/all`でのOAuth | `/mcp`での共有キー | |
|---|---|---|
| 支払い元 | 閲覧者それぞれのEveryInfraアカウント | キーを所有する1つのアカウント |
| 1分あたりの上限 | 閲覧者アカウントごとに60回 | チーム全体で60回、またはキーに個別設定されたより低い上限 |
| 一覧表示されるツール | 24 | 12 |
| 設定できるユーザー | Claudeの有料ユーザー全員 | TeamまたはEnterpriseのオーナー(ベータ版の「リクエストヘッダー」フィールドが有効な場合のみ) |
| 主なリスク | メンバーごとにEveryInfraアカウントと残高が必要 | メンバー全員の呼び出しに同じキーが使われる |
Configuration example (Claude web or desktop, Pro or Max account)
1. Customize > Connectors > + Add > Add custom connector
2. Name: EveryInfra <- the page code must use this exact server name
3. URL: https://api.everyinfra.com/mcp/all
4. Authentication: Sign in when needed <- each person signs in to their own EveryInfra account
5. Add. In the connector's tool permissions, set everyinfra_call_api to Always allow
(the Help Center says tools that need approval for each action do not work in artifacts)
Configuration example (Team or Enterprise, one Owner adds it, one shared key)
1. Organization settings > Connectors > Add custom connector
2. URL: https://api.everyinfra.com/mcp
3. Request headers: Authorization: Bearer <EVERYINFRA_API_KEY>
(beta, only some organizations see this field; make a separate key with its own per-minute limit)
4. Organization settings > Capabilities > turn on Enable artifact connectors
5. Each member clicks Connect under Customize > Connectors問題の多くはステップ5で起こります。Claudeは各コネクタのツールを「読み取り専用」と「書き込み/削除」の2つのグループに分けます。各グループは「常に許可」「承認が必要」「ブロック」のいずれかに設定できます(コネクタでClaudeの機能を拡張する)。everyinfra_call_apiのツール宣言には、readOnlyHint: false、destructiveHint: true、openWorldHint: trueが指定されています。シンガポール時間2026-11-05 00:12に、tools/listの生のレスポンスを確認しました。これが当社ツールの現在のアノテーションです。MCPの仕様では、これらのフィールドはツール自身が自らの動作についてのヒントとして宣言するものです(MCPスキーマ、2026-07-28)。
ツールがどのグループに入っているかは、ご自身の権限ページで確認できます。この設定例では、claude.aiでそのページを開いていません。手順は次のとおりです。コネクタを追加したら、そのツールの権限設定を開きます。everyinfra_call_apiが含まれるグループを探し、そのグループを「常に許可」に設定します。
ヘルプセンターによると、アクションごとに承認が必要なコネクタツールはアーティファクトから利用できません。そのため、ツールが「承認が必要」のままだと、ダッシュボードは空のままになります。ポーリング用のツールeveryinfra_get_jobは読み取り専用とされているため、この影響を受けません。
ステップ2:Claudeのコードアーティファクトで作るMCPページの骨組み
ページの中核となる処理は3つです。呼び出すコネクタツールを宣言すること、まず共有キャッシュを確認すること、キャッシュが古すぎる場合にのみ有料の呼び出しを行うことです。
以下は、当社ダッシュボードのデータ取得部分です。ページ全体は約110行で、表とグラフのコードは省略しています。claude.use("mcp")とclaude.use("db")は、ページのランタイムが提供する2つのエントリーポイントです。どちらも、ビューで利用できない場合はnullを返すため、これらがなくてもページが表示されるようにしておく必要があります。
// Capability declaration that Claude submits at publish time.
// The page cannot call tools outside it.
// capabilities: { mcp: { servers: [{ server: "EveryInfra",
// tools: ["everyinfra_call_api", "everyinfra_get_job"] }] },
// db: {} }
const SERVER = "EveryInfra", CALL = "everyinfra_call_api", JOB = "everyinfra_get_job";
const TTL_MS = 6 * 3600 * 1000; // shared cache: 6 hours
const req = (b, p) => ({
tiktok: { platform: "tiktok", action: "user_videos", params: { username: b.tiktok, limit: 50 } },
youtube: { platform: "youtube", action: "user_posts", params: { url: b.youtube, limit: 50 } },
instagram: { platform: "instagram", action: "user_posts", params: { username: b.instagram, limit: 50 } },
}[p]);
const KEEP = ["id", "post_id", "posted_at", "view_count", "like_count", "comment_count",
"share_count", "is_pinned", "author_follower_count", "author_is_verified"];
const trim = (rows) => rows.map((r) => Object.fromEntries(KEEP.filter((k) => k in r).map((k) => [k, r[k]])));
let mcp = null, db = null;
async function fetchRows(b, p, force) {
const key = `cache/${b.name}-${p}`.toLowerCase();
if (db && !force) { // 1. read the shared cache first
const snap = await db.doc(key).get().catch(() => null);
if (snap?.exists && Date.now() - snap.data().fetchedAt < TTL_MS) return snap.data();
}
if (!mcp) throw { code: "no_mcp" };
let out = (await mcp.callTool(SERVER, CALL, req(b, p))).payload; // 2. one paid call
for (let i = 0; out.job_id && out.status !== "succeeded" && i < 20; i++) {
if (["failed", "cancelled"].includes(out.status)) throw { code: "job_" + out.status };
await new Promise((r) => setTimeout(r, 15000)); // Instagram is async; polling is free
out = (await mcp.callTool(SERVER, JOB, { job_id: out.job_id })).payload;
}
const doc = { fetchedAt: Date.now(), rows: trim(out.results || []) }; // 3. keep only the fields we use
if (db) db.doc(key).set(doc).catch(() => {}); // view-only members cannot write; they still see data
return doc;
}
(async () => { [mcp, db] = await Promise.all([claude.use("mcp"), claude.use("db")]); load(false); })();このコードのいくつかの部分は、実際のレスポンスに基づいて決めました。1つ目に、payloadはツール結果の最初のテキストブロックを、ランタイムがJSONとしてパースしたものです。EveryInfraはJSONテキストを返すため、ページはpayload.resultsを直接読み取ります。
第2に、各レスポンスにはbillingブロックとquotaブロックもあります。ここには、この呼び出しの課金額とアカウント残高が入っています。共有キーを使うと、ページのコードから組織アカウントの残高を読めてしまいます。そのためtrimでは、ページに必要な10個のフィールドだけを残します。残高を共有ストレージに書き込むことも、表示することもしません。
3つ目に、ページは失敗した呼び出しを自動で再試行しません。ローカルの型定義によると、読み取り専用でないツールでは、タイムアウトや接続切れが起きると結果が不明になります。新たな呼び出しは、閲覧者が再度操作するまで待つ必要があります。EveryInfraの429は課金されないため、このエラーの横には「再試行」ボタンを置けます。
ページのランタイムはエラーコードを返し、コードごとに異なるメッセージが必要です。次の表は、ランタイムの型定義にあるコードと、当社のページで表示する内容の対応です。
| エラーコード | 意味 | ページの表示 |
|---|---|---|
server_not_connected | 閲覧者がこの名前のコネクタを追加していない | 「EveryInfraコネクタを追加してください」 |
approval_required | 呼び出しに閲覧者の承認が必要 | 同じ呼び出しを1回だけ実行するボタン |
needs_reauth | コネクタのサインインの有効期限切れ | 「設定 > コネクタでEveryInfraを再接続してください」 |
tool_error | ツールは実行されたが、429などの失敗を報告した | エラーメッセージと「再試行」ボタン |
server_unavailable | 時間内に応答がない、またはサーバーエラー | 「利用できません」と表示し、有料ツールのため自動再試行は行わない |

このスクリーンショットはclaude.aiで撮影したものではありません。Claude側については、本記事では設定例を示すのみで、このダッシュボードをclaude.aiで公開してはいません。自分たちのマシン上でclaude.use()の小さなモックを使い、保存しておいた実際のレスポンスを同じページコードに渡しました。このスクリーンショットは、ページコードとレスポンスの形が噛み合っていることを示しています。また、数値が正しいことも示しています。
JavaScriptで計算したセルはすべて、別のPythonスクリプトの結果と一致しています。claude.aiの権限確認プロンプト、初回の承認、キャッシュの挙動はスクリーンショットでは確認できません。これらはご自身のアカウントで公開してはじめて確認できます。
実際の1往復:各プラットフォームを1回ずつ呼び出し
まずは、TikTokのリクエストとレスポンスの生データです。2026-11-05のシンガポール時間00:18:50に、https://api.everyinfra.com/mcpへtools/callを送信しました。ツールはeveryinfra_call_apiで、GoProのTikTokユーザー名とlimit 20を指定しました。22.22秒後に、49,956バイトのJSONが返ってきました。
動画は20本ありました。1本は2025年のピン留めされた広告です。残り19本は新しい順に並んでおり、最新の動画は取得の2.3時間前、2026-11-04に投稿されたものでした。各行には35個のフィールドがあり、billing.charged_usdは0.000556でした。

YouTubeの呼び出しは00:19:16に送信し、11.66秒後に13,047バイトで返ってきました。20件の動画について、タイトル、再生回数、チャンネル登録者数(GoProは11.3M)が含まれていました。高評価数は含まれていませんでした。投稿日時は「4d ago」「3w ago」「1mo ago」のような相対表記でした。再生回数は125,000や300,000のように丸められていました。
20件のうち2件は不自然な内容でした。投稿時刻のフィールドに「and NASA」や「and」+パートナー名が入り、再生数は0でした。これはGoProがパートナーと共同で投稿した動画です。ページではこうした件を区別し、中央値の計算から除外する必要があります。そうしないと、再生数の中央値が下がってしまいます。
Instagramは非同期です。00:19:28にGoProのリクエストを送信しました。8.48秒後に、status: runningとともにジョブIDが返り、everyinfra_get_jobで結果を取得するよう案内がありました。課金は送信時に発生し、ポーリングは無料です。
第1ラウンドでは、3ブランドすべてを送信し終えてからジョブを読み取りました。GoProのジョブは送信から23秒後の時点でまだ実行中でした。223秒の時点では完了しており、投稿20件、34,031バイトでした。
DJIのジョブは15秒ごとにポーリングしました。00:23:27にrunning、00:23:43にfinalizing、00:23:58にsucceededとなり、合計約56秒でした。Instagramのレスポンスにはいいね数とコメント数が含まれます。再生数とフォロワー数は含まれません。カタログのフィールド注記にも同じことが書かれており、この機能はどちらも返さず、返す投稿は最大48件です。
テスト1:各呼び出しにかかる時間
ページを1回開くと9件の呼び出しが発生します。最初の画面が空のままになる時間は、各呼び出しにかかる時間で決まります。下のグラフは、第1〜第3ラウンドの全36件の呼び出しを1件1点で示したものです。TikTokの同期呼び出しの中央値は21.23秒、YouTube呼び出しの中央値は14.00秒でした。どちらも50〜70秒のロングテールがあります。
Insta360のYouTube呼び出しは66.58秒かかりました。OuraのYouTube呼び出しは69.16秒かかった末に0件を返し、自動で返金されました。Instagramの送信は速く、中央値は2.12秒です。ただし、結果が返るまでにはさらに1分から数分かかります。
| 呼び出し | 呼び出し回数 | 中央値(秒) | 最速(秒) | 最遅(秒) |
|---|---|---|---|---|
| TikTok同期 | 12 | 21.23 | 8.62 | 52.78 |
| YouTube同期 | 12 | 14.00 | 8.71 | 69.16 |
| Instagram送信 | 12 | 2.12 | 1.90 | 12.19 |
| Instagram完了(上限値) | 12 | 143 | 47 | 510 |
これらの数値から、ページの設計を3つの点で変える必要があります。第一に、ページは9件の呼び出しを並列で送信しなければなりません。順番に送ると、最悪の場合、最初の画面が揃うまでに5〜6分かかります。並列でも、最も遅いセルは1分以上かかります。そのため、各セルに個別の「読み込み中」状態が必要です。
第二に、Instagramでは送信、ジョブID、ポーリングの流れを使う必要があります。1回の同期呼び出しでは対応できません。ページのランタイムは応答を約130秒待ち、Claudeのホスト型アプリはツール呼び出しを240秒で打ち切ります。第2ラウンドでは、最も遅かったInstagramのジョブは、送信から成功を確認した最初のポーリングまで510秒かかりました。
その一因は、こちらのポーリングが遅かったことです。第3ラウンドでは15秒ごとにポーリングし、3件のジョブはすべて47〜59秒で完了しました。第三に、キャッシュを使えばこうした待ち時間はすべてなくなります。共有ストレージから9つのセルを読み込む時間はミリ秒単位です。
テスト2:20件でどこまで遡れるか
1回目と2回目のラウンドではlimitを20にしました。投稿の多いアカウントでは、20件で30日間を埋められません。この記事のウェアラブルブランドでは、結果はまちまちです。WHOOPはTikTok動画20件で37.1日分をカバーした一方、Instagram投稿20件では14.3日分しかカバーできませんでした。Ouraは投稿が少なく、TikTok動画19件で83.9日分、Instagram投稿20件で27.0日分でした。GarminはYouTube動画20件で約60日前まで遡り、Instagram投稿20件で40.1日分でした。
カメラブランドはさらに投稿が多くなっています。Insta360のピン留めされていないTikTok動画17本は、わずか7.2日分しかカバーしていませんでした。ページで30日間の投稿数ではなく1日あたりの投稿数を表示しているのはこのためです。
より良い対処はlimitを大きくすることです。3つの機能はいずれも呼び出し単位の料金です。TikTokとYouTubeは最大50件、Instagramは最大200件まで指定できます。件数を増やしても料金は変わりません。シンガポール時間01:03〜01:05に、limitを50にしてさらに3回呼び出しました。
TikTokのInsta360は、20件で7.2日分だったのが50件で24.0日分になりました。TikTokのMangoは14.1日分から56.1日分に、YouTubeのGoProは約150日分から約365日分になりました。どの呼び出しも料金は$0.000556のままでした。
その代償はデータサイズです。TikTokの各件には35のフィールドがあります。20件で約50,000バイト、50件では137,072バイトになりました。Claudeのホスト型アプリでのツール結果1件あたりの上限は150,000文字なので、残りは約13,900文字しかありません(Insta360の呼び出しは136,062文字を返しました)。
今回のテストで最も強調したいのはこの点です。確認せずにlimitを最大まで上げないでください。TikTokは50件の時点ですでに上限に近づいています。それ以上取得するには、ページングか非同期モードが必要です。
| 呼び出し(2026-11-05、シンガポール時間) | 20件でカバーする日数 | 50件でカバーする日数 | 返された文字数 | 150,000までの余裕 | 秒 |
|---|---|---|---|---|---|
| Insta360 TikTok、01:03:59 | 7.2 | 24.0 | 136,062 | 13,938 | 19.75 |
| Mango TikTok、01:04:27 | 14.1 | 56.1 | 121,794 | 28,206 | 30.70 |
| GoPro YouTube、01:05:06 | 150 | 365 | 31,212 | 118,788 | 11.52 |
以下は、ウェアラブル3ブランドの第2ラウンドの数値です。OuraのTikTokの最新動画とInstagramの最新投稿は、いずれも2026-11-02のものでした。GarminのInstagramの最新投稿は2026-10-31のものでした。
| ブランドとプラットフォーム | 1日あたりの投稿数 | 再生回数の中央値 | いいね数の中央値 | エンゲージメント率 | フォロワー数 |
|---|---|---|---|---|---|
| Oura、TikTok | 0.23 | 20,700 | — | 1.09% | 161,600 |
| Oura、YouTube | —(0件、返金済み) | — | — | — | — |
| Oura、Instagram | 0.74 | — | 1,785 | — | — |
| WHOOP、TikTok | 0.54 | 17,250 | — | 2.82% | 415,900 |
| WHOOP、YouTube | 0.19 | 7,100 | — | — | 165,000 |
| WHOOP、Instagram | 1.40 | — | 3,412 | — | — |
| Garmin、TikTok | —(プレースホルダーアカウント) | — | — | — | 21 |
| Garmin、YouTube | 0.33 | 22,500 | — | — | 368,000 |
| Garmin、Instagram | 0.50 | — | 7,228 | — | — |
テスト3:TikTokの再生回数の推移
ダッシュボードの下部には、直近30日間のTikTokの投稿ごとの再生回数をプロットしています。下のグラフは、ウェアラブルブランドについて第2ラウンドで取得した実際のレスポンスを対数スケールで表示したものです。WHOOPはおよそ2日に1回投稿しています。動画の大半は5,000〜20,000回再生で、最も多いものは65,000回です。
Ouraは投稿頻度が低く、この期間の動画は5本、再生回数は3,040〜25,900回でした。再生回数の中央値は20,700回、エンゲージメント率の中央値は1.09%です。WHOOPは再生回数の中央値が17,250回、エンゲージメント率の中央値が2.82%でした。
このグラフは注意して読む必要があります。各ドットは取得時点の累計再生回数であり、一定期間内の再生回数ではありません。昨日の動画と3週間前の動画を比べるのは公平ではなく、新しい動画のほうが常に弱く見えます。「今週どちらが好調だったか」を知るには、投稿後48時間の再生回数を比較してください。そのためには、ページが各動画を初めて検出した時点の再生回数を保存し、48時間後に再取得する必要があります。
共有ストレージならそれが可能ですが、組み込みのキャッシュではできません。共有ストレージは履歴を保持できますが、ブラウザキャッシュは最新の結果しか保持しません。
テスト4:41分間でデータはどれだけ変化したか
適切なキャッシュ期間は、データの変化の速さによって決まります。シンガポール時間の01:00〜01:03に、3つのカメラブランドについて、3つのプラットフォームすべてで第1ラウンドの呼び出しを再実行しました。第1ラウンドとの間隔は約41分(0.7時間)です。同じ投稿の再生回数またはいいね数を比較しました。
2回の取得の間に、9つのセルのいずれにも新しい投稿は現れませんでした。変化のほぼすべては、直近1〜2日の投稿に集中しています。TikTokではInsta360の動画15本が変化しましたが、増加率の中央値はわずか0.18%でした。最大の増加は2026-11-03の動画で、再生回数が247,300回から259,800回に増えました(+5.05%)。
DJIで増加率が最も高かったのは、2026-11-04の動画でした(+5.37%)。変化したGoProの動画は5本のみでした。増加率が最も高かったのは2026-11-04の動画で、再生回数は1,532回から1,626回に増えました。
Instagramでは変化した投稿が多かった(20件中12〜17件)ものの、増加率の中央値は約0.1%でした。増加が大きかった上位2件は、いずれも2026-11-04の新しい投稿です。Insta360の投稿はいいね数が742から916に(+23.4%)、DJIの投稿は2,406から2,700に(+12.2%)増えました。YouTubeでは、変化した動画は各チャンネルで20本中最大1本でした。再生回数は丸められた値(例:125,000)のため、小さな増加は反映されません。
| ブランドとプラットフォーム | フィールド | 変化した行数(20行中) | 変化率の中央値 | 最大変化率 |
|---|---|---|---|---|
| GoPro TikTok | 再生回数 | 5 | 0.00% | 6.14% |
| GoPro YouTube | 再生回数 | 1 | 0.00% | 0.26% |
| GoPro Instagram | いいね数 | 16 | 0.06% | 0.46% |
| Insta360 TikTok | 再生回数 | 15 | 0.18% | 5.05% |
| Insta360 YouTube | 再生回数 | 0 | 0.00% | 0.00% |
| Insta360 Instagram | いいね数 | 12 | 0.10% | 23.45% |
| DJI TikTok | 再生回数 | 14 | 0.36% | 5.37% |
| DJI YouTube | 再生回数 | 1 | 0.00% | 1.20% |
| DJI Instagram | いいね数 | 17 | 0.10% | 12.22% |
結果は明確です。1日あたりの投稿数や再生回数の中央値といったセルでは、6時間の共有キャッシュでも失われる情報はほとんどありません。古い投稿の41分間の変化は1%未満でした。変化するのは直近1日の投稿です。
ページで新しい投稿の伸び方を追跡しますか?その場合は、直近48時間を独立した行にしてください。その行には1時間など短めのキャッシュを使い、その他のセルは6〜24時間ごとの更新のままにします。
テスト5:レスポンスサイズと共有ストレージ
アーティファクトのストレージはそれぞれ20 MBで、テキストのみです(support 17153992)。1回の表示で取得する生のレスポンス9件の合計は約326 KBです。trimで10個のフィールドだけを残すと27.6 KBとなり、元のサイズの8.5%まで減ります。6時間ごとに1件ずつ履歴として保持しても、1か月で120件、わずか3.3 MBです。
20 MBの範囲に十分収まります。生のレスポンス全体は保存しないでください。理由の1つはサイズです。もう1つは、レスポンス内にアカウント残高が含まれており、共有ストレージはすべてのメンバーが読み取れるためです。
データの落とし穴:プレースホルダーアカウント、パートナー動画、空の結果
今回のテストの27個のデータセルのうち、3つはそのままではダッシュボードに載せられませんでした。原因はそれぞれ異なり、ページはそのすべてを検出する必要があります。
| ケース | 実例(2026-11-05、シンガポール時間) | 課金額 | ページの処理 |
|---|---|---|---|
| ユーザー名が別人のものだった | TikTokのGarmin:ブランド名から推測したハンドルで、フォロワー21人の未認証アカウントの行が1件返された | $0.000556 | フォロワー数が極端に少ない場合やauthor_is_verifiedがfalseの場合は「アカウントを確認」のフラグを付け、比較から除外する |
| パートナー動画の行 | GoPro、Insta360、DJIのYouTubeで、投稿時刻が「and」+パートナー名で再生数0の件がそれぞれ2〜4件 | 通常どおり課金 | 投稿時刻を読み取れない行は中央値の計算から除外し、「パートナー投稿」として一覧表示する |
| 空の結果 | OuraのYouTubeチャンネルのアドレスで、69.16秒後に0件が返却 | 返金済み、$0 | 「このアドレスでは投稿が見つかりません」と表示し、チャンネルのアドレスを確認するようユーザーに促す |
| 固定投稿 | TikTokアカウント9件のうち5件に固定投稿があり、Insta360とDJIにはそれぞれ3件の固定投稿があった | 通常どおり課金 | 投稿頻度と中央値を計算する前に固定投稿を除外する |
| 1分あたりの上限に到達 | 1回目で429のレスポンスが4件、うち3件は00:19:51に発生。メッセージには、キー自体の上限が1分あたり10回と記載 | 課金なし | retry_afterの秒数と「再試行」ボタンを表示する |
最も見落としやすいのは1行目です。ブランドのTikTokユーザー名が、ブランド名と同じとは限りません。試したハンドルは、小規模な個人アカウントのものでした。APIは実際にコンテンツを返しているため、この呼び出しは通常どおり課金されます。初めてブランドを追加するときは、チャットでClaudeに頼み、tiktok/profileなどのプロフィール機能でアカウントを確認してください。認証済みフラグとフォロワー数を確認してから、ページにハンドルを入れてください。
1回開くあたりのコスト:10人が1日3回開く場合
2026-11-05時点のカタログ価格では、3つの機能はいずれも1回の呼び出しあたり$0.000556です。ダッシュボードは3ブランド×各3プラットフォームなので、1回開くと9回の呼び出しで$0.005004になります。Instagramのポーリング用ツールeveryinfra_get_jobは無料です。空の結果は返金され、429のレスポンスは課金されません。
| 方式 | 月間取得回数 | 課金対象の呼び出し | 月間データコスト | 備考 |
|---|---|---|---|---|
| キャッシュなし | 全900回のアクセス | 8,100 | $4.50 | 10人 × 3回 × 30日 × $0.005004 |
| 個人別、24時間 | 各自1日1回、300 | 2,700 | $1.50 | 現在このツールは読み取り専用としてマークされていないため、組み込みキャッシュでは実現できない。個人用ストレージを使用 |
| 共有、6時間 | 1日4回、120 | 1,080 | $0.60 | アーティファクトの共有ストレージに保存。有効期限切れ後に最初に開いた人が取得 |
| 共有、24時間 | 1日1回、30 | 270 | $0.15 | 週次ミーティングで確認するページ向け |
| 参考:Teamの標準シート10席(月額) | — | — | $250 | claude.com/pricing、2026-11-05 |
どの金額もわずかです。最も高い方式でも月$5未満で、Teamシート10席の$250と比べれば小さな額です。ただし、先に2つの点を考慮してください。OAuthの場合、キャッシュの有効期限が切れた後に最初にページを開いた人が、その取得の料金を支払います。つまり、毎朝いちばん早く来た同僚が全員分を負担することになります。
金額はごくわずかですが、ページ上で明記しておきましょう。共有キーの場合、すべての料金は組織の1つのアカウントから引き落とされます。残高がなくなると、チーム全員のダッシュボードが一斉に空になります。EveryInfraのコンソールで、そのアカウントに残高不足アラートを設定してください。
開くたびの課金を避けるキャッシュ方法
Claudeのページランタイムには、独自の呼び出しキャッシュがあります。読み取り専用として宣言されたツール(readOnlyHint: true)の場合、結果はデフォルトで5分間保持され、最大7日間まで延長できます。Artifactsのドキュメントにも、再度開いたページはまずキャッシュ済みのレスポンスを使って描画されると記載されています。しかし、ローカルにインストールしたClaude Code 2.1.309に含まれるランタイムの型定義(バージョン0.2.96、公開ドキュメントではありません)には、追加のルールがあります。readOnlyHint: falseを宣言したツールでは、キャッシュのオプションは無視され、呼び出しは一切キャッシュされません。また、ページはそのツールに対して自動更新用のwatchToolメソッドも使えません。
現在のeveryinfra_call_apiのアノテーションは、このルールに該当します。そのため、ランタイムが結果を再利用することはなく、呼び出しごとに課金されます。対処法はシンプルで、ページ側で独自にキャッシュを持たせることです。以下にその方法を紹介します。
アーティファクトの共有ストレージ(db機能)の使用をおすすめします。各セルについて、不要な部分を省いた結果と取得時刻を保存します。ページを開いたらまずそれを読み込み、6時間経過した場合にのみ再取得します。これには3つの利点があります。
コストは月$4.50から$0.60に下がります。キャッシュが有効期限内なら、最初の画面は1分ではなく数ミリ秒で描画されます。さらに、次のグラフのとおり、1分あたりの負荷も下がります。
デフォルトでは、Contributor以上のメンバーは共有ストレージに書き込めますが、閲覧のみのメンバーは読み取りしかできません。そのため、閲覧のみのメンバーが期限切れのページを開くと、1回分の取得料金を支払って最新のデータを見ることになります。しかし、そのメンバーは結果を書き戻せないため、次の人がまた取得します。コードはこのケースに対応できる必要があります。
1分あたりの上限が問題になるのは、共有キーを使う場合だけです。EveryInfraでは、デフォルトで1アカウントあたり1分間に60回まで呼び出せます。これはすべてのキーの合計です(料金ページ)。たとえば、スタンドアップの前に、10人が同じ1分間にキャッシュなしのページを開いたとします。1つのアカウントに90回の呼び出しが発生し、最後の30回は429になります。これらは課金されませんが、該当するセルは空のままです。
この記事で使ったテスト用キーには、キー独自に1分あたり10回の上限が設定されていました。1回目ではこの上限に4回達し、うち3回は00:19:51でした。メッセージには、キー自体の上限を使い切ったため、9秒後に再試行するよう記載されていました。そこで、ダッシュボードには、アカウントの上限より低い1分あたりの上限を設定した専用のキーを用意しましょう。そうすれば、同じアカウント上のほかのプログラムが必要とする呼び出し枠を、ダッシュボードが使い切ってしまうことはありません。
共有キャッシュには、それ特有のコストもあります。HaloPSAのサービスデスク用ダッシュボードに関するRedditの投稿とそのコメントで、よく説明されています(r/halopsaのスレッド)。1つ目のコストはアクセス権です。キャッシュされたデータは、最初に取得した人のアクセス権で取得されたものです。
後から閲覧する人は、自分のアクセス権の範囲外のデータを見る可能性があります。競合他社の公開ソーシャルデータは誰にとっても同じなので、今回のケースでは問題になりません。社内データでは、実際に問題になります。
2つ目のコストは信頼性です。デフォルトのルールでは、どのContributorでも共有ストレージ内のキャッシュドキュメントを変更できます。誰かが偽の数値を書き込むと、すべての閲覧者がその数値を目にします。これを防ぐには、キャッシュのパスへの書き込みをEditorに限定します。その代わり、一般のメンバーは期限切れのページを開くたびに取得を行うことになります。
最近の変更点
2026-10-28、AnthropicはClaude for Legalに、すぐに使える法務向けアーティファクトのギャラリーを追加しました。発表記事ではアーティファクトを「トラッカーやダッシュボードなどのインタラクティブなツール」と呼び、コネクタによってチームが普段使っている情報源を取り込めると説明しています(Introducing artifacts for legal work with Claude)。ローンチパートナーの1社であるHarveyも同日に記事を公開しました。同社のIntakeアーティファクトは、Harvey MCPサーバーを通じてHarveyに接続します(Harveyのブログ)。2026-10-21には、ヘルプセンターのリリースノートにClaude Duetなどのアップデートが記載されました(リリースノート)。同じリリースノートによると、2026-10-15にはEnterpriseプランでアーティファクトのテンプレートがデフォルトで有効になりました。
2026-10-08、Claude DashboardsとClaude Motionがベータ版として公開されました。Dashboardsは有料プランで利用でき、BigQueryやSnowflakeなどのデータプラットフォームに接続できます。ほかのコネクタとも連携でき、各グラフにはデータが最後に更新された日時が表示されます(Claudeブログ、Get started with Claude dashboards)。同日のThe New Stackの記事では、Anthropicの広報担当者のコメントが引用されています。
デフォルトでは、共有ダッシュボードのクエリは各閲覧者自身の接続で実行されます(The New Stack)。DashboardsはデータウェアハウスでのSQLを主な用途としています。今回のようにソーシャルデータのAPIを呼び出すページには、MCPコネクタを使ったシンプルなアーティファクトのほうが直接的です。
Claude Code側では、v2.1.209で、コネクタが公開していないツール名を公開時に受け付けてしまう問題が修正されました。v2.1.265以降は、ページで宣言されているツール名が公開時にチェックされ、一致するものが1つもなければ公開が拒否されます(Claude Codeの変更履歴、Artifacts)。2026-11-05時点で確認できた最新バージョンはv2.1.318です。
未解決のGitHub issueが1件残っています。2026-08-06に、クラウドセッションから更新するとコネクタの許可設定が消える問題がユーザーから報告されました。アプリには再度許可する手段がありません(claude-ai-mcp #787)。Redditでも、同じ「not in this artifact's mcp_tools allowlist」エラーに遭遇したユーザーがいます(r/ClaudeAIのスレッド)。
ClaudeアーティファクトのFAQ
Claudeのアーティファクトから接続済みのMCPコネクタを呼び出せますか?
はい。出典:Googleのサジェスト「claude code artifacts can now call mcp connectors」。公開したアーティファクトは、誰かが開くたびに、その閲覧者のclaude.aiコネクタを通じてMCPツールを呼び出せます。Pro、Max、Ultra、Team、Enterpriseのいずれかのプランが必要です。Claude Codeから公開するにはv2.1.209以降が必要です。対象はclaude.aiのコネクタだけで、公開したページからローカルの.mcp.jsonにあるサーバーは呼び出せません(Artifacts)。
ClaudeアーティファクトからのMCP呼び出しに上限はありますか?
出典:Googleのサジェスト「claude artifacts mcp limits」。2026-11-05時点で、Claudeの公開ドキュメントにはアーティファクトからのコネクタ呼び出し回数の上限が記載されていません。書かれているのは、利用量が各ユーザーの上限に加算されることだけです。明記されている制限は、claude.aiとデスクトップでの結果1件あたり約150,000文字、呼び出し1回あたり240秒です(Build an MCP server for Claude)。コネクタサーバー側のレート制限も適用されます。EveryInfraでは、デフォルトでアカウントあたり毎分60回まで呼び出せます。
Claudeアカウントを持っていない人もライブデータを見られますか?
いいえ。出典:Claudeのライセンスを持たないマネージャーにデータベースのダッシュボードを見せる方法を尋ねたr/ClaudeCodeのスレッド。外部の人や、公開リンクからサインインせずに閲覧する人には、コネクタを使う部分が動作しません。ヘルプセンターにも、アプリに接続したアーティファクトでは「Anyone with the link」を使えないと書かれています(Share artifacts)。外部の読者向けには、静的なスナップショットをエクスポートするか、独自のサインイン機能を持つ小さな社内Webページを作成してください。
共有したダッシュボードがチームメンバーには空で表示されるのはなぜですか?
出典:チーム全員でダッシュボードが空になったr/ClaudeAIのスレッド。コネクタは各アカウントに紐づいています。各閲覧者は、ページが使うすべてのコネクタを接続し、最初の呼び出しを承認する必要があります。TeamとEnterpriseでは、「Enable artifact connectors」がオンになっているか確認してください。コネクタの権限設定で、そのツールが「Needs approval」になっていないかも確認してください。コネクタが公開していないツール名をページが呼び出している場合、ページは全員に対して空になります(Artifacts troubleshooting)。
再公開後に出る「not in this artifact's allowlist」はどういう意味ですか?
出典:r/ClaudeAIのスレッドと、claude-ai-mcpのGitHub issue 787。ページが呼び出せるツールを決めるのは、ページのコードではなく公開時の宣言です。クラウドセッションから更新すると、この宣言が消えることがあります。スレッドで効果があった解決策は、ローカルセッションからコネクタ名とツール名を省略せずに指定して公開し直す方法だけでした。
共有キャッシュによって、見るべきでない人にデータが見えたり、誰かに書き換えられたりすることはありますか?
出典:r/halopsaのサービスデスク用ダッシュボードに関する投稿へのコメント。はい、どちらのリスクも実際にあります。キャッシュされたデータは、最初に取得した人のアクセス権で取得されたものです。デフォルトのルールでは、Contributorがキャッシュのドキュメントに書き込めます。
競合の公開ソーシャルデータであれば、アクセス権による違いはありません。書き換えを防ぐには、キャッシュのパスへの書き込みをEditorに限定します。この場合、一般メンバーは、キャッシュの期限切れ後にページを開くたびにデータを取得します。
Claudeアーティファクトには追加料金がかかりますか?
出典:Googleのサジェスト「do claude artifacts cost money」。アーティファクトは有料プランに含まれており、単独の料金はありません。利用量は各ユーザーの上限に加算されます。データAPIの呼び出しは別料金です。この記事の例では、1回開くごとに$0.005004かかります。10人が1日3回開く場合、キャッシュなしでは月$4.50、6時間の共有キャッシュでは月$0.60です。
始め方
- EveryInfraに新規登録し、残高をチャージします。クイックスタートに従って、APIキーを取得するかOAuthでのサインインを準備します。リモートMCPのガイドはMCPサーバーとリモートMCPのセットアップにあります。
- 上の設定例のとおりに、Claudeでコネクタを追加します。名前をEveryInfraにし、
everyinfra_call_apiを「Always allow」に設定します。 - Claudeのチャットで、ブランドごとにコネクタを1回ずつ呼び出します。ユーザー名、チャンネルのアドレス、返されたフィールドを確認します。
- この記事のスケルトンをもとにページを作るようClaudeに依頼します。
mcpとdbの機能を宣言して公開し、組織内でのみ共有します。 - 各メンバーがコネクタを接続し、最初の呼び出しを承認します。ページにはキャッシュの経過時間を明記し、期限切れ後の取得費用を誰が負担するかも記載します。
関連記事
- Claude Codeのサブエージェント:HaikuサブエージェントでTikTokのブランドアカウントを並列取得:同じTikTokデータを、Claude Codeのサブエージェントで並列に取得します。
- MCP 2026仕様と本番運用への備え:ツール宣言、認可、本番環境でのリモートMCP。
EveryInfraのブログには、競合をテーマにした記事がほかに2本あります。1つのSKILL.mdを4つのAIツールで:競合レビュー分析は、レビュー分析をエージェントスキルにまとめたものです。Claude CodeやCodexなどのツールで1回実行すると、静的なレポートが得られます。ChatGPT Spacesで作る競合ソーシャルトラッカーは、ChatGPT Spaceの共有ページを使います。このページは自動では更新されません。毎週のスケジュールタスクが新しい数値を書き込むので、閲覧者には常に直近のタスクのデータが表示されます。
この記事が異なるのは、データをいつ取得するかと、その費用を誰が払うかの2点です。Claudeのアーティファクトは、各ユーザーがページを開いた時点で、そのユーザーのコネクタを通じてデータを取得します。そのため、更新頻度を決めるのはスケジュールタスクではなく、閲覧者の数とページを開く頻度です。費用を払うのも、タスクを設定した人ではありません。
OAuthの場合、費用を払うのは各閲覧者です。共有キーの場合は、キーを入力した組織が払います。この2点がキャッシュの設計を左右し、以下のテストもすべてこの2点に関するものです。毎週の静的レポートだけが必要なら、ほかの2本の記事のほうがシンプルです。
参考文献
- Claudeヘルプセンター「What are artifacts and how do I use them?」、2026-11-05閲覧:https://support.claude.com/en/articles/17153992-what-are-artifacts-and-how-do-i-use-them
- Claudeヘルプセンター「Share artifacts」、2026-11-05閲覧:https://support.claude.com/en/articles/9547008-share-artifacts
- Claudeヘルプセンター「Artifacts admin guide for Team and Enterprise plans」、2026-11-05閲覧:https://support.claude.com/en/articles/16994751-artifacts-admin-guide-for-team-and-enterprise-plans
- Claudeヘルプセンター「Get started with custom connectors using remote MCP」、2026-11-05閲覧:https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp
- Claudeヘルプセンター「Use connectors to extend Claude's capabilities」、2026-11-05閲覧:https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities
- Claudeヘルプセンター「Get started with Claude dashboards」、2026-11-05閲覧:https://support.claude.com/en/articles/17454700-get-started-with-claude-dashboards
- Claudeヘルプセンター「Release notes」、2026-11-05閲覧:https://support.claude.com/en/articles/12138966-release-notes
- Claude Codeドキュメント「Artifacts」、2026-11-05閲覧:https://code.claude.com/docs/en/artifacts
- Claude Code「Week 29 digest」(2026年7月13日〜17日)、2026-11-05閲覧:https://code.claude.com/docs/en/whats-new/2026-w29
- Claude Code「What's new」インデックス、2026-11-05閲覧:https://code.claude.com/docs/en/whats-new
- Claude Codeドキュメント「Connect Claude Code to tools via MCP」、2026-11-05閲覧:https://code.claude.com/docs/en/mcp
- GitHub上のClaude Code変更履歴、2026-11-05閲覧:https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
- ドキュメント内のClaude Code変更履歴、2026-11-05閲覧:https://code.claude.com/docs/en/changelog
- claude.com開発者ドキュメント「Build an MCP server for Claude」、2026-11-05閲覧:https://claude.com/docs/connectors/building
- claude.com開発者ドキュメント「Authentication for connectors」、2026-11-05閲覧:https://claude.com/docs/connectors/building/authentication
- Claude APIドキュメント「MCP connector」、2026-11-05閲覧:https://docs.claude.com/en/docs/agents-and-tools/mcp-connector
- Claudeの料金ページ、2026-11-05閲覧:https://claude.com/pricing
- Claudeブログ「Build live dashboards and animate explainers with Claude」(2026-10-08)、2026-11-05閲覧:https://claude.com/blog/dashboards-and-motion
- Claude「Introducing artifacts for legal work with Claude」(2026-10-28)、2026-11-05閲覧:https://claude.com/resources/articles/introducing-artifacts-for-legal-work
- Claude「Turn ideas into interactive AI-powered apps」(2025-10-21の更新注記を含む)、2026-11-05閲覧:https://claude.com/resources/articles/build-artifacts
- GitHub anthropics/claude-ai-mcp issue 787(2026-08-06起票)、2026-11-05閲覧:https://github.com/anthropics/claude-ai-mcp/issues/787
- MCP仕様2025-06-18「Tools」、2026-11-05閲覧:https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- MCP仕様2025-06-18「Authorization」、2026-11-05閲覧:https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
- MCP仕様2025-11-25「Authorization」、2026-11-05閲覧:https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
- MCP仕様2026-07-28「Schema Reference」、2026-11-05閲覧:https://modelcontextprotocol.io/specification/2026-07-28/schema
- IETF RFC 9728「OAuth 2.0 Protected Resource Metadata」、2026-11-05閲覧:https://datatracker.ietf.org/doc/html/rfc9728
- IETF RFC 6750「OAuth 2.0 Bearer Token Usage」、2026-11-05閲覧:https://datatracker.ietf.org/doc/html/rfc6750
- MDN「429 Too Many Requests」、2026-11-05閲覧:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/429
- Google for Developers「YouTube Data API quota costs」(2026-11-03更新)、2026-11-05閲覧:https://developers.google.com/youtube/v3/determine_quota_cost
- Meta for Developers「IG User Business Discovery」、2026-11-05閲覧:https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/business_discovery
- Meta for Developers「Graph API rate limits」、2026-11-05閲覧:https://developers.facebook.com/docs/graph-api/overview/rate-limiting
- TikTok for Developers「List Videos」、2026-11-05閲覧:https://developers.tiktok.com/doc/tiktok-api-v2-video-list
- TikTok for Developers「Understanding TikTok API Rate Limits」、2026-11-05閲覧:https://developers.tiktok.com/doc/tiktok-api-v2-rate-limit
- EveryInfraのリモートMCP(tools/listおよびtools/call)、2026-11-05:https://api.everyinfra.com/mcp
- EveryInfraの/mcp/all向け保護リソースメタデータ、2026-11-05 00:12(シンガポール時間)閲覧:https://api.everyinfra.com/.well-known/oauth-protected-resource/mcp/all
- EveryInfraのデータ機能カタログ、2026-11-05 00:15(シンガポール時間)閲覧:https://api.everyinfra.com/api/v1/social/catalog
- EveryInfraのOpenAPIドキュメント、2026-11-05閲覧:https://api.everyinfra.com/openapi.json
- Reddit r/ClaudeCode「Share an artifact with a database to users without a Claude License」、2026-11-05閲覧:https://www.reddit.com/r/ClaudeCode/comments/1xhwscj/help_needed_share_an_artifact_with_a_database_to/
- Reddit r/ClaudeAI「Has anyone gotten a Claude artifact with connectors to work for their whole team?」、2026-11-05閲覧:https://www.reddit.com/r/ClaudeAI/comments/1wb1ep7/has_anyone_gotten_a_claude_artifact_with/
- Reddit r/ClaudeAI「Problem with Artifact MCP permissions」、2026-11-05閲覧:https://www.reddit.com/r/ClaudeAI/comments/1vr1k8q/problem_with_artifact_mcp_permissions_how_can_i/
- Reddit r/halopsa「The mother of all HaloPSA dashboards, built in Claude artifacts」、2026-11-05閲覧:https://www.reddit.com/r/halopsa/comments/1wfttq0/the_mother_of_all_halopsa_dashboards_built_in/
- Reddit r/ClaudeAI「Artifacts cannot invoke custom MCP connectors」、2026-11-05閲覧:https://www.reddit.com/r/ClaudeAI/comments/1q8gp3l/artifacts_cannot_invoke_custom_mcp_connectors/
- The New Stack「Claude can now build your dashboards」(2026-10-08)、2026-11-05閲覧:https://thenewstack.io/claude-dashboards-data-motion/
- Harvey「Harvey Brings Intake to Claude for Legal Artifacts Launch」(2026-10-28)、2026-11-05閲覧:https://www.harvey.ai/blog/harvey-intake-claude-for-legal-artifact
参考資料 BL-87