mcpField
P
Parley

Parley

本地服务
parleyprotocol.comAI 与智能体12 天前更新

关于 Parley

Parley 是面向利益冲突且各方约束保密的群体决策 Python 引擎。它会拒绝违反任一方红线的选项,在可行选项中按 max-min 规则决策,并生成可验证的记录。

主要功能

  1. 01以代码强制执行硬约束
  2. 02支持多方 max-min 决策
  3. 03向协调方提供掩码判定
  4. 04验证 SHA-256 决策记录
  5. 05仅依赖标准库的 MCP 服务

适用场景

  1. 01选择符合所有参与方限制的方案
  2. 02处理多方市场纠纷
  3. 03在本地验证决策记录

MCP 相关

其 stdio MCP 服务提供 `parley_decide`、`parley_verify_receipt` 和 `parley_check_party`。这些工具用于决策、验证记录哈希与结果,以及重新检查某一方的约束。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"5uper0-parley": {
"command": "uvx",
"args": [
"parley-consensus"
]
}
}
}
启动命令uvx parley-consensus

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiparley-consensus0.2.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
ruleenum否选择规则。仅支持 'egalitarian'(最大-最小)。egalitarian
specobject是DecisionSpec:共享选项及每个当事方的立场,与 examples/demo/recipe_*.json 中的 JSON 相同。忽略额外键。
spec.titlestring是
spec.optionsarray是
spec.partiesarray是

详细介绍

parley.

多方共持、各设底线,达成不越过任何人红线的决策

为每一方的 Agent 设定一条私有红线。Parley 会选出不越过任何一方红线、且能改善最不满意一方处境的方案;每位所有者都能在自己的机器上确认其限制确实生效。 没有人会展示自己的方案表,连协调方也看不到。
红线写在代码中,而非提示词里 · 多方(N>2)· 非加密 · 可自托管 · Python 零依赖 · Apache-2.0。

ci license python core PRs welcome

在线试用 · 30 秒了解 · 路线图 · 更新日志 · 安全 · 贡献指南 · 西班牙语:兄弟姐妹间的遗产分配 · 西班牙语:出售遗产房屋是否需要一致同意? · 英语:在西班牙,出售公寓是否需要所有继承人同意? · 乌克兰语


Parley 决策演示:三个利益相左的参与方达成最大最小决策,一条越过红线的捷径被代码拦截,每一方都能验证防篡改的 SHA-256 回执

利益相左的参与方达成最大最小决策 · 可能让某人吃亏的捷径被红线拦截 · 每一方都能验证防篡改回执。

既可通过 MCP 主机(Claude、Cursor)使用,也可搭配 OpenAI Agents SDK、smolagents 和 LangGraph 使用:三个示例都会为同一决策返回相同的回执哈希。


安装

pip install parley-consensus              # zero-dependency core
pip install "parley-consensus[crypto]"    # + Ed25519-signed verdicts

发行包名为 parley-consensus(PyPI 上的 parley 是无关项目);导入名为 parley。

from parley.agent import Agent
from parley.consensus import run_consensus
from parley.preferences import HardConstraint, PreferenceSheet

options = [
    {"venue": "rooftop", "cost": 900},
    {"venue": "garden", "cost": 600},
    {"venue": "diner", "cost": 300},
]
ana = PreferenceSheet(
    "Ana", utility=lambda o: 1.0 if o["venue"] == "rooftop" else 0.4)
# a red line: code, not a preference
bob = PreferenceSheet(
    "Bob",
    hard=[HardConstraint("budget", lambda o: o["cost"] <= 700)],
    utility=lambda o: 1 - o["cost"] / 1000)
cara = PreferenceSheet(
    "Cara", utility=lambda o: 0.9 if o["venue"] == "garden" else 0.5)

agents = [Agent(s.owner, s) for s in (ana, bob, cara)]
result = run_consensus(agents, options)
print(result.status, result.decision)
print("receipt sha256:", result.transcript.hash())
# each owner replays their own private sheet, locally
for sheet in (ana, bob, cara):
    ok = result.transcript.verify_non_betrayal(sheet, result.decision)
    print(sheet.owner, "not betrayed:", ok)
