Framezone

Your life dashboard for AI: tasks, habits, goals, budgets, workouts, nutrition, journal, notes.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
92%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,033Tokens (tool definitions)
~1.4 KBTypical response size
Significant attention impact (6.28% of 128k context)

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-http

What it can do

Tool inventory

Tools (50)

๐ŸŸข Read-only๐ŸŸก Write๐Ÿ”ด Deleteโšช Unknown
๐ŸŸข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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded50 tools