运动训练数据服务器

一个与intervals.icu API交互的HTTP MCP服务器,提供运动员、训练和活动数据的检索与操作功能,支持耐力运动训练的集成与自动化场景。

  • by colinnuk
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 colinnuk/IntervalsIcuMcp

使用说明

IntervalsIcuMcp HTTP MCP服务器

该项目是一个HTTP MCP服务器,旨在与 intervals.icu API它为检索和操纵运动员、锻炼和活动数据提供了端点,支持耐力运动训练的集成和自动化场景。

特性

  • 模型上下文协议(MCP)服务器:将Intervals.icu功能暴露给GitHub Copilot等AI代理
  • ASP。NET核心Web API目标。净值10
  • intervals.icu数据的传统REST API端点
  • 可扩展的服务和插件架构
  • 运动员档案、锻炼、活动和健康模型
  • 用于高效数据处理的缓存和估计服务
  • 通过TSS计算生成锻炼计划

入门指南

先决条件

  • .NET 10 SDK (用于地方发展)
  • 码头工人 (用于集装箱化部署)
  • Intervals.icu API密钥 和 运动员ID (参见 intervals.icu 详情)

环境变量

运行应用程序需要以下环境变量:

变量 描述 示例
INTERVALS_ICU_API_KEY 您的Intervals.icu API密钥 abc123def456ghi789
INTERVALS_ICU_ATHLETE_ID 您的Intervals.icu运动员ID 12345

地方发展

  1. 克隆存储库:

    git clone https://github.com/colinnuk/IntervalsIcuMcp.git
    cd IntervalsIcuMcp
    
  2. 还原NuGet包:

    dotnet restore
    
  3. 设置环境变量:

    # Linux/macOS
    export INTERVALS_ICU_API_KEY="your-api-key"
    export INTERVALS_ICU_ATHLETE_ID="your-athlete-id"
    
    # Windows PowerShell
    $env:INTERVALS_ICU_API_KEY="your-api-key"
    $env:INTERVALS_ICU_ATHLETE_ID="your-athlete-id"
    
  4. 构建并运行项目:

    dotnet build
    dotnet run --project IntervalsIcuMcp/IntervalsIcuMcp.csproj
    
  5. 访问API:

    • REST端点: http://localhost:5000/McpTool/*
    • MCP服务器: http://localhost:5000/api/mcp
    • Swagger用户界面: http://localhost:5000/swagger

Docker设置

该项目包括一个使用Alpine Linux的多阶段Dockerfile,以实现最小的映像大小和跨平台兼容性。

使用Docker构建和运行

使用a .env 文件:

创建一个 .env 项目根目录中的文件:

INTERVALS_ICU_API_KEY=your-api-key-here
INTERVALS_ICU_ATHLETE_ID=your-athlete-id-here

构建并运行Docker镜像:

# Build the image
docker build -t intervals-icu-mcp .

# Run the container with environment file
docker run --env-file .env -p 5000:5000 intervals-icu-mcp

直接使用环境变量:

docker run \
  -e INTERVALS_ICU_API_KEY="your-api-key" \
  -e INTERVALS_ICU_ATHLETE_ID="your-athlete-id" \
  -p 5000:5000 \
  intervals-icu-mcp

使用Docker Compose:

创建一个 docker-compose.yml 文件:

version: '3.8'

services:
  intervals-icu-mcp:
    build: .
    container_name: intervals-icu-mcp
    ports:
      - "5000:5000"
    environment:
      INTERVALS_ICU_API_KEY: ${INTERVALS_ICU_API_KEY}
      INTERVALS_ICU_ATHLETE_ID: ${INTERVALS_ICU_ATHLETE_ID}
    restart: unless-stopped

然后运行:

docker-compose up -d

MCP服务器

该项目实现了一个MCP服务器,允许AI代理使用自然语言与您的Intervals.icu数据进行交互。MCP服务器公开了以下工具:

  • 查询运动员资料、活动、健康数据和即将举行的活动
  • 生成具有适当区域定位的结构化训练

看 MCP_SERVER.md 有关详细的设置和使用说明。

项目结构

  • Controllers/ -API端点
  • McpServer/ -MCP工具实现
  • Services/ -业务逻辑与API集成
  • Models/ -intervals.icu实体的数据模型
  • LlmPlugins/ -自定义逻辑的可扩展插件
  • Extensions/ -助手扩展

测试

该项目包括使用以下工具进行重点单元测试 单元测试,瞄准。网10。

测试框架:NUnit 4.3.2

测试套件提供了基本的覆盖范围 10次核心测试 围绕关键功能进行组织:

EstimateTss测试(6个测试):

  • 自行车和跑步运动计算
  • 不支持运动处理(返回null)
  • 边缘情况(空/零/负持续时间)
  • 缺失的运动员数据将恢复为默认值
  • 多区间可加性

估计强度因子测试(4次测试):

  • 使用夹紧进行循环和运行计算
  • 空/无支撑的运动边箱
  • 持续时间加权强度计算

真实世界场景(3个测试):

  • 典型的耐力骑行(90分钟,稳定Z2)
  • 高强度间歇训练(Z6努力的HIIT)
  • 用持续的努力奔跑

运行测试

# Run all tests
dotnet test

# Run tests with verbose output
dotnet test --verbosity detailed

# Run specific test class
dotnet test --filter "ClassName=WorkoutTssCalculatorTests"

# Run with code coverage
dotnet test /p:CollectCoverageMetrics=true

测试覆盖说明

测试套件整合了相关场景,以保持清晰度,同时减少冗余:

  • 通过参数化测试涵盖多种运动类型测试(例如,在一次测试中包含多种不受支持的运动 [TestCase])
  • 在单个综合测试中测试缺失数据场景(无FTP、无区域、零值)
  • 通过真实场景而不是孤立区域测试来测试区域变化
  • 所有边缘情况都用真实的数据范围进行了验证

贡献

欢迎提交请求和问题。请遵循标准C#和。NET编码规范。

许可证

麻省理工学院