Pierre MCP Server

A fitness data platform that aggregates data from providers like Strava and Fitbit, offering secure B2B API access.

Backend CI Cross-Platform Frontend Tests SDK Tests MCP Compliance Mobile Tests

Pierre Fitness Platform connects AI assistants to fitness data from Strava, Garmin, Fitbit, WHOOP, COROS, and Terra (150+ wearables). Implements Model Context Protocol (MCP), A2A protocol, OAuth 2.0, and REST APIs for Claude, ChatGPT, and other AI assistants.

Intelligence System

Sports science-based fitness analysis including training load management, race predictions, sleep and recovery scoring, nutrition planning, and pattern detection.

See Intelligence Methodology, Nutrition Methodology, and Mobility Methodology for details.

Features

  • MCP Protocol: JSON-RPC 2.0 for AI assistant integration
  • A2A Protocol: Agent-to-agent communication
  • OAuth 2.0 Server: RFC 7591 dynamic client registration
  • 53 MCP Tools: Activities, goals, analysis, sleep, recovery, nutrition, recipes, mobility, configuration
  • TypeScript SDK: pierre-mcp-client npm package
  • Pluggable Providers: Compile-time provider selection
  • TOON Format: Token-Oriented Object Notation output for ~40% LLM token reduction (spec)

Provider Support

ProviderFeature FlagCapabilities
Stravaprovider-stravaActivities, Stats, Routes
Garminprovider-garminActivities, Sleep, Health
WHOOPprovider-whoopSleep, Recovery, Strain
Fitbitprovider-fitbitActivities, Sleep, Health
COROSprovider-corosActivities, Sleep, Recovery
Terraprovider-terra150+ wearables, Activities, Sleep, Health
Syntheticprovider-syntheticDevelopment/Testing

Build with specific providers:

cargo build --release                                                    # all providers
cargo build --release --no-default-features --features "sqlite,provider-strava"  # strava only

See Build Configuration for provider architecture details.

Modular Architecture

Pierre uses compile-time feature flags for modular deployments. Build only what you need.

Server Profiles

Pre-configured bundles for common deployment scenarios:

ProfileDescriptionBinary Size
server-fullAll protocols, transports, clients (default)~50MB
server-mcp-stdioMCP protocol + stdio transport (desktop clients)~35MB
server-mcp-bridgeMCP + A2A protocols, web transports~40MB
server-mobile-backendREST + MCP, mobile client routes~42MB
server-saas-fullREST + MCP, web + admin clients~45MB
# Build for desktop MCP clients (minimal)
cargo build --release --no-default-features --features "sqlite,server-mcp-stdio"

# Build for SaaS deployment
cargo build --release --no-default-features --features "postgresql,server-saas-full"

Feature Categories

CategoryFeaturesDescription
Protocolsprotocol-rest, protocol-mcp, protocol-a2aAPI protocols
Transportstransport-http, transport-websocket, transport-sse, transport-stdioCommunication layers
Clientsclient-web, client-admin, client-mobileRoute groups
Toolstools-fitness-core, tools-wellness, tools-allMCP tool categories

See Build Configuration for detailed feature documentation.

What You Can Ask

  • "Calculate my daily nutrition needs for marathon training"
  • "Analyze my training load - do I need a recovery day?"
  • "Compare my three longest runs this month"
  • "Analyze this meal: 150g chicken, 200g rice, 100g broccoli"
  • "What's my predicted marathon time based on recent runs?"

See Tools Reference for the 53 available MCP tools.

Quick Start

git clone https://github.com/Async-IO/pierre_mcp_server.git
cd pierre_mcp_server
cp .envrc.example .envrc  # edit with your settings
direnv allow              # or: source .envrc

# Full dev environment: reset DB, seed data, start all 3 servers
./bin/setup-db-with-seeds-and-oauth-and-start-servers.sh

This single command:

  • Resets database with fresh migrations
  • Seeds admin, AI coaches, demo users, test data, mobility data
  • Starts Pierre server (8081), web frontend (3000), Expo mobile (8082)
  • Displays all credentials, tokens, and log file paths

See Getting Started for detailed setup.

MCP Client Configuration

Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "pierre-fitness": {
      "command": "npx",
      "args": ["-y", "pierre-mcp-client@next", "--server", "http://localhost:8081"]
    }
  }
}

The SDK handles OAuth 2.0 authentication automatically. See SDK Documentation.

Available MCP Tools

53 tools organized in 9 categories:

CategoryToolsDescription
Core Fitness6Activities, athlete profile, provider connections
Goals4Goal setting, suggestions, feasibility, progress
Analysis10Metrics, trends, patterns, predictions, recommendations
Sleep & Recovery5Sleep quality, recovery score, rest recommendations
Nutrition5BMR/TDEE, macros, USDA food search, meal analysis
Recipes7Training-aware meal planning and recipe storage
Mobility6Stretching exercises, yoga poses, recovery sequences
Configuration6User settings, training zones, profiles
Fitness Config4Fitness parameters, thresholds

