放置取引の検出をMCPとAPIで実装する方法

放置取引の検出と再アプローチを、OAuth対応MCPとSanka API / SDKで実装する開発者向けガイドです。

著者

金海寛

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

更新日

2026年4月6日

公開日: 2026年4月4日

放置取引は予測の問題であるだけでなく、運用の問題でもあります。Dun & BradstreetはB2Bデータが年34%以上のペースで劣化し得ると説明しており、Scratchpadの2023 RevOps Trends Reportでは、予測に必要な正しいデータがあると「強くそう思う」と答えたRevOps / 営業リーダーは22%にとどまりました。(Dun & Bradstreet, Scratchpad)

営業やマネージャー向けの使い方だけを知りたい場合は、営業向けガイドを使ってください。この記事は、Codex、Cursor、ClaudeでMCPを使う場合や、API / SDKで定期実行する場合の実装版です。

私自身、規模の違う営業組織でこの問題を何度も見てきましたが、パイプラインレビューが手作業のフィルタや担当者の記憶に依存すると、放置取引は思った以上に長く残ります。実装の目的は、検出と優先順位付けを毎回同じ品質で回せるようにすることです。

この記事で作るもの

このガイドでは、放置取引レビューを繰り返し実行できる技術フローにします。

取引パイプラインボード

  1. 14日以上更新されていない進行中の取引を一覧化する
  2. 各放置取引をスコアリングして、救うべき取引と切り分ける
  3. アクションの種類ごとにタグやバケットを付ける
  4. 毎日または定期的に回せる形にする

セットアップ時間は、MCPなら約5分、API / SDKなら約20分です。

取引詳細 — 最近の活動が少ない状態

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

エージェントに取引の確認、スコアリング、ワークフロー整理まで任せたい場合の最短ルートです。

1. Sanka MCP に接続する

SankaのHosted MCPサーバーには、mcp-remote を使ってブラウザベースのOAuthで接続します。

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

初回接続時にはブラウザでサインインと承認を行います。OAuthセッションは mcp-remote により ~/.mcp-auth に保存されます。

2. やりたいことを記述する

テキスト
14日以上更新されていない進行中の取引をすべて一覧化して。
各放置取引をスコアリングして、次の3つに分類して:
- 今すぐ再アプローチ
- 後でナーチャリング
- クローズ整理
「今すぐ再アプローチ」の取引は、主担当の連絡先を取得して短いフォローアップ文面も下書きして。
必要なら、Sankaで更新すべきタグやフィールドも提案して。

3. 結果を確認する

返ってくる結果の例は次のような形です。

取引金額未更新日数スコアバケット
田中商事 - Enterprise Plan¥5,400,00021日72/100今すぐ再アプローチ
GlobalTech - 拡張提案¥3,360,00016日65/100今すぐ再アプローチ
Startup XYZ - Starter¥384,00031日23/100クローズ整理

ここから対話型で続けてもよいですし、同じロジックを定期実行スクリプトに移してもよいです。

デモ:放置取引を確認し、Sankaでレコードを開く流れ


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

ロジックをバージョン管理したい場合や、定期実行したい場合、動作を細かく制御したい場合はこちらが向いています。

1. SDKをインストールする

Bash
pip install sanka-sdk

2. 構築する

Python
from datetime import datetime, timedelta

from sanka import Sanka

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

cutoff = datetime.now() - timedelta(days=14)
open_deals = client.deals.list(status="open")

stale_deals = [
    deal
    for deal in open_deals
    if datetime.fromisoformat(deal["updated_at"]) < cutoff
]

scored_deals = []
for deal in stale_deals:
    score_result = client.ai.score({"type": "deal", "deal_id": deal["id"]})
    days_inactive = (datetime.now() - datetime.fromisoformat(deal["updated_at"])).days
    scored_deals.append(
        {
            "deal": deal,
            "score": score_result["score"],
            "days_inactive": days_inactive,
        }
    )

reengage_now = [
    item
    for item in scored_deals
    if item["score"] >= 60 and item["deal"]["value"] >= 10000
]
nurture_later = [
    item
    for item in scored_deals
    if item["score"] >= 40 and item not in reengage_now
]
close_out = [
    item
    for item in scored_deals
    if item["score"] < 40 or item["days_inactive"] > 45
]

for item in reengage_now:
    client.deals.update(item["deal"]["id"], {"tags": ["re-engage-now"]})

for item in nurture_later:
    client.deals.update(item["deal"]["id"], {"tags": ["nurture"]})

for item in close_out:
    client.deals.update(item["deal"]["id"], {"tags": ["close-out"]})

print(f"今すぐ再アプローチ: {len(reengage_now)}")
print(f"後でナーチャリング: {len(nurture_later)}")
print(f"クローズ整理: {len(close_out)}")

3. 自動化する

cron、ワークフロー実行基盤、既存ジョブランナーのどれでも構いません。重要なのは、放置取引レビューを「気が向いたときにやる整理作業」ではなく、継続的な運用制御に変えることです。

なぜ営業向け記事と分けるのか

営業向けの記事では、ワークフローが現場で役立つかどうかが重要です。技術向けの記事では、認証方式、MCP設定、再現性、コード管理が重要です。1本に混ぜると、どちらの読者にも読みにくくなります。

営業やマネージャーに共有する場合は、営業向けガイドを使ってください。

次のステップ

参考リンク

最短で現場利用したい場合は、営業向けガイドに戻ってください。技術的に運用へ組み込みたい場合は、まずMCPサーバーガイドを確認し、その後API / SDKへ進むのが整理しやすいです。

関連コンテンツ

著者

金海寛

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

Haegwan Kimは15年以上にわたり、国内外のSMB、スタートアップ、S&P 500企業まで1,000社以上の成長支援に携わってきました。テック、プロフェッショナルサービス、人材、自動車、製造、小売・卸売まで幅広い業界で、現在は東京からAIを活用した業務成長の仕組みづくりに取り組んでいます。

ブログ一覧へ戻る