Skip to main content
Glama
MayankKapgate

fitness-tracker-mcp

πŸ‹οΈ Fitness Tracker β€” MCP Server

μ™„μ „νžˆ μ˜€ν”„λΌμΈμœΌλ‘œ λ™μž‘ν•˜λŠ” Model Context Protocol (MCP) μ„œλ²„λ‘œ, Claude Code, Claude Desktop, Cursor λ“± MCP ν˜Έν™˜ AI ν΄λΌμ΄μ–ΈνŠΈκ°€ μš΄λ™ 기둝, 식단 맀크둜 좔적, 일일 건강 μš”μ•½ 쑰회λ₯Ό ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. λͺ¨λ“  λ°μ΄ν„°λŠ” 둜컬 SQLite λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯되며 λ„€νŠΈμ›Œν¬ μ˜μ‘΄μ„±μ΄ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€.


πŸ“– λͺ©μ°¨


Related MCP server: Nutrition MCP

πŸ’‘ μ™œ 이 ν”„λ‘œμ νŠΈμΈκ°€?

λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈμ€ λŒ€ν™”μ—λŠ” λ›°μ–΄λ‚˜μ§€λ§Œ, μ„Έμ…˜μ„ λ„˜μ–΄ μ‚¬μš©μž 데이터λ₯Ό 기본적으둜 μ˜μ†ν™”ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. Model Context Protocol은 LLM이 μ™ΈλΆ€ 도ꡬλ₯Ό ν˜ΈμΆœν•  수 있게 ν•¨μœΌλ‘œμ¨ 이 격차λ₯Ό λ©”μ›λ‹ˆλ‹€. 즉, AIκ°€ μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•΄ κ΅¬μ‘°ν™”λœ 데이터λ₯Ό 읽고, μ“°κ³ , μ‘°νšŒν•  수 μžˆλŠ” μ§„μ •ν•œ μ–΄μ‹œμŠ€ν„΄νŠΈκ°€ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈλŠ” μ‹€μš©μ μΈ MCP 톡합을 λ³΄μ—¬μ€λ‹ˆλ‹€. AI μ–΄μ‹œμŠ€ν„΄νŠΈκ°€ 직접 μ‘°μž‘ν•  수 μžˆλŠ” ν”ΌνŠΈλ‹ˆμŠ€ νŠΈλž˜μ»€μž…λ‹ˆλ‹€. AIμ—κ²Œ *"300칼둜리λ₯Ό μ†Œλͺ¨ν•œ 30λΆ„ λŸ¬λ‹μ„ κΈ°λ‘ν•΄μ€˜"*라고 λ§ν•˜λ©΄, AIκ°€ 데이터λ₯Ό κ²€μ¦ν•˜κ³  SQLite에 μ €μž₯ν•œ λ’€ 확인해 μ€λ‹ˆλ‹€. μŠ€ν”„λ ˆλ“œμ‹œνŠΈλ₯Ό μ—΄μ–΄λ³Ό ν•„μš”κ°€ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€.


✨ μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯

μ„€λͺ…

μš΄λ™ 기둝

μš΄λ™ μœ ν˜•, μ‹œκ°„, μ†Œλͺ¨ 칼둜리λ₯Ό ν¬ν•¨ν•œ μš΄λ™ μ„Έμ…˜ 기둝

맀크둜 좔적

식사별 λ˜λŠ” ν•˜λ£¨ λ‹¨μœ„λ‘œ λ‹¨λ°±μ§ˆ, νƒ„μˆ˜ν™”λ¬Ό, μ§€λ°© μ„­μ·¨λŸ‰ 기둝

일일 μš”μ•½

칼둜리 계산을 ν¬ν•¨ν•œ μš΄λ™ + μ˜μ–‘ 집계 보기

μ™„μ „ μ˜€ν”„λΌμΈ

Stdio 전솑 β€” λ„€νŠΈμ›Œν¬ 호좜 μ—†μŒ, API ν‚€ μ—†μŒ, ν΄λΌμš°λ“œ μ˜μ‘΄μ„± μ—†μŒ

μ—„κ²©ν•œ 검증

Pydantic v2 μŠ€ν‚€λ§ˆκ°€ 잘λͺ»λœ LLM 좜λ ₯을 DB에 λ„λ‹¬ν•˜κΈ° 전에 차단

