MCP Solana Internet: Direct SOL Payments for Content Access

MCP Solana Internet: Direct SOL Payments for Content Access

基于 Solana 的微支付服务器,使用 MCP。💰 通过 Flask API 促进直接 SOL 转账,以实现资源访问控制。🔑 返回 solana-action: URIs 用于未签名交易,并在链上进行验证。✅ 包括强大的交易检查、资源定价和基本访问管理。🧪

waifuai

研究与数据
访问服务器

README

MCP Solana Internet:直接 SOL 支付内容访问

本项目演示了一个 MCP 服务器的概念验证实现,该服务器与 Solana 区块链集成,以实现使用直接 SOL 支付来付费访问数字内容和资源。它展示了如何将 MCP 与区块链结合使用,以创建去中心化、无需许可的访问控制系统。

概述

该项目由两个主要组件组成:

  • MCP 服务器 (server.py): 这是核心 MCP 服务器,使用 fastmcp 库构建。它处理 MCP 请求,管理资源访问,并与 Solana 区块链交互。
  • 支付 API (payments.py): 一个基于 Flask 的 API,用于处理支付交易的创建。它集成在 MCP 服务器本身内部(使用 Flask 蓝图),从而简化了部署和交互。这种方法使得创建 "solana-action:" URI 变得容易,如 MCP 规范中所述。