Full tool reference: Tools Reference

Server Management

# Full development setup (recommended for first run or fresh start)
./bin/setup-db-with-seeds-and-oauth-and-start-servers.sh

# Individual services
./bin/start-server.sh     # start backend only (port 8081)
./bin/stop-server.sh      # stop backend
./bin/start-frontend.sh   # start web dashboard (port 3000)

The full setup script does everything:

  1. Resets database with fresh migrations
  2. Seeds admin user, AI coaches, demo users, test data, mobility data
  3. Starts Pierre server, web frontend, and Expo mobile
  4. Displays all credentials, tokens, and log file paths

User Portal Dashboard

Web-based dashboard for users and administrators at http://localhost:5173.

Features

  • Role-Based Access: super_admin, admin, user roles with permission hierarchy
  • User Registration: Self-registration with admin approval workflow
  • API Key Management: Create, view, deactivate API keys
  • MCP Tokens: Generate tokens for Claude Desktop and AI assistants
  • Usage Analytics: Request patterns, tool usage charts
  • Super Admin Impersonation: View dashboard as any user for support

User Roles

RoleCapabilities
UserOwn API keys, MCP tokens, analytics
Admin+ User approval, all users analytics
Super Admin+ Impersonation, admin tokens, system config

First Admin Setup

cargo run --bin pierre-cli -- user create \
  --email admin@example.com \
  --password SecurePassword123 \
  --super-admin

See Frontend Documentation for detailed dashboard documentation.

Mobile App

React Native mobile app for iOS and Android with conversational AI interface.

Features

  • AI Chat Interface: Conversational UI with markdown rendering and real-time streaming
  • Fitness Provider Integration: Connect to Strava, Garmin, Fitbit, WHOOP, COROS via OAuth
  • Activity Tracking: View and analyze your fitness activities
  • Training Insights: Get AI-powered training recommendations

Quick Start

cd frontend-mobile
bun install
bun start   # Start Expo development server
bun run ios # Run on iOS Simulator

See Mobile App README and Mobile Development Guide.

AI Coaches

Pierre includes an AI coaching system with 9 default coaching personas and support for user-created personalized coaches.

Default Coaches

The system includes 9 AI coaching personas across 5 categories:

CategoryIconCoaches
Training🏃Endurance Coach, Speed Coach
Nutrition🥗Sports Nutritionist, Hydration Specialist
Recovery😴Recovery Specialist, Sleep Coach
Recipes👨‍🍳Performance Chef, Meal Prep Expert
Analysis📊Data Analyst

Default coaches are seeded automatically by ./bin/setup-and-start.sh and are visible to all users.

Personalized Coaches

Users can create their own AI coaches with custom:

  • Name and personality
  • System prompts and behavior
  • Category assignment
  • Avatar customization

User-created coaches appear in a "Personalized" section above system coaches and are private to each user.

Coach Seeder

To seed or refresh the default coaches:

cargo run --bin seed-coaches

This creates the 9 default AI coaching personas if they don't already exist.

Documentation

Reference

Development

Components

Methodology

Testing

cargo test                        # all tests
./scripts/ci/lint-and-test.sh     # full CI suite
./scripts/ci/pre-push-validate.sh # tiered validation before push

See Testing Documentation.

Development Workflow

Before Committing

# 1. Format code
cargo fmt

# 2. Architectural validation (includes security checks in CI)
./scripts/ci/architectural-validation.sh

# 3. Clippy (Cargo.toml defines all lint levels)
cargo clippy -p pierre_mcp_server --all-targets

# 4. Run relevant tests (always specify --test for speed)
cargo test --test <test_file> <test_pattern> -- --nocapture

Security Skills (Before Pushing Security-Sensitive Changes)

Run these when modifying auth, OAuth, admin, database, or multi-tenant code:

SkillCommandWhat It Checks
Security Review./scripts/ci/security-review.shAuthorization boundaries, tenant isolation, logging hygiene, SQL injection, XSS
Input Validation./scripts/ci/check-input-validation.shDivision-by-zero, pagination bounds, cache key completeness, numeric ranges
Architecture./scripts/ci/architectural-validation.shPlaceholder detection, error handling, algorithm DI, unsafe code, secret patterns

These scripts run automatically in CI via the code-quality job (gates all other jobs). Run them locally when:

  • Adding/modifying API endpoints or MCP tools
  • Changing database queries or cache operations
  • Modifying OAuth flows or authentication logic
  • Adding math operations on user-supplied input

Before Pushing

# 1. Enable git hooks (once per clone)
git config core.hooksPath .githooks

# 2. Run validation (creates marker valid for 15 min)
./scripts/ci/pre-push-validate.sh

# 3. Push (hook checks for valid marker)
git push

The pre-push hook blocks pushes without a valid marker. This decouples test execution from the push to avoid SSH timeout issues.

Contributing

See Contributing Guide.

License

Dual-licensed under Apache 2.0 or MIT.

Related Servers