Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,524Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:007eb6f24722c63a977b26d6c93a281becc3c106b6d559db780e148c6f7833ec
What it is
What a remote MCP server returned when asked what it offers: 62 tools

The blob, as servednamed by its sha256

{ "instructions": "Framezone is the signed-in user's personal life dashboard: tasks with a daily\nTop 3, projects, habits and streaks, goals, focus sessions, a daily journal\n(mood and energy), notes, books and quotes, money (accounts, transactions,\nsubscriptions, portfolio), fitness (workouts, body measurements, nutrition) and\ncontacts. Every tool is scoped to that user; no other account's data is\nreachable.\n\nHOW TO HELP\n- Broad questions (\"how was my week?\", \"what should I focus on?\"): start with\n weekly_summary, or list_tasks with is_top3=true plus list_habits for today,\n before reading anything else.\n- Looking for something by name: use search first.\n- The Top 3 is the user's own pick of today's three priorities. Suggest\n changes, but don't replace or reorder it unless asked.\n- Ask before deleting anything and before bulk changes. Delete tools only work\n if the user granted the delete permission when connecting.\n- If a create tool says a Free plan limit was reached, tell the user plainly\n that they can archive or finish an item, or upgrade. Don't retry.\n- Money is stored per account currency. Never add amounts in different\n currencies together as if they were one; say which currency you mean.\n\nConventions: dates are Y-m-d. Task priority 1=high, 2=medium, 3=low. Mood and\nenergy are 1-5. Project tiers are A/B/C. Goal types: milestone, numeric, habit,\nvision.\n\nWHAT IS HIDDEN BY DEFAULT\nLists mirror what the user sees on screen, which means they omit things on\npurpose. Archived tasks, archived projects, and purchased or cancelled wishlist\nitems are excluded unless you ask for them. An empty result therefore means\n\"nothing active\", not \"nothing exists\" — say which set you searched before\nconcluding something is gone.\n\nNUTRITION — READ THIS BEFORE INTERPRETING ANY FOOD DATA\n- `is_complete: false` marks a day the user only partly logged. Those days are\n stored and shown but never averaged. One half-logged day left in an average\n turns a surplus into an apparent deficit.\n- Today is ALWAYS excluded from averages, whatever it is flagged as. A day still\n in progress is not a data point. For \"what is left to eat today\", read\n `latest_day` from get_fitness_summary, never the averages.\n- A day can carry totals with no line items — an import or a phone sync may\n report a total covering food it never itemised. Totals larger than the sum of\n the items are correct, not a bug.\n- Sodium and sugar are stored but deliberately not judged against targets:\n food-logging apps attach unreliable figures to restaurant and unrecognised\n items. Do not build advice on them.\n- Macro targets are not all floors. Protein and fiber are floors, calories,\n carbs and fat are bands where over is as wrong as under.\n\nFITNESS\n- The waist measurement is the canary for a bulk: it moves before the scale\n tells the truth about what the surplus became. Check `waist.stale_days` — the\n rule is worthless on an old measurement.\n- Weight verdicts: `wrong_way` means moving opposite to the goal, which is not\n the same problem as `too_slow`.\n- Before logging sets, call list_exercises and use the catalog name. Free text\n is accepted and fuzzy-matched, but a near-miss creates a new movement and\n splits that lift's history in two.\n- log_workout_sets reads gym shorthand: \"lateral raise 5kg 4x12\",\n \"2min rowing machine\", \"triceps pushdown 14kg 3 sets\".\n- Fitness writes are not append-only any more, and you are expected to fix your\n own mistakes rather than leave them: delete_workout_sets removes one movement\n or, with duplicates_only, the repeated blocks left by a log sent twice;\n delete_workout drops a whole session; delete_body_measurement clears a bad\n entry. A doubled session is not cosmetic — it doubles session volume and\n breaks every progression comparison drawn from it.\n\nSIDE EFFECTS WORTH KNOWING\n- Archiving a project archives its open tasks; restoring it brings back the ones\n that archive took, and only those. update_project reports the count.\n- log_nutrition replaces a day's line items wholesale — send the complete list.\n- Re-sending the same block to log_workout_sets no longer doubles it: blocks\n already on that date with the same load and set count are skipped and named\n back to you. Pass allow_duplicates only when the work genuinely happened twice.\n- log_workout on a date that already carries a session of that type updates it\n instead of opening a second one, leaving its sets alone.", "tools": [ { "description": "Save a bookmark URL with optional title, description, category, and tags.", "inputSchema": { "properties": { "category": { "description": "Category", "type": "string" }, "description": { "description": "Description", "type": "string" }, "tags": { "description": "Tags", "items": { "type": "string" }, "type": "array" }, "title": { "description": "Title (auto-detected from domain if omitted)", "type": "string" }, "url": { "description": "Bookmark URL", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "add_bookmark", "outputSchema": null }, { "description": "Record a buy or sell trade for a portfolio holding. Updates shares and average cost.", "inputSchema": { "properties": { "holding_id": { "description": "Holding ID", "type": "integer" }, "notes": { "description": "Trade notes", "type": "string" }, "price_per_share": { "description": "Price per share", "type": "number" }, "shares": { "description": "Number of shares", "type": "number" }, "traded_at": { "description": "Trade date (Y-m-d, defaults to now)", "type": "string" }, "type": { "description": "Trade type", "enum": [ "buy", "sell" ], "type": "string" } }, "required": [ "holding_id", "type", "shares", "price_per_share" ], "type": "object" }, "name": "add_trade", "outputSchema": null }, { "description": "Add a financial transaction (income or expense) to an account with optional category.", "inputSchema": { "properties": { "account_id": { "description": "Account ID (see list_accounts). Defaults to the user's main account.", "type": "integer" }, "amount": { "description": "Transaction amount (positive number)", "type": "number" }, "category_id": { "description": "Category ID", "type": "integer" }, "description": { "description": "What is this transaction for", "type": "string" }, "notes": { "description": "Additional notes", "type": "string" }, "transaction_date": { "description": "Date (Y-m-d, defaults to today)", "type": "string" }, "type": { "description": "Transaction type", "enum": [ "income", "expense", "transfer" ], "type": "string" } }, "required": [ "amount", "type", "description" ], "type": "object" }, "name": "add_transaction", "outputSchema": null }, { "description": "Add a personal fact to the user's AI memory. Keep it concise (1-2 sentences). Max 50 memories per user.", "inputSchema": { "properties": { "category": { "description": "Memory category", "enum": [ "personal", "career", "lifestyle", "values", "finance", "random" ], "type": "string" }, "content": { "description": "The memory content (max 500 chars, 1-2 sentences)", "type": "string" } }, "required": [ "content" ], "type": "object" }, "name": "add_user_memory", "outputSchema": null }, { "description": "Add an item to the wishlist with price range, priority, and optional URL.", "inputSchema": { "properties": { "category": { "description": "Category", "type": "string" }, "currency": { "description": "3-letter currency code, e.g. GBP. Defaults to the user's currency", "type": "string" }, "description": { "description": "Description", "type": "string" }, "name": { "description": "Item name", "type": "string" }, "notes": { "description": "Notes", "type": "string" }, "price_max": { "description": "Maximum price", "type": "number" }, "price_min": { "description": "Minimum price", "type": "number" }, "priority": { "description": "Priority", "enum": [ "high", "medium", "low", "waiting" ], "type": "string" }, "url": { "description": "Product URL", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "add_wishlist_item", "outputSchema": null }, { "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.", "inputSchema": { "properties": { "current_end": { "description": "Current period end (Y-m-d). Default: today", "type": "string" }, "current_start": { "description": "Current period start (Y-m-d). Default: 7 days ago", "type": "string" }, "previous_end": { "description": "Previous period end (Y-m-d). Default: 7 days ago", "type": "string" }, "previous_start": { "description": "Previous period start (Y-m-d). Default: 14 days ago", "type": "string" }, "project_id": { "description": "Project ID (required)", "type": "integer" } }, "required": [ "project_id" ], "type": "object" }, "name": "compare_analytics_periods", "outputSchema": null }, { "description": "Toggle a task between completed and pending. Cascades to subtasks and handles recurrence.", "inputSchema": { "properties": { "task_id": { "description": "ID of the task to complete/uncomplete", "type": "integer" } }, "required": [ "task_id" ], "type": "object" }, "name": "complete_task", "outputSchema": null }, { "description": "Add a book to your library. Set status to \"reading\", \"wishlist\", \"to_check\", etc.", "inputSchema": { "properties": { "author": { "description": "Author name", "type": "string" }, "notes": { "description": "Personal notes about the book", "type": "string" }, "pages": { "description": "Total pages", "type": "integer" }, "rating": { "description": "Rating 1-5", "enum": [ 1, 2, 3, 4, 5 ], "type": "integer" }, "status": { "description": "Reading status", "enum": [ "wishlist", "reading", "to_check", "completed", "abandoned" ], "type": "string" }, "tags": { "description": "Tags", "items": { "type": "string" }, "type": "array" }, "title": { "description": "Book title", "type": "string" } }, "required": [ "title" ], "type": "object" }, "name": "create_book", "outputSchema": null }, { "description": "Create a new contact (personal CRM). Track birthdays, relationship types, and contact frequency reminders.", "inputSchema": { "properties": { "birthday": { "description": "Birthday (Y-m-d). Year unknown: use 1604 as the year", "type": "string" }, "city": { "description": "City/location", "type": "string" }, "company": { "description": "Company/organization", "type": "string" }, "contact_frequency_days": { "description": "Remind to contact every N days", "type": "integer" }, "email": { "description": "Email address", "type": "string" }, "first_name": { "description": "First name", "type": "string" }, "how_we_met": { "description": "How you met this person", "type": "string" }, "last_name": { "description": "Last name", "type": "string" }, "notes": { "description": "Notes about this person", "type": "string" }, "phone": { "description": "Phone number", "type": "string" }, "project_id": { "description": "Link to project by ID", "type": "integer" }, "relationship": { "description": "Relationship type", "enum": [ "family", "friend", "work", "mentor", "other" ], "type": "string" }, "tags": { "description": "Tags array, e.g. [\"investor\", \"design\"]", "type": "array" } }, "required": [ "first_name" ], "type": "object" }, "name": "create_contact", "outputSchema": null }, { "description": "Create a new goal. Types: milestone (checklist), numeric (value tracking), habit, vision.", "inputSchema": { "properties": { "category": { "description": "Category (e.g., Health, Career, Finance)", "type": "string" }, "current_value": { "description": "Current value (numeric goals, >= 0)", "type": "number" }, "description": { "description": "Goal description", "type": "string" }, "goal_type": { "description": "Type", "enum": [ "milestone", "numeric", "habit", "vision" ], "type": "string" }, "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" }, "start_value": { "description": "Starting value; defaults to current_value. Lets goals that go down (90 -> 80 kg) show progress", "type": "number" }, "target_date": { "description": "Target date (Y-m-d)", "type": "string" }, "target_value_num": { "description": "Target value (for numeric goals)", "type": "number" }, "title": { "description": "Goal title", "type": "string" }, "unit": { "description": "Unit of measurement (for numeric goals)", "type": "string" } }, "required": [ "title" ], "type": "object" }, "name": "create_goal", "outputSchema": null }, { "description": "Create a new habit. Tracking types: check (daily toggle), count (hit a number), duration (minutes), times_per_week (weekly frequency).", "inputSchema": { "properties": { "color": { "description": "Color as #rrggbb, e.g. #10AC84", "type": "string" }, "icon": { "description": "Lucide icon name (lowercase, dashes), e.g. book-open", "type": "string" }, "name": { "description": "Habit name", "type": "string" }, "target_duration": { "description": "Target duration in minutes (for duration type, 5-480)", "type": "integer" }, "target_value": { "description": "Target count value (for count type)", "type": "integer" }, "time_of_day": { "description": "When during the day", "enum": [ "morning", "afternoon", "evening" ], "type": "string" }, "times_per_week": { "description": "Times per week target (for times_per_week type, 1-7)", "type": "integer" }, "tracking_type": { "description": "Tracking type (default: check)", "enum": [ "check", "count", "duration", "times_per_week" ], "type": "string" }, "unit": { "description": "Unit label (e.g., \"pages\", \"glasses\")", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "create_habit", "outputSchema": null }, { "description": "Create a new note with title, body text, and optional tags.", "inputSchema": { "properties": { "body": { "description": "Note body (plain text)", "type": "string" }, "is_pinned": { "description": "Pin this note", "type": "boolean" }, "project_id": { "description": "Link to project by ID", "type": "integer" }, "tags": { "description": "Tags array", "items": { "type": "string" }, "type": "array" }, "title": { "description": "Note title", "type": "string" } }, "required": [ "title", "body" ], "type": "object" }, "name": "create_note", "outputSchema": null }, { "description": "Create a new project with tier (A/B/C), optional goal link, and target date.", "inputSchema": { "properties": { "color": { "description": "Color hex code (e.g., #3B82F6)", "type": "string" }, "description": { "description": "Project description", "type": "string" }, "goal_id": { "description": "Link to a goal by ID", "type": "integer" }, "icon": { "description": "Lucide icon name", "type": "string" }, "name": { "description": "Project name", "type": "string" }, "status": { "description": "Initial status", "enum": [ "active", "paused" ], "type": "string" }, "target_date": { "description": "Target completion date (Y-m-d)", "type": "string" }, "tier": { "description": "Priority tier", "enum": [ "A", "B", "C" ], "type": "string" }, "url": { "description": "Project URL", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "create_project", "outputSchema": null }, { "description": "Save a quote with author and optional book link.", "inputSchema": { "properties": { "author": { "description": "Who said/wrote it", "type": "string" }, "body": { "description": "The quote text", "type": "string" }, "book_id": { "description": "Link to a book by ID", "type": "integer" }, "is_favorite": { "description": "Mark as favorite", "type": "boolean" }, "source": { "description": "Source (book title, speech, etc.)", "type": "string" }, "tags": { "description": "Tags", "items": { "type": "string" }, "type": "array" } }, "required": [ "body" ], "type": "object" }, "name": "create_quote", "outputSchema": null }, { "description": "Add a recurring subscription (monthly, yearly, or weekly).", "inputSchema": { "properties": { "amount": { "description": "Amount per billing period", "type": "number" }, "category_id": { "description": "Category ID", "type": "integer" }, "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" }, "name": { "description": "Subscription name (e.g., Netflix, Spotify)", "type": "string" }, "next_billing_date": { "description": "Next billing date (Y-m-d)", "type": "string" }, "notes": { "description": "Notes", "type": "string" }, "url": { "description": "Service URL (http or https)", "type": "string" } }, "required": [ "name", "amount" ], "type": "object" }, "name": "create_subscription", "outputSchema": null }, { "description": "Create a new task with optional project, priority, due date, and recurrence.", "inputSchema": { "properties": { "description": { "description": "Task description", "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" }, "priority": { "description": "Priority: 1=high, 2=medium, 3=low", "enum": [ 1, 2, 3 ], "type": "integer" }, "project_id": { "description": "Assign to project by ID", "type": "integer" }, "recurrence": { "description": "Recurrence pattern", "enum": [ "daily", "weekly", "monthly" ], "type": "string" }, "status": { "description": "Initial status", "enum": [ "pending", "in_progress" ], "type": "string" }, "title": { "description": "Task title", "type": "string" } }, "required": [ "title" ], "type": "object" }, "name": "create_task", "outputSchema": null }, { "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.", "inputSchema": { "properties": { "measured_at": { "description": "Delete every measurement on this date (Y-m-d)", "type": "string" }, "measurement_id": { "description": "Id of the measurement to delete", "type": "integer" } }, "type": "object" }, "name": "delete_body_measurement", "outputSchema": null }, { "description": "Delete a book from the library.", "inputSchema": { "properties": { "book_id": { "description": "ID of the book to delete", "type": "integer" } }, "required": [ "book_id" ], "type": "object" }, "name": "delete_book", "outputSchema": null }, { "description": "Delete a bookmark permanently.", "inputSchema": { "properties": { "bookmark_id": { "description": "ID of the bookmark to delete", "type": "integer" } }, "required": [ "bookmark_id" ], "type": "object" }, "name": "delete_bookmark", "outputSchema": null }, { "description": "Soft-delete a note.", "inputSchema": { "properties": { "note_id": { "description": "ID of the note to delete", "type": "integer" } }, "required": [ "note_id" ], "type": "object" }, "name": "delete_note", "outputSchema": null }, { "description": "Soft-delete a task (can be restored later).", "inputSchema": { "properties": { "task_id": { "description": "ID of the task to delete", "type": "integer" } }, "required": [ "task_id" ], "type": "object" }, "name": "delete_task", "outputSchema": null }, { "description": "Delete a specific AI memory entry by ID.", "inputSchema": { "properties": { "id": { "description": "ID of the memory to delete", "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "delete_user_memory", "outputSchema": null }, { "description": "Delete a whole training session and every set in it. To remove only part of a session use delete_workout_sets.", "inputSchema": { "properties": { "type": { "description": "Narrow to one session type on that date", "enum": [ "push", "pull", "legs", "upper", "lower", "full_body", "zone2", "cardio", "other" ], "type": "string" }, "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": "object" }, "name": "delete_workout", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "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" }, "exercise": { "description": "Remove every set of this movement from the session, e.g. \"leg press\"", "type": "string" }, "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": "object" }, "name": "delete_workout_sets", "outputSchema": null }, { "description": "Get the daily journal entry for a date: mood, energy, focus, morning/evening notes.", "inputSchema": { "properties": { "date": { "description": "Date to get (Y-m-d, defaults to today)", "type": "string" } }, "type": "object" }, "name": "get_daily_entry", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "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" }, "nutrition_days": { "description": "Nutrition averaging window in days (default 7)", "type": "integer" }, "training_days": { "description": "Training window in days (default 28)", "type": "integer" } }, "type": "object" }, "name": "get_fitness_summary", "outputSchema": null }, { "description": "Get focus time summary: total minutes, sessions, and breakdown by project for a date range.", "inputSchema": { "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" } }, "type": "object" }, "name": "get_focus_summary", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "end_date": { "description": "End date (Y-m-d). Default: today", "type": "string" }, "project_id": { "description": "Project ID (required)", "type": "integer" }, "start_date": { "description": "Start date (Y-m-d). Default: 30 days ago", "type": "string" } }, "required": [ "project_id" ], "type": "object" }, "name": "get_project_analytics", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "end_date": { "description": "End date (Y-m-d). Default: today", "type": "string" }, "limit": { "description": "Max results (default 100, max 500)", "type": "integer" }, "project_id": { "description": "Project ID (required)", "type": "integer" }, "search": { "description": "Filter pages containing this URL path", "type": "string" }, "sort_by": { "description": "Sort by metric", "enum": [ "clicks", "impressions", "ctr", "position" ], "type": "string" }, "start_date": { "description": "Start date (Y-m-d). Default: 30 days ago", "type": "string" } }, "required": [ "project_id" ], "type": "object" }, "name": "get_top_pages", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "end_date": { "description": "End date (Y-m-d). Default: today", "type": "string" }, "limit": { "description": "Max results (default 100, max 500)", "type": "integer" }, "min_clicks": { "description": "Minimum clicks filter", "type": "integer" }, "min_impressions": { "description": "Minimum impressions filter", "type": "integer" }, "project_id": { "description": "Project ID (required)", "type": "integer" }, "search": { "description": "Filter queries containing this text", "type": "string" }, "sort_by": { "description": "Sort by metric", "enum": [ "clicks", "impressions", "ctr", "position" ], "type": "string" }, "start_date": { "description": "Start date (Y-m-d). Default: 30 days ago", "type": "string" } }, "required": [ "project_id" ], "type": "object" }, "name": "get_top_queries", "outputSchema": null }, { "description": "Get the user's AI memory entries — personal facts, preferences, and context that personalize AI responses.", "inputSchema": { "properties": { "category": { "description": "Filter by category", "enum": [ "personal", "career", "lifestyle", "values", "finance", "random" ], "type": "string" } }, "type": "object" }, "name": "get_user_memories", "outputSchema": null }, { "description": "List financial accounts with balances and types.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_accounts", "outputSchema": null }, { "description": "List all achievements: unlocked and locked, with descriptions and unlock dates.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_achievements", "outputSchema": null }, { "description": "List books with optional status filter. Returns title, author, status, progress, and rating.", "inputSchema": { "properties": { "status": { "description": "Filter by status", "enum": [ "wishlist", "reading", "to_check", "completed", "abandoned" ], "type": "string" } }, "type": "object" }, "name": "list_books", "outputSchema": null }, { "description": "List transaction categories with type (income/expense) and monthly budget.", "inputSchema": { "properties": { "type": { "description": "Filter by type", "enum": [ "income", "expense", "both" ], "type": "string" } }, "type": "object" }, "name": "list_categories", "outputSchema": null }, { "description": "List contacts. Filter by relationship type or get contacts needing reach-out.", "inputSchema": { "properties": { "favorites_only": { "description": "Only favorite contacts", "type": "boolean" }, "needs_contact": { "description": "Only contacts overdue for check-in", "type": "boolean" }, "relationship": { "description": "Filter by type", "enum": [ "family", "friend", "work", "mentor", "other" ], "type": "string" } }, "type": "object" }, "name": "list_contacts", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "muscle_group": { "description": "chest, back, shoulders, biceps, triceps, legs, core, cardio", "type": "string" }, "search": { "description": "Match against names and aliases", "type": "string" }, "trained_only": { "description": "Only movements this user has actually logged sets for", "type": "boolean" } }, "type": "object" }, "name": "list_exercises", "outputSchema": null }, { "description": "List goals with progress, type, and status. Supports filtering by status or category.", "inputSchema": { "properties": { "category": { "description": "Filter by category", "type": "string" }, "status": { "description": "Filter by status", "enum": [ "active", "paused", "completed", "abandoned" ], "type": "string" } }, "type": "object" }, "name": "list_goals", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "date": { "description": "Date to check (Y-m-d, defaults to today)", "type": "string" } }, "type": "object" }, "name": "list_habits", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_holdings", "outputSchema": null }, { "description": "List notes, optionally filtered by search query or tag. Returns title, tags, and truncated body.", "inputSchema": { "properties": { "limit": { "description": "Max results (default: 20, max: 50)", "type": "integer" }, "search": { "description": "Search query (matches title and body)", "type": "string" }, "tag": { "description": "Filter by tag name", "type": "string" } }, "type": "object" }, "name": "list_notes", "outputSchema": null }, { "description": "List projects with task counts, tier, status, and linked goal.", "inputSchema": { "properties": { "include_archived": { "description": "Include archived projects in an unfiltered list (default: false)", "type": "boolean" }, "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" } }, "type": "object" }, "name": "list_projects", "outputSchema": null }, { "description": "List saved quotes, optionally filtered by book or favorites only.", "inputSchema": { "properties": { "book_id": { "description": "Filter by book ID", "type": "integer" }, "favorites_only": { "description": "Only show favorites", "type": "boolean" } }, "type": "object" }, "name": "list_quotes", "outputSchema": null }, { "description": "List active subscriptions with amounts, frequency, and next billing date.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_subscriptions", "outputSchema": null }, { "description": "List tasks, optionally filtered by status, priority, project, or top3 flag.", "inputSchema": { "properties": { "include_archived": { "description": "Include archived tasks (default: false)", "type": "boolean" }, "is_top3": { "description": "Only show Top 3 focus tasks", "type": "boolean" }, "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" }, "status": { "description": "Filter by status", "enum": [ "pending", "in_progress", "completed" ], "type": "string" } }, "type": "object" }, "name": "list_tasks", "outputSchema": null }, { "description": "List wishlist items with price, priority, and purchase status.", "inputSchema": { "properties": { "status": { "description": "Filter by status (default: pending)", "enum": [ "pending", "purchased", "cancelled" ], "type": "string" } }, "type": "object" }, "name": "list_wishlist", "outputSchema": null }, { "description": "Log body measurements: weight, body fat %, waist, chest, etc.", "inputSchema": { "properties": { "body_fat": { "description": "Body fat percentage", "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" }, "left_quad": { "description": "Left quad circumference in cm", "type": "number" }, "measured_at": { "description": "Measurement date (Y-m-d, defaults to now)", "type": "string" }, "neck": { "description": "Neck circumference in cm", "type": "number" }, "notes": { "description": "Notes", "type": "string" }, "right_arm": { "description": "Right arm circumference in cm", "type": "number" }, "right_quad": { "description": "Right quad circumference in cm", "type": "number" }, "shoulders": { "description": "Shoulders circumference in cm", "type": "number" }, "vo2max": { "description": "VO2 max", "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" }, "weight": { "description": "Weight in kg", "type": "number" } }, "type": "object" }, "name": "log_body_measurement", "outputSchema": null }, { "description": "Log a completed focus/pomodoro session with duration, project, and task link.", "inputSchema": { "properties": { "duration_minutes": { "description": "Session duration in minutes", "type": "integer" }, "label": { "description": "Session label/name", "type": "string" }, "project_id": { "description": "Link to project", "type": "integer" }, "started_at": { "description": "When it started (Y-m-d H:i, defaults to now minus duration)", "type": "string" }, "task_id": { "description": "Link to task", "type": "integer" }, "type": { "description": "Session type", "enum": [ "pomodoro", "timer" ], "type": "string" } }, "required": [ "duration_minutes" ], "type": "object" }, "name": "log_focus_session", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "date": { "description": "Date to log (Y-m-d, defaults to today, cannot be in the future)", "type": "string" }, "habit_id": { "description": "ID of the habit", "type": "integer" }, "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" ], "type": "object" }, "name": "log_habit", "outputSchema": null }, { "description": "Log a day of nutrition — day totals plus optional food-by-food line items. Re-sending the same date replaces that day.", "inputSchema": { "properties": { "calories": { "description": "Total calories for the day", "type": "integer" }, "carbs_g": { "description": "Total carbs in grams", "type": "integer" }, "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" }, "fat_g": { "description": "Total fat in grams", "type": "integer" }, "fiber_g": { "description": "Total fiber in grams", "type": "integer" }, "is_complete": { "description": "False when the day was only partially logged — excluded from averages", "type": "boolean" }, "log_date": { "description": "Date (Y-m-d)", "type": "string" }, "notes": { "description": "Notes", "type": "string" }, "protein_g": { "description": "Total protein in grams", "type": "integer" }, "sodium_mg": { "description": "Total sodium in mg", "type": "integer" }, "sugar_g": { "description": "Total sugar in grams", "type": "integer" } }, "required": [ "log_date" ], "type": "object" }, "name": "log_nutrition", "outputSchema": null }, { "description": "Log a workout session with type, duration, calories, and heart rate.", "inputSchema": { "properties": { "active_calories": { "description": "Active calories (Apple Watch)", "type": "integer" }, "avg_hr": { "description": "Average heart rate", "type": "integer" }, "calories": { "description": "Total calories burned", "type": "integer" }, "duration_minutes": { "description": "Duration in minutes", "type": "integer" }, "ended_at": { "description": "Session end (Y-m-d H:i:s)", "type": "string" }, "location": { "description": "Where the session happened", "type": "string" }, "max_hr": { "description": "Max heart rate", "type": "integer" }, "min_hr": { "description": "Min heart rate", "type": "integer" }, "notes": { "description": "Notes", "type": "string" }, "started_at": { "description": "Session start (Y-m-d H:i:s)", "type": "string" }, "type": { "description": "Workout type", "enum": [ "push", "pull", "legs", "upper", "lower", "full_body", "zone2", "cardio", "other" ], "type": "string" }, "workout_date": { "description": "Workout date (Y-m-d, defaults to today)", "type": "string" } }, "required": [ "type" ], "type": "object" }, "name": "log_workout", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "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" }, "duration_minutes": { "description": "Session duration in minutes", "type": "integer" }, "notes": { "description": "Notes", "type": "string" }, "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" }, "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" }, "workout_date": { "description": "Date (Y-m-d, defaults to today)", "type": "string" }, "workout_id": { "description": "Add to this session. Needed when the date holds more than one session of the same type.", "type": "integer" } }, "required": [ "sets_text" ], "type": "object" }, "name": "log_workout_sets", "outputSchema": null }, { "description": "Search the user's Framezone data by keyword: tasks, projects, notes, bookmarks, books and goals.", "inputSchema": { "properties": { "query": { "description": "Search query (min 2 characters)", "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search", "outputSchema": null }, { "description": "Update a book: change status, rating, notes, or update reading progress (current page).", "inputSchema": { "properties": { "author": { "description": "New author", "type": "string" }, "book_id": { "description": "Book ID", "type": "integer" }, "current_page": { "description": "Current page (updates reading progress)", "type": "integer" }, "notes": { "description": "Personal notes", "type": "string" }, "rating": { "description": "Rating 1-5", "enum": [ 1, 2, 3, 4, 5 ], "type": "integer" }, "status": { "description": "New status", "enum": [ "wishlist", "reading", "to_check", "completed", "abandoned" ], "type": "string" }, "tags": { "description": "Tags", "items": { "type": "string" }, "type": "array" }, "title": { "description": "New title", "type": "string" } }, "required": [ "book_id" ], "type": "object" }, "name": "update_book", "outputSchema": null }, { "description": "Update a contact. Use mark_contacted=true to record a check-in with today's date.", "inputSchema": { "properties": { "birthday": { "description": "Birthday (Y-m-d). Year unknown: use 1604 as the year", "type": "string" }, "company": { "description": "Company", "type": "string" }, "contact_frequency_days": { "description": "Contact reminder interval in days", "type": "integer" }, "email": { "description": "Email", "type": "string" }, "first_name": { "description": "First name", "type": "string" }, "id": { "description": "Contact ID", "type": "integer" }, "is_favorite": { "description": "Favorite status", "type": "boolean" }, "last_name": { "description": "Last name (empty string clears it)", "type": "string" }, "mark_contacted": { "description": "Mark as contacted today", "type": "boolean" }, "name": { "description": "Full name; split into first and last name at the first space", "type": "string" }, "notes": { "description": "Notes", "type": "string" }, "phone": { "description": "Phone", "type": "string" }, "relationship": { "description": "Type", "enum": [ "family", "friend", "work", "mentor", "other" ], "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "update_contact", "outputSchema": null }, { "description": "Update the daily journal: set mood (1-5), energy (1-5), focus text, morning/evening notes.", "inputSchema": { "properties": { "date": { "description": "Date to update (Y-m-d, defaults to today)", "type": "string" }, "energy": { "description": "Energy rating 1-5", "enum": [ 1, 2, 3, 4, 5 ], "type": "integer" }, "evening_note": { "description": "Evening reflection note", "type": "string" }, "focus_completed": { "description": "Whether the focus was achieved", "type": "boolean" }, "focus_text": { "description": "Today's focus/intention text (max 255 characters)", "type": "string" }, "mood": { "description": "Mood rating 1-5", "enum": [ 1, 2, 3, 4, 5 ], "type": "integer" }, "morning_note": { "description": "Morning journal note", "type": "string" } }, "type": "object" }, "name": "update_daily_entry", "outputSchema": null }, { "description": "Update a goal: change status, progress, toggle milestones, or add a progress note.", "inputSchema": { "properties": { "current_value": { "description": "Current value (for numeric goals, >= 0)", "type": "number" }, "description": { "description": "New description", "type": "string" }, "goal_id": { "description": "Goal ID", "type": "integer" }, "note": { "description": "Progress update note (saved in goal timeline)", "type": "string" }, "priority": { "description": "Priority: 1=high, 2=medium, 3=low", "enum": [ 1, 2, 3 ], "type": "integer" }, "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" }, "status": { "description": "New status", "enum": [ "active", "paused", "completed", "abandoned" ], "type": "string" }, "target_date": { "description": "New target date (Y-m-d)", "type": "string" }, "target_value_num": { "description": "Target value (numeric and habit goals)", "type": "number" }, "title": { "description": "New title", "type": "string" }, "toggle_milestone": { "description": "Toggle milestone by index (0-based). Ticking the last open one completes the goal; unticking reopens it.", "type": "integer" } }, "required": [ "goal_id" ], "type": "object" }, "name": "update_goal", "outputSchema": null }, { "description": "Update an existing habit. Only provided fields are changed.", "inputSchema": { "properties": { "active": { "description": "Enable or disable the habit", "type": "boolean" }, "color": { "description": "Color as #rrggbb, e.g. #10AC84", "type": "string" }, "habit_id": { "description": "ID of the habit to update", "type": "integer" }, "icon": { "description": "Lucide icon name (lowercase, dashes), e.g. book-open", "type": "string" }, "name": { "description": "New habit name", "type": "string" }, "target_duration": { "description": "New target duration in minutes (5-480)", "type": "integer" }, "target_value": { "description": "New target count value", "type": "integer" }, "time_of_day": { "description": "When during the day", "enum": [ "morning", "afternoon", "evening" ], "type": "string" }, "times_per_week": { "description": "New times per week target (1-7)", "type": "integer" }, "tracking_type": { "description": "New tracking type", "enum": [ "check", "count", "duration", "times_per_week" ], "type": "string" }, "unit": { "description": "New unit label", "type": "string" } }, "required": [ "habit_id" ], "type": "object" }, "name": "update_habit", "outputSchema": null }, { "description": "Update a project: change name, tier, status, goal link, or target date.", "inputSchema": { "properties": { "color": { "description": "Color hex", "type": "string" }, "description": { "description": "New description", "type": "string" }, "goal_id": { "description": "Link to goal by ID (0 to unlink)", "type": "integer" }, "icon": { "description": "Lucide icon name", "type": "string" }, "name": { "description": "New name", "type": "string" }, "project_id": { "description": "Project ID", "type": "integer" }, "status": { "description": "New status", "enum": [ "active", "paused", "completed", "archived" ], "type": "string" }, "target_date": { "description": "Target date (Y-m-d)", "type": "string" }, "tier": { "description": "New tier", "enum": [ "A", "B", "C" ], "type": "string" }, "url": { "description": "Project URL", "type": "string" } }, "required": [ "project_id" ], "type": "object" }, "name": "update_project", "outputSchema": null }, { "description": "Update an existing task. Only provided fields are changed.", "inputSchema": { "properties": { "description": { "description": "New description", "type": "string" }, "due_date": { "description": "New due date (Y-m-d)", "type": "string" }, "is_top3": { "description": "Set Top 3 status", "type": "boolean" }, "priority": { "description": "Priority: 1=high, 2=medium, 3=low", "enum": [ 1, 2, 3 ], "type": "integer" }, "project_id": { "description": "Assign to project by ID", "type": "integer" }, "status": { "description": "New status", "enum": [ "pending", "in_progress" ], "type": "string" }, "task_id": { "description": "ID of the task to update", "type": "integer" }, "title": { "description": "New title", "type": "string" } }, "required": [ "task_id" ], "type": "object" }, "name": "update_task", "outputSchema": null }, { "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.", "inputSchema": { "properties": { "category": { "description": "Category", "type": "string" }, "currency": { "description": "3-letter currency code of the prices, e.g. GBP", "type": "string" }, "item_id": { "description": "Wishlist item ID", "type": "integer" }, "name": { "description": "New name", "type": "string" }, "notes": { "description": "Notes — reasoning, alternatives considered, purchase trigger", "type": "string" }, "price_max": { "description": "Upper price estimate", "type": "number" }, "price_min": { "description": "Lower price estimate", "type": "number" }, "priority": { "description": "high | medium | low | waiting (waiting = wanted but gated on a trigger)", "enum": [ "high", "medium", "low", "waiting" ], "type": "string" }, "purchased_at": { "description": "Purchase date (Y-m-d). Defaults to today when status becomes purchased.", "type": "string" }, "status": { "description": "pending = still wanted · purchased = bought · cancelled = no longer wanted", "enum": [ "pending", "purchased", "cancelled" ], "type": "string" }, "url": { "description": "Product URL (http or https)", "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "update_wishlist_item", "outputSchema": null }, { "description": "Get a comprehensive weekly review: tasks, habits, mood/energy, portfolio, books, focus time.", "inputSchema": { "properties": { "week": { "description": "ISO week format like \"2026-W13\" (defaults to current week)", "type": "string" } }, "type": "object" }, "name": "weekly_summary", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:007eb6f24722c63a977b26d6c93a281becc3c106b6d559db780e148c6f7833ec | sha256sum