MCPとSDKで取引から請求書への自動化を構築

MCPまたはPython SDKで成約取引から請求書を自動生成する仕組みを構築します。

著者

金海寛

金海寛 - 株式会社サンカ 創業者・CEO

更新日

2026年4月6日

公開日: 2026年4月5日

MCPとSDKで取引から請求書への自動化を構築

成約した取引がCRMに何日も放置されてから、経理が請求書を作成します。営業担当者が通知を忘れたか、経理がSlackメッセージを見逃したかです。Nidish社の2026年RevOps監査レポートによると、営業と経理の統合は、請求ミス、更新漏れ、そしてキャッシュフロー問題に発展する単純なタイミングの遅れによって、最も「コストのかかる」漏れが発生するポイントです。

コードを書かずにワークフローだけを利用したい場合は、営業チーム向けの使い方をご覧ください。

請求書発行待ちの成約取引を示す取引パイプライン

この記事で作るもの

  1. 成約したが請求書が紐付けられていない取引を検索
  2. 各取引の連絡先と請求情報を取得
  3. 正しい明細で請求書を作成
  4. 重複を防ぐため取引に請求済みマークを付ける

セットアップ時間:MCPで5分、SDKで15分です。

オプション A:Codex、Cursor、ClaudeからMCPで実行する(5分)

AIにオーケストレーションを任せたい開発者向けです。ロジックを説明すれば、エージェントが実行します。

実際の動作をご覧ください:

デモ:MCPで成約取引から請求書を作成

1. Sanka MCPを接続

MCP設定に以下を追加します:

JSON
{
  "mcpServers": {
    "sanka": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.sanka.com/mcp",
        "--resource",
        "https://mcp.sanka.com/mcp"
      ]
    }
  }
}

2. やりたいことを説明する

テキスト
過去7日間に更新された「成約」ステータスの取引をすべて見つけてください。
請求書が紐付けられていない各取引について:
1. 関連する連絡先の請求先住所を取得
2. 取引金額を1つの明細として請求書を作成
3. 請求書を取引に紐付け
4. 取引を請求済みとしてマーク

実行前に作成内容を表示してください。

3. 結果を確認する

エージェントは以下を行います:

  • 請求書のない取引を一覧表示
  • 各取引の請求書ペイロードを表示
  • 確認を待つ
  • 作成と更新を実行
  • 成功またはエラーを報告

制御はあなたの手元にあります。エージェントがAPIコールを処理します。

取引詳細:金額と連絡先情報


オプション B:SDKで構築する(15分)

本番スクリプト、スケジュールジョブ、またはバージョン管理が必要な場合向けです。

1. SDKをインストール

Bash
pip install sanka-sdk

2. 構築する

Python
from sanka_sdk import Sanka
from datetime import datetime, timedelta

client = Sanka(api_key="sk_live_...")

# 過去7日間の成約取引を検索
seven_days_ago = (datetime.now() - timedelta(days=7)).isoformat()
deals = client.deals.list(
    filters={
        "status": "closed-won",
        "updated_at": {"gte": seven_days_ago}
    }
)

for deal in deals.data:
    # 請求書が既に存在するか確認
    existing_invoices = client.invoices.list(
        filters={"deal_id": deal.id}
    )

    if existing_invoices.data:
        print(f"取引 {deal.id} には既に請求書があります、スキップ")
        continue

    # 請求情報のため連絡先を取得
    contact = client.contacts.get(deal.contact_id)

    # 請求書を作成
    invoice = client.invoices.create({
        "contact_id": contact.id,
        "deal_id": deal.id,
        "due_date": (datetime.now() + timedelta(days=30)).isoformat(),
        "line_items": [
            {
                "description": deal.name,
                "quantity": 1,
                "unit_price": deal.amount
            }
        ],
        "billing_address": contact.billing_address,
        "status": "draft"
    })

    # 取引を請求済みとして更新
    client.deals.update(deal.id, {
        "custom_fields": {
            "invoiced": True,
            "invoice_id": invoice.id
        }
    })

    print(f"取引 {deal.name} の請求書 {invoice.id} を作成しました")

3. 自動化する

これを日次のcronジョブとして実行するか、取引ステータス変更時にwebhookでトリガーします:

Python
# Webhookハンドラーの例(Flask)
@app.route("/webhooks/deal-closed", methods=["POST"])
def handle_deal_closed():
    payload = request.json
    deal_id = payload["deal_id"]

    # 上記と同じロジック、ただし単一の取引に対して
    deal = client.deals.get(deal_id)
    if deal.status == "closed-won":
        create_invoice_for_deal(deal)

    return {"status": "ok"}

取引から作成された請求書


技術チーム向けのスコアカード例

これらの指標は導入設計時のテンプレートとして使ってください。4.2日の基準値は Scratchpadの2023 RevOps Trends Report に基づき、その他の導入前数値は自社の実測値に置き換えてください。

指標導入前導入後
平均請求書発行遅延4.2日即日
手動請求書作成100%0%(自動下書き)
請求書重複エラー月3件0件

東京からリモートで働きながら複数地域のチームをサポートしていると、タイムゾーンに対応した自動化は便利というより必須に感じられます。ニューヨークで午後5時に取引が成約したとき、請求書は東京の誰かが起きるまで待つべきではありません。

次のステップ

MCPを接続して質問することから始めましょう:「請求書がない成約済み取引はどれですか?」

関連コンテンツ

著者

金海寛

金海寛 - 株式会社サンカ 創業者・CEO

15年以上にわたり、コンサルティングサービスとSaaSを通じて1000社以上の企業成長を支援。2人の娘の父、東京在住。

ブログ一覧へ戻る