SQL μΈμ μ…˜ μ•ˆμ „

λͺ¨λ“  κ³³μ—μ„œ λ§€κ°œλ³€μˆ˜ν™”λœ 쿼리 μ‚¬μš© β€” μ‚¬μš©μž μž…λ ₯이 μ›μ‹œ SQL에 λ‹Ώμ§€ μ•ŠμŒ

포괄적인 ν…ŒμŠ€νŠΈ

μŠ€ν‚€λ§ˆ 검증, DB 둜직, μ—£μ§€ μΌ€μ΄μŠ€λ₯Ό λ‹€λ£¨λŠ” 22개의 Pytest μΌ€μ΄μŠ€


🧱 기술 μŠ€νƒ

계측

기술

μš©λ„

MCP ν”„λ ˆμž„μ›Œν¬

FastMCP

Python ν•¨μˆ˜λ₯Ό stdioλ₯Ό 톡해 MCP λ„κ΅¬λ‘œ λ…ΈμΆœ

λ°μ΄ν„°λ² μ΄μŠ€

SQLite 3

가볍고 섀정이 ν•„μš” μ—†λŠ” 둜컬 μ˜μ†ν™”

검증

Pydantic v2

LLM μž…λ ₯에 λŒ€ν•œ μŠ€ν‚€λ§ˆ κ°•μ œ 및 νƒ€μž… λ³€ν™˜

ν…ŒμŠ€νŠΈ

Pytest

ν…ŒμŠ€νŠΈλ³„λ‘œ 격리된 인메λͺ¨λ¦¬ λ°μ΄ν„°λ² μ΄μŠ€

μ–Έμ–΄

Python 3.10+

핡심 λŸ°νƒ€μž„


πŸ—οΈ μ•„ν‚€ν…μ²˜ κ°œμš”

이 μ‹œμŠ€ν…œμ€ 관심사가 λͺ…ν™•νžˆ λΆ„λ¦¬λœ κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

graph TB
    subgraph Client Layer
        A["πŸ€– MCP Client<br/>(Claude Code / Claude Desktop / Cursor)"]
    end

    subgraph Transport Layer
        B["πŸ“‘ stdio<br/>(JSON-RPC over stdin/stdout)"]
    end

    subgraph MCP Server ["MCP Server (server.py)"]
        direction TB
        C["πŸ”§ FastMCP Tool Router<br/>Routes tool calls to handlers"]
        D["πŸ“‹ Pydantic Schemas<br/>WorkoutInput Β· MacrosInput Β· DailySummaryRequest"]
        E["βš™οΈ Core Business Logic<br/>insert_workout Β· insert_macros Β· fetch_daily_summary"]
        F["πŸ—„οΈ Database Layer<br/>get_connection Β· init_db"]
    end

    subgraph Storage
        G[("πŸ’Ύ SQLite<br/>fitness_tracker.db")]
    end

    A <-->|"JSON-RPC"| B
    B <-->|"Tool calls & responses"| C
    C --> D
    D -->|"Validated data"| E
    E <--> F
    F <--> G

    style A fill:#4A90D9,stroke:#2C5F8A,color:#fff
    style B fill:#F5A623,stroke:#C77E1A,color:#fff
    style C fill:#7B68EE,stroke:#5A4DB2,color:#fff
    style D fill:#50C878,stroke:#3A9458,color:#fff
    style E fill:#FF6B6B,stroke:#CC5555,color:#fff
    style F fill:#DDA0DD,stroke:#AA70AA,color:#fff
    style G fill:#87CEEB,stroke:#5F9EAF,color:#000

계측별 μ±…μž„

계측

ꡬ성 μš”μ†Œ

μ±…μž„

ν΄λΌμ΄μ–ΈνŠΈ

Claude Code / Desktop

μžμ—°μ–΄λ₯Ό MCP 도ꡬ 호좜둜 전솑

전솑

stdio (JSON-RPC)

stdin/stdout을 톡해 도ꡬ 호좜 직렬화 β€” HTTP μ—†μŒ, 포트 μ—†μŒ

λΌμš°ν„°

FastMCP

λ“€μ–΄μ˜€λŠ” 도ꡬ 이름을 Python ν•Έλ“€λŸ¬ ν•¨μˆ˜μ— λ§€μΉ­

검증

Pydantic μŠ€ν‚€λ§ˆ

