English | Support | GitHub
Service Deep-Dive 2026-04-14 15 min read

kintone MCP完全攻略 — AAAグレードの真相と3認証方式、エージェント開発の落とし穴

CybozuのkintoneはKanseiLink AEO評価でAAAグレードを獲得している数少ない日本発SaaSの1つだ。公式MCPサーバーはnpm・Docker・Desktop Extensionの3形式で提供され、2026年3月にはプロセス管理APIとDesktop Extensionが追加された。しかしkintone APIには、エージェント開発者が必ずハマる独特の仕様がある。本記事ではKanseiLinkの実データをもとに、AAAグレードの根拠・3つの認証方式の使い分け・実装時の5つの落とし穴を徹底解説する。

1. なぜkintoneはAAAグレードなのか

AAA
kintone MCP — AXR格付け 公式MCP: ✅ (npm / Docker / Desktop Extension)
認証: APIトークン / パスワード / OAuth 2.0
最終更新: 2026-04-13

KanseiLinkがkintoneにAAAを付与している根拠は以下の3点だ。

評価軸 kintoneの実績 評価
公式MCPサーバー Cybozu公式(github.com/kintone/mcp-server)、npm・Docker・Desktop Extension対応 ✅ 最高水準
認証方式の多様性 APIトークン(シンプル)、パスワード認証、OAuth 2.0の3方式をサポート ✅ 優秀
API成熟度 RESTful API v1、ページネーション・バルク操作・プロセス管理API完備 ✅ 優秀
アップデート頻度 2026年3月にプロセス管理API(3/30)・Desktop Extension(3/10)を追加 ✅ 積極的
ドキュメント品質 cybozu.dev で日英の公式ドキュメントが整備済み ✅ 良好

一方で、trust_scoreは0.7(満点1.0)に留まる。理由はkintone固有のAPI仕様(後述する{value}ラッパーやフィールドコードの問題)がエージェントの初回実装を困難にするためだ。AAA評価は「エコシステムとしての完成度」であり、「すぐに使える簡単さ」ではない点に注意が必要だ。

2. 3つの認証方式 — どれを選ぶべきか

kintoneは3種類の認証方式をサポートする。エージェント開発の用途別に使い分け方を解説する。

シンプル / 開発テスト向け

② パスワード認証(Basic認証)

ユーザー名とパスワードをBase64エンコードして X-Cybozu-Authorization ヘッダーに設定する方式。本番環境での使用は推奨されないが、開発時の素早いテストには便利。

高度 / エンタープライズ向け

③ OAuth 2.0認証

最も安全な認証方式。ユーザーのアクセス権限をきめ細かく制御できる。スコープ:k:app_record:readk:app_record:write。エンタープライズ向けアプリや複数ユーザーが使うシステムに適する。

3. エージェント開発者が必ずハマる5つの落とし穴

⚠️ 落とし穴1:全フィールド値が{value: ...}でラップされている

kintone APIの最大の罠。レスポンスの全フィールド値はオブジェクト形式 {"value": "実際の値"} でラップされている。数値フィールドも文字列フィールドも例外なし。record.タイトル ではなく必ず record.タイトル.value でアクセスすること。

kintone APIレスポンス例(落とし穴1) // kintone GET /k/v1/record.json のレスポンス { "record": { "$id": { "value": "42" }, // IDも文字列のvalue "タイトル": { "value": "プロジェクトA" }, // ✅ .value でアクセス "数量": { "value": "100" }, // 数値も文字列として返る! "担当者": { "value": [{ "code": "user1", "name": "山田太郎" }] } } } // ❌ 間違い: record.数量 → undefined // ✅ 正解: record.数量.value → "100" (文字列) // ✅ 正解: parseInt(record.数量.value) → 100 (数値として使う場合)
⚠️ 落とし穴2:フィールドコードと表示名は別物

kintoneはフィールドに「表示名」(例:「担当者名」)と「フィールドコード」(例:assignee_name)の2つの名前がある。API呼び出しでは必ずフィールドコードを使う。まず GET /k/v1/app/form/fields.json?app={app_id} でフィールドコード一覧を取得してからAPIを叩くこと。

フィールドコード取得 → レコード取得の正しい順序 // Step 1: フィールドコード一覧を取得 const fieldsRes = await fetch( `https://${subdomain}.cybozu.com/k/v1/app/form/fields.json?app=${appId}`, { headers: { 'X-Cybozu-API-Token': apiToken } } ); const { properties } = await fieldsRes.json(); // properties = { "タイトル": { type: "SINGLE_LINE_TEXT", code: "タイトル", label: "案件名" } } // Step 2: フィールドコードでレコードを検索 const recordsRes = await fetch( `https://${subdomain}.cybozu.com/k/v1/records.json?app=${appId}&query=ステータス%3D"進行中"&totalCount=true`, { headers: { 'X-Cybozu-API-Token': apiToken } } ); const { records, totalCount } = await recordsRes.json(); console.log(`合計 ${totalCount} 件`); // totalCount: "42" (文字列)
⚠️ 落とし穴3:サブドメインをユーザーに確認する必要がある

