zopaf について
zopafは、AIエージェント向けのMCP交渉エンジンで、交渉計算にLLMではなくMILP最適化を使います。選好とBATNAをモデル化し、パレートフロンティアに基づく対案を生成し、相手の反応から優先事項を推定します。
主な機能
- 01交渉項目と選好のモデル化
- 02BATNAと交渉力の記録
- 03等効用の対案生成
- 04パレートフロンティアによる取引分析
- 05相手の反応から優先事項を推定
活用シーン
- 01採用条件の交渉案の構成
- 02VCタームシートの条件比較
- 03ベンダー契約の対案準備
- 04和解や提携案の評価
MCP 対応
セッション設定、項目や選好の記録、対案生成、取引分析、応答処理、状態取得などの交渉ツールをMCPクライアントに提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://zopaf-mcp-production.up.railway.app/mcpclaude mcp add --transport http rjandino-zopaf https://zopaf-mcp-production.up.railway.app/mcp{"mcpServers":{"rjandino-zopaf":{"type":"http","url":"https://zopaf-mcp-production.up.railway.app/mcp"}}}Cursor で開く{"servers":{"rjandino-zopaf":{"type":"http","url":"https://zopaf-mcp-production.up.railway.app/mcp"}}}VS Code で開く{"mcpServers":{"rjandino-zopaf":{"type":"http","url":"https://zopaf-mcp-production.up.railway.app/mcp"}}}{"mcpServers":{"rjandino-zopaf":{"serverUrl":"https://zopaf-mcp-production.up.railway.app/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Zopaf 交渉エンジン -- MCP サーバー
あらゆる AI エージェントが呼び出せる、MCP ツールとして公開された交渉数学エンジンです。Zopaf は純粋な MILP 最適化によって、パレートフロンティアを計算し、等効用の対案を生成し、相手の反応から相手の優先事項を推測します。LLM トークンの消費はゼロです。会話は呼び出し元のエージェントが担当し、数学的な処理は Zopaf が担当します。
クイックスタート
Claude Desktop
Claude Desktop の設定(claude_desktop_config.json)に追加します:
{
"mcpServers": {
"zopaf": {
"type": "streamable-http",
"url": "https://zopaf-mcp-production.up.railway.app/mcp"
}
}
}
Claude Code
claude mcp add zopaf --transport streamable-http https://zopaf-mcp-production.up.railway.app/mcp
汎用 MCP クライアント
Streamable HTTP エンドポイントに接続します:
URL: https://zopaf-mcp-production.up.railway.app/mcp
Transport: Streamable HTTP
ツールリファレンス
| ツール | 説明 |
|---|---|
create_session | 新しい交渉セッションを作成します。他のすべてのツールで使用する session_id を返します。 |
add_issue | ユーザーにとって望ましくない順から望ましい順に選択肢を並べた、交渉可能な論点/条件を追加します。 |
set_issue_range | 数値の論点に許容範囲を設定し、0~100 のスコアリングを可能にします。 |
record_preference | ユーザーが一部の論点を他の論点より優先することを記録します。重みモデルを更新します。 |
set_batna | 交渉が決裂した場合のユーザーの代替案を記録します。交渉力を判断します。 |
generate_counteroffers | 同時に提示する等効用の対案を3件生成します。 |
process_counterpart_response | 相手の反応を処理し、相手の優先事項を推測して、第2ラウンドの提案を生成します。 |
analyze_deal | 特定の取引をパレートフロンティアに照らして評価します。獲得した価値と推奨される交換条件を示します。 |
get_negotiation_state | 現在のモデル状態(論点、重み、BATNA、フロンティアの規模、推奨される次のステップ)を取得します。 |
仕組み
-
セッションを作成する --
create_sessionで新しい交渉モデルを初期化します。 -
論点を追加する --
add_issueで交渉対象の条件を定義します。各論点には、ユーザーにとって望ましくない順から望ましい順に選択肢を並べます(例:給与:['$150K', '$160K', '$170K', '$180K'])。 -
範囲を設定する -- 数値の論点については、
set_issue_rangeを呼び出し、値を0~100のスコアリング尺度に対応付けます。 -
選好を記録する -- ユーザーが何を重視しているかが分かったら、
record_preferenceを呼び出します。呼び出すたびに内部の重みモデルが更新されます。 -
BATNA を設定する --
set_batnaを使って代替案を記録します。その数と質によって、交渉力の強さとアンカリング戦略が決まります。 -
対案を3件生成する --
generate_counteroffersを呼び出し、ユーザーにとって同等に望ましいものの、構成が異なる3つのパッケージを生成します。必ず3件すべてを同時に提示してください。1件を最初に提示してから、別の案に切り替えることは避けてください。 -
相手の反応を処理する -- 相手がどのパッケージを好み、どの条件に異議を唱えたかを指定して、
process_counterpart_responseを呼び出します。エンジンは相手の隠れた優先事項を推測します。 -
第2ラウンドの提案を取得する -- 交渉力に応じた価値配分で、効率的フロンティア上の洗練された提案を返します。
例:求人オファーの交渉
create_session
-> {"session_id": "a1b2c3d4"}
add_issue(session_id="a1b2c3d4", issue_name="Salary", options=["$150K", "$160K", "$170K", "$180K"])
add_issue(session_id="a1b2c3d4", issue_name="Equity", options=["0.1%", "0.25%", "0.5%", "0.75%"])
add_issue(session_id="a1b2c3d4", issue_name="Signing Bonus", options=["$0", "$10K", "$20K", "$30K"])
add_issue(session_id="a1b2c3d4", issue_name="Remote Work", options=["On-site", "Hybrid", "Fully Remote"])
set_issue_range(issue_name="Salary", worst_acceptable=150000, best_hoped=180000,
option_values={"$150K": 150000, "$160K": 160000, "$170K": 170000, "$180K": 180000})
-> {"scores": {"$150K": 0.0, "$160K": 33.3, "$170K": 66.7, "$180K": 100.0}}
record_preference(preferred_issues=["Salary", "Equity"], over_issues=["Signing Bonus", "Remote Work"])
-> {"learned_weights": {"Salary": 0.345, "Equity": 0.345, "Signing Bonus": 0.155, "Remote Work": 0.155}}
set_batna(alternatives=["Competing offer from Company B at $165K", "Stay in current role"])
-> {"leverage_strength": "strong"}
generate_counteroffers(target_satisfaction="ambitious")
-> {
"counteroffers": [
{"label": "A", "terms": {"Salary": "$180K", "Equity": "0.25%", "Signing Bonus": "$10K", "Remote Work": "On-site"}},
{"label": "B", "terms": {"Salary": "$170K", "Equity": "0.5%", "Signing Bonus": "$0", "Remote Work": "Hybrid"}},
{"label": "C", "terms": {"Salary": "$160K", "Equity": "0.75%", "Signing Bonus": "$20K", "Remote Work": "On-site"}}
]
}
process_counterpart_response(preferred_package="B", pushback_issues=["Equity"])
-> {
"counterpart_priorities_inferred": {"Equity": 0.571, "Salary": 0.143, ...},
"round_2_offer": {"Salary": "$180K", "Equity": "0.25%", "Signing Bonus": "$20K", "Remote Work": "Hybrid"},
"value_split": "User gets 75% of surplus"
}
エンジンは、相手が株式報酬を最も重視していると推測しました(重みの57%)。第2ラウンドの提案では、ユーザーにとって譲歩のコストが低い株式報酬で譲歩し、給与と契約一時金で価値を獲得します。双方にとって条件が改善されます。ユーザーのBATNAが強いため、ユーザーは余剰価値の75%を獲得します。
ユースケース
- 求人オファー -- 給与、株式報酬、ボーナス、役職、リモートワーク、入社日、有給休暇
- VC のタームシート -- バリュエーション、取締役会の席、清算優先権、希薄化防止条項、プロラタ権
- 不動産 -- 価格、クロージング日、特約、修繕、付帯品、リースバック期間
- ベンダー契約 -- 価格、SLA の保証、支払条件、独占権、更新条項
- 給与交渉 -- 基本給、ボーナスの仕組み、評価の時期、職務範囲
- 事業提携 -- 収益の分配、知的財産の所有権、意思決定権、解消条項、事業地域
- 法的和解 -- 金銭条件、秘密保持条件、責任の承認、スケジュール
なぜトークンがゼロなのか?
Zopafは数学エンジンであり、言語モデルではありません。MILP最適化や組み合わせスコアリングを実行します。これらは計算コストこそ低いものの、LLMがコンテキスト内で試みるには面倒な処理です。
エージェントのLLMはユーザーとの会話を担い、適切な質問をして、戦略を説明します。Zopafは最適化を担い、パレートフロンティアの計算、等効用パッケージの生成、明らかになった選択からの選好ウェイトの算出、効率的フロンティア上でのオファーの位置決めを行います。
頭脳はあなたが担い、計算機はZopafが担います。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。