agreed {'venue': 'garden', 'cost': 600}
receipt sha256: 30483303e4d94e22833161d9bb8c292c0effff88c3303d7e195e57d49c88f516
Ana not betrayed: True
Bob not betrayed: True
Cara not betrayed: True

上面的哈希是 0.2.1 及更高版本打印的结果:被否决方案的得分会报告为 0。对于同一段代码,0.2.0 版本打印的是 a9cb75c0...;决策和判定结果相同。

屋顶露台是 Ana 最喜欢的方案,但最终还是落选:它越过了 Bob 的预算红线,因此在评估任何得分之前就被否决了。协调方始终只看到 red-line,从未看到预算或方案表。

贡献者请从克隆的仓库安装:pip install -e ".[dev]"(参见状态)。

在 MCP 主机(Claude、Cursor)中使用

基础安装附带一个仅依赖标准库、通过 stdio 通信的 MCP 服务。将主机指向它:

{"mcpServers": {"parley": {"command": "parley-mcp"}}}

如果主机的 PATH 中找不到控制台脚本,请通过安装了该包的解释器启动它:{"command": "python", "args": ["-m", "parley.mcp"]}。

此服务同时支持 MCP 的两代协议:使用 2026-07-28 修订版(无 initialize,版本和功能写在每个请求的 _meta 中,通过 server/discover 进行发现)的主机可使用无状态模式;使用 2025-11-25 或更早版本的主机则会执行常规的 initialize 握手。两者使用相同的工具,并生成相同的回执哈希。 会显示三个工具:parley_decide(输入选项和各方的红线及偏好;输出 status、decision、transcript 和 transcript_sha256)、parley_verify_receipt(重新计算 transcript 的哈希,并根据记录的判定重新计算最大最小决策),以及 parley_check_party(根据某个决策重新检查一方的红线)。要检查 parley_decide 返回的内容,请将其 transcript 和 transcript_sha256 传给 parley_verify_receipt:scripts/verify-receipt.py 读取的是收据文件(由 examples/real_decision.py 写入),而不是 parley_decide 的结果,并会拒绝该结果。 输入 与 examples/demo/ 中的示例配方使用的 JSON 相同,通过一个 spec 键传入。如果你直接调用这些工具,而不是通过宿主调用,三个调用如下(即 tools/call 的 arguments):

{"name": "parley_decide",
 "arguments": {"spec": {"title": "...", "options": [...],
                        "parties": [...]}}}
{"name": "parley_verify_receipt",
 "arguments": {"transcript": {...},
               "sha256": "<transcript_sha256 from parley_decide>"}}
{"name": "parley_check_party",
 "arguments": {"party": {"owner": "Bob", "hard": [...],
                        "utility": [...]},
               "decision": {...}}}

parley_decide 的结果不是供 scripts/verify-receipt.py 使用的收据文件;请使用 parley_verify_receipt 检查。示例提示词:

我们三个人要选一个场地:屋顶(900)、花园(600)、小餐馆(300)。Bob 不接受超过 700 的费用;Ana 更喜欢屋顶,Cara 更喜欢花园,Bob 更喜欢最便宜的选项。使用 parley_decide,然后验证 收据哈希,并检查 Bob 的红线是否得到遵守。

此模式能做什么,不能做什么。 宿主持有每一方的规范,并在一次调用中全部传入,因此各方之间以及各方与宿主之间都没有隐私。仍然有效的是引擎在代码中强制执行的规则:红线会确定性地否决选项;最大最小规则会从对所有人都可行的选项中作出选择;收据哈希会让 transcript 后续的任何修改都显现出来,但前提是哈希由可能修改 transcript 的人之外的其他人保管:该哈希没有签名,服务端也不存储它,因此来自同一方的哈希和 transcript 无法相互证明。max_min_verified 不依赖哈希:它会根据记录的判定重新计算最终选项。对于隐私表格,请通过 HTTP 为每位所有者各运行一个进程 (examples/run_env.py);这样协调方只能看到经过遮蔽的判定。


2026 年的大多数 Agent 工具要么解决传输和身份问题(A2A、MCP),要么面向一对一的 Agent 商务(由 Agent 为你购买或预订),要么用于同一所有者旗下 Agent 之间的协作式辩论。Parley 致力于解决尚无产品化方案的缺口:由一组代表不同主体、具有相互冲突且私密利益的代表,达成人人都能信任的决策,并证明各自的 Agent 没有背叛委托人。

