Claude Code × kintone 自動化ガイド|MCP連携で顧客登録・レポートを自動化【2026年版】
Claude Code × kintone MCPを使った業務自動化の実務ガイド。顧客情報の自動登録・月次レポート生成・freee/Salesforceとの自動連携・帳票出力など3つのアプローチと4つのユースケースを解説。
目次 クリックで開く
Claude Code × kintone 自動化の実務ガイド|顧客登録・レポート・他システム連携を爆速化する
最終更新:2026年6月|対象:kintoneを業務で使っている非エンジニア〜中級者
「kintoneへの入力が毎日30分かかる」「月次レポートの集計を手作業でやっている」——そんな悩みを、Claude Code × kintone MCPで解決できます。コーディング知識ゼロでも、自然文で指示するだけでkintoneを自在に操作。本記事では3つの連携アプローチと、今日から使えるユースケースを実務レベルで解説します。

Claude Code × kintone 連携でできること


kintoneはAPIが充実しており、外部ツールとの連携に向いています。Claude Codeと組み合わせることで、次のようなことが自然文の指示だけで実現できます。

3つの連携アプローチ — 難易度別に選ぶ
【推奨】kintone MCP を使った自然文操作 — セットアップ手順
最初に試すべきはkintone公式MCPです。セットアップは10分以内に完了します。
-
kintone APIトークンを発行
kintoneの「アプリ設定」→「APIトークン」からアクセス権限(レコード閲覧・追加・編集)を付与したトークンを発行。環境変数に保存しておく。 -
kintone MCP サーバーをインストール
npm install -g @kintone/mcp-server(または公式リポジトリのインストール手順に従う)。 -
Claude CodeにMCPサーバーを登録
ターミナルでclaude mcp add kintone --scope project -e KINTONE_BASE_URL=https://YOUR_SUBDOMAIN.cybozu.com -e KINTONE_API_TOKEN=YOUR_API_TOKEN -- npx -y @kintone/mcp-serverを実行する。これでプロジェクト直下の.mcp.jsonに設定が追記される(claude_desktop_config.jsonはClaude Desktop専用のファイルで、Claude Codeでは使わない点に注意)。 -
CLAUDE.md にkintoneアプリ定義を記載
使用するアプリID・フィールドコード・必須項目をCLAUDE.mdに書いておくと、Claude Codeが毎回確認せずに正確なフィールドマッピングで操作できる。
## kintone アプリ定義
### 顧客管理アプリ(APP_ID: 1)
– 会社名: `company_name`(必須)
– 担当者名: `contact_name`
– メールアドレス: `email`
– 電話番号: `phone`
– ステータス: `status`(リード/商談中/成約/失注)
– 最終コンタクト日: `last_contact`
### 案件管理アプリ(APP_ID: 2)
– 案件名: `project_name`(必須)
– 顧客ID: `customer_id`(ルックアップ: 顧客管理APP)
– 受注金額: `amount`
– 担当営業: `sales_rep`
– 納期: `deadline`

