网球数据库查询服务

一个基于Model Context Protocol (MCP)的网球数据库查询服务,提供球员统计、比赛历史和锦标赛结果等数据的动态查询功能。

  • by AdemolaAri
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ademolaari/tennis-mcp-server

使用说明

网球数据库MCP服务器示例

随着2025年美国网球公开赛以激动人心的比赛和令人难以置信的统计数据展开,我一直在思考人工智能如何增强我们的网球体验。如果我们能建立像评论员一样深入了解网球的人工智能系统呢?这就是这个项目的灵感来源——一种展示模型上下文协议(MCP)在网球世界中的力量的完美方式。

🎾 这个项目背后的故事

想象一下,你正在构建一个人工智能网球评论员或体育分析系统,需要实时访问历史网球数据。您的大型语言模型(LLM)助理需要回答以下问题:

  • “纳达尔和德约科维奇在温布尔登的正面交锋记录是什么?”
  • “费德勒在不同场地上的表现如何?”
  • “在大满贯中,哪些球员的发球数据最好?”

传统上,您必须为每个可能的问题预先编写特定的SQL查询。但是,如果你的LLM可以根据自然语言问题动态生成和执行数据库查询呢?

这就是我们的网球数据库MCP服务器发挥作用的地方。这是一个如何创建模型上下文协议(MCP)服务器的实际例子,该服务器将SQLite网球数据库作为一组任何LLM都可以使用的工具公开。服务器提供了一个干净的界面,用于查询球员统计数据、比赛历史、锦标赛结果和详细的比赛统计数据。

🎯 此示例演示了什么

  • 如何在Python中创建一个简单的MCP服务器
  • 如何将SQLite数据库作为LLM的一组工具公开
  • 如何构建网球比赛数据和统计
  • 如何通过定义良好的工具接口提供灵活的查询功能

📚 数据库模式

数据库包括四个主要表:

  • players:网球运动员简介(姓名、国家、出生日期)
  • tournaments:锦标赛详细信息(名称、地点、表面类型、类别)
  • matches:比赛记录(球员、回合、得分、获胜者)
  • match_stats:每场比赛每位球员的详细统计数据

🛠️ 可用工具

服务器公开了LLM可以使用的几个工具:

  1. get_player_stats:检索玩家的总比赛次数、获胜次数和获胜百分比
  2. get_head_to_head:获取两名球员之间的完整比赛历史记录
  3. get_tournament_draw:获取完整的锦标赛等级和结果
  4. get_player_surface_stats:通过球场表面分析球员的表现
  5. list_tables:列出数据库中的所有表
  6. describe_table:描述表的模式
  7. Execute a SQL query and return the results:执行SQL查询并返回结果。当我们没有预定义的查询集时很有用

🚀 运行样本

先决条件

  • Python 3.8或更高版本
  • 紫外线 (推荐但不是必需的)

逐步设置

  1. 创建虚拟环境:

    python -m venv .venv
    
  2. 激活虚拟环境:

    • Linux/macOS:
      source .venv/bin/activate
      
    • 窗户:
      .venv\\Scripts\\activate
      
  3. 安装依赖项:

    pip install "mcp[cli]"
    
  4. 运行服务器:

    mcp run server.py
    
  5. 测试服务器:

    在新终端中,启动可视化界面并在浏览器中导航到localhost路由:

    mcp dev server.py
    

    或者直接从CLI进行测试:

    # List available tools
    npx @modelcontextprotocol/inspector --cli mcp run server.py --method tools/list
    
    # Example: Get player stats for Nadal (by name)
    npx @modelcontextprotocol/inspector --cli mcp run server.py --method tools/call --tool-name get_player_stats --tool-arg player_name="Rafael Nadal"
    
    # Example: Get Nadal vs Djokovic head-to-head (by names)
    npx @modelcontextprotocol/inspector --cli mcp run server.py --method tools/call --tool-name get_head_to_head --tool-arg player1_name="Rafael Nadal" --tool-arg player2_name="Novak Djokovic"
    

📝 许可证

麻省理工学院


此示例是模型上下文协议(MCP)示例的一部分,演示了如何为LLM创建实用的工具接口。网球数据库模式和样本数据是虚构的,仅用于演示目的。