适用对象。 适用于需要由多方共同作出决策、决策不能触碰任何一方红线,且各方都能在事后证明这一点的团队和平台。最初面向受监管的多方工作流:合规与开户决策(KYC/AML、制裁红线)、市场交易与 P2P 争议,以及委托治理(委员会、评审小组)。

其核心优势是三项由代码强制执行、而非交由大模型自行决定的特性:

  1. 确定性红线。 每位所有者的硬性约束都是由代码检查的谓词。提案一旦触碰其中任何一条,就会被否决,绝不会通过协商取消。“我的 Agent 不会背叛我”因此成为可证明的属性,而非一种希望。
  2. 利益冲突下的共识。 协调方只能看到经过遮蔽的判定、可行性标记、软评分和经过遮蔽的原因(ok/red-line),绝不会看到私密表格,也不会知道涉及哪条约束。决策必须对每个 Agent 都可行;在可行选项中,采用平等主义的最大最小规则进行选择(提升满意度最低的参与者),并以总福利作为平局判定依据。这属于社会选择,而非多数表决。没有可行选项时 ⇒ 坦诚地陷入僵局。
  3. 可验证的 transcript。 以 SHA-256 记录所有经过遮蔽的判定,并能检测篡改。每位所有者都可以在本地根据自己的私密表格重新检查,以证明没有触碰红线,而无需向任何人透露表格。

为什么要构建它(以及我们从中学到了什么)

Agent 开始替我们采取行动:预订、谈判、入职、分配。当两个 Agent 服务于不同的所有者时,“我的 Agent 有没有出卖我?”不再是杞人忧天,而成了一个现实问题。加密领域给出的 Agent 信任方案(把它放到链上,再加个代币)崩跌了 89–99.7%;真正持久的需求是信任原语本身,且与代币脱钩。

不会说谎、可供查验的 AI。 2026 年的 Agent 热潮周期证明,病毒式传播可以与真相完全脱钩。Parley 是可证明的版本:每次协商中的每个裁决都是可重新哈希的收据;每位所有者都能重放自己的私有表单,证明没有越过任何红线。无需信任任何人,只需查验即可。

构建 v0 让我们认识到,这个切入点比“多 Agent 共识”更聚焦、更明确:价值不在投票,投票是免费的(Snapshot、投票);价值在于在私有利益冲突下可证明不会背叛——任何一方都不必透露自己的私有表单,也不必透露所涉的红线;任何红线都不能被交易掉;每个人都能自行查验收据。这些都无法由现成组件组合实现,也是我们用代码强制执行、而不是交由大模型的善意来保障的唯一要点。完整的证明示例:docs/dogfood-01-p2p-escrow.md。

相关项目,以及它们的不足之处

以下内容摘自各项目截至 2026-10-25 的公开介绍;它们是为不同任务设计的不同工具,其中一些可以互补。

相关项目功能Parley 的补充
MPAC(arXiv,2026 年 4 月)让不同委托方的 Agent 基于共享状态进行协调:声明意图、处理结构化冲突、由人类仲裁基于私有底线的决策规则:将红线写入代码、对经过掩码处理的裁决进行 max-min 计算,并在本地重放。MPAC 摘要未提及私有偏好、掩码处理或可验证的记录
Legal Context Protocol(美国仲裁协会及合作伙伴,2026-06-24 发布)让法律条款、同意和争议解决在 Agent 交易时可被发现和验证在发生争议前作出决策:LCP 涵盖条款和救济途径,Parley 则从多个选项中作出选择。两者互补
Acuerdio(西班牙)在线调解平台;从邀请“另一方”开始;提供认证邀请函和 MASC 证书,按方收费(其网站标价 19 EUR)让三位或更多所有者在各自设有私有底线的情况下参与,并提供每个人都能重新计算的记录。Parley 不颁发 MASC 证书,也不声称符合任何法律要求

状态:v0(核心功能可用)