DB μ ‘κ·Ό 전에 λͺ¨λ“  μž…λ ₯ ν•„λ“œλ₯Ό νŒŒμ‹± 및 검증

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직

핡심 ν•¨μˆ˜

μ‚½μž…, 집계, 칼둜리 계산 μ‹€ν–‰

μ €μž₯μ†Œ

sqlite3을 ν†΅ν•œ SQLite

단일 fitness_tracker.db νŒŒμΌμ— 데이터 μ˜μ†ν™”


πŸ”„ 데이터 흐름

μ‚¬μš©μžκ°€ *"30λΆ„ λŸ¬λ‹μ„ κΈ°λ‘ν•΄μ€˜"*라고 λ§ν–ˆμ„ λ•Œ μΌμ–΄λ‚˜λŠ” 일을 λ‹¨κ³„λ³„λ‘œ μΆ”μ ν•©λ‹ˆλ‹€:

sequenceDiagram
    participant User
    participant Client as MCP Client (Claude)
    participant Transport as stdio (JSON-RPC)
    participant Router as FastMCP Router
    participant Schema as Pydantic Validator
    participant Logic as Business Logic
    participant DB as SQLite DB

    User->>Client: "Log a 30-minute run that burned 300 calories"
    Client->>Transport: tool_call: log_workout(date, type, duration, calories)
    Transport->>Router: Deserialize JSON-RPC request
    Router->>Schema: WorkoutInput(date, type, duration, calories)

    alt Validation Fails
        Schema-->>Router: ❌ ValidationError (clear message)
        Router-->>Transport: Error response
        Transport-->>Client: Display error to user
    end

    Schema-->>Router: βœ… Validated WorkoutInput object
    Router->>Logic: insert_workout(validated_data)
    Logic->>DB: INSERT INTO workouts (date, type, duration, calories) VALUES (?, ?, ?, ?)
    DB-->>Logic: Row ID
    Logic-->>Router: {status: success, workout: {...}}
    Router-->>Transport: JSON-RPC response
    Transport-->>Client: "Logged: 30 min running β€” 300 kcal burned βœ…"
    Client-->>User: Confirmation message

πŸ—ƒοΈ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ

SQLite λ°μ΄ν„°λ² μ΄μŠ€(fitness_tracker.db)λŠ” 첫 μ‹€ν–‰ μ‹œ μžλ™μœΌλ‘œ μƒμ„±λ˜λ©° 두 개의 ν…Œμ΄λΈ”μ„ ν¬ν•¨ν•©λ‹ˆλ‹€:

erDiagram
    WORKOUTS {
        INTEGER id PK "Auto-increment"
        TEXT date "YYYY-MM-DD (NOT NULL)"
        TEXT type "e.g. running, cycling (NOT NULL)"
        REAL duration "Minutes, > 0 (NOT NULL)"
        REAL calories "kcal burned, >= 0 (NOT NULL)"
    }

    MACROS {
        INTEGER id PK "Auto-increment"
        TEXT date "YYYY-MM-DD (NOT NULL)"
        REAL protein "Grams, >= 0 (NOT NULL)"
        REAL carbs "Grams, >= 0 (NOT NULL)"
        REAL fat "Grams, >= 0 (NOT NULL)"
    }

칼둜리 계산

일일 μš”μ•½μ€ ν‘œμ€€ Atwater κ³„μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ§€ν¬λ‘œμ—μ„œ μΆ”μ • μ†Œλͺ¨ 칼둜리λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€:

$$\text{Calories} = (\text{Protein} \times 4) + (\text{Carbs} \times 4) + (\text{Fat} \times 9) ;\text{kcal}$$


πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

MCP_Project/
β”œβ”€β”€ server.py              # MCP server β€” tools, schemas, DB helpers, entrypoint
β”œβ”€β”€ test_server.py         # Pytest suite (22 tests across 6 test classes)
β”œβ”€β”€ requirements.txt       # Python dependencies (fastmcp, pydantic, pytest)
β”œβ”€β”€ fitness_tracker.db     # SQLite database (auto-created on first run)
β”œβ”€β”€ .gitignore             # Ignores venv, __pycache__, .env
β”œβ”€β”€ .env                   # Environment variables (git-ignored)
└── README.md              # This file

파일 ꡬ성

파일

쀄 수

