ゼイジニア
ブログ一覧に戻る
技術

「window.claude.mcp」は無かった ― マネーフォワードMCP×Claude Artifactsでライブ会計ダッシュボードを作った記録

2026-08-01/池田 信明

顧問先向けに「開くたびに最新の会計データを取りにいくダッシュボード」を作れないか。2026年7月、ClaudeのArtifacts(Claudeが生成するページ)がMCPコネクタ(外部サービスとAIをつなぐ標準規格「MCP」経由の接続)を呼び出せるようになった、という発表を見て気になり、実際にマネーフォワードクラウド会計のMCPコネクタで試してみました。結論から言うと、最初に想定していた作り方はそもそも成立しませんでした。この記事は、その前提が崩れたところから、実際に動くところまでたどり着いた記録です。

最初の前提 ― 崩れた出発点

発表の内容から、「capabilitiesmcpを指定し、window.claude.mcp.watchToolでツールを購読すればページを開くたびに最新データが取れる」という書き方を想定しました。この前提でArtifactを作り、マネーフォワードのコネクタに向けて動かそうとしたところ、何も起きませんでした。

ここで「動かない」で片付けず、まずObject.keys(window.claude)を実行して、実際に何が存在するのかを列挙してみました。結果は次の通りです。

window.claude のキー: complete

mcpというキー自体が存在しませんでした。つまり、想定していたAPIはこの環境には無かったということです。なお、これはclaude.aiの通常のチャットで生成したArtifactでの結果です。公開時にcapabilitiesを明示的に宣言して発行するタイプのArtifactでも同じ状況かどうかは、この検証だけでは確認できていません。同じ「Artifacts」という言葉でも、発行のされ方によって実行環境が異なる可能性がある、という点は留意が必要です。

代わりに動いた経路

window.claude.mcpが無い代わりに、Artifact内から直接Messages APIを叩く経路は動きました。

fetch("https://api.anthropic.com/v1/messages", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "claude-sonnet-4-6",
    max_tokens: 1000,
    messages: [{ role: "user", content: prompt }],
    mcp_servers: [{
      type: "url",
      url: "https://beta.mcp.developers.biz.moneyforward.com/mcp/ca/v3",
      name: "moneyforward"
    }]
  })
});

APIキーの指定は不要でした(Artifact側で処理されます)。ここでもう一つつまずいたのが、返ってくるcontent配列の構造です。実測では次の順で並んでいました。

mcp_tool_use, mcp_tool_use, mcp_tool_result, mcp_tool_result, text

content[0].textのように位置決め打ちで読むコードは、ツールが呼ばれた回数によって崩れます。typeでフィルタして取り出す必要があります。

const results = data.content
  .filter(b => b.type === "mcp_tool_result")
  .map(b => JSON.parse(b.content[0].text));

mcp_tool_useブロックを見れば「実際にどのツールが呼ばれたか」が分かるので、これは動作確認・エラー切り分けの一次情報として使えます。

マネーフォワードMCPの読み取り専用ツール

コネクタには全21ツールがあり、そのうち金額を伴わない読み取り専用は以下の通りでした。

ツール 引数
mfc_ca_currentOffice なし
mfc_ca_getAccounts available(任意)
mfc_ca_getSubAccounts account_id(任意)
mfc_ca_getTaxes / getTradePartners available(任意)
mfc_ca_getDepartments / getTermSettings / getConnectedAccounts なし

金額を伴うのはgetReports*(試算表・推移表)、getJournalsgetTransactions系です。書き込み系(postJournalsputJournalspostTradePartnerspostTransactionspostTransactionJournalize)も存在するため、読み取り専用の検証段階でこれらを誤って呼ばないよう、プロンプト側で明示的に制限しておく必要があります。IDはURLエンコード済みのBase64で返るので、そのまま次のツール呼び出しに渡す前提で設計されています。

動いたが、数字が合わなかった

最初のプロンプトは「勘定科目数と補助科目数を数えてJSONで返して」という、集計まで含めてモデルに任せる指示でした。結果、返ってきた補助科目数が、こちらで目視で数えた値と2件ずれました。どちらが正しいかをその場で確定できないという時点で、ダッシュボードとしては失格です。