纯标准库、零依赖核心。采用进程内传输,并留有清晰的接入点,下一步将接入 A2A (分布式发现 + 已签名的 Agent Cards)。基于大模型引导填写的偏好表单 (parley/elicit.py)和 Ed25519 签名记录(parley/net/identity.py,可选的 crypto extra)也已包含在内。这个 v0 刻意将新颖部分——共识与 不背叛机制——独立出来,并且不重复利用已经成为通用组件的功能。

python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -q                     # the full suite, all green
# the money-shot: open http://127.0.0.1:8080 → Run
.venv/bin/python examples/demo/server.py
# three delegates pick a meeting slot
.venv/bin/python examples/meeting.py
# bots as separate processes, consensus over HTTP
.venv/bin/python examples/run_env.py
# run a real decision with real people, each one ratifies
.venv/bin/python examples/real_decision.py \
    --options examples/demo/recipe_committee.json
30 秒内了解

examples/demo/server.py 运行着一个网页背后的真实引擎: 彼此对立的各方、一个最大最小决策、一个被红线标记为 BLOCKED 的选项,以及一份可重新哈希验证的收据, 每一方都可以私下验证。这是一个完整的 P2P 托管争议实操示例,其中展示了每一方的“这样更好,因为……”,见 docs/dogfood-01-p2p-escrow.md (合成示例)。另一个是真实且匿名化的争议:对提前解除租约事件进行回顾性重放,租户认可了一个“这样本来会更好”的结果,见 docs/dogfood-02-early-lease-exit.md(如实说明边界:房东一方的立场是推断得出的,并未认可)。原生截图证明卡片位于 examples/demo/proofcard_p2p.html。

没有 Python?用 Docker 运行演示:

# then open http://127.0.0.1:8080
docker build -t parley . && docker run --rm -p 8080:8080 parley

在线试用:parleyprotocol.com/demo 运行着一个网页背后的真实引擎, 无需安装,也无需注册。更倾向于自托管?代码库附带 Dockerfile(以及 render.yaml Blueprint),只需一条命令,就能在任何地方运行同一个演示。

由 Agent 团队构建

产品旨在实现不同所有者的 Agent 之间的信任。它由一位所有者的 Agent 团队打造:它们负责规划、编写代码、相互审查,并在严格的关卡下发布;由人类指挥并把守不可逆的关卡(公开发布、外联),团队则负责工程实现。每项更改都要通过你也可以自行运行的同一关卡:scripts/ship-gate.sh,测试全部通过,核心零依赖,示例可运行,并遵守常规提交规范。

安全性(v0.1)

网络层已针对明显的攻击进行加固(参见 tests/test_redteam.py):

  • 签名裁决(Ed25519)。 每个机器人都会对其针对特定选项的裁决进行签名,将内容绑定到密钥。verify_transcript(require_signed=True) 随后会拒绝任何被篡改的裁决,或任何在预期应有签名时却未签名的裁决。范围(请阅读): 此检查只能证明每个签名与该记录中携带的公钥在内部一致。它并不能证明其真实性,也就是不能证明该公钥确实是所有者的真实密钥,因为目前没有受信任的 owner → key 名册:组装对话记录的协调器可以替换成自己的密钥对。目前应将签名视为篡改证据,而不是可由第三方验证的身份凭证。
  • 身份验证 + 速率限制 + 输入验证。 未提供 Bearer 令牌时,/consider 会返回 401;暴力枚举会受到限流(429);过大或格式错误的请求体会被拒绝(413/400)。这弥补了偏好信息提取漏洞(未通过身份验证的攻击者此前可通过探测还原机器人的私有底线)。
  • 结果验证。 verify_outcome(transcript)(位于 parley.consensus)会根据记录的裁决重新计算极小极大获胜选项,并检查结果是否与公布的决定一致,因此可以发现协调器最终选定了一个可行但非极小极大(或不可行)的选项。任何人都可以通过公开记录重放验证,无需私有表单。传入 expected_owners= 指定预期名册;否则,即使协调器在每条记录中都删去一个所有者,验证仍会通过。(verify_non_betrayal 仍只能证明你自己的底线得到遵守。)