μ„€λͺ…

server.py

~322

μ™„μ „ν•œ MCP μ„œλ²„: DB μ΄ˆκΈ°ν™”, Pydantic λͺ¨λΈ, CRUD μ—°μ‚°, FastMCP 도ꡬ μ •μ˜, stdio μ§„μž…μ 

test_server.py

~265

6개 클래슀의 22개 ν…ŒμŠ€νŠΈ β€” μŠ€ν‚€λ§ˆ 검증(유효 + 무효 μž…λ ₯), DB μ‚½μž…, 일일 집계, λ‚ μ§œ 격리, SQL μΈμ μ…˜ μ•ˆμ „μ„±

requirements.txt

3

fastmcp, pydantic, pytest


πŸš€ μ‹œμž‘ν•˜κΈ°

사전 μš”κ΅¬ 사항

  • Python 3.10+ μ„€μΉ˜

  • pip νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €

1. μ €μž₯μ†Œ 클둠

git clone https://github.com/MayankKapgate/fitness-tracker-mcp.git
cd MCP_Project

2. 가상 ν™˜κ²½ 생성 및 ν™œμ„±ν™” (ꢌμž₯)

# Windows
python -m venv myvenv
myvenv\Scripts\activate

# macOS / Linux
python3 -m venv myvenv
source myvenv/bin/activate

3. μ˜μ‘΄μ„± μ„€μΉ˜

pip install -r requirements.txt

4. ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ μ‹€ν–‰

pytest test_server.py -v

22개의 ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν•˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ βœ…

5. μ„œλ²„ μ‹œμž‘ (독립 μ‹€ν–‰)

python server.py

μ°Έκ³ : μ„œλ²„λŠ” stdio 전솑을 μ‚¬μš©ν•©λ‹ˆλ‹€ β€” stdinμ—μ„œ JSON‑RPCλ₯Ό 읽고 stdout으둜 μ”λ‹ˆλ‹€. μ…Έ ν”„λ‘¬ν”„νŠΈκ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” MCP ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©ν•˜λ„λ‘ μ„€κ³„λœ λ™μž‘μž…λ‹ˆλ‹€.


πŸ”Œ MCP ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²°

Claude Code

ν„°λ―Έλ„μ—μ„œ μ„œλ²„λ₯Ό ν•œ 번 λ“±λ‘ν•˜μ„Έμš”:

claude mcp add fitness-tracker --transport stdio -- python server.py

팁: Claude Codeκ°€ ν”„λ‘œμ νŠΈ λ””λ ‰ν„°λ¦¬μ—μ„œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” 경우 전체 경둜λ₯Ό μ‚¬μš©ν•˜μ„Έμš”:

claude mcp add fitness-tracker --transport stdio -- python "C:\Users\Mayan\OneDrive\Documents\MCP_Project\server.py"

Claude Desktop

claude_desktop_config.json에 λ‹€μŒμ„ μΆ”κ°€ν•˜μ„Έμš”:

{
  "mcpServers": {
    "fitness-tracker": {
      "command": "python",
      "args": ["C:\\Users\\Mayan\\OneDrive\\Documents\\MCP_Project\\server.py"],
      "transport": "stdio"
    }
  }
}

기타 MCP ν΄λΌμ΄μ–ΈνŠΈ

MCP ν˜Έν™˜ ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • 전솑: stdio

  • λͺ…λ Ή: python server.py (λ˜λŠ” server.py의 전체 경둜)


πŸ› οΈ 도ꡬ μ°Έμ‘° (API)

μ„œλ²„λŠ” 3개의 MCP 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€:

1. log_workout

단일 μš΄λ™ μ„Έμ…˜μ„ κΈ°λ‘ν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

νƒ€μž…

μ œμ•½ 쑰건

μ˜ˆμ‹œ

date

string

ISO 8601 (YYYY-MM-DD)

"2026-08-04"

type

string

1–100자

"running"

duration

float

> 0 (λΆ„)

30.0

calories

float

β‰₯ 0 (kcal)

300.0

λ°˜ν™˜κ°’:

{
  "status": "success",
  "workout": {
    "id": 1,
    "date": "2026-08-04",
    "type": "running",
    "duration": 30.0,
    "calories": 300.0
  }
}

2. log_macros

