eXcalibur MCP
通过人工智能代理向X(推特)快速发布漂亮的推文,获利 通过DPYC(TM)Tollboot协议进行比特币闪电微支付。
](https://github.com/lonniev/excalibur-mcp)  
eXcalibur是一个 FastMCP 服务器允许 AI代理通过丰富的Unicode格式和可选图像发布到X(推特)。 X的赞助人身份验证使用OAuth2授权码+PKCE——否 聊天中会显示凭据。操作员凭据(X个应用程序密钥、BTCPay)到达 通过人在环安全快递,并存储在操作员的 每个操作员的霓虹保险库模式。工具调用按以下方式计量 收费站DPYC(TM) 预先资助 闪电平衡——不要骚扰你的客户。
部分 DPYC(TM)荣誉链.
入门指南
通过FastMCP Cloud连接——无需本地安装:
https://www.fastmcp.cloud/mcp/lonniev/excalibur-mcp第一步:检查会话
呼叫 excalibur_session_status 查看您当前的会话状态。如果你有 一个有资助学分的活跃会话,你已经准备好发布了。
步骤2:X OAuth2+PKCE(X的赞助人凭据)
- 获取您的Nostr npub——使用dpyc预言机
how_to_join()工具或任何
诺斯特客户。
- 呼叫
excalibur_begin_oauth(npub=)--返回aauthorize_url.
打开主 authorize_url (不是短链接)在您的浏览器和 在X上授权应用程序。
- 呼叫
excalibur_check_oauth_status(npub=)--完成代码
交换、保管代币并激活您的会话。
会话由npub设置密钥。代币存储在Neon保险库中 到期时自动刷新。
步骤3:安全快递(操作员凭据)
操作员凭据(X OAuth2应用程序密钥、BTCPay连接)通过以下方式传递 安全快递(service="excalibur-operator").这是一个人在循环中 流程:操作员有意识地通过其 诺斯特客户。开 receive_credentials,继电器DM被破坏性地排空 --凭证在收到后仅存在于霓虹灯保险库中。
学分模型
工具调用成本 api_sats 每次通话。学分有 tranche_lifetime -- 每次购买都会创建一个在配置的生命周期后到期的批次。 身份验证和平衡工具始终是免费的。使用 excalibur_check_balance 看 您的余额和分期付款到期。通过充值 excalibur_purchase_credits.
可用工具
标准工具(来自车轮)
标准DPYC(TM)工具由注册 register_standard_tools() 从 dpyc收费站这些包括 会话管理、信用操作、安全快递、定价、公证、, Oracle代表团。每个工具都由确定性UUID v5标识。
| 类别 | 工具 |
|---|---|
| 会话和计费 | session_status, check_balance, account_statement, account_statement_infographic, restore_credits, service_status, check_price, check_authority_balance |
| 安全快递 | request_credential_channel, receive_credentials, forget_credentials |
| Npub证明 | request_npub_proof, receive_npub_proof |
| 购买 | purchase_credits, check_payment |
| 定价和限制 | get_pricing_model, set_pricing_model, reset_pricing_model, list_constraint_types |
| 公证 | notarize_ledger, list_notarizations, get_notarization_proof |
| 入职培训 | get_operator_onboarding_status, get_patron_onboarding_status |
| Oracle(委托) | oracle_about, oracle_how_to_join, oracle_lookup_member, oracle_get_tax_rate, oracle_network_advisory |
域工具(特定于eXcalibur)
| 工具 | 成本 | 描述 |
|---|---|---|
begin_oauth | 免费 | 启动X OAuth2授权码+PKCE流;回报 authorize_url |
check_oauth_status | 免费 | 完成浏览器授权并将代码兑换为令牌 |
post_tweet | 从价 | 以标记为Unicode富文本格式发布到X |
post_tweet_image | 从价 | 发布带有图像URL或SVG横幅(渲染为PNG)的帖子 |
所有需要 npub 也接受a proof: str 参数 kind-27235 Schnorr证明。
安全
- Npub身份 --赞助人由Nostr公钥标识(
npub),
不是电子邮件或密码。每个角色一个密钥对,由用户管理。
- Kind-27235防腐蚀 --工具调用带有NIP-98风格的Schnorr
证明调用者控制所声称的npub的签名。证据已缓存 约1小时;通过以下方式续订 request_npub_proof / receive_npub_proof.
- 人在环安全快递 --凭证传递需要
操作员通过Nostr DM进行有意识的批准。收到后,中继消息为 被破坏性地耗尽,所以秘密只存在于加密的霓虹灯保险库中。
- 按操作员Neon模式 --每个操作员的凭据都存储在
具有专用LOGIN角色的隔离Postgres模式。无交叉操作员 访问。
建筑
src/excalibur_mcp/
server.py FastMCP server -- domain tools + register_standard_tools()
config.py Pydantic settings from environment variables
oauth_flow.py X-specific OAuth2 Authorization Code + PKCE wrapper
vault.py In-memory Bearer token session cache (keyed by npub)
x_client.py X API v2 client with OAuth 2.0 Bearer token auth
formatter.py Markdown -> Unicode rich text (bold, italic, headers)
actor.py OperatorProtocol implementation for tool catalog关键设计选择:
- OAuth2授权码+PKCE --通过浏览器获得的赞助人代币
流动。 begin_oauth 返回主 authorize_url (不是短链接); check_oauth_status 完成交换。存储在Neon保险库中的代币, 到期时自动刷新。没有OAuth 1.0a。
- UUID v5工具标识 --每个工具(标准和领域)都有一个
从其功能名称导出的确定性UUID。定价、约束、, 并根据UUID对所有密钥进行计费。
- 车轮上的标准工具 --
register_standard_tools()提供
所有DPYC(TM)基础设施工具。只有特定于域的X/Twitter工具 定义于 server.py.
- Markdown到Unicode --转换
**bold**,*italic*,以及# headers
在推文中呈现的Unicode字符没有标记语法。
自我寄宿
环境变量
DPYC(TM)身份(启动时需要)
| 变量 | 必填 | 描述 |
|---|---|---|
TOLLBOOTH_NOSTR_OPERATOR_NSEC | 是 | 操作员用于身份引导和DM加密的Nostr密钥 |
这是启动所需的唯一环境变量。所有其他秘密(X个应用密钥, BTCPay凭证)通过Secure Courier凭证模板到达 存储在每个操作员的Neon保险库模式中。
操作员凭据(通过Secure Courier)
这些通过安全快递交付(service="excalibur-operator"),不 设置为环境变量:
| 凭证 | 说明 |
|---|---|
client_id | X OAuth2客户端ID(来自X开发人员门户) |
client_secret | X OAuth2客户端密码(来自X开发者门户) |
btcpay_host | BTCPay服务器URL |
btcpay_store_id | 发票的店铺ID |
btcpay_api_key | 具有发票权限的API密钥 |
认证运营商通过以下方式从管理局引导他们的Neon数据库URL 加密的Nostr DM-- NEON_DATABASE_URL 不会从环境中读取。
可选调整
| 变量 | 描述 |
|---|---|
TOLLBOOTH_NOSTR_RELAYS | 逗号分隔的中继URL(覆盖默认值) |
SEED_BALANCE_SATS | 新用户的新手积分(默认值:0) |
DPYC_REGISTRY_CACHE_TTL_SECONDS | 缓存DPYC社区注册表的时间(默认值:300) |
CONSTRAINTS_ENABLED | "true" 在工具调用上启用约束引擎评估 |
故障排除
冷启动
在部署后的第一次请求时,服务可能需要几秒钟才能 初始化Neon连接并加载定价模型。运行时句柄 这是内联重试——调用者在预热后收到结果 完成,而不是“服务不可用”错误。
凭证生命周期状态
与凭证相关的响应以清晰的方式描述了当前的生命周期状态 指导,而不是错误消息:
| 状态 | 含义 | 下一步 |
|---|---|---|
no_session | 无法识别npub | 呼叫 session_status 与你的npub |
awaiting_oauth | OAuth流已启动,浏览器尚未授权 | 打开 authorize_url 并授权 |
awaiting_courier | 安全快递通道已打开,尚未收到凭据 | 通过Nostr客户端使用JSON凭据进行回复 |
proof_expired | Npub证明缓存已过期(约1小时) | 调用 request_npub_proof 然后 receive_npub_proof |
insufficient_balance | 信用额度用尽或部分到期 | 致电 purchase_credits 充值 |
常见的工具调用情况
- “需要证据” --呼叫
request_npub_proof然后
receive_npub_proof 证明npub的所有权。缓存将在~1后过期 小时;以新的请求/接收周期续订。
- “信用余额不足” --呼叫
purchase_credits充值。
检查付款到期情况 check_balance.
- “未配置操作员凭据” --操作员设置问题,而不是
赞助人的问题。
不要骚扰你的客户: 不要要求顾客重新认证, 重新授权或重新执行OAuth,除非响应明确指出上游 令牌已过期或无效。
发展
# Install in development mode
cd excalibur-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
.venv/bin/pytest tests/
# Type checking
mypy src/excalibur_mcp/
# Formatting
black src/ tests/
ruff check src/ tests/DPYC(TM)生态系统
- dpyc社区 --注册+治理
- dpyc收费站 --收费宝货币化的Python SDK
- 收费站管理局 --授权MCP服务
- 蒂巴因mcp --个人大脑MCP服务
- excalibur mcp --推特MCP服务
- dpyc预言机 --社区礼宾服务
商标
DPYC、Tollboot DPYC和Don't Pester Your Customer是 朗尼·万赞特。请参阅 商标.md 在dpyc社区存储库中获取使用指南。
许可证
Apache许可证2.0——请参阅 许可证 了解详情。