尚未实现(v0.1 的实际限制,请勿将其视为可抵御恶意参与方的生产级安全方案):

  • 真实性固定验证:签名会根据自行声明的密钥进行验证,而非受信任的名册(见上文);名册固定验证(根据每个机器人的发现 Agent Card 中的密钥进行验证)将在 v0.2 实现。目前只有协调器自身会固定验证:客户端会检查是否存在使用该 Card 密钥的签名;签名是否有效则由 verify_transcript(require_signed=True) 检查。examples/run_env.py 现在会运行此检查,其他调用方也必须运行。
  • 重放绑定:裁决不包含会话或 nonce,因此签名裁决可以被重放到复用相同选项的其他协商中。
  • 范围掩码分数:每个已接受选项的软基数 score 都会公开在对话记录中,因此不受信任的协调器可以推断这些选项之间的偏好排序;acceptable 标记也会显示各方的可行区域(被拒绝的选项始终报告分数 0;拒绝原因和私有表单仍会保密;MPC/范围掩码属于未来工作)。
  • TLS/mTLS,以及博弈论层面的串通/策略性虚报抵御能力(研究方向)。

托管演示版 parleyprotocol.com 使用 GA4 进行基本流量分析——请参阅收集的数据。协议和可自托管的 docker run 路径不会收集任何数据。

钱从哪里来(开放核心论点)

共识机制本身是商品化的(投票/共识是免费的,例如 Snapshot、投票)。价值和付费意愿随着决策利害程度 × 参与方数量 × 对隐私/中立性/审计的需求而提升。付费层是可信的中立中介:托管身份/信任注册表、可用于审计的签名记录,以及托管式自托管服务,而不是算法。首批候选领域:私密的多方 B2B 谈判(采购/SOW)和可审计的委托治理(委员会、评审小组)。与 Fetch.ai / Olas 的差异(真实的先前方案:围绕账本和代币构建的 Agent 平台):它们的页面没有描述红线或共识机制,而 Olas 是链上且基于代币;Parley 实现多方群体共识、可证明的不背叛、无加密货币,且可自托管。

演示展示了三个人,他们的 Agent 持有私密且相互冲突的约束条件,最终找到一个所有人的红线都允许的时间段;随后每位所有者都证明自己没有背叛。第二轮则会诚实地陷入僵局,而不是强行做出糟糕的决定。

架构

层v0下一步
传输/发现/身份进程内A2A(签名 Agent Cards、mDNS/注册表),复用,不要重建
Agent 大脑纯代码,或 parley/elicit.py(LLM 起草,参与者确认)更完善的需求征询体验
红线执行parley/preferences.py(代码谓词)核心;保持确定性
共识parley/consensus.py(最大-最小)纳什议价、加权规则
可验证性parley/transcript.py(哈希 + 本地重放),可选 Ed25519 签名范围掩码分数(MPC)
对抗性不适用拜占庭/串通抵抗能力,研究级贡献

路线图 → 开放核心

  • **现在:**共识核心 + 红线防护 + 可验证记录(本仓库,Apache-2.0)。
  • **下一步:**加入 A2A 传输,让运行在不同机器上的 Agent 能够相互发现,并通过局域网协商。 (LLM 征询生成的表单和 Ed25519 签名记录已随项目提供。)
  • **研究:**注入一个撒谎/串通的 Agent,展示最大-最小 + 拜占庭鲁棒聚合能够抵御它。这部分可能会引起前沿 R&D 的兴趣。
  • **付费(自托管):**托管中继/信任注册表,让 Agent 能够在局域网之外安全会面, 并在你自己的硬件上托管 Agent。开源核心,付费联邦服务。

首个 ICP:一个封闭群体(团队/部门/家庭),由一位运营者部署所有 Agent,从而绕过网络冷启动效应。“将立场委托给你的 Agent,让 Agent 找到共同决定”正是这种场景。

贡献

核心刻意保持精简;目前最有价值的贡献是对抗性测试,以及对共识协议的第二意见。请从 CONTRIBUTING.md 开始,提交附有复现步骤的缺陷报告,或发起讨论。当前有六个小型的单文件任务(类型提示、测试、CI 检查),列在 适合新手的问题 下。 请通过 SECURITY.md 私下报告安全问题。

Star 历史

如果你觉得 Parley 可证明不背叛的方案很有意思,点个 Star 能帮助更多人发现它。

Star 历史图表

许可证

Apache-2.0,宽松许可,明确授予专利许可(便于通过企业法律审查)。请参阅 LICENSE + NOTICE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。