식사 λ˜λŠ” ν•˜λ£¨ μ „μ²΄μ˜ 식이 λ§€ν¬λ‘œμ˜μ–‘μ†Œλ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

νƒ€μž…

μ œμ•½ 쑰건

μ˜ˆμ‹œ

date

string

ISO 8601 (YYYY-MM-DD)

"2026-08-04"

protein

float

β‰₯ 0 (그램)

150.0

carbs

float

β‰₯ 0 (그램)

200.0

fat

float

β‰₯ 0 (그램)

60.0

λ°˜ν™˜κ°’:

{
  "status": "success",
  "macros": {
    "id": 1,
    "date": "2026-08-04",
    "protein": 150.0,
    "carbs": 200.0,
    "fat": 60.0
  }
}

3. get_daily_summary

νŠΉμ • λ‚ μ§œμ˜ μš΄λ™ 및 μ˜μ–‘ 톡합 μš”μ•½μ„ μ‘°νšŒν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

νƒ€μž…

μ œμ•½ 쑰건

μ˜ˆμ‹œ

date

string

ISO 8601 (YYYY-MM-DD)

"2026-08-04"

λ°˜ν™˜κ°’:

{
  "date": "2026-08-04",
  "workouts": {
    "count": 2,
    "entries": [
      {"id": 1, "date": "2026-08-04", "type": "running", "duration": 30.0, "calories": 300.0},
      {"id": 2, "date": "2026-08-04", "type": "weights", "duration": 45.0, "calories": 250.0}
    ],
    "total_duration_min": 75.0,
    "total_calories_burned": 550.0
  },
  "macros": {
    "count": 1,
    "entries": [
      {"id": 1, "date": "2026-08-04", "protein": 150.0, "carbs": 200.0, "fat": 60.0}
    ],
    "total_protein_g": 150.0,
    "total_carbs_g": 200.0,
    "total_fat_g": 60.0,
    "total_calories_consumed": 1940.0
  }
}

πŸ’¬ μ‚¬μš© μ˜ˆμ‹œ

연결이 μ™„λ£Œλ˜λ©΄ AI μ–΄μ‹œμŠ€ν„΄νŠΈμ™€ μžμ—°μŠ€λŸ½κ²Œ λŒ€ν™”ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€:

μ‚¬μš©μž 말

ν˜ΈμΆœλ˜λŠ” 도ꡬ

κ²°κ³Ό

"30λΆ„ λŸ¬λ‹μ„ ν–ˆκ³  300칼둜리λ₯Ό μ†Œλͺ¨ν–ˆμ–΄"

log_workout

였늘 λ‚ μ§œλ‘œ μš΄λ™ μ €μž₯

"점심 κΈ°λ‘ν•΄μ€˜: λ‹¨λ°±μ§ˆ 40g, νƒ„μˆ˜ν™”λ¬Ό 60g, μ§€λ°© 15g"

log_macros

맀크둜 ν•­λͺ© ν•˜λ‚˜ 기둝

"였늘 λ‚˜λŠ” μ–΄λ• μ–΄?"

get_daily_summary

ν˜„μž¬ λ‚ μ§œμ˜ 집계 합계 λ°˜ν™˜

"8μ›” 4일 μš΄λ™μ€ λ­μ˜€μ§€?"

get_daily_summary

2026-08-04 데이터 쑰회


πŸ§ͺ ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ(test_server.py)λŠ” 6개의 ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€μ— 걸친 22개의 ν…ŒμŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜λ©°, ν…ŒμŠ€νŠΈλ§ˆλ‹€ 격리된 μž„μ‹œ SQLite λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€:

ν…ŒμŠ€νŠΈ 클래슀

ν…ŒμŠ€νŠΈ 수

λ‹€λ£¨λŠ” λ‚΄μš©

TestWorkoutSchema

10

μœ νš¨ν•œ μš΄λ™, 잘λͺ»λœ λ‚ μ§œ, 음수/0 지속 μ‹œκ°„, 음수 칼둜리, 빈/λ„ˆλ¬΄ κΈ΄ μœ ν˜•, λˆ„λ½λœ ν•„λ“œ, 잘λͺ»λœ νƒ€μž…

TestMacrosSchema

6

μœ νš¨ν•œ 맀크둜, 잘λͺ»λœ λ‚ μ§œ, 음수 λ‹¨λ°±μ§ˆ/νƒ„μˆ˜ν™”λ¬Ό/μ§€λ°©, λˆ„λ½λœ ν•„λ“œ