修正版では、プロンプトを「ツールを呼ぶことだけが仕事。終わったらDONEとだけ書け」に変更し、mcp_tool_resultに入っている生のJSONをJavaScript側でパースして合計するようにしました。これで毎回同じ数字が出るようになりました。

原則として、LLMは取得の口として使い、算術には一切関与させない。特に金額を扱うダッシュボードでは、ここは譲れない線だと感じています。

もう二つの落とし穴

未計上月をゼロで描くと嘘になる。 期の途中で開けば、まだ仕訳を入れていない月がゼロで並びます。そのままグラフ化すると「売上が急落した」ように見えてしまいます。対応として、売上・経費がともにゼロの最終月を検出して「実績計上月」を自動判定し、それより先はグレー帯で表示するようにしました。

単純な年換算も嘘になる。 税理士業のように繁忙期に売上が寄る業種では、「累計÷経過月数×12」は季節性を無視した数字になります。年換算は使わず、前年度の同じ月までの累計と比較する形に変更しました。

判断軸:この作り方が向いている場面・向いていない場面

実際に動かしてみて分かった制約は次の通りです。

観点 実際の挙動
公開共有 不可。MCPを使うArtifactは公開リンクにできない(Pro/Maxは作成者のみ、Team/Enterpriseは組織内共有まで)
認証 閲覧者自身のコネクタ権限で実行される。作成者のトークンは渡らない
呼び出しコスト ページを開くたび、条件(年度など)を切り替えるたびにモデル呼び出しが発生する。切り替えの回数分だけコストがかかるため、キャッシュ設計が要る
実行環境 静的HTML+CSPのみ。MCP経由の通信以外に外部との通信手段はない
セキュリティ ツールの結果をinnerHTMLにそのまま流し込むとXSSの温床になる。データとして扱い、DOM APIで挿入する

この制約から見えるのは、「顧問先20社に一律で配る」ような不特定多数向けの運用にはまだ向かず、事務所内の自分用の速報確認、あるいは同じ仕組みを自分で作れる相手向けの限定的な用途に留めるのが現実的だということです。

よくある誤解・Q&A

Q. 「Artifactsが会計データをライブ表示できる」という発表を見た。すぐ使える? A. その発表が指しているのは、capabilitiesを明示的に宣言して発行するタイプのArtifactの話です。claude.aiの通常のチャットで生成したArtifactでは、今回の検証時点(2026年8月1日)でwindow.claude.mcp自体が存在しませんでした。同じ「Artifacts」でも発行のされ方で挙動が変わりうるため、鵜呑みにせず自分の環境でObject.keys(window.claude)を実行して確認するのが確実です。

Q. モデルに集計まで任せれば楽では? A. 楽ですが、数字がずれます。取得はモデル、集計はJavaScript、と役割を分けるべきです。

Q. 顧問先にそのまま見せられる? A. 現状は公開リンクにできないため、閲覧者側もClaudeとコネクタを使える前提がないと難しいです。まずは事務所内の用途から試すのが現実的です。

まとめ ― 最終的に作ったもの

最終的に、年度セレクタ(事業所の会計期間から動的に生成)、累計KPI(売上高・経費・控除前所得・経費率、いずれも前年同期比つき)、月次推移グラフ(未計上月はグレー帯)、経費内訳表、接続ログ(呼ばれたツール名と解析件数)を備えた月次推移ダッシュボードができました。検証には実際の会計データを使いましたが、この記事では実額や取引先名は一切記載せず、構造の説明にとどめています。

この検証は2026年8月1日時点のものです。MCP対応Artifactsの仕様は変わる可能性がありますし、発行方法によって挙動が異なる可能性がある点も含めて未確定な部分が残ります。試す際は、まず自分の手元で診断コードを書いて実態を確認することをおすすめします。

#MCP#Claude Artifacts#AI活用#マネーフォワード

この内容について相談したい場合は

無料相談を申し込む