Framezone
Your life dashboard for AI: tasks, habits, goals, budgets, workouts, nutrition, journal, notes.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"framezone": {
"url": "https://framezone.app/mcp"
}
}
}Remote endpoints
https://framezone.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (50)
๐ขlist_tasks(status, priority, project_id, is_top3, include_archived)
List tasks, optionally filtered by status, priority, project, or top3 flag.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by status",
"enum": [
"pending",
"in_progress",
"completed"
],
"type": "string"
},
"priority": {
"description": "Filter by priority: 1=high, 2=medium, 3=low",
"enum": [
1,
2,
3
],
"type": "integer"
},
"project_id": {
"description": "Filter by project ID",
"type": "integer"
},
"is_top3": {
"description": "Only show Top 3 focus tasks",
"type": "boolean"
},
"include_archived": {
"description": "Include archived tasks (default: false)",
"type": "boolean"
}
}
}๐กcreate_task(title, description, priority, status, due_date, ...)
Create a new task with optional project, priority, due date, and recurrence.
Input Schema
{
"type": "object",
"properties": {
"title": {
"description": "Task title",
"type": "string"
},
"description": {
"description": "Task description",
"type": "string"
},
"priority": {
"description": "Priority: 1=high, 2=medium, 3=low",
"enum": [
1,
2,
3
],
"type": "integer"
},
"status": {
"description": "Initial status",
"enum": [
"pending",
"in_progress"
],
"type": "string"
},
"due_date": {
"description": "Due date (Y-m-d format)",
"type": "string"
},
"is_top3": {
"description": "Mark as Top 3 focus task (max 3 allowed)",
"type": "boolean"
},
"project_id": {
"description": "Assign to project by ID",
"type": "integer"
},
"recurrence": {
"description": "Recurrence pattern",
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
}
},
"required": [
"title"
]
}๐กupdate_task(task_id, title, description, priority, status, ...)
Update an existing task. Only provided fields are changed.
Input Schema
{
"type": "object",
"properties": {
"task_id": {
"description": "ID of the task to update",
"type": "integer"
},
"title": {
"description": "New title",
"type": "string"
},
"description": {
"description": "New description",
"type": "string"
},
"priority": {
"description": "Priority: 1=high, 2=medium, 3=low",
"enum": [
1,
2,
3
],
"type": "integer"
},
"status": {
"description": "New status",
"enum": [
"pending",
"in_progress"
],
"type": "string"
},
"due_date": {
"description": "New due date (Y-m-d)",
"type": "string"
},
"is_top3": {
"description": "Set Top 3 status",
"type": "boolean"
},
"project_id": {
"description": "Assign to project by ID",
"type": "integer"
}
},
"required": [
"task_id"
]
}โชcomplete_task(task_id)
Toggle a task between completed and pending. Cascades to subtasks and handles recurrence.
Input Schema
{
"type": "object",
"properties": {
"task_id": {
"description": "ID of the task to complete/uncomplete",
"type": "integer"
}
},
"required": [
"task_id"
]
}๐ดdelete_task(task_id)
Soft-delete a task (can be restored later).
Input Schema
{
"type": "object",
"properties": {
"task_id": {
"description": "ID of the task to delete",
"type": "integer"
}
},
"required": [
"task_id"
]
}๐ขlist_habits(date)
List active habits with the value logged and done status for a date, plus current streaks. Streaks count from yesterday while today is still open; times_per_week habits have weekly streaks (streak_unit=weeks).
Input Schema
{
"type": "object",
"properties": {
"date": {
"description": "Date to check (Y-m-d, defaults to today)",
"type": "string"
}
}
}๐กcreate_habit(name, tracking_type, target_value, unit, target_duration, ...)
Create a new habit. Tracking types: check (daily toggle), count (hit a number), duration (minutes), times_per_week (weekly frequency).
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Habit name",
"type": "string"
},
"tracking_type": {
"description": "Tracking type (default: check)",
"enum": [
"check",
"count",
"duration",
"times_per_week"
],
"type": "string"
},
"target_value": {
"description": "Target count value (for count type)",
"type": "integer"
},
"unit": {
"description": "Unit label (e.g., \"pages\", \"glasses\")",
"type": "string"
},
"target_duration": {
"description": "Target duration in minutes (for duration type, 5-480)",
"type": "integer"
},
"times_per_week": {
"description": "Times per week target (for times_per_week type, 1-7)",
"type": "integer"
},
"time_of_day": {
"description": "When during the day",
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
},
"icon": {
"description": "Lucide icon name (lowercase, dashes), e.g. book-open",
"type": "string"
},
"color": {
"description": "Color as #rrggbb, e.g. #10AC84",
"type": "string"
}
},
"required": [
"name"
]
}๐กupdate_habit(habit_id, name, tracking_type, target_value, unit, ...)
Update an existing habit. Only provided fields are changed.
Input Schema
{
"type": "object",
"properties": {
"habit_id": {
"description": "ID of the habit to update",
"type": "integer"
},
"name": {
"description": "New habit name",
"type": "string"
},
"tracking_type": {
"description": "New tracking type",
"enum": [
"check",
"count",
"duration",
"times_per_week"
],
"type": "string"
},
"target_value": {
"description": "New target count value",
"type": "integer"
},
"unit": {
"description": "New unit label",
"type": "string"
},
"target_duration": {
"description": "New target duration in minutes (5-480)",
"type": "integer"
},
"times_per_week": {
"description": "New times per week target (1-7)",
"type": "integer"
},
"time_of_day": {
"description": "When during the day",
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
},
"icon": {
"description": "Lucide icon name (lowercase, dashes), e.g. book-open",
"type": "string"
},
"color": {
"description": "Color as #rrggbb, e.g. #10AC84",
"type": "string"
},
"active": {
"description": "Enable or disable the habit",
"type": "boolean"
}
},
"required": [
"habit_id"
]
}โชlog_habit(habit_id, date, value)
Log a habit entry for a date. Sets the value for a day (0 clears it). Without a value the day is marked fully done.
Input Schema
{
"type": "object",
"properties": {
"habit_id": {
"description": "ID of the habit",
"type": "integer"
},
"date": {
"description": "Date to log (Y-m-d, defaults to today, cannot be in the future)",
"type": "string"
},
"value": {
"description": "Value to set for that day (default: the habit's full daily target, i.e. done). 0 clears the day. Count/duration habits are only done when value >= target.",
"type": "number"
}
},
"required": [
"habit_id"
]
}๐ขlist_goals(status, category)
List goals with progress, type, and status. Supports filtering by status or category.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by status",
"enum": [
"active",
"paused",
"completed",
"abandoned"
],
"type": "string"
},
"category": {
"description": "Filter by category",
"type": "string"
}
}
}๐กcreate_goal(title, description, category, goal_type, target_date, ...)
Create a new goal. Types: milestone (checklist), numeric (value tracking), habit, vision.
Input Schema
{
"type": "object",
"properties": {
"title": {
"description": "Goal title",
"type": "string"
},
"description": {
"description": "Goal description",
"type": "string"
},
"category": {
"description": "Category (e.g., Health, Career, Finance)",
"type": "string"
},
"goal_type": {
"description": "Type",
"enum": [
"milestone",
"numeric",
"habit",
"vision"
],
"type": "string"
},
"target_date": {
"description": "Target date (Y-m-d)",
"type": "string"
},
"target_value_num": {
"description": "Target value (for numeric goals)",
"type": "number"
},
"unit": {
"description": "Unit of measurement (for numeric goals)",
"type": "string"
},
"current_value": {
"description": "Current value (numeric goals, >= 0)",
"type": "number"
},
"start_value": {
"description": "Starting value; defaults to current_value. Lets goals that go down (90 -> 80 kg) show progress",
"type": "number"
},
"milestones": {
"description": "Milestones array [{title: \"...\"}] (for milestone goals)",
"type": "array"
},
"priority": {
"description": "Priority: 1=high, 2=medium, 3=low",
"enum": [
1,
2,
3
],
"type": "integer"
}
},
"required": [
"title"
]
}๐กupdate_goal(goal_id, title, description, status, current_value, ...)
Update a goal: change status, progress, toggle milestones, or add a progress note.
Input Schema
{
"type": "object",
"properties": {
"goal_id": {
"description": "Goal ID",
"type": "integer"
},
"title": {
"description": "New title",
"type": "string"
},
"description": {
"description": "New description",
"type": "string"
},
"status": {
"description": "New status",
"enum": [
"active",
"paused",
"completed",
"abandoned"
],
"type": "string"
},
"current_value": {
"description": "Current value (for numeric goals, >= 0)",
"type": "number"
},
"start_value": {
"description": "Value the goal started from; progress is measured from it (use for goals that go down, e.g. 90 -> 80 kg)",
"type": "number"
},
"target_value_num": {
"description": "Target value (numeric and habit goals)",
"type": "number"
},
"toggle_milestone": {
"description": "Toggle milestone by index (0-based). Ticking the last open one completes the goal; unticking reopens it.",
"type": "integer"
},
"note": {
"description": "Progress update note (saved in goal timeline)",
"type": "string"
},
"target_date": {
"description": "New target date (Y-m-d)",
"type": "string"
},
"priority": {
"description": "Priority: 1=high, 2=medium, 3=low",
"enum": [
1,
2,
3
],
"type": "integer"
}
},
"required": [
"goal_id"
]
}๐ขlist_projects(status, tier, include_archived)
List projects with task counts, tier, status, and linked goal.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by status. Archived projects are excluded unless you ask for them explicitly.",
"enum": [
"active",
"paused",
"completed",
"archived"
],
"type": "string"
},
"tier": {
"description": "Filter by tier",
"enum": [
"A",
"B",
"C"
],
"type": "string"
},
"include_archived": {
"description": "Include archived projects in an unfiltered list (default: false)",
"type": "boolean"
}
}
}๐กcreate_project(name, description, tier, status, url, ...)
Create a new project with tier (A/B/C), optional goal link, and target date.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Project name",
"type": "string"
},
"description": {
"description": "Project description",
"type": "string"
},
"tier": {
"description": "Priority tier",
"enum": [
"A",
"B",
"C"
],
"type": "string"
},
"status": {
"description": "Initial status",
"enum": [
"active",
"paused"
],
"type": "string"
},
"url": {
"description": "Project URL",
"type": "string"
},
"goal_id": {
"description": "Link to a goal by ID",
"type": "integer"
},
"target_date": {
"description": "Target completion date (Y-m-d)",
"type": "string"
},
"color": {
"description": "Color hex code (e.g., #3B82F6)",
"type": "string"
},
"icon": {
"description": "Lucide icon name",
"type": "string"
}
},
"required": [
"name"
]
}๐กupdate_project(project_id, name, description, tier, status, ...)
Update a project: change name, tier, status, goal link, or target date.
Input Schema
{
"type": "object",
"properties": {
"project_id": {
"description": "Project ID",
"type": "integer"
},
"name": {
"description": "New name",
"type": "string"
},
"description": {
"description": "New description",
"type": "string"
},
"tier": {
"description": "New tier",
"enum": [
"A",
"B",
"C"
],
"type": "string"
},
"status": {
"description": "New status",
"enum": [
"active",
"paused",
"completed",
"archived"
],
"type": "string"
},
"url": {
"description": "Project URL",
"type": "string"
},
"goal_id": {
"description": "Link to goal by ID (0 to unlink)",
"type": "integer"
},
"target_date": {
"description": "Target date (Y-m-d)",
"type": "string"
},
"color": {
"description": "Color hex",
"type": "string"
},
"icon": {
"description": "Lucide icon name",
"type": "string"
}
},
"required": [
"project_id"
]
}๐ขget_daily_entry(date)
Get the daily journal entry for a date: mood, energy, focus, morning/evening notes.
Input Schema
{
"type": "object",
"properties": {
"date": {
"description": "Date to get (Y-m-d, defaults to today)",
"type": "string"
}
}
}๐กupdate_daily_entry(date, mood, energy, focus_text, focus_completed, ...)
Update the daily journal: set mood (1-5), energy (1-5), focus text, morning/evening notes.
Input Schema
{
"type": "object",
"properties": {
"date": {
"description": "Date to update (Y-m-d, defaults to today)",
"type": "string"
},
"mood": {
"description": "Mood rating 1-5",
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
"energy": {
"description": "Energy rating 1-5",
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
"focus_text": {
"description": "Today's focus/intention text (max 255 characters)",
"type": "string"
},
"focus_completed": {
"description": "Whether the focus was achieved",
"type": "boolean"
},
"morning_note": {
"description": "Morning journal note",
"type": "string"
},
"evening_note": {
"description": "Evening reflection note",
"type": "string"
}
}
}๐ขlist_notes(search, tag, limit)
List notes, optionally filtered by search query or tag. Returns title, tags, and truncated body.
Input Schema
{
"type": "object",
"properties": {
"search": {
"description": "Search query (matches title and body)",
"type": "string"
},
"tag": {
"description": "Filter by tag name",
"type": "string"
},
"limit": {
"description": "Max results (default: 20, max: 50)",
"type": "integer"
}
}
}๐กcreate_note(title, body, tags, project_id, is_pinned)
Create a new note with title, body text, and optional tags.
Input Schema
{
"type": "object",
"properties": {
"title": {
"description": "Note title",
"type": "string"
},
"body": {
"description": "Note body (plain text)",
"type": "string"
},
"tags": {
"description": "Tags array",
"items": {
"type": "string"
},
"type": "array"
},
"project_id": {
"description": "Link to project by ID",
"type": "integer"
},
"is_pinned": {
"description": "Pin this note",
"type": "boolean"
}
},
"required": [
"title",
"body"
]
}๐ดdelete_note(note_id)
Soft-delete a note.
Input Schema
{
"type": "object",
"properties": {
"note_id": {
"description": "ID of the note to delete",
"type": "integer"
}
},
"required": [
"note_id"
]
}๐ขlist_books(status)
List books with optional status filter. Returns title, author, status, progress, and rating.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by status",
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string"
}
}
}๐กcreate_book(title, author, pages, status, rating, ...)
Add a book to your library. Set status to "reading", "wishlist", "to_check", etc.
Input Schema
{
"type": "object",
"properties": {
"title": {
"description": "Book title",
"type": "string"
},
"author": {
"description": "Author name",
"type": "string"
},
"pages": {
"description": "Total pages",
"type": "integer"
},
"status": {
"description": "Reading status",
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string"
},
"rating": {
"description": "Rating 1-5",
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
"notes": {
"description": "Personal notes about the book",
"type": "string"
},
"tags": {
"description": "Tags",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"title"
]
}๐กupdate_book(book_id, title, author, status, rating, ...)
Update a book: change status, rating, notes, or update reading progress (current page).
Input Schema
{
"type": "object",
"properties": {
"book_id": {
"description": "Book ID",
"type": "integer"
},
"title": {
"description": "New title",
"type": "string"
},
"author": {
"description": "New author",
"type": "string"
},
"status": {
"description": "New status",
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string"
},
"rating": {
"description": "Rating 1-5",
"enum": [
1,
2,
3,
4,
5
],
"type": "integer"
},
"current_page": {
"description": "Current page (updates reading progress)",
"type": "integer"
},
"notes": {
"description": "Personal notes",
"type": "string"
},
"tags": {
"description": "Tags",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"book_id"
]
}๐ดdelete_book(book_id)
Delete a book from the library.
Input Schema
{
"type": "object",
"properties": {
"book_id": {
"description": "ID of the book to delete",
"type": "integer"
}
},
"required": [
"book_id"
]
}๐ขlist_quotes(book_id, favorites_only)
List saved quotes, optionally filtered by book or favorites only.
Input Schema
{
"type": "object",
"properties": {
"book_id": {
"description": "Filter by book ID",
"type": "integer"
},
"favorites_only": {
"description": "Only show favorites",
"type": "boolean"
}
}
}๐กcreate_quote(body, author, source, book_id, is_favorite, ...)
Save a quote with author and optional book link.
Input Schema
{
"type": "object",
"properties": {
"body": {
"description": "The quote text",
"type": "string"
},
"author": {
"description": "Who said/wrote it",
"type": "string"
},
"source": {
"description": "Source (book title, speech, etc.)",
"type": "string"
},
"book_id": {
"description": "Link to a book by ID",
"type": "integer"
},
"is_favorite": {
"description": "Mark as favorite",
"type": "boolean"
},
"tags": {
"description": "Tags",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"body"
]
}๐กadd_bookmark(url, title, description, category, tags)
Save a bookmark URL with optional title, description, category, and tags.
Input Schema
{
"type": "object",
"properties": {
"url": {
"description": "Bookmark URL",
"type": "string"
},
"title": {
"description": "Title (auto-detected from domain if omitted)",
"type": "string"
},
"description": {
"description": "Description",
"type": "string"
},
"category": {
"description": "Category",
"type": "string"
},
"tags": {
"description": "Tags",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"url"
]
}๐ดdelete_bookmark(bookmark_id)
Delete a bookmark permanently.
Input Schema
{
"type": "object",
"properties": {
"bookmark_id": {
"description": "ID of the bookmark to delete",
"type": "integer"
}
},
"required": [
"bookmark_id"
]
}๐ขlist_accounts
List financial accounts with balances and types.
Input Schema
{
"type": "object",
"properties": {}
}๐ขlist_categories(type)
List transaction categories with type (income/expense) and monthly budget.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Filter by type",
"enum": [
"income",
"expense",
"both"
],
"type": "string"
}
}
}๐กadd_transaction(amount, type, description, transaction_date, account_id, ...)
Add a financial transaction (income or expense) to an account with optional category.
Input Schema
{
"type": "object",
"properties": {
"amount": {
"description": "Transaction amount (positive number)",
"type": "number"
},
"type": {
"description": "Transaction type",
"enum": [
"income",
"expense",
"transfer"
],
"type": "string"
},
"description": {
"description": "What is this transaction for",
"type": "string"
},
"transaction_date": {
"description": "Date (Y-m-d, defaults to today)",
"type": "string"
},
"account_id": {
"description": "Account ID (see list_accounts). Defaults to the user's main account.",
"type": "integer"
},
"category_id": {
"description": "Category ID",
"type": "integer"
},
"notes": {
"description": "Additional notes",
"type": "string"
}
},
"required": [
"amount",
"type",
"description"
]
}๐ขlist_subscriptions
List active subscriptions with amounts, frequency, and next billing date.
Input Schema
{
"type": "object",
"properties": {}
}๐กcreate_subscription(name, amount, currency, frequency, category_id, ...)
Add a recurring subscription (monthly, yearly, or weekly).
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Subscription name (e.g., Netflix, Spotify)",
"type": "string"
},
"amount": {
"description": "Amount per billing period",
"type": "number"
},
"currency": {
"description": "ISO 4217 currency code, e.g. USD, EUR, GBP. Defaults to the user's currency.",
"type": "string"
},
"frequency": {
"description": "Billing frequency",
"enum": [
"monthly",
"quarterly",
"yearly",
"weekly"
],
"type": "string"
},
"category_id": {
"description": "Category ID",
"type": "integer"
},
"next_billing_date": {
"description": "Next billing date (Y-m-d)",
"type": "string"
},
"url": {
"description": "Service URL (http or https)",
"type": "string"
},
"notes": {
"description": "Notes",
"type": "string"
}
},
"required": [
"name",
"amount"
]
}๐ขlist_holdings
List portfolio holdings with market value, P/L, and allocation. Totals are in the user's currency; holdings without a live price are valued at cost and have null P/L.
Input Schema
{
"type": "object",
"properties": {}
}๐กadd_trade(holding_id, type, shares, price_per_share, traded_at, ...)
Record a buy or sell trade for a portfolio holding. Updates shares and average cost.
Input Schema
{
"type": "object",
"properties": {
"holding_id": {
"description": "Holding ID",
"type": "integer"
},
"type": {
"description": "Trade type",
"enum": [
"buy",
"sell"
],
"type": "string"
},
"shares": {
"description": "Number of shares",
"type": "number"
},
"price_per_share": {
"description": "Price per share",
"type": "number"
},
"traded_at": {
"description": "Trade date (Y-m-d, defaults to now)",
"type": "string"
},
"notes": {
"description": "Trade notes",
"type": "string"
}
},
"required": [
"holding_id",
"type",
"shares",
"price_per_share"
]
}โชlog_focus_session(duration_minutes, project_id, task_id, type, label, ...)
Log a completed focus/pomodoro session with duration, project, and task link.
Input Schema
{
"type": "object",
"properties": {
"duration_minutes": {
"description": "Session duration in minutes",
"type": "integer"
},
"project_id": {
"description": "Link to project",
"type": "integer"
},
"task_id": {
"description": "Link to task",
"type": "integer"
},
"type": {
"description": "Session type",
"enum": [
"pomodoro",
"timer"
],
"type": "string"
},
"label": {
"description": "Session label/name",
"type": "string"
},
"started_at": {
"description": "When it started (Y-m-d H:i, defaults to now minus duration)",
"type": "string"
}
},
"required": [
"duration_minutes"
]
}๐ขget_focus_summary(from, to)
Get focus time summary: total minutes, sessions, and breakdown by project for a date range.
Input Schema
{
"type": "object",
"properties": {
"from": {
"description": "Start date (Y-m-d, defaults to start of current week)",
"type": "string"
},
"to": {
"description": "End date (Y-m-d, defaults to today)",
"type": "string"
}
}
}โชlog_workout(type, duration_minutes, calories, active_calories, avg_hr, ...)
Log a workout session with type, duration, calories, and heart rate.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Workout type",
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string"
},
"duration_minutes": {
"description": "Duration in minutes",
"type": "integer"
},
"calories": {
"description": "Total calories burned",
"type": "integer"
},
"active_calories": {
"description": "Active calories (Apple Watch)",
"type": "integer"
},
"avg_hr": {
"description": "Average heart rate",
"type": "integer"
},
"max_hr": {
"description": "Max heart rate",
"type": "integer"
},
"min_hr": {
"description": "Min heart rate",
"type": "integer"
},
"started_at": {
"description": "Session start (Y-m-d H:i:s)",
"type": "string"
},
"ended_at": {
"description": "Session end (Y-m-d H:i:s)",
"type": "string"
},
"location": {
"description": "Where the session happened",
"type": "string"
},
"workout_date": {
"description": "Workout date (Y-m-d, defaults to today)",
"type": "string"
},
"notes": {
"description": "Notes",
"type": "string"
}
},
"required": [
"type"
]
}๐กlog_workout_sets(sets_text, workout_id, workout_date, type, duration_minutes, ...)
Add exercises and sets to a workout. Accepts gym shorthand ("lateral raise 5kg 4x12", "2min rowing machine") and creates the workout for that date if none exists.
Input Schema
{
"type": "object",
"properties": {
"sets_text": {
"description": "One movement per line. Understands \"4x12\", \"40kg\", \"2dk\"/\"90sn\", \"3 set\". Example: \"lateral raise 5kg 4x12\\nincline bench press machine 40kg 4x8\"",
"type": "string"
},
"workout_id": {
"description": "Add to this session. Needed when the date holds more than one session of the same type.",
"type": "integer"
},
"workout_date": {
"description": "Date (Y-m-d, defaults to today)",
"type": "string"
},
"type": {
"description": "Workout type. Sets go to the session of this type on that date; a new session is created when there is none.",
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string"
},
"duration_minutes": {
"description": "Session duration in minutes",
"type": "integer"
},
"notes": {
"description": "Notes",
"type": "string"
},
"allow_duplicates": {
"description": "Write blocks that already exist on that date with the same load and set count. Off by default โ a repeated call is far more often a re-send than a second round.",
"type": "boolean"
}
},
"required": [
"sets_text"
]
}โชlog_body_measurement(weight, body_fat, waist, waist_navel, chest, ...)
Log body measurements: weight, body fat %, waist, chest, etc.
Input Schema
{
"type": "object",
"properties": {
"weight": {
"description": "Weight in kg",
"type": "number"
},
"body_fat": {
"description": "Body fat percentage",
"type": "number"
},
"waist": {
"description": "Natural waist (narrowest point) in cm โ the primary trend metric",
"type": "number"
},
"waist_navel": {
"description": "Waist at the navel in cm โ secondary",
"type": "number"
},
"chest": {
"description": "Chest circumference in cm",
"type": "number"
},
"hips": {
"description": "Hips circumference in cm",
"type": "number"
},
"left_arm": {
"description": "Left arm circumference in cm",
"type": "number"
},
"right_arm": {
"description": "Right arm circumference in cm",
"type": "number"
},
"shoulders": {
"description": "Shoulders circumference in cm",
"type": "number"
},
"neck": {
"description": "Neck circumference in cm",
"type": "number"
},
"left_quad": {
"description": "Left quad circumference in cm",
"type": "number"
},
"right_quad": {
"description": "Right quad circumference in cm",
"type": "number"
},
"vo2max": {
"description": "VO2 max",
"type": "number"
},
"measured_at": {
"description": "Measurement date (Y-m-d, defaults to now)",
"type": "string"
},
"notes": {
"description": "Notes",
"type": "string"
}
}
}โชlog_nutrition(log_date, calories, protein_g, carbs_g, fat_g, ...)
Log a day of nutrition โ day totals plus optional food-by-food line items. Re-sending the same date replaces that day.
Input Schema
{
"type": "object",
"properties": {
"log_date": {
"description": "Date (Y-m-d)",
"type": "string"
},
"calories": {
"description": "Total calories for the day",
"type": "integer"
},
"protein_g": {
"description": "Total protein in grams",
"type": "integer"
},
"carbs_g": {
"description": "Total carbs in grams",
"type": "integer"
},
"fat_g": {
"description": "Total fat in grams",
"type": "integer"
},
"fiber_g": {
"description": "Total fiber in grams",
"type": "integer"
},
"sugar_g": {
"description": "Total sugar in grams",
"type": "integer"
},
"sodium_mg": {
"description": "Total sodium in mg",
"type": "integer"
},
"is_complete": {
"description": "False when the day was only partially logged โ excluded from averages",
"type": "boolean"
},
"notes": {
"description": "Notes",
"type": "string"
},
"entries": {
"description": "Food-by-food line items. Each: {name, calories, protein_g, carbs_g, fat_g, fiber_g, sugar_g, sodium_mg, consumed_at \"HH:MM\"}",
"items": {
"type": "object"
},
"type": "array"
}
},
"required": [
"log_date"
]
}๐ขlist_exercises(search, muscle_group, trained_only)
The movement catalog: canonical names, muscle groups and the aliases that resolve to them. Check here before logging sets โ using the catalog name keeps one lift on one row instead of splitting its history across near-duplicates.
Input Schema
{
"type": "object",
"properties": {
"search": {
"description": "Match against names and aliases",
"type": "string"
},
"muscle_group": {
"description": "chest, back, shoulders, biceps, triceps, legs, core, cardio",
"type": "string"
},
"trained_only": {
"description": "Only movements this user has actually logged sets for",
"type": "boolean"
}
}
}๐ขget_fitness_summary(nutrition_days, training_days, include_training_grid)
Current fitness state: weight trend vs target rate, waist thresholds, nutrition averages vs macro targets, training frequency and volume, plus which days are missing data.
Input Schema
{
"type": "object",
"properties": {
"nutrition_days": {
"description": "Nutrition averaging window in days (default 7)",
"type": "integer"
},
"training_days": {
"description": "Training window in days (default 28)",
"type": "integer"
},
"include_training_grid": {
"description": "Add the movement-by-session grid โ what was lifted last time and whether it went up. Use it before advising on a session.",
"type": "boolean"
}
}
}๐ดdelete_workout(workout_date, workout_id, type)
Delete a whole training session and every set in it. To remove only part of a session use delete_workout_sets.
Input Schema
{
"type": "object",
"properties": {
"workout_date": {
"description": "Session date (Y-m-d, defaults to today)",
"type": "string"
},
"workout_id": {
"description": "Session id โ required only when a date carries more than one session",
"type": "integer"
},
"type": {
"description": "Narrow to one session type on that date",
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string"
}
}
}๐ดdelete_workout_sets(workout_date, workout_id, exercise, duplicates_only)
Remove sets from a session without touching the session itself. Use duplicates_only to undo a log that was sent twice, or exercise to drop one movement that was entered by mistake.
Input Schema
{
"type": "object",
"properties": {
"workout_date": {
"description": "Session date (Y-m-d, defaults to today)",
"type": "string"
},
"workout_id": {
"description": "Session id โ required only when a date carries more than one session",
"type": "integer"
},
"exercise": {
"description": "Remove every set of this movement from the session, e.g. \"leg press\"",
"type": "string"
},
"duplicates_only": {
"description": "Remove blocks that repeat an identical earlier block in the same session โ the fix for a log sent twice. Keeps the first occurrence.",
"type": "boolean"
}
}
}๐ดdelete_body_measurement(measurement_id, measured_at)
Delete a body measurement that was logged by mistake. Two entries on one date drag the weight trend and the waist rule, so a bad one is worth removing rather than logging over.
Input Schema
{
"type": "object",
"properties": {
"measurement_id": {
"description": "Id of the measurement to delete",
"type": "integer"
},
"measured_at": {
"description": "Delete every measurement on this date (Y-m-d)",
"type": "string"
}
}
}๐ขlist_wishlist(status)
List wishlist items with price, priority, and purchase status.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by status (default: pending)",
"enum": [
"pending",
"purchased",
"cancelled"
],
"type": "string"
}
}
}๐กadd_wishlist_item(name, description, url, price_min, price_max, ...)
Add an item to the wishlist with price range, priority, and optional URL.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Item name",
"type": "string"
},
"description": {
"description": "Description",
"type": "string"
},
"url": {
"description": "Product URL",
"type": "string"
},
"price_min": {
"description": "Minimum price",
"type": "number"
},
"price_max": {
"description": "Maximum price",
"type": "number"
},
"currency": {
"description": "3-letter currency code, e.g. GBP. Defaults to the user's currency",
"type": "string"
},
"priority": {
"description": "Priority",
"enum": [
"high",
"medium",
"low",
"waiting"
],
"type": "string"
},
"category": {
"description": "Category",
"type": "string"
},
"notes": {
"description": "Notes",
"type": "string"
}
},
"required": [
"name"
]
}๐ดupdate_wishlist_item(item_id, status, purchased_at, name, priority, ...)
Update a wishlist item โ mark it purchased or cancelled, change priority, price or notes. Purchased and cancelled items drop out of the active list.
Input Schema
{
"type": "object",
"properties": {
"item_id": {
"description": "Wishlist item ID",
"type": "integer"
},
"status": {
"description": "pending = still wanted ยท purchased = bought ยท cancelled = no longer wanted",
"enum": [
"pending",
"purchased",
"cancelled"
],
"type": "string"
},
"purchased_at": {
"description": "Purchase date (Y-m-d). Defaults to today when status becomes purchased.",
"type": "string"
},
"name": {
"description": "New name",
"type": "string"
},
"priority": {
"description": "high | medium | low | waiting (waiting = wanted but gated on a trigger)",
"enum": [
"high",
"medium",
"low",
"waiting"
],
"type": "string"
},
"category": {
"description": "Category",
"type": "string"
},
"price_min": {
"description": "Lower price estimate",
"type": "number"
},
"price_max": {
"description": "Upper price estimate",
"type": "number"
},
"url": {
"description": "Product URL (http or https)",
"type": "string"
},
"currency": {
"description": "3-letter currency code of the prices, e.g. GBP",
"type": "string"
},
"notes": {
"description": "Notes โ reasoning, alternatives considered, purchase trigger",
"type": "string"
}
},
"required": [
"item_id"
]
}๐ขlist_contacts(relationship, needs_contact, favorites_only)
List contacts. Filter by relationship type or get contacts needing reach-out.
Input Schema
{
"type": "object",
"properties": {
"relationship": {
"description": "Filter by type",
"enum": [
"family",
"friend",
"work",
"mentor",
"other"
],
"type": "string"
},
"needs_contact": {
"description": "Only contacts overdue for check-in",
"type": "boolean"
},
"favorites_only": {
"description": "Only favorite contacts",
"type": "boolean"
}
}
}Community
Evidence