TestDailySummarySchema

2

μœ νš¨ν•œ μš”μ²­, 잘λͺ»λœ λ‚ μ§œ

TestWorkoutDB

3

μ‚½μž… 및 쑰회, 닀쀑 μ‚½μž…, SQL μΈμ μ…˜ μ•ˆμ „μ„±

TestMacrosDB

2

μ‚½μž… 및 쑰회, λ‚ μ§œ ν•„λ“œλ₯Ό ν†΅ν•œ SQL μΈμ μ…˜

TestDailySummary

3

빈 λ‚ μ§œ, 집계가 ν¬ν•¨λœ 데이터가 μžˆλŠ” λ‚ μ§œ, λ‚ μ§œ κ°„ 격리

ν…ŒμŠ€νŠΈ μ‹€ν–‰

# Run all tests with verbose output
pytest test_server.py -v

# Run a specific test class
pytest test_server.py::TestWorkoutSchema -v

# Run with coverage (requires pytest-cov)
pip install pytest-cov
pytest test_server.py --cov=server --cov-report=term-missing

πŸ”’ λ³΄μ•ˆ 및 μ•ˆμ „

우렀 사항

μ™„ν™” 방법

SQL μΈμ μ…˜

λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€ μΏΌλ¦¬λŠ” λ§€κ°œλ³€μˆ˜ν™”λœ ? ν”Œλ ˆμ΄μŠ€ν™€λ”λ₯Ό μ‚¬μš© β€” μ‚¬μš©μž μž…λ ₯이 SQL λ¬Έμžμ—΄μ— μ‚½μž…λ˜μ§€ μ•ŠμŒ

잘λͺ»λœ LLM 좜λ ₯

λͺ¨λ“  도ꡬ μž…λ ₯은 λ°μ΄ν„°λ² μ΄μŠ€μ— λ„λ‹¬ν•˜κΈ° 전에 μ—„κ²©ν•œ ν•„λ“œ 검증기가 μžˆλŠ” Pydantic v2 μŠ€ν‚€λ§ˆλ₯Ό 톡과

λ‚ μ§œ 검증

μ‚¬μš©μž μ •μ˜ @field_validatorκ°€ ISO 8601 μ€€μˆ˜λ₯Ό 보μž₯ν•˜λ©°, "yesterday" λ˜λŠ” "'; DROP TABLE" 같은 잘λͺ»λœ λ¬Έμžμ—΄μ€ 거뢀됨

νƒ€μž… λ³€ν™˜

Pydantic의 엄격 λͺ¨λ“œκ°€ μ‹€μ œλ‘œ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” νƒ€μž…(예: float ν•„λ“œμ— "slow")을 감지

λ„€νŠΈμ›Œν¬ λ…ΈμΆœ

stdio 전솑 β€” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ 0, μ—΄λ¦° 포트 μ—†μŒ, API ν‚€ λΆˆν•„μš”

데이터 ν”„λΌμ΄λ²„μ‹œ

λͺ¨λ“  λ°μ΄ν„°λŠ” μ‚¬μš©μž λ¨Έμ‹ μ˜ 둜컬 fitness_tracker.db νŒŒμΌμ—λ§Œ μ €μž₯ β€” μ‹œμŠ€ν…œ λ°–μœΌλ‘œ λ‚˜κ°€λŠ” 데이터 μ—†μŒ


πŸ“ λΌμ΄μ„ μŠ€

MIT β€” 자유둭게 μ‚¬μš©ν•˜μ„Έμš”.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A personal fitness tracking server that enables logging and querying workouts, nutrition, and body metrics through a local SQLite database. Integrates with OpenNutrition MCP for food logging and supports exercise history tracking for workout progression.
    17
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A filesystem-based MCP server that turns any MCP-capable AI agent into a conversational calorie and protein tracker with natural-language estimates, confidence-aware logging, daily/weekly progress, food-history search, and export, working offline with local fallback data.
    37 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Local-first nutrition tracker MCP server for Hermes, enabling food, alias, recipe, and meal log management with SQLite persistence.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Personal workout coach MCP server that logs exercises in natural language, tracks progress with SQLite, and provides coaching signals like estimated 1RM and volume trends.
    6
    -