【スクリプト】Python × kintone REST API で大量処理を自動化
MCPが自然文ベースの操作に向いているのに対し、1,000件超のCSV一括取込やバッチ更新にはPythonスクリプトが適しています。Claude Codeに「このCSVをkintoneに登録するスクリプトを書いて」と指示するだけで、以下のようなコードを自動生成してくれます。
import requests, json, os
SUBDOMAIN = os.environ[“KINTONE_SUBDOMAIN”]
APP_ID = “1”
API_TOKEN = os.environ[“KINTONE_API_TOKEN”]
headers = {
“X-Cybozu-API-Token”: API_TOKEN,
“Content-Type”: “application/json”,
}
def add_record(company, contact, email):
payload = {
“app”: APP_ID,
“record”: {
“company_name”: {“value”: company},
“contact_name”: {“value”: contact},
“email”: {“value”: email},
}
}
r = requests.post(
f”https://{SUBDOMAIN}.cybozu.com/k/v1/record.json”,
headers=headers, data=json.dumps(payload)
)
r.raise_for_status()
return r.json()[“id”]
【上級】Webhook + Claude Code でイベント駆動自動化
kintoneのWebhook機能と組み合わせると、レコード保存と同時に外部処理を走らせることができます。たとえば「受注確定」ステータスに変わった瞬間、freeeに請求書を自動作成しSlackに通知、という処理がノーコードで実現できます。
| トリガー | Claude Codeの処理 | 連携先 |
|---|---|---|
| 受注ステータス変更 | 請求書データ生成・送信 | freee API |
| 新規顧客レコード追加 | Salesforceに取引先同期 | Salesforce REST API |
| 案件フェーズ変更 | Slackチャンネルに通知 | Slack Webhook |
| 月末(定期バッチ) | 月次レポートExcel生成・メール送信 | Gmail / Google Drive |
kintone MCP連携 実装の5ステップ(Claude Code設定から動作確認まで)
-
kintone REST APIトークンの発行
kintoneの「アプリ設定」→「APIトークン」から、操作対象アプリに「レコード閲覧」「レコード追加」「レコード編集」の権限を付与したトークンを発行する。複数アプリを操作する場合はアプリごとにトークンを用意し、環境変数(KINTONE_API_TOKEN_APP1など)で管理する。 -
Claude Code の
.mcp.jsonに kintone MCPサーバーを追加
プロジェクトルートでclaude mcp add kintone --scope project -e KINTONE_BASE_URL=https://YOUR_SUBDOMAIN.cybozu.com -e KINTONE_API_TOKEN=YOUR_TOKEN -- npx -y @kintone/mcp-serverを実行。.mcp.jsonに設定が自動追記される。 -
.claude/permissions.jsonで操作できるアプリIDと権限を明示指定
Claude Codeのpermissions.json(またはsettings.jsonのpermissionsセクション)に、MCPツールの許可スコープを記載する。例:{"allow": ["mcp__kintone__get_records", "mcp__kintone__add_record", "mcp__kintone__update_record"]}のように操作種別を限定することで、意図しないアプリへの書き込みや削除を防ぐ。 -
Claude に自然文で指示するだけで自動実行
「アプリ名=顧客管理、会社名=株式会社○○、担当者=田中太郎 でレコードを登録して」と入力するだけで、Claude Codeがフィールドマッピングを自動解決してAPIを実行する。CLAUDE.md にアプリID・フィールドコードを記載しておくと精度が上がる。 -
実行ログをAurant RuleHubで監査・権限制御する
複数のSaaSをまたぐ操作や、チームで共有する運用では Aurant RuleHub を挟むことで、操作ログの一元管理・承認フロー・最小権限の強制が可能になる。誰がいつどのアプリに何件書き込んだかをダッシュボードで確認できる。
認証方式の選択 — APIトークン vs ユーザー認証
kintone MCPの接続ではAPIトークン認証とユーザー認証(パスワード)の2種類が使えます。どちらを選ぶかでセキュリティと運用コストが大きく変わるため、最初に整理しておくことを勧めます。
| 観点 | APIトークン認証 | ユーザー認証(パスワード) |
|---|---|---|
| セキュリティ範囲 | アプリ×操作種別で最小権限に絞れる | そのユーザーの全権限が引き継がれる |
| 人事異動・退職の影響 | なし(トークンはアプリ所有) | ユーザー削除でトークンも無効化 |
| パスワード変更時 | 影響なし | 即座に接続が切れる |
| 推奨シーン | 本番運用・チーム共有の自動化 | 開発・テスト環境での一時的な確認 |
本番運用ではAPIトークン一択です。さらに、読み取り専用の操作と書き込み系の操作でトークンを分けると、誤って本番データを上書きするリスクを減らせます。Claude Code の .mcp.json では環境変数名を変えて複数トークンを使い分けられます。
顧客登録の重複チェック — UPSERTで「登録済みなら更新、なければ追加」を1回のAPIで
Webフォームや名刺OCRから顧客情報を取り込む際に毎回ぶつかるのが「同じメールアドレスの顧客が既に登録されているかどうか」の問題です。単純に POST /k/v1/records.json で追加すると重複レコードが量産されます。kintone REST APIは PUT /k/v1/records.json でUPSERTモードをサポートしており、「重複チェックキー」(ユニーク制約を付けたフィールド)を指定するだけで登録・更新を1回のAPIで処理できます。
# UPSERT:email が一致するレコードを更新、なければ新規登録
# 事前に kintone アプリの「email」フィールドにユニーク制約を付けておく
import requests, json, os
SUBDOMAIN = os.environ["KINTONE_SUBDOMAIN"]
APP_ID = "1"
API_TOKEN = os.environ["KINTONE_API_TOKEN"]
HEADERS = {"X-Cybozu-API-Token": API_TOKEN, "Content-Type": "application/json"}
def upsert_customers(contacts: list):
# updateKey を使った UPSERT モード(PUT /k/v1/records.json)
records = [
{
"updateKey": {"field": "email", "value": c["email"]},
"record": {
"company_name": {"value": c["company"]},
"contact_name": {"value": c["name"]},
"last_contact": {"value": c["date"]},
}
}
for c in contacts
]
payload = {"app": APP_ID, "records": records, "upsert": True}
r = requests.put(
f"https://{SUBDOMAIN}.cybozu.com/k/v1/records.json",
headers=HEADERS, data=json.dumps(payload)
)
r.raise_for_status()
return r.json() # {"records": [{"id": "1", "result": "INSERT"}, ...]}
① updateKey に指定するフィールド(例:email)にkintoneアプリ設定でユニーク制約を付ける。② APIトークンに「レコード追加」と「レコード編集」の両方の権限を付与する。③ 1回のリクエストは100件まで(大量処理は100件ずつループ)。Claude Codeに「email フィールドを updateKey にして UPSERT で登録して」と伝えるだけで上記パターンを自動生成してくれます。
実装の落とし穴と対処法
- APIトークンの権限不足:レコード閲覧のみのトークンで登録・更新しようとしてエラー。アプリ設定でCRUD権限を付与したトークンを再発行する。
- フィールドコードのタイポ:日本語フィールド名ではなくフィールドコード(英数字)を使う必要がある。CLAUDE.mdにコード一覧を記載しておくと防止できる。
- 一括登録の上限:kintone REST APIの一括登録は1回100件まで。1,000件なら10回に分けてループ処理するスクリプトをClaude Codeに生成させる。
- Webhookの非同期タイムアウト:kintoneのWebhookは10秒でタイムアウトする。重い処理はキューに積んでバックグラウンド実行する設計にする。
レート制限・429エラーへの対処 — 大量処理で詰まらないために
kintone REST APIには同時接続数100件・1回の登録上限100件・取得オフセット上限10,000件という制約があります。Claude Codeが生成するスクリプトにこの対処を最初から組み込んでおかないと、数百件処理した時点でドメイン全体のAPIが止まる事態になります。以下は「Claude Codeに生成させる際にそのまま使える」実装パターンです。
import requests, time, json, os
SUBDOMAIN = os.environ["KINTONE_SUBDOMAIN"]
APP_ID = "1"
API_TOKEN = os.environ["KINTONE_API_TOKEN"]
HEADERS = {"X-Cybozu-API-Token": API_TOKEN, "Content-Type": "application/json"}
def bulk_add_records(records: list, chunk_size: int = 100):
results = []
for i in range(0, len(records), chunk_size):
chunk = records[i : i + chunk_size]
payload = {"app": APP_ID, "records": chunk}
for attempt in range(4):
r = requests.post(
f"https://{SUBDOMAIN}.cybozu.com/k/v1/records.json",
headers=HEADERS, data=json.dumps(payload)
)
if r.status_code == 429:
time.sleep(2 ** attempt) # 1-2-4-8秒
continue
r.raise_for_status()
results.extend(r.json()["ids"])
break
time.sleep(0.2) # チャンク間200ms
return results
Claude Codeへの指示はシンプルで構いません。「このCSVをkintone アプリID=1に100件ずつ分割して登録するスクリプトを書いて。429エラーは指数バックオフで最大4回リトライ、チャンク間は200ms待つこと」と伝えると、上記と同等のコードを自動生成してくれます。10,000件超の取得が必要な場合は、offsetパラメータを使ったページング(上限10,000件ずつ)と組み合わせてください。
月次レポート自動生成 — kintoneのビューデータをClaude Codeで集計してSlack・メールに送る
「月末になると売上集計を1時間かけて手作業でExcelに転記している」というパターンは、Claude Code × kintone REST APIで完全に自動化できます。kintoneのビュー(絞り込み条件付き一覧)はAPIで取得でき、そのデータをClaude Codeに渡すと集計・整形・送信までをワンセットで処理します。
Claude Codeへの指示例はこうなります。
「kintone の案件管理アプリ(APP_ID=2)から、今月の全レコードを取得して。フィールドは受注金額(amount)・担当営業(sales_rep)・ステータス(status)。成約のレコードだけ抽出して担当者別に合計受注額を集計し、上位5名のランキングをSlackの #sales-report チャンネルに投稿して。Slackのwebhook URLは環境変数 SLACK_WEBHOOK_URL に入っている。」
上記の指示1つで、Claude Codeは以下の処理を自動でコード化して実行します。
-
kintone REST APIでレコードを取得
GET /k/v1/records.jsonにquery=status in ("成約") and 受注日 >= "2026-06-01"を渡して絞り込み取得。10,000件超えるデータはoffsetページングで全件を回収する。 -
Pythonで集計・整形
取得したJSONからsales_repでgroupbyしてamountを合計。上位5名をランキング形式のテキストに整形する。 -
Slack Webhook で送信
POST SLACK_WEBHOOK_URLに整形済みメッセージをPOST。添付ファイルにしたい場合はSlack Files APIでCSVをアップロードしてメッセージに紐づける。
# Claude Codeが生成する月次レポートスクリプトの骨格
import requests, json, os
from collections import defaultdict
from datetime import date
# 1. kintoneからデータ取得(offsetページング対応)
def fetch_this_month_deals(subdomain, app_id, token):
first_day = date.today().replace(day=1).isoformat()
query = f'status in ("成約") and 受注日 >= "{first_day}"'
headers = {"X-Cybozu-API-Token": token}
records, offset = [], 0
while True:
r = requests.get(
f"https://{subdomain}.cybozu.com/k/v1/records.json",
headers=headers,
params={"app": app_id,
"query": f"{query} limit 500 offset {offset}",
"fields[0]": "sales_rep", "fields[1]": "amount"}
).json()["records"]
if not r:
break
records.extend(r)
offset += len(r)
return records
# 2. 担当者別に集計してSlack投稿
def post_ranking_to_slack(records, webhook_url):
totals = defaultdict(int)
for rec in records:
totals[rec["sales_rep"]["value"]] += int(rec["amount"]["value"] or 0)
ranking = sorted(totals.items(), key=lambda x: -x[1])[:5]
lines = [f"{i+1}. {name}:{amt:,}円" for i, (name, amt) in enumerate(ranking)]
msg = "*今月の受注ランキング TOP5*\\n" + "\\n".join(lines)
requests.post(webhook_url, data=json.dumps({"text": msg}))
# 実行
records = fetch_this_month_deals(
os.environ["KINTONE_SUBDOMAIN"], "2", os.environ["KINTONE_API_TOKEN"]
)
post_ranking_to_slack(records, os.environ["SLACK_WEBHOOK_URL"])
月末に毎回実行するなら、このスクリプトをcron(Linux)やタスクスケジューラ(Windows)に登録するか、GitHub Actionsの schedule トリガーに乗せると完全無人化できます。Claude Codeに「このスクリプトを毎月末日の18時に自動実行する設定も書いて」と続けて指示するだけで、crontab設定やGitHub Actionsのyamlも生成してくれます。
生成AIの法人導入・セキュリティ設計のご相談
ChatGPTやClaudeなど生成AIのプラン選定・セキュアな全社導入・権限/ログ設計を、貴社の体制に合わせて整理します。すでに導入済みの環境について『この設計で問題ないか』を確認したい、という導入前後のセカンドオピニオンにも対応しています。
よくある質問(FAQ)
permissions.json でMCPツールの許可スコープを絞れば、想定外の操作を防げます。さらに Aurant RuleHub を併用すると、権限スコープの強制・操作ログの監査・承認フローをチーム全体で一元管理できるため、業務利用でも安全に運用できます。/k/guest/{spaceId}/v1/)を明示したPythonスクリプト方式(REST API直接呼び出し)で連携してください。通常スペースのアプリであれば、APIトークンを発行できるものは基本的に利用可能です。
CRM・営業支援
Salesforce・HubSpot・kintoneの選定から導入・カスタマイズ・定着まで一貫対応。営業生産性を高め、商談化率を改善します。