Your life dashboard for AI: tasks, habits, goals, budgets, workouts, nutrition, journal, notes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Save a bookmark URL with optional title, description, category, and tags.
Bookmark URL
Tags
Title (auto-detected from domain if omitted)
Category
Description
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Save a bookmark URL with optional title, description, category, and tags.
| Argument | Type | Description |
|---|---|---|
| url* | string | Bookmark URL |
| tags | array | Tags |
| title | string | Title (auto-detected from domain if omitted) |
| category | string | Category |
| description | string | Description |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Bookmark URL"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags"
},
"title": {
"type": "string",
"description": "Title (auto-detected from domain if omitted)"
},
"category": {
"type": "string",
"description": "Category"
},
"description": {
"type": "string",
"description": "Description"
}
}
}Record a buy or sell trade for a portfolio holding. Updates shares and average cost.
| Argument | Type | Description |
|---|---|---|
| type* | string | Trade type |
| notes | string | Trade notes |
| shares* | number | Number of shares |
| traded_at | string | Trade date (Y-m-d, defaults to now) |
| holding_id* | integer | Holding ID |
| price_per_share* | number | Price per share |
{
"type": "object",
"required": [
"holding_id",
"type",
"shares",
"price_per_share"
],
"properties": {
"type": {
"enum": [
"buy",
"sell"
],
"type": "string",
"description": "Trade type"
},
"notes": {
"type": "string",
"description": "Trade notes"
},
"shares": {
"type": "number",
"description": "Number of shares"
},
"traded_at": {
"type": "string",
"description": "Trade date (Y-m-d, defaults to now)"
},
"holding_id": {
"type": "integer",
"description": "Holding ID"
},
"price_per_share": {
"type": "number",
"description": "Price per share"
}
}
}Add a financial transaction (income or expense) to an account with optional category.
| Argument | Type | Description |
|---|---|---|
| type* | string | Transaction type |
| notes | string | Additional notes |
| amount* | number | Transaction amount (positive number) |
| account_id | integer | Account ID (see list_accounts). Defaults to the user's main account. |
| category_id | integer | Category ID |
| description* | string | What is this transaction for |
| transaction_date | string | Date (Y-m-d, defaults to today) |
{
"type": "object",
"required": [
"amount",
"type",
"description"
],
"properties": {
"type": {
"enum": [
"income",
"expense",
"transfer"
],
"type": "string",
"description": "Transaction type"
},
"notes": {
"type": "string",
"description": "Additional notes"
},
"amount": {
"type": "number",
"description": "Transaction amount (positive number)"
},
"account_id": {
"type": "integer",
"description": "Account ID (see list_accounts). Defaults to the user's main account."
},
"category_id": {
"type": "integer",
"description": "Category ID"
},
"description": {
"type": "string",
"description": "What is this transaction for"
},
"transaction_date": {
"type": "string",
"description": "Date (Y-m-d, defaults to today)"
}
}
}Add a personal fact to the user's AI memory. Keep it concise (1-2 sentences). Max 50 memories per user.
| Argument | Type | Description |
|---|---|---|
| content* | string | The memory content (max 500 chars, 1-2 sentences) |
| category | string | Memory category |
{
"type": "object",
"required": [
"content"
],
"properties": {
"content": {
"type": "string",
"description": "The memory content (max 500 chars, 1-2 sentences)"
},
"category": {
"enum": [
"personal",
"career",
"lifestyle",
"values",
"finance",
"random"
],
"type": "string",
"description": "Memory category"
}
}
}Add an item to the wishlist with price range, priority, and optional URL.
| Argument | Type | Description |
|---|---|---|
| url | string | Product URL |
| name* | string | Item name |
| notes | string | Notes |
| category | string | Category |
| currency | string | 3-letter currency code, e.g. GBP. Defaults to the user's currency |
| priority | string | Priority |
| price_max | number | Maximum price |
| price_min | number | Minimum price |
| description | string | Description |
{
"type": "object",
"required": [
"name"
],
"properties": {
"url": {
"type": "string",
"description": "Product URL"
},
"name": {
"type": "string",
"description": "Item name"
},
"notes": {
"type": "string",
"description": "Notes"
},
"category": {
"type": "string",
"description": "Category"
},
"currency": {
"type": "string",
"description": "3-letter currency code, e.g. GBP. Defaults to the user's currency"
},
"priority": {
"enum": [
"high",
"medium",
"low",
"waiting"
],
"type": "string",
"description": "Priority"
},
"price_max": {
"type": "number",
"description": "Maximum price"
},
"price_min": {
"type": "number",
"description": "Minimum price"
},
"description": {
"type": "string",
"description": "Description"
}
}
}Compare two date periods for a project. Shows SC and GA metrics for both periods with percentage changes. Use for week-over-week, month-over-month comparisons, measuring campaign impact, tracking growth/decline.
| Argument | Type | Description |
|---|---|---|
| project_id* | integer | Project ID (required) |
| current_end | string | Current period end (Y-m-d). Default: today |
| previous_end | string | Previous period end (Y-m-d). Default: 7 days ago |
| current_start | string | Current period start (Y-m-d). Default: 7 days ago |
| previous_start | string | Previous period start (Y-m-d). Default: 14 days ago |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "integer",
"description": "Project ID (required)"
},
"current_end": {
"type": "string",
"description": "Current period end (Y-m-d). Default: today"
},
"previous_end": {
"type": "string",
"description": "Previous period end (Y-m-d). Default: 7 days ago"
},
"current_start": {
"type": "string",
"description": "Current period start (Y-m-d). Default: 7 days ago"
},
"previous_start": {
"type": "string",
"description": "Previous period start (Y-m-d). Default: 14 days ago"
}
}
}Toggle a task between completed and pending. Cascades to subtasks and handles recurrence.
| Argument | Type | Description |
|---|---|---|
| task_id* | integer | ID of the task to complete/uncomplete |
{
"type": "object",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "integer",
"description": "ID of the task to complete/uncomplete"
}
}
}Add a book to your library. Set status to "reading", "wishlist", "to_check", etc.
| Argument | Type | Description |
|---|---|---|
| tags | array | Tags |
| notes | string | Personal notes about the book |
| pages | integer | Total pages |
| title* | string | Book title |
| author | string | Author name |
| rating | integer | Rating 1-5 |
| status | string | Reading status |
{
"type": "object",
"required": [
"title"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags"
},
"notes": {
"type": "string",
"description": "Personal notes about the book"
},
"pages": {
"type": "integer",
"description": "Total pages"
},
"title": {
"type": "string",
"description": "Book title"
},
"author": {
"type": "string",
"description": "Author name"
},
"rating": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Rating 1-5"
},
"status": {
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string",
"description": "Reading status"
}
}
}Create a new contact (personal CRM). Track birthdays, relationship types, and contact frequency reminders.
| Argument | Type | Description |
|---|---|---|
| city | string | City/location |
| tags | array | Tags array, e.g. ["investor", "design"] |
| string | Email address | |
| notes | string | Notes about this person |
| phone | string | Phone number |
| company | string | Company/organization |
| birthday | string | Birthday (Y-m-d). Year unknown: use 1604 as the year |
| last_name | string | Last name |
| first_name* | string | First name |
| how_we_met | string | How you met this person |
| project_id | integer | Link to project by ID |
Create a new goal. Types: milestone (checklist), numeric (value tracking), habit, vision.
| Argument | Type | Description |
|---|---|---|
| unit | string | Unit of measurement (for numeric goals) |
| title* | string | Goal title |
| category | string | Category (e.g., Health, Career, Finance) |
| priority | integer | Priority: 1=high, 2=medium, 3=low |
| goal_type | string | Type |
| milestones | array | Milestones array [{title: "..."}] (for milestone goals) |
| description | string | Goal description |
| start_value | number | Starting value; defaults to current_value. Lets goals that go down (90 -> 80 kg) show progress |
| target_date | string | Target date (Y-m-d) |
| current_value | number | Current value (numeric goals, >= 0) |
Create a new habit. Tracking types: check (daily toggle), count (hit a number), duration (minutes), times_per_week (weekly frequency).
| Argument | Type | Description |
|---|---|---|
| icon | string | Lucide icon name (lowercase, dashes), e.g. book-open |
| name* | string | Habit name |
| unit | string | Unit label (e.g., "pages", "glasses") |
| color | string | Color as #rrggbb, e.g. #10AC84 |
| time_of_day | string | When during the day |
| target_value | integer | Target count value (for count type) |
| tracking_type | string | Tracking type (default: check) |
| times_per_week | integer | Times per week target (for times_per_week type, 1-7) |
| target_duration | integer | Target duration in minutes (for duration type, 5-480) |
{
"type": "object",
"required": [
"name"
],
"properties": {
"icon": {
"type": "string",
"description": "Lucide icon name (lowercase, dashes), e.g. book-open"
},
"name": {
"type": "string",
"description": "Habit name"
},
"unit": {
"type": "string",
"description": "Unit label (e.g., \"pages\", \"glasses\")"
},
"color": {
"type": "string",
"description": "Color as #rrggbb, e.g. #10AC84"
},
"time_of_day": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string",
"description": "When during the day"
},
"target_value": {
"type": "integer",
"description": "Target count value (for count type)"
},
"tracking_type": {
"enum": [
"check",
"count",
"duration",
"times_per_week"
],
"type": "string",
"description": "Tracking type (default: check)"
},
"times_per_week": {
"type": "integer",
"description": "Times per week target (for times_per_week type, 1-7)"
},
"target_duration": {
"type": "integer",
"description": "Target duration in minutes (for duration type, 5-480)"
}
}
}Create a new note with title, body text, and optional tags.
| Argument | Type | Description |
|---|---|---|
| body* | string | Note body (plain text) |
| tags | array | Tags array |
| title* | string | Note title |
| is_pinned | boolean | Pin this note |
| project_id | integer | Link to project by ID |
{
"type": "object",
"required": [
"title",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Note body (plain text)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags array"
},
"title": {
"type": "string",
"description": "Note title"
},
"is_pinned": {
"type": "boolean",
"description": "Pin this note"
},
"project_id": {
"type": "integer",
"description": "Link to project by ID"
}
}
}Create a new project with tier (A/B/C), optional goal link, and target date.
| Argument | Type | Description |
|---|---|---|
| url | string | Project URL |
| icon | string | Lucide icon name |
| name* | string | Project name |
| tier | string | Priority tier |
| color | string | Color hex code (e.g., #3B82F6) |
| status | string | Initial status |
| goal_id | integer | Link to a goal by ID |
| description | string | Project description |
| target_date | string | Target completion date (Y-m-d) |
{
"type": "object",
"required": [
"name"
],
"properties": {
"url": {
"type": "string",
"description": "Project URL"
},
"icon": {
"type": "string",
"description": "Lucide icon name"
},
"name": {
"type": "string",
"description": "Project name"
},
"tier": {
"enum": [
"A",
"B",
"C"
],
"type": "string",
"description": "Priority tier"
},
"color": {
"type": "string",
"description": "Color hex code (e.g., #3B82F6)"
},
"status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Initial status"
},
"goal_id": {
"type": "integer",
"description": "Link to a goal by ID"
},
"description": {
"type": "string",
"description": "Project description"
},
"target_date": {
"type": "string",
"description": "Target completion date (Y-m-d)"
}
}
}Save a quote with author and optional book link.
| Argument | Type | Description |
|---|---|---|
| body* | string | The quote text |
| tags | array | Tags |
| author | string | Who said/wrote it |
| source | string | Source (book title, speech, etc.) |
| book_id | integer | Link to a book by ID |
| is_favorite | boolean | Mark as favorite |
{
"type": "object",
"required": [
"body"
],
"properties": {
"body": {
"type": "string",
"description": "The quote text"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags"
},
"author": {
"type": "string",
"description": "Who said/wrote it"
},
"source": {
"type": "string",
"description": "Source (book title, speech, etc.)"
},
"book_id": {
"type": "integer",
"description": "Link to a book by ID"
},
"is_favorite": {
"type": "boolean",
"description": "Mark as favorite"
}
}
}Add a recurring subscription (monthly, yearly, or weekly).
| Argument | Type | Description |
|---|---|---|
| url | string | Service URL (http or https) |
| name* | string | Subscription name (e.g., Netflix, Spotify) |
| notes | string | Notes |
| amount* | number | Amount per billing period |
| currency | string | ISO 4217 currency code, e.g. USD, EUR, GBP. Defaults to the user's currency. |
| frequency | string | Billing frequency |
| category_id | integer | Category ID |
| next_billing_date | string | Next billing date (Y-m-d) |
{
"type": "object",
"required": [
"name",
"amount"
],
"properties": {
"url": {
"type": "string",
"description": "Service URL (http or https)"
},
"name": {
"type": "string",
"description": "Subscription name (e.g., Netflix, Spotify)"
},
"notes": {
"type": "string",
"description": "Notes"
},
"amount": {
"type": "number",
"description": "Amount per billing period"
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code, e.g. USD, EUR, GBP. Defaults to the user's currency."
},
"frequency": {
"enum": [
"monthly",
"quarterly",
"yearly",
"weekly"
],
"type": "string",
"description": "Billing frequency"
},
"category_id": {
"type": "integer",
"description": "Category ID"
},
"next_billing_date": {
"type": "string",
"description": "Next billing date (Y-m-d)"
}
}
}Create a new task with optional project, priority, due date, and recurrence.
| Argument | Type | Description |
|---|---|---|
| title* | string | Task title |
| status | string | Initial status |
| is_top3 | boolean | Mark as Top 3 focus task (max 3 allowed) |
| due_date | string | Due date (Y-m-d format) |
| priority | integer | Priority: 1=high, 2=medium, 3=low |
| project_id | integer | Assign to project by ID |
| recurrence | string | Recurrence pattern |
| description | string | Task description |
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Task title"
},
"status": {
"enum": [
"pending",
"in_progress"
],
"type": "string",
"description": "Initial status"
},
"is_top3": {
"type": "boolean",
"description": "Mark as Top 3 focus task (max 3 allowed)"
},
"due_date": {
"type": "string",
"description": "Due date (Y-m-d format)"
},
"priority": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "Priority: 1=high, 2=medium, 3=low"
},
"project_id": {
"type": "integer",
"description": "Assign to project by ID"
},
"recurrence": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string",
"description": "Recurrence pattern"
},
"description": {
"type": "string",
"description": "Task description"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| measured_at | string | Delete every measurement on this date (Y-m-d) |
| measurement_id | integer | Id of the measurement to delete |
{
"type": "object",
"properties": {
"measured_at": {
"type": "string",
"description": "Delete every measurement on this date (Y-m-d)"
},
"measurement_id": {
"type": "integer",
"description": "Id of the measurement to delete"
}
}
}Delete a book from the library.
| Argument | Type | Description |
|---|---|---|
| book_id* | integer | ID of the book to delete |
{
"type": "object",
"required": [
"book_id"
],
"properties": {
"book_id": {
"type": "integer",
"description": "ID of the book to delete"
}
}
}Delete a bookmark permanently.
| Argument | Type | Description |
|---|---|---|
| bookmark_id* | integer | ID of the bookmark to delete |
{
"type": "object",
"required": [
"bookmark_id"
],
"properties": {
"bookmark_id": {
"type": "integer",
"description": "ID of the bookmark to delete"
}
}
}Soft-delete a note.
| Argument | Type | Description |
|---|---|---|
| note_id* | integer | ID of the note to delete |
{
"type": "object",
"required": [
"note_id"
],
"properties": {
"note_id": {
"type": "integer",
"description": "ID of the note to delete"
}
}
}Soft-delete a task (can be restored later).
| Argument | Type | Description |
|---|---|---|
| task_id* | integer | ID of the task to delete |
{
"type": "object",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "integer",
"description": "ID of the task to delete"
}
}
}Delete a specific AI memory entry by ID.
| Argument | Type | Description |
|---|---|---|
| id* | integer | ID of the memory to delete |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"description": "ID of the memory to delete"
}
}
}Delete a whole training session and every set in it. To remove only part of a session use delete_workout_sets.
| Argument | Type | Description |
|---|---|---|
| type | string | Narrow to one session type on that date |
| workout_id | integer | Session id — required only when a date carries more than one session |
| workout_date | string | Session date (Y-m-d, defaults to today) |
{
"type": "object",
"properties": {
"type": {
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string",
"description": "Narrow to one session type on that date"
},
"workout_id": {
"type": "integer",
"description": "Session id — required only when a date carries more than one session"
},
"workout_date": {
"type": "string",
"description": "Session date (Y-m-d, defaults to today)"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| exercise | string | Remove every set of this movement from the session, e.g. "leg press" |
| workout_id | integer | Session id — required only when a date carries more than one session |
| workout_date | string | Session date (Y-m-d, defaults to today) |
| duplicates_only | boolean | Remove blocks that repeat an identical earlier block in the same session — the fix for a log sent twice. Keeps the first occurrence. |
{
"type": "object",
"properties": {
"exercise": {
"type": "string",
"description": "Remove every set of this movement from the session, e.g. \"leg press\""
},
"workout_id": {
"type": "integer",
"description": "Session id — required only when a date carries more than one session"
},
"workout_date": {
"type": "string",
"description": "Session date (Y-m-d, defaults to today)"
},
"duplicates_only": {
"type": "boolean",
"description": "Remove blocks that repeat an identical earlier block in the same session — the fix for a log sent twice. Keeps the first occurrence."
}
}
}Get the daily journal entry for a date: mood, energy, focus, morning/evening notes.
| Argument | Type | Description |
|---|---|---|
| date | string | Date to get (Y-m-d, defaults to today) |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to get (Y-m-d, defaults to today)"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| training_days | integer | Training window in days (default 28) |
| nutrition_days | integer | Nutrition averaging window in days (default 7) |
| include_training_grid | boolean | Add the movement-by-session grid — what was lifted last time and whether it went up. Use it before advising on a session. |
{
"type": "object",
"properties": {
"training_days": {
"type": "integer",
"description": "Training window in days (default 28)"
},
"nutrition_days": {
"type": "integer",
"description": "Nutrition averaging window in days (default 7)"
},
"include_training_grid": {
"type": "boolean",
"description": "Add the movement-by-session grid — what was lifted last time and whether it went up. Use it before advising on a session."
}
}
}Get focus time summary: total minutes, sessions, and breakdown by project for a date range.
| Argument | Type | Description |
|---|---|---|
| to | string | End date (Y-m-d, defaults to today) |
| from | string | Start date (Y-m-d, defaults to start of current week) |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "End date (Y-m-d, defaults to today)"
},
"from": {
"type": "string",
"description": "Start date (Y-m-d, defaults to start of current week)"
}
}
}Get daily Search Console + GA4 metrics for a project. Returns clicks, impressions, CTR, position, sessions, users, pageviews, bounce rate per day. Use for trend analysis, performance reports, comparing periods.
| Argument | Type | Description |
|---|---|---|
| end_date | string | End date (Y-m-d). Default: today |
| project_id* | integer | Project ID (required) |
| start_date | string | Start date (Y-m-d). Default: 30 days ago |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"end_date": {
"type": "string",
"description": "End date (Y-m-d). Default: today"
},
"project_id": {
"type": "integer",
"description": "Project ID (required)"
},
"start_date": {
"type": "string",
"description": "Start date (Y-m-d). Default: 30 days ago"
}
}
}Get top performing pages for a project from Search Console data. Returns page URL, total clicks, impressions, avg CTR, avg position. Use for content performance analysis, finding underperforming pages, identifying top content.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 100, max 500) |
| search | string | Filter pages containing this URL path |
| sort_by | string | Sort by metric |
| end_date | string | End date (Y-m-d). Default: today |
| project_id* | integer | Project ID (required) |
| start_date | string | Start date (Y-m-d). Default: 30 days ago |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "Max results (default 100, max 500)"
},
"search": {
"type": "string",
"description": "Filter pages containing this URL path"
},
"sort_by": {
"enum": [
"clicks",
"impressions",
"ctr",
"position"
],
"type": "string",
"description": "Sort by metric"
},
"end_date": {
"type": "string",
"description": "End date (Y-m-d). Default: today"
},
"project_id": {
"type": "integer",
"description": "Project ID (required)"
},
"start_date": {
"type": "string",
"description": "Start date (Y-m-d). Default: 30 days ago"
}
}
}Get top search queries for a project from Search Console data. Returns query text, total clicks, impressions, avg CTR, avg position. Use for keyword analysis, content strategy, SEO optimization, finding ranking opportunities.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 100, max 500) |
| search | string | Filter queries containing this text |
| sort_by | string | Sort by metric |
| end_date | string | End date (Y-m-d). Default: today |
| min_clicks | integer | Minimum clicks filter |
| project_id* | integer | Project ID (required) |
| start_date | string | Start date (Y-m-d). Default: 30 days ago |
| min_impressions | integer | Minimum impressions filter |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "Max results (default 100, max 500)"
},
"search": {
"type": "string",
"description": "Filter queries containing this text"
},
"sort_by": {
"enum": [
"clicks",
"impressions",
"ctr",
"position"
],
"type": "string",
"description": "Sort by metric"
},
"end_date": {
"type": "string",
"description": "End date (Y-m-d). Default: today"
},
"min_clicks": {
"type": "integer",
"description": "Minimum clicks filter"
},
"project_id": {
"type": "integer",
"description": "Project ID (required)"
},
"start_date": {
"type": "string",
"description": "Start date (Y-m-d). Default: 30 days ago"
},
"min_impressions": {
"type": "integer",
"description": "Minimum impressions filter"
}
}
}Get the user's AI memory entries — personal facts, preferences, and context that personalize AI responses.
| Argument | Type | Description |
|---|---|---|
| category | string | Filter by category |
{
"type": "object",
"properties": {
"category": {
"enum": [
"personal",
"career",
"lifestyle",
"values",
"finance",
"random"
],
"type": "string",
"description": "Filter by category"
}
}
}List financial accounts with balances and types.
No arguments.
{
"type": "object",
"properties": {}
}List all achievements: unlocked and locked, with descriptions and unlock dates.
No arguments.
{
"type": "object",
"properties": {}
}List books with optional status filter. Returns title, author, status, progress, and rating.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by status |
{
"type": "object",
"properties": {
"status": {
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string",
"description": "Filter by status"
}
}
}List transaction categories with type (income/expense) and monthly budget.
| Argument | Type | Description |
|---|---|---|
| type | string | Filter by type |
{
"type": "object",
"properties": {
"type": {
"enum": [
"income",
"expense",
"both"
],
"type": "string",
"description": "Filter by type"
}
}
}List contacts. Filter by relationship type or get contacts needing reach-out.
| Argument | Type | Description |
|---|---|---|
| relationship | string | Filter by type |
| needs_contact | boolean | Only contacts overdue for check-in |
| favorites_only | boolean | Only favorite contacts |
{
"type": "object",
"properties": {
"relationship": {
"enum": [
"family",
"friend",
"work",
"mentor",
"other"
],
"type": "string",
"description": "Filter by type"
},
"needs_contact": {
"type": "boolean",
"description": "Only contacts overdue for check-in"
},
"favorites_only": {
"type": "boolean",
"description": "Only favorite contacts"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| search | string | Match against names and aliases |
| muscle_group | string | chest, back, shoulders, biceps, triceps, legs, core, cardio |
| trained_only | boolean | Only movements this user has actually logged sets for |
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Match against names and aliases"
},
"muscle_group": {
"type": "string",
"description": "chest, back, shoulders, biceps, triceps, legs, core, cardio"
},
"trained_only": {
"type": "boolean",
"description": "Only movements this user has actually logged sets for"
}
}
}List goals with progress, type, and status. Supports filtering by status or category.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by status |
| category | string | Filter by category |
{
"type": "object",
"properties": {
"status": {
"enum": [
"active",
"paused",
"completed",
"abandoned"
],
"type": "string",
"description": "Filter by status"
},
"category": {
"type": "string",
"description": "Filter by category"
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| date | string | Date to check (Y-m-d, defaults to today) |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to check (Y-m-d, defaults to today)"
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}List notes, optionally filtered by search query or tag. Returns title, tags, and truncated body.
| Argument | Type | Description |
|---|---|---|
| tag | string | Filter by tag name |
| limit | integer | Max results (default: 20, max: 50) |
| search | string | Search query (matches title and body) |
{
"type": "object",
"properties": {
"tag": {
"type": "string",
"description": "Filter by tag name"
},
"limit": {
"type": "integer",
"description": "Max results (default: 20, max: 50)"
},
"search": {
"type": "string",
"description": "Search query (matches title and body)"
}
}
}List projects with task counts, tier, status, and linked goal.
| Argument | Type | Description |
|---|---|---|
| tier | string | Filter by tier |
| status | string | Filter by status. Archived projects are excluded unless you ask for them explicitly. |
| include_archived | boolean | Include archived projects in an unfiltered list (default: false) |
{
"type": "object",
"properties": {
"tier": {
"enum": [
"A",
"B",
"C"
],
"type": "string",
"description": "Filter by tier"
},
"status": {
"enum": [
"active",
"paused",
"completed",
"archived"
],
"type": "string",
"description": "Filter by status. Archived projects are excluded unless you ask for them explicitly."
},
"include_archived": {
"type": "boolean",
"description": "Include archived projects in an unfiltered list (default: false)"
}
}
}List saved quotes, optionally filtered by book or favorites only.
| Argument | Type | Description |
|---|---|---|
| book_id | integer | Filter by book ID |
| favorites_only | boolean | Only show favorites |
{
"type": "object",
"properties": {
"book_id": {
"type": "integer",
"description": "Filter by book ID"
},
"favorites_only": {
"type": "boolean",
"description": "Only show favorites"
}
}
}List active subscriptions with amounts, frequency, and next billing date.
No arguments.
{
"type": "object",
"properties": {}
}List tasks, optionally filtered by status, priority, project, or top3 flag.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by status |
| is_top3 | boolean | Only show Top 3 focus tasks |
| priority | integer | Filter by priority: 1=high, 2=medium, 3=low |
| project_id | integer | Filter by project ID |
| include_archived | boolean | Include archived tasks (default: false) |
{
"type": "object",
"properties": {
"status": {
"enum": [
"pending",
"in_progress",
"completed"
],
"type": "string",
"description": "Filter by status"
},
"is_top3": {
"type": "boolean",
"description": "Only show Top 3 focus tasks"
},
"priority": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "Filter by priority: 1=high, 2=medium, 3=low"
},
"project_id": {
"type": "integer",
"description": "Filter by project ID"
},
"include_archived": {
"type": "boolean",
"description": "Include archived tasks (default: false)"
}
}
}List wishlist items with price, priority, and purchase status.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by status (default: pending) |
{
"type": "object",
"properties": {
"status": {
"enum": [
"pending",
"purchased",
"cancelled"
],
"type": "string",
"description": "Filter by status (default: pending)"
}
}
}Log body measurements: weight, body fat %, waist, chest, etc.
| Argument | Type | Description |
|---|---|---|
| hips | number | Hips circumference in cm |
| neck | number | Neck circumference in cm |
| chest | number | Chest circumference in cm |
| notes | string | Notes |
| waist | number | Natural waist (narrowest point) in cm — the primary trend metric |
| vo2max | number | VO2 max |
| weight | number | Weight in kg |
| body_fat | number | Body fat percentage |
| left_arm | number | Left arm circumference in cm |
| left_quad | number | Left quad circumference in cm |
| right_arm | number | Right arm circumference in cm |
Log a completed focus/pomodoro session with duration, project, and task link.
| Argument | Type | Description |
|---|---|---|
| type | string | Session type |
| label | string | Session label/name |
| task_id | integer | Link to task |
| project_id | integer | Link to project |
| started_at | string | When it started (Y-m-d H:i, defaults to now minus duration) |
| duration_minutes* | integer | Session duration in minutes |
{
"type": "object",
"required": [
"duration_minutes"
],
"properties": {
"type": {
"enum": [
"pomodoro",
"timer"
],
"type": "string",
"description": "Session type"
},
"label": {
"type": "string",
"description": "Session label/name"
},
"task_id": {
"type": "integer",
"description": "Link to task"
},
"project_id": {
"type": "integer",
"description": "Link to project"
},
"started_at": {
"type": "string",
"description": "When it started (Y-m-d H:i, defaults to now minus duration)"
},
"duration_minutes": {
"type": "integer",
"description": "Session duration in minutes"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| date | string | Date to log (Y-m-d, defaults to today, cannot be in the future) |
| value | number | 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. |
| habit_id* | integer | ID of the habit |
{
"type": "object",
"required": [
"habit_id"
],
"properties": {
"date": {
"type": "string",
"description": "Date to log (Y-m-d, defaults to today, cannot be in the future)"
},
"value": {
"type": "number",
"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."
},
"habit_id": {
"type": "integer",
"description": "ID of the habit"
}
}
}Log a day of nutrition — day totals plus optional food-by-food line items. Re-sending the same date replaces that day.
| Argument | Type | Description |
|---|---|---|
| fat_g | integer | Total fat in grams |
| notes | string | Notes |
| carbs_g | integer | Total carbs in grams |
| entries | array | Food-by-food line items. Each: {name, calories, protein_g, carbs_g, fat_g, fiber_g, sugar_g, sodium_mg, consumed_at "HH:MM"} |
| fiber_g | integer | Total fiber in grams |
| sugar_g | integer | Total sugar in grams |
| calories | integer | Total calories for the day |
| log_date* | string | Date (Y-m-d) |
| protein_g | integer | Total protein in grams |
| sodium_mg | integer | Total sodium in mg |
| is_complete |
Log a workout session with type, duration, calories, and heart rate.
| Argument | Type | Description |
|---|---|---|
| type* | string | Workout type |
| notes | string | Notes |
| avg_hr | integer | Average heart rate |
| max_hr | integer | Max heart rate |
| min_hr | integer | Min heart rate |
| calories | integer | Total calories burned |
| ended_at | string | Session end (Y-m-d H:i:s) |
| location | string | Where the session happened |
| started_at | string | Session start (Y-m-d H:i:s) |
| workout_date | string | Workout date (Y-m-d, defaults to today) |
| active_calories | integer | Active calories (Apple Watch) |
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.
| Argument | Type | Description |
|---|---|---|
| type | string | Workout type. Sets go to the session of this type on that date; a new session is created when there is none. |
| notes | string | Notes |
| sets_text* | string | One movement per line. Understands "4x12", "40kg", "2dk"/"90sn", "3 set". Example: "lateral raise 5kg 4x12\nincline bench press machine 40kg 4x8" |
| workout_id | integer | Add to this session. Needed when the date holds more than one session of the same type. |
| workout_date | string | Date (Y-m-d, defaults to today) |
| allow_duplicates | boolean | 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. |
| duration_minutes | integer | Session duration in minutes |
{
"type": "object",
"required": [
"sets_text"
],
"properties": {
"type": {
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string",
"description": "Workout type. Sets go to the session of this type on that date; a new session is created when there is none."
},
"notes": {
"type": "string",
"description": "Notes"
},
"sets_text": {
"type": "string",
"description": "One movement per line. Understands \"4x12\", \"40kg\", \"2dk\"/\"90sn\", \"3 set\". Example: \"lateral raise 5kg 4x12\\nincline bench press machine 40kg 4x8\""
},
"workout_id": {
"type": "integer",
"description": "Add to this session. Needed when the date holds more than one session of the same type."
},
"workout_date": {
"type": "string",
"description": "Date (Y-m-d, defaults to today)"
},
"allow_duplicates": {
"type": "boolean",
"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."
},
"duration_minutes": {
"type": "integer",
"description": "Session duration in minutes"
}
}
}Search the user's Framezone data by keyword: tasks, projects, notes, bookmarks, books and goals.
| Argument | Type | Description |
|---|---|---|
| query* | string | Search query (min 2 characters) |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 2,
"description": "Search query (min 2 characters)"
}
}
}Update a book: change status, rating, notes, or update reading progress (current page).
| Argument | Type | Description |
|---|---|---|
| tags | array | Tags |
| notes | string | Personal notes |
| title | string | New title |
| author | string | New author |
| rating | integer | Rating 1-5 |
| status | string | New status |
| book_id* | integer | Book ID |
| current_page | integer | Current page (updates reading progress) |
{
"type": "object",
"required": [
"book_id"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags"
},
"notes": {
"type": "string",
"description": "Personal notes"
},
"title": {
"type": "string",
"description": "New title"
},
"author": {
"type": "string",
"description": "New author"
},
"rating": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Rating 1-5"
},
"status": {
"enum": [
"wishlist",
"reading",
"to_check",
"completed",
"abandoned"
],
"type": "string",
"description": "New status"
},
"book_id": {
"type": "integer",
"description": "Book ID"
},
"current_page": {
"type": "integer",
"description": "Current page (updates reading progress)"
}
}
}Update a contact. Use mark_contacted=true to record a check-in with today's date.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Contact ID |
| name | string | Full name; split into first and last name at the first space |
| string | ||
| notes | string | Notes |
| phone | string | Phone |
| company | string | Company |
| birthday | string | Birthday (Y-m-d). Year unknown: use 1604 as the year |
| last_name | string | Last name (empty string clears it) |
| first_name | string | First name |
| is_favorite | boolean | Favorite status |
| relationship | string | Type |
Update the daily journal: set mood (1-5), energy (1-5), focus text, morning/evening notes.
| Argument | Type | Description |
|---|---|---|
| date | string | Date to update (Y-m-d, defaults to today) |
| mood | integer | Mood rating 1-5 |
| energy | integer | Energy rating 1-5 |
| focus_text | string | Today's focus/intention text (max 255 characters) |
| evening_note | string | Evening reflection note |
| morning_note | string | Morning journal note |
| focus_completed | boolean | Whether the focus was achieved |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to update (Y-m-d, defaults to today)"
},
"mood": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Mood rating 1-5"
},
"energy": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Energy rating 1-5"
},
"focus_text": {
"type": "string",
"description": "Today's focus/intention text (max 255 characters)"
},
"evening_note": {
"type": "string",
"description": "Evening reflection note"
},
"morning_note": {
"type": "string",
"description": "Morning journal note"
},
"focus_completed": {
"type": "boolean",
"description": "Whether the focus was achieved"
}
}
}Update a goal: change status, progress, toggle milestones, or add a progress note.
| Argument | Type | Description |
|---|---|---|
| note | string | Progress update note (saved in goal timeline) |
| title | string | New title |
| status | string | New status |
| goal_id* | integer | Goal ID |
| priority | integer | Priority: 1=high, 2=medium, 3=low |
| description | string | New description |
| start_value | number | Value the goal started from; progress is measured from it (use for goals that go down, e.g. 90 -> 80 kg) |
| target_date | string | New target date (Y-m-d) |
| current_value | number | Current value (for numeric goals, >= 0) |
| target_value_num | number | Target value (numeric and habit goals) |
Update an existing habit. Only provided fields are changed.
| Argument | Type | Description |
|---|---|---|
| icon | string | Lucide icon name (lowercase, dashes), e.g. book-open |
| name | string | New habit name |
| unit | string | New unit label |
| color | string | Color as #rrggbb, e.g. #10AC84 |
| active | boolean | Enable or disable the habit |
| habit_id* | integer | ID of the habit to update |
| time_of_day | string | When during the day |
| target_value | integer | New target count value |
| tracking_type | string | New tracking type |
| times_per_week | integer | New times per week target (1-7) |
| target_duration | integer |
Update a project: change name, tier, status, goal link, or target date.
| Argument | Type | Description |
|---|---|---|
| url | string | Project URL |
| icon | string | Lucide icon name |
| name | string | New name |
| tier | string | New tier |
| color | string | Color hex |
| status | string | New status |
| goal_id | integer | Link to goal by ID (0 to unlink) |
| project_id* | integer | Project ID |
| description | string | New description |
| target_date | string | Target date (Y-m-d) |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"url": {
"type": "string",
"description": "Project URL"
},
"icon": {
"type": "string",
"description": "Lucide icon name"
},
"name": {
"type": "string",
"description": "New name"
},
"tier": {
"enum": [
"A",
"B",
"C"
],
"type": "string",
"description": "New tier"
},
"color": {
"type": "string",
"description": "Color hex"
},
"status": {
"enum": [
"active",
"paused",
"completed",
"archived"
],
"type": "string",
"description": "New status"
},
"goal_id": {
"type": "integer",
"description": "Link to goal by ID (0 to unlink)"
},
"project_id": {
"type": "integer",
"description": "Project ID"
},
"description": {
"type": "string",
"description": "New description"
},
"target_date": {
"type": "string",
"description": "Target date (Y-m-d)"
}
}
}Update an existing task. Only provided fields are changed.
| Argument | Type | Description |
|---|---|---|
| title | string | New title |
| status | string | New status |
| is_top3 | boolean | Set Top 3 status |
| task_id* | integer | ID of the task to update |
| due_date | string | New due date (Y-m-d) |
| priority | integer | Priority: 1=high, 2=medium, 3=low |
| project_id | integer | Assign to project by ID |
| description | string | New description |
{
"type": "object",
"required": [
"task_id"
],
"properties": {
"title": {
"type": "string",
"description": "New title"
},
"status": {
"enum": [
"pending",
"in_progress"
],
"type": "string",
"description": "New status"
},
"is_top3": {
"type": "boolean",
"description": "Set Top 3 status"
},
"task_id": {
"type": "integer",
"description": "ID of the task to update"
},
"due_date": {
"type": "string",
"description": "New due date (Y-m-d)"
},
"priority": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "Priority: 1=high, 2=medium, 3=low"
},
"project_id": {
"type": "integer",
"description": "Assign to project by ID"
},
"description": {
"type": "string",
"description": "New description"
}
}
}Update a wishlist item — mark it purchased or cancelled, change priority, price or notes. Purchased and cancelled items drop out of the active list.
| Argument | Type | Description |
|---|---|---|
| url | string | Product URL (http or https) |
| name | string | New name |
| notes | string | Notes — reasoning, alternatives considered, purchase trigger |
| status | string | pending = still wanted · purchased = bought · cancelled = no longer wanted |
| item_id* | integer | Wishlist item ID |
| category | string | Category |
| currency | string | 3-letter currency code of the prices, e.g. GBP |
| priority | string | high | medium | low | waiting (waiting = wanted but gated on a trigger) |
| price_max | number | Upper price estimate |
| price_min | number | Lower price estimate |
Get a comprehensive weekly review: tasks, habits, mood/energy, portfolio, books, focus time.
| Argument | Type | Description |
|---|---|---|
| week | string | ISO week format like "2026-W13" (defaults to current week) |
{
"type": "object",
"properties": {
"week": {
"type": "string",
"description": "ISO week format like \"2026-W13\" (defaults to current week)"
}
}
}| relationship | string | Relationship type |
| contact_frequency_days | integer | Remind to contact every N days |
{
"type": "object",
"required": [
"first_name"
],
"properties": {
"city": {
"type": "string",
"description": "City/location"
},
"tags": {
"type": "array",
"description": "Tags array, e.g. [\"investor\", \"design\"]"
},
"email": {
"type": "string",
"description": "Email address"
},
"notes": {
"type": "string",
"description": "Notes about this person"
},
"phone": {
"type": "string",
"description": "Phone number"
},
"company": {
"type": "string",
"description": "Company/organization"
},
"birthday": {
"type": "string",
"description": "Birthday (Y-m-d). Year unknown: use 1604 as the year"
},
"last_name": {
"type": "string",
"description": "Last name"
},
"first_name": {
"type": "string",
"description": "First name"
},
"how_we_met": {
"type": "string",
"description": "How you met this person"
},
"project_id": {
"type": "integer",
"description": "Link to project by ID"
},
"relationship": {
"enum": [
"family",
"friend",
"work",
"mentor",
"other"
],
"type": "string",
"description": "Relationship type"
},
"contact_frequency_days": {
"type": "integer",
"description": "Remind to contact every N days"
}
}
}| target_value_num |
| number |
| Target value (for numeric goals) |
{
"type": "object",
"required": [
"title"
],
"properties": {
"unit": {
"type": "string",
"description": "Unit of measurement (for numeric goals)"
},
"title": {
"type": "string",
"description": "Goal title"
},
"category": {
"type": "string",
"description": "Category (e.g., Health, Career, Finance)"
},
"priority": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "Priority: 1=high, 2=medium, 3=low"
},
"goal_type": {
"enum": [
"milestone",
"numeric",
"habit",
"vision"
],
"type": "string",
"description": "Type"
},
"milestones": {
"type": "array",
"description": "Milestones array [{title: \"...\"}] (for milestone goals)"
},
"description": {
"type": "string",
"description": "Goal description"
},
"start_value": {
"type": "number",
"description": "Starting value; defaults to current_value. Lets goals that go down (90 -> 80 kg) show progress"
},
"target_date": {
"type": "string",
"description": "Target date (Y-m-d)"
},
"current_value": {
"type": "number",
"description": "Current value (numeric goals, >= 0)"
},
"target_value_num": {
"type": "number",
"description": "Target value (for numeric goals)"
}
}
}| shoulders |
| number |
| Shoulders circumference in cm |
| right_quad | number | Right quad circumference in cm |
| measured_at | string | Measurement date (Y-m-d, defaults to now) |
| waist_navel | number | Waist at the navel in cm — secondary |
{
"type": "object",
"properties": {
"hips": {
"type": "number",
"description": "Hips circumference in cm"
},
"neck": {
"type": "number",
"description": "Neck circumference in cm"
},
"chest": {
"type": "number",
"description": "Chest circumference in cm"
},
"notes": {
"type": "string",
"description": "Notes"
},
"waist": {
"type": "number",
"description": "Natural waist (narrowest point) in cm — the primary trend metric"
},
"vo2max": {
"type": "number",
"description": "VO2 max"
},
"weight": {
"type": "number",
"description": "Weight in kg"
},
"body_fat": {
"type": "number",
"description": "Body fat percentage"
},
"left_arm": {
"type": "number",
"description": "Left arm circumference in cm"
},
"left_quad": {
"type": "number",
"description": "Left quad circumference in cm"
},
"right_arm": {
"type": "number",
"description": "Right arm circumference in cm"
},
"shoulders": {
"type": "number",
"description": "Shoulders circumference in cm"
},
"right_quad": {
"type": "number",
"description": "Right quad circumference in cm"
},
"measured_at": {
"type": "string",
"description": "Measurement date (Y-m-d, defaults to now)"
},
"waist_navel": {
"type": "number",
"description": "Waist at the navel in cm — secondary"
}
}
}| boolean |
| False when the day was only partially logged — excluded from averages |
{
"type": "object",
"required": [
"log_date"
],
"properties": {
"fat_g": {
"type": "integer",
"description": "Total fat in grams"
},
"notes": {
"type": "string",
"description": "Notes"
},
"carbs_g": {
"type": "integer",
"description": "Total carbs in grams"
},
"entries": {
"type": "array",
"items": {
"type": "object"
},
"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\"}"
},
"fiber_g": {
"type": "integer",
"description": "Total fiber in grams"
},
"sugar_g": {
"type": "integer",
"description": "Total sugar in grams"
},
"calories": {
"type": "integer",
"description": "Total calories for the day"
},
"log_date": {
"type": "string",
"description": "Date (Y-m-d)"
},
"protein_g": {
"type": "integer",
"description": "Total protein in grams"
},
"sodium_mg": {
"type": "integer",
"description": "Total sodium in mg"
},
"is_complete": {
"type": "boolean",
"description": "False when the day was only partially logged — excluded from averages"
}
}
}| duration_minutes | integer | Duration in minutes |
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"push",
"pull",
"legs",
"upper",
"lower",
"full_body",
"zone2",
"cardio",
"other"
],
"type": "string",
"description": "Workout type"
},
"notes": {
"type": "string",
"description": "Notes"
},
"avg_hr": {
"type": "integer",
"description": "Average heart rate"
},
"max_hr": {
"type": "integer",
"description": "Max heart rate"
},
"min_hr": {
"type": "integer",
"description": "Min heart rate"
},
"calories": {
"type": "integer",
"description": "Total calories burned"
},
"ended_at": {
"type": "string",
"description": "Session end (Y-m-d H:i:s)"
},
"location": {
"type": "string",
"description": "Where the session happened"
},
"started_at": {
"type": "string",
"description": "Session start (Y-m-d H:i:s)"
},
"workout_date": {
"type": "string",
"description": "Workout date (Y-m-d, defaults to today)"
},
"active_calories": {
"type": "integer",
"description": "Active calories (Apple Watch)"
},
"duration_minutes": {
"type": "integer",
"description": "Duration in minutes"
}
}
}| mark_contacted |
| boolean |
| Mark as contacted today |
| contact_frequency_days | integer | Contact reminder interval in days |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"description": "Contact ID"
},
"name": {
"type": "string",
"description": "Full name; split into first and last name at the first space"
},
"email": {
"type": "string",
"description": "Email"
},
"notes": {
"type": "string",
"description": "Notes"
},
"phone": {
"type": "string",
"description": "Phone"
},
"company": {
"type": "string",
"description": "Company"
},
"birthday": {
"type": "string",
"description": "Birthday (Y-m-d). Year unknown: use 1604 as the year"
},
"last_name": {
"type": "string",
"description": "Last name (empty string clears it)"
},
"first_name": {
"type": "string",
"description": "First name"
},
"is_favorite": {
"type": "boolean",
"description": "Favorite status"
},
"relationship": {
"enum": [
"family",
"friend",
"work",
"mentor",
"other"
],
"type": "string",
"description": "Type"
},
"mark_contacted": {
"type": "boolean",
"description": "Mark as contacted today"
},
"contact_frequency_days": {
"type": "integer",
"description": "Contact reminder interval in days"
}
}
}| toggle_milestone |
| integer |
| Toggle milestone by index (0-based). Ticking the last open one completes the goal; unticking reopens it. |
{
"type": "object",
"required": [
"goal_id"
],
"properties": {
"note": {
"type": "string",
"description": "Progress update note (saved in goal timeline)"
},
"title": {
"type": "string",
"description": "New title"
},
"status": {
"enum": [
"active",
"paused",
"completed",
"abandoned"
],
"type": "string",
"description": "New status"
},
"goal_id": {
"type": "integer",
"description": "Goal ID"
},
"priority": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "Priority: 1=high, 2=medium, 3=low"
},
"description": {
"type": "string",
"description": "New description"
},
"start_value": {
"type": "number",
"description": "Value the goal started from; progress is measured from it (use for goals that go down, e.g. 90 -> 80 kg)"
},
"target_date": {
"type": "string",
"description": "New target date (Y-m-d)"
},
"current_value": {
"type": "number",
"description": "Current value (for numeric goals, >= 0)"
},
"target_value_num": {
"type": "number",
"description": "Target value (numeric and habit goals)"
},
"toggle_milestone": {
"type": "integer",
"description": "Toggle milestone by index (0-based). Ticking the last open one completes the goal; unticking reopens it."
}
}
}| New target duration in minutes (5-480) |
{
"type": "object",
"required": [
"habit_id"
],
"properties": {
"icon": {
"type": "string",
"description": "Lucide icon name (lowercase, dashes), e.g. book-open"
},
"name": {
"type": "string",
"description": "New habit name"
},
"unit": {
"type": "string",
"description": "New unit label"
},
"color": {
"type": "string",
"description": "Color as #rrggbb, e.g. #10AC84"
},
"active": {
"type": "boolean",
"description": "Enable or disable the habit"
},
"habit_id": {
"type": "integer",
"description": "ID of the habit to update"
},
"time_of_day": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string",
"description": "When during the day"
},
"target_value": {
"type": "integer",
"description": "New target count value"
},
"tracking_type": {
"enum": [
"check",
"count",
"duration",
"times_per_week"
],
"type": "string",
"description": "New tracking type"
},
"times_per_week": {
"type": "integer",
"description": "New times per week target (1-7)"
},
"target_duration": {
"type": "integer",
"description": "New target duration in minutes (5-480)"
}
}
}| purchased_at | string | Purchase date (Y-m-d). Defaults to today when status becomes purchased. |
{
"type": "object",
"required": [
"item_id"
],
"properties": {
"url": {
"type": "string",
"description": "Product URL (http or https)"
},
"name": {
"type": "string",
"description": "New name"
},
"notes": {
"type": "string",
"description": "Notes — reasoning, alternatives considered, purchase trigger"
},
"status": {
"enum": [
"pending",
"purchased",
"cancelled"
],
"type": "string",
"description": "pending = still wanted · purchased = bought · cancelled = no longer wanted"
},
"item_id": {
"type": "integer",
"description": "Wishlist item ID"
},
"category": {
"type": "string",
"description": "Category"
},
"currency": {
"type": "string",
"description": "3-letter currency code of the prices, e.g. GBP"
},
"priority": {
"enum": [
"high",
"medium",
"low",
"waiting"
],
"type": "string",
"description": "high | medium | low | waiting (waiting = wanted but gated on a trigger)"
},
"price_max": {
"type": "number",
"description": "Upper price estimate"
},
"price_min": {
"type": "number",
"description": "Lower price estimate"
},
"purchased_at": {
"type": "string",
"description": "Purchase date (Y-m-d). Defaults to today when status becomes purchased."
}
}
}