服务器公开了一个 MCP 资源 (access://check),该资源检查用户是否已为访问给定资源付费。如果需要付款,它会返回一个 solana-action: URL,MCP 客户端可以使用该 URL 来发起支付交易。process_payment 工具允许 MCP 客户端提交已签名的 Solana 交易,从而完成支付。

特性

  • 直接 SOL 支付: 用户直接以 SOL 支付来访问资源,无需中间人。
  • 去中心化访问控制: Solana 区块链充当支付验证的透明且不可变的账本。
  • MCP 集成: 利用 MCP 进行标准化资源访问请求和支付发起。
  • 基于 Flask 的支付 API: 提供了一个简单且定义明确的 API,用于生成未签名的 Solana 支付交易。
  • Solana 交互: 使用 solders 库与 Solana 区块链进行高效且符合习惯的交互。
  • 测试覆盖率: 包括使用 pytestpytest-asyncio 的集成测试,以验证基本功能。
  • 可扩展设计: 为在 Solana 和 MCP 上构建更复杂的付费内容系统提供了基础。

安装

  1. 先决条件:

    • Python 3.11+
    • Poetry (用于依赖管理)
    • Solana CLI (版本 1.16 或更高版本)
    • solana-test-validator (用于本地测试)
  2. 克隆存储库:

    git clone <repository_url>
    cd mcp-solana-internet
    
  3. 安装依赖项:

    poetry install
    
  4. 环境设置:

    • mcp_solana_internet 目录中创建一个 .env 文件:

      touch mcp_solana_internet/.env
      
    • 编辑 .env 文件并设置以下变量:

      RPC_ENDPOINT="http://localhost:8899"  # 或您的 Solana 集群端点
      PAYMENT_WALLET_SEED="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
      # ^^^ **重要提示:** 这仅是用于演示目的的占位符。
      # 在生产环境中,您必须使用安全的密钥管理解决方案
      # (例如,AWS KMS、HashiCorp Vault 或硬件钱包)。切勿将私钥
      # 或种子直接存储在代码或配置文件中。此种子生成
      # 钱包地址。
      
      • RPC_ENDPOINT: 您的 Solana RPC 端点的 URL。对于本地开发,如果您正在运行 solana-test-validator,则可以使用 http://localhost:8899。对于针对 devnet 的测试,请使用 https://api.devnet.solana.com
      • PAYMENT_WALLET_SEED: 一个以逗号分隔的 32 个整数列表,表示支付钱包的种子。此钱包将接收 SOL 支付。同样,这是不安全的,仅用于演示。

用法

  1. 启动 Solana 测试验证器(用于本地测试):

    solana-test-validator
    

    这将启动一个本地 Solana 集群,您可以将其用于测试。

  2. 启动 MCP 服务器:

    poetry run python mcp_solana_internet/server.py
    

    服务器将开始监听 stdinstdout (stdio 传输) 上的 MCP 请求。它还在端口 5001 上启动 Flask 支付 API。

  3. 与服务器交互(概念示例):

    MCP 客户端将按如下方式与服务器交互:

    1. 检查访问权限: 客户端向 access://check 发送 MCP 请求,其中包含用户的公钥和资源 ID。

    2. 需要付款: 如果用户尚未付款,服务器将返回一个包含以下内容的 JSON 对象:

      • access: false
      • message: "需要付款。"
      • payment_url: 一个 solana-action: URI,指向 /process_payment_action 端点,包括所需的金额和资源 ID 作为查询参数(例如,solana-action:/process_payment_action?amount_sol=0.1&resource_id=resource_1)。
    3. 创建支付交易:

      • 客户端从之前的响应中提取 payment_url。此 URL 包含金额和 resource_id。
      • 客户端向 /process_payment_action 发出 POST 请求,包括用户的公钥、amount_solresource_id
      • 支付 API 构建一个未签名的 Solana 交易,用于从用户的钱包直接 SOL 转账到 PAYMENT_WALLET。API 将序列化的未签名交易作为十六进制字符串返回。
    4. 交易签名(客户端): 客户端(例如,用户的钱包软件)必须使用用户的私钥对交易进行签名。此签名步骤对于安全至关重要,并且不由服务器处理。

    5. 提交付款: 客户端将已签名的交易发送到 Solana 网络。这可以使用 solana cli 工具实现,也可以通过 solana-pysolders 等库以编程方式实现。

    6. 然后,客户端在 MCP 服务器上调用 process_payment 工具,传入交易签名(不是完整的交易)作为 payment_transaction 参数,以及 amount_solclient_ipresource_id。服务器通过从区块链检索完整交易来验证此签名,检查金额、目的地等。

    7. 重新检查访问权限: 确认付款后,客户端可以再次向 access://check 发送 MCP 请求。这一次,如果付款已处理,服务器应响应 {"access": true}

代码结构

  • mcp_solana_internet/:
    • server.py: 主要 MCP 服务器实现。
    • payments.py: 用于处理支付交易创建的 Flask API。
    • utils.py: (当前为空) 用于存放实用函数的占位符。
    • tests/:
      • integration/: 服务器的集成测试。
    • pyproject.toml: 项目元数据和依赖项(由 Poetry 管理)。
    • pytest.ini: pytest 的配置。
  • .gitignore: 指定 Git 要忽略的文件和目录。
  • README.md: 此文件。

关键文件和函数说明

server.py

  • RPC_ENDPOINT: Solana RPC 端点 URL。
  • PAYMENT_WALLET: 表示接收付款的钱包的 Keypair 对象。
  • LAMPORTS_PER_SOL: SOL 和 Lamports(SOL 的最小单位)之间的转换因子。
  • get_resource_price(resource_id): 一个辅助函数,返回给定资源 ID 的价格(以 SOL 为单位)。这是一个占位符,应替换为更强大的定价机制(例如,从数据库或预言机获取价格)。
  • has_paid_for_access(user_pubkey, resource_id): 一个占位符函数,用于检查用户是否已为访问资源付费。在实际应用中,这将涉及查询支付记录数据库。
  • @mcp.resource("access://check"): 用于检查访问权限的 MCP 资源处理程序。它将用户的公钥和资源 ID 作为输入。
  • @mcp.tool(): 定义 process_payment 工具,该工具验证用户的支付交易签名。
  • Flask 蓝图集成: mcp.flask_app.register_blueprint(payments_blueprint) 将 Flask 支付 API 直接集成到 MCP 服务器中。

payments.py

  • payment_app: 用于支付 API 的 Flask 应用程序(蓝图)。
  • /process_payment_action (GET): 一个端点,返回描述支付操作的元数据,符合 MCP 操作格式。
  • /process_payment_action (POST): 一个端点,它将金额、资源 ID 和用户的公钥作为输入,并返回一个序列化的未签名的 Solana 交易,用于直接 SOL 转账。
  • CORS 处理: 包括 CORS 标头,以允许来自不同来源的请求(例如,基于 Web 的钱包)。

tests/integration/test_server.py

  • test_access_check_no_payment: 测试用户未付款时的 access://check 资源。
  • test_access_check_invalid_pubkey: 使用无效公钥测试 access://check 资源。
  • test_access_check_paid: 模拟已付费用户(当前,has_paid_for_access 始终返回 False,因此此测试期望访问被拒绝)。

改进和未来工作

  • 数据库集成: 将占位符 has_paid_for_access 函数替换为数据库查询,以存储和检索支付记录。这将涉及:
    • 选择一个数据库(例如,PostgreSQL、MySQL 或 NoSQL 数据库)。
    • 创建一个表来存储支付信息(用户公钥、资源 ID、金额、时间戳、交易签名)。
    • 实现插入和查询支付记录的函数。
  • 强大的交易验证: 增强 process_payment 工具以执行更彻底的支付交易验证,包括:
    • 检查双重支付。
    • 验证交易的最新区块哈希。
    • 检查任何其他潜在问题。
  • 错误处理: 改进整个代码中的错误处理,以便向客户端提供更具信息性的错误消息。
  • 安全性:
    • PAYMENT_WALLET 实施安全的密钥管理解决方案。
    • 考虑使用更安全的方法来处理 payments.py API 中用户的公钥(例如,要求用户提供签名消息)。
  • 异步操作: 使用异步数据库操作来提高性能。
  • 代币支付: 扩展系统以支持使用 SPL 代币以及 SOL 进行支付。
  • 订阅模式: 实施订阅模式,用户可以付费定期访问资源。
  • 动态定价: 与预言机或动态定价机制集成,以实时获取资源价格。
  • 更多测试: 添加更多单元和集成测试以覆盖代码的所有方面。
  • 重构 process_payment: 将交易获取和验证与 MCP 工具分开,MCP 工具主要是一个接口。

本 README 提供了项目的全面概述,包括其特性、安装说明、用法示例和潜在改进。它旨在为有兴趣了解和扩展项目的开发人员提供信息和帮助。对安全性的强调以及占位符实现和生产就绪解决方案之间的明确区分也至关重要。

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python