kintone APIのベースURLは https://{subdomain}.cybozu.com の形式で、各企業のkintoneサブドメインが必要。APIドキュメントには固定URLが存在しない。エージェント実装では、ユーザーにサブドメインを入力してもらうか、環境変数 KINTONE_SUBDOMAIN で事前設定するフローが必須。

⚠️ 落とし穴4:1日10,000リクエスト制限 + 同時接続10

標準プランでは1日あたり10,000リクエスト制限がある。エージェントが大量のレコードを処理する場合、バルク操作(POST /records.json で最大100件一括登録)を活用して1リクエストあたりの処理量を増やすことが必須。また、同時接続数は10に制限されているため、並列処理の上限に注意。

💡 ベストプラクティス:バルク操作でリクエスト数を最小化

1件ずつPOSTするのではなく、配列で最大100件まとめてPOSTすること。10,000リクエスト/日の制限内で最大100万件/日の操作が可能になる。

バルク登録 — 一度に最大100件 // ✅ バルク登録(最大100件) const records = Array.from({ length: 100 }, (_, i) => ({ タイトル: { value: `タスク${i + 1}` }, ステータス: { value: "未着手" }, })); const res = await fetch( `https://${subdomain}.cybozu.com/k/v1/records.json`, { method: 'POST', headers: { 'X-Cybozu-API-Token': apiToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ app: appId, records }), } ); // → { "ids": ["1","2",...,"100"], "revisions": ["1","1",...,"1"] }
⚠️ 落とし穴5:クエリはSQLに近いが独自構文

kintoneのクエリ構文はSQLに似ているが独自仕様。文字列値は必ず二重引用符で囲む(ステータス = "進行中")、スペースはそのままでOK、URLエンコードが必要、totalCount: true を指定しないと総件数が返らない。ORDER BY・LIMIT・OFFSETも使えるため、ページネーション実装に活用できる。

kintoneクエリ構文リファレンス // ページネーション(100件ずつ取得) `/k/v1/records.json?app=${appId}&query=ステータス%20%3D%20"進行中"%20order%20by%20更新日時%20desc%20limit%20100%20offset%200&totalCount=true` // 複合条件 `query=ステータス%20%3D%20"完了"%20and%20担当者%20in%20("user1")%20and%20期限%20%3C%20"2026-04-30"` // 注意点: // - 文字列値は "二重引用符" で囲む(シングルクォート不可) // - in演算子: field_code in ("val1", "val2") // - totalCount=true を付けないと totalCount が返らない // - デフォルトlimit=100、最大limit=500

4. Garoonとの連携 — Cybozuデュアルスタックの力

kintoneとGaroon(同じCybozu製のグループウェア)は、同一のAPIトークン認証とX-Cybozu-API-Tokenヘッダー形式を共有している。これにより、1つのエージェントがkintoneでレコード管理を行いながら、Garoonでスケジュール確認・ワークフロー承認を同時に操作する「Cybozuデュアルスタック」が自然に実現できる。

機能 kintone MCP Garoon MCP
レコード管理(CRM・案件管理など) ✅ /k/v1/records.json
スケジュール・カレンダー ✅ /g/api/v1/schedule/events
ワークフロー承認 ✅ /k/v1/record/status.json(プロセス管理) ✅ /g/api/v1/workflow/requests
掲示板・社内周知 ✅ /g/api/v1/bulletin
認証方式 APIトークン / OAuth2 APIトークン(同形式)

まとめ — kintoneはAAA、ただし準備が要る

kintoneのMCPエコシステムは日本SaaS中でも最も整備されたものの1つだ。公式MCPサーバーの3提供形態、3つの認証方式、バルク操作やプロセス管理APIまで揃ったAPIは、業務自動化の基盤として強力だ。

ただし、{value}ラッパーとフィールドコードという独自仕様への理解なしに始めると、最初の数時間で確実にハマる。本記事の落とし穴5点を事前に把握してから実装に入ることで、立ち上げ時間を大幅に短縮できるはずだ。

KanseiLinkでは今後、kintoneの実エージェント運用データ(成功率・レイテンシ・エラーパターン)が蓄積され次第、動的なスコア更新を実施する。最新のAEOスコアは以下のリンクで確認できる。

kintoneの最新AEOスコアをチェック

リアルタイムの成功率・レイテンシ・Agent Voiceデータはコンサルティングプランで提供中。

データアクセスを申し込む