Integration details
Description
LIAM is a personal memory assistant. It saves and recalls the facts, preferences, and notes you want to keep across conversations; stores and searches your contacts; keeps multi-step recipes and routines; and logs your meals and receipts with daily nutrition and spending summaries. You can type a request or just upload a photo — a receipt, a meal, a business card, or a note — and LIAM reads it and files it in the right place automatically (a restaurant receipt is logged as both an expense and a meal). Only extracted text/values are stored, never the raw image. Example use cases "Remember I prefer window seats on flights — tag it 'travel'." "Who do I know at Nova Retail?" / "Add Sarah Chen from Acme as a contact." "Log my lunch: chicken caesar salad" → "How much protein did I have today?" "Log this receipt: Loblaws $87.43 groceries" → "How much did I spend today?" Upload a business-card photo → contact created; upload a receipt photo → expense + meal logged.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Personal AI Memory & Second Brain
- Secondary Subcategories
- None listed
- Brand
- NetXD
- Access
- Account required
- First tracked
- 2026-08-15
- Tool count
- 21
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Personal AI Memory & Second Brain
View Category21 tools agents can invoke
Creates and saves a new contact for the authenticated user. IMPORTANT ORCHESTRATION STEPS: - ALWAYS call ListContacts or SearchContactByFullText first to check if the contact already exists — avoid duplicates. - Only include fields that actually have values; all other fields are optional. IMAGE HINT: - If the user uploads a business card photo, extract name, phones, emails, organization, and job title from it and create the contact (after the duplicate check). IDENTITY FIELDS (identity object): - first_name, last_name, full_name, nickname, preferred_name, etc. CONTACT CHANNELS: - phones: array of { number, type, is_primary } - emails: array of { email, type, is_primary } - messaging: whatsapp, telegram, signal, skype, etc. ORGANIZATION FIELDS (organization object): - organization_name, job_title, department, role, industry OTHER FIELDS: - addresses, online_profiles, dates, relationships, tags, notes - compliance, source_metadata, ai_metadata, media RESPONSE: - Full contact object with generated contact_id and audit timestamps - Only fields with values are included in the response
CreateContact
Creates and stores a new memory entry that can be retrieved later. Supports text content. IMPORTANT ORCHESTRATION STEP: - ALWAYS call ListMemory FIRST before creating a new memory - Check if similar or duplicate memories already exist - If duplicates found, inform the user and ask if they want to update the existing memory instead - This prevents memory bloat and maintains data quality - Also check if the user wants to add this memory to a Tag, If so, call ListTags and suggest if the memory can be added to a tag USAGE: Use this tool when the user shares important information, preferences, or facts that should persist across conversations. Provide the memory content in clear text. IMAGE INPUT: - The user can upload a photo instead of typing. Read the image, extract the details, and store them by calling the most appropriate tool(s): - receipt photo -> LogReceipt - meal / menu photo -> LogFood - business card -> CreateContact - note / other -> CreateMemory with a suitable tag - A single image can require MORE THAN ONE tool. A restaurant receipt should be logged with BOTH LogReceipt (the expense) AND LogFood (the meal); add a CreateMemory entry too if there is a noteworthy detail (e.g. "great ramen place near the office"). - Always confirm what was captured before saving so the user can correct it. CONTACT HINT: - If the memory content mentions a person by name (e.g. "met John", "spoke with Sarah from Acme", "John Chen is my account manager"), proactively suggest creating a contact entry - After saving the memory, say something like: "I've saved that memory. It looks like this involves [name] — would you like me to also save them as a contact so you can easily find all information about them later?" - If the user confirms, call CreateContact with whatever details are available from the conversation - Do NOT create the contact silently — always ask first
CreateMemory
Records a multi-step PROCEDURE (a "recipe") that can be replayed later. WHEN TO USE (recipe vs. memory): - Use CreateRecipe when the user describes an ORDERED procedure, a workflow, or "how to do X" — especially with sequential steps or conditional "if ... then ..." logic (e.g. "check my savings; if balance > $2000 move $100 to vacation, then email me"). - Use CreateMemory instead for static facts or preferences with no procedure (e.g. "I prefer window seats", "my dog's name is Rex"). IMPORTANT ORCHESTRATION STEP: - ALWAYS call ListRecipe FIRST to check whether a similar/duplicate procedure already exists. - If a duplicate is found, inform the user and ask whether to update it instead of creating a new one. USAGE: Pass the user's procedural request in the 'statement' field, in plain language. The backend parses it into ordered steps and retrieval tokens.
CreateRecipe
Deletes a previously stored memory so it is no longer available for recall. IMPORTANT ORCHESTRATION STEP: - ALWAYS call ListMemory FIRST to verify the memory exists - Get the exact transaction number from ListMemory results - Confirm with the user which specific memory to delete if multiple matches exist - This prevents accidental deletion of wrong memories USAGE: Use this tool when the user requests to forget, erase, or remove specific information (e.g., personal details, preferences, or facts) they had shared earlier.
ForgetMemory
Deletes a previously stored PROCEDURE ("recipe") so it is no longer available for replay. IMPORTANT ORCHESTRATION STEP: - ALWAYS call ListRecipe FIRST to verify the recipe exists - Take the exact queryHash from the ListRecipe results — never construct or guess it - If multiple recipes match, confirm with the user which one to delete - This prevents accidental deletion of the wrong procedure USAGE: Use this tool when the user asks to forget, remove, or delete a stored workflow or step-by-step procedure. Use ForgetMemory instead for plain facts or preferences.
ForgetRecipe
Retrieves the complete contact record for a given contact_id. ORCHESTRATION NOTE: - Call ListContacts or SearchContactByFullText first if the contact_id is not already known. PARAMETERS: - contact_id: Unique identifier of the contact (required) RESPONSE: - Full contact object with all stored fields - Only fields with values are included (no empty fields) - Includes audit timestamps (created_at, updated_at)
GetContactById
Retrieves a complete daily nutrition report for a specific date, including every meal logged, macro and micro totals, amino acid profile, performance compounds, warnings, and benefits. ORCHESTRATION NOTE: - Call this FIRST when the user asks "how did I eat today?", "what's my nutrition summary?", "how many calories did I have?", or any broad daily nutrition question. - Prefer this over ListFoodLogs when the user wants totals or an overview rather than a raw list. - The response already contains a fully formatted LLM-ready report — present it directly to the user with minimal rephrasing, adding commentary only where helpful (e.g. comparing to goals, flagging warnings). - If no date is provided, default to today. WHEN TO USE: - "What did I eat today / yesterday / on [date]?" - "Show me my nutrition summary" - "How many calories / protein / carbs did I have?" - "Give me a full breakdown of my diet for [date]" - Before giving nutritional advice, call this to ground your response in real data PARAMETERS: - date (optional): YYYY-MM-DD. Omit or leave empty to get today's summary. EXAMPLES: GetDailyFoodSummary() -> today's full report GetDailyFoodSummary(date:"2026-03-31") -> specific date report GetDailyFoodSummary(date:"2026-03-30") -> yesterday's report
GetDailyFoodSummary
Retrieves a complete daily spending summary for a specific date, including all receipts, totals by purchase type, by ledger, by category, by room, and individual receipt breakdowns. ORCHESTRATION NOTE: - Call this FIRST when the user asks "how much did I spend today?", "what did I buy?", "show my spending summary", or any broad daily spending question. - Prefer this over a raw receipt list when the user wants totals or an overview. - The response contains a fully formatted LLM-ready report — present it directly, adding commentary only where helpful (e.g. flagging high spend categories). - If no date is provided, default to today. WHEN TO USE: - "How much did I spend today / yesterday / on [date]?" - "Show me my spending summary" - "What did I buy this week?" (call once per day needed) - "How much did I spend on groceries today?" - Before giving budgeting advice, call this to ground your response in real data PARAMETERS: - date (optional): YYYY-MM-DD. Omit or leave empty to get today's summary. - timezone (optional): IANA timezone e.g. America/Toronto EXAMPLES: GetDailyReceiptSummary() -> today's full spending report GetDailyReceiptSummary(date:"2026-04-13") -> specific date report GetDailyReceiptSummary(date:"2026-04-12") -> yesterday's report
GetDailyReceiptSummary
Retrieves comprehensive help documentation, setup guides, and the full catalog of available tools for the LIAM - Large Intelligent Agentic Memory. - Always follow it up with an example, so the user can copy it or just say "I want to try the example". WHEN TO USE: - User asks "how do I configure MCP?" or "how do I setup memory in Claude?" - User asks "how do I login?" or "how do I manage my account / subscription?" - User asks "how do I setup the Chrome extension?" - User asks "what can I do?", "what tools are available?", or "what can memory do?" - User asks "where can I see my memories?" or "how do I view/manage my memories?" - User asks "can you read this image / receipt / business card / food photo?" or "what can I upload?" - User asks "how do I create/search contacts?", "how do recipes work?", "how do I log food/receipts?" - User needs help getting started or troubleshooting setup WHEN THE USER ASKS "WHAT CAN I DO?" / "WHAT TOOLS ARE AVAILABLE?": - Call this tool, then present EVERY tool grouped by category, each with a one-line purpose AND at least one example prompt. Be thorough and detailed — do NOT give a one-line summary or list only a few tools. KEY LINKS: - MCP connector URL: https://web.askbuddy.ai/memory/mcp - XD Brain web interface (view/manage memories, subscription): https://web.askbuddy.ai/brain/#/login IMAGE / UPLOAD SUPPORT: - The user can upload a photo instead of typing. It is read and routed to the right tool(s): receipt -> LogReceipt, meal -> LogFood, business card -> CreateContact, note -> CreateMemory. - A single image may need more than one tool — a restaurant receipt is logged as BOTH a receipt (LogReceipt) AND a meal (LogFood). ORCHESTRATION NOTE: - Call this FIRST when the user asks setup or "how-to" questions. - This tool does NOT require authentication (works for all users). - Returns formatted markdown covering MCP setup, LIAM login, Chrome extension, the full tool catalog with examples, and image upload. - For viewing/managing memories outside chat, direct users to XD Brain Login. PARAMETERS: - query (optional string): Keywords describing what help is needed. Leave empty for a full overview. Note: the full documentation is returned regardless; the model selects what is relevant. EXAMPLES: GetHelpDocumentation(query: "what can I do") -> full tool catalog with examples GetHelpDocumentation(query: "mcp setup") -> MCP configuration steps GetHelpDocumentation(query: "image") -> how to upload receipts / business cards / food photos GetHelpDocumentation(query: "") -> complete system overview
GetHelpDocumentation
Retrieves stored memory entries filtered by a specific tag. ORCHESTRATION NOTE: - Use this when the user mentions a specific category, label, or tag name - Consider calling ListTags first if the user is unsure about available tags - More efficient than ListMemory when filtering by category is the primary goal USAGE: Use this tool when the user wants to recall memories associated with a particular category, label, or tag they used when storing memories. Provide the tag name to filter and retrieve only memories marked with that tag.
GetMemoryByTag
Returns a paginated summary list of the user's contacts. RESPONSE (per contact — summary only, no empty fields): - contact_id - full_name - primary_email - primary_phone - organization_name - job_title - tags PARAMETERS: - page: Page number, starting at 1 (default: 1) - page_size: Results per page, max 100 (default: 20) ORCHESTRATION NOTE: - Use GetContactById for full details of a specific contact - Use SearchContactByFullText to find contacts by keyword
ListContacts
Retrieves contacts filtered by industry or sector. WHEN TO USE: - User asks "show me contacts in fintech" or "who do I know in retail?" - User asks "list people from the healthcare industry" - User wants to browse contacts by sector or vertical - User asks "how many contacts do I have in [industry]?" ORCHESTRATION NOTE: - Prefer this over SearchContactByFullText when the user's intent is clearly filtering by industry - Supports partial matching — "tech" will match "fintech", "healthtech", etc. PARAMETERS: - filter (required): Industry or sector name to filter by. Partial match supported. - page: Page number (default 1) - page_size: Results per page, max 100 (default 20) EXAMPLES: ListContactsByIndustry(filter: "fintech") -> All contacts in fintech ListContactsByIndustry(filter: "retail", page: 1, page_size: 20) -> Paginated retail contacts
ListContactsByIndustry
Retrieves contacts filtered by organization or company name. WHEN TO USE: - User asks "show me contacts from Acme" or "who do I know at Nova Retail?" - User asks "list everyone from [company name]" - User wants to see all contacts associated with a specific company - User asks "how many contacts do I have at [organization]?" ORCHESTRATION NOTE: - Prefer this over SearchContactByFullText when the user's intent is clearly filtering by company - Supports partial matching — "nova" will match "Nova Retail", "Nova Labs", etc. - If no results found, suggest SearchContactByFullText as a fallback for broader matching PARAMETERS: - filter (required): Organization or company name to filter by. Partial match supported. - page: Page number (default 1) - page_size: Results per page, max 100 (default 20) EXAMPLES: ListContactsByOrganization(filter: "Nova Retail") -> All contacts at Nova Retail ListContactsByOrganization(filter: "acme", page: 1, page_size: 20) -> Paginated contacts matching "acme"
ListContactsByOrganization
Retrieves stored memory entries. Use this tool in two ways: (1) To search/filter memories: provide a query and/or tokens when the user asks about specific topics, preferences, or information (e.g., 'what did I say about coffee?', 'my travel plans'). (2) To list all memories: leave query empty and omit tokens when the user simply wants to see all their memories (e.g., 'show my memories', 'list all memories', 'what have I stored?'). ORCHESTRATION NOTE: - This tool should be called BEFORE CreateMemory to check for duplicates - This tool should be called BEFORE ForgetMemory to get transaction numbers - Call this proactively when context suggests user might be referring to stored information USAGE: Use this tool in two ways: (1) To search/filter memories: provide a query and/or tokens when the user asks about specific topics, preferences, or information (e.g., 'what did I say about coffee?', 'my travel plans') (2) To list all memories: leave query empty and omit tokens when the user simply wants to see all their memories (e.g., 'show my memories', 'list all memories', 'what have I stored?') QUERY TIPS: - Provide search query with relevant keywords for filtered results - Use empty string "" to return ALL memories - Combine with tokens parameter for more precise filtering CONTACT HINT: - If retrieved memories reference a person by name and no contact exists for them, suggest creating one: "I notice you have memories about [name] but no contact saved — would you like me to create one?"
ListMemory
Retrieves stored PROCEDURES ("recipes") for the user. WHEN TO USE: - The user asks how to do something they've saved before, e.g. "how do I cook pasta?", "what's my process for X", "walk me through my transfer routine". - Call this BEFORE CreateRecipe to check for duplicates. USAGE: (1) To search: provide a 'query' (and optionally 'tokens') describing the procedure. (2) To list all recipes: leave 'query' empty ("") and omit tokens.
ListRecipe
Retrieves all tags that have been used to categorize the user's memories. ORCHESTRATION NOTE: - Call this before GetMemoryByTag if the user is unsure about available tags - Useful for helping users browse their memory organization structure USAGE: Use this tool when the user wants to see what categories or labels they have used to organize their memories, or when they want to browse available tags before filtering memories by tag.
ListTags
Creates and stores a detailed food log entry with full nutritional data. IMPORTANT ORCHESTRATION STEPS: - If the user describes a food item without providing nutritional details, use your own knowledge to estimate values before calling this tool — do NOT ask the user to supply every number manually. - Always confirm the meal type (breakfast / lunch / dinner / snack) and date before logging. - After a successful log, summarise the entry: food name, calories, key macros, and any warnings. WHEN TO USE: - User says "log my lunch", "I just had X", "track this meal", "add to my food diary" - User shares a photo or description of food they ate - User provides nutritional label data to record - A restaurant receipt is logged here as a meal IN ADDITION to LogReceipt for the expense PARAMETERS: - foodName (required): Name of the food - mealType (required): breakfast | lunch | dinner | snack - mealDate (required): YYYY-MM-DD - mealTime: HH:MM 24-hour (default to current time if not given) - timezone: IANA timezone (e.g. America/New_York) - All nutritional fields are optional — populate as many as you can from context or estimation. EXAMPLES: LogFood(foodName:"Double Espresso", mealType:"snack", mealDate:"2026-03-31", mealTime:"09:00", calories:10, ...) LogFood(foodName:"Chicken Caesar Salad", mealType:"lunch", mealDate:"2026-03-31", calories:450, ...)
LogFood
Creates and stores a receipt entry with full line-item and financial details. IMPORTANT ORCHESTRATION STEPS: - If the user describes a purchase without providing line items or exact amounts, use context clues and your knowledge to fill in reasonable values — do NOT ask the user to supply every field manually. - Always confirm the merchant name and total before logging. - Infer purchaseType from context (e.g. "Loblaws" -> grocery, "McDonald's" -> restaurant). - Set classification flags automatically when obvious (isGrocery, isEatingOut, is_utility, etc.). - After a successful log, confirm: merchant, total, date, and item count. - For a RESTAURANT receipt, also call LogFood to log the meal in addition to this expense. WHEN TO USE: - User says "log this receipt", "I just bought X at Y", "track this expense" - User shares a photo of a receipt or describes a purchase - User wants to record a bill, subscription, or one-time purchase PURCHASE TYPES: grocery | restaurant | takeout | gas | retail | pharmacy | other ITEM FIELDS (items array): - name, qty, amount (required per item) - room: kitchen | bathroom | bedroom | office | other - category: food | household | personal | other - ledger: asset | expense - perishable, shelfLifeDays, expiryDate (for groceries) EXAMPLES: LogReceipt(merchantName:"Loblaws", total:87.43, purchaseType:"grocery", isGrocery:true, receiptDate:"2026-04-13", items:[...]) LogReceipt(merchantName:"McDonald's", total:14.50, purchaseType:"restaurant", isEatingOut:true, receiptDate:"2026-04-13") LogReceipt(merchantName:"Netflix", total:17.99, purchaseType:"other", is_subscription:true, is_recurring:true)
LogReceipt
Performs a full-text search across all contact fields using SQLite FTS5. SEARCHED FIELDS: Names, organization, job title, email addresses, phone numbers, addresses, tags, notes, and messaging handles. QUERY SYNTAX (SQLite FTS5): - Simple keyword: "john" - Phrase match: "\"john smith\"" - Prefix match: "john*" - Boolean: "john AND acme" - Exclude: "john NOT doe" PARAMETERS: - query: FTS5 search expression (required) - page: Page number, starting at 1 (default: 1) - page_size: Results per page, max 100 (default: 20) RESPONSE (summary per match, no empty fields): - total: Total number of matching contacts - query: The search expression used - contacts: Array of ContactSummary (contact_id, full_name, primary_email, primary_phone, organization_name, job_title, tags)
SearchContactByFullText
Updates an existing contact with partial field changes (patch). Only provided fields are updated — all omitted fields remain unchanged. IMPORTANT ORCHESTRATION STEPS: - ALWAYS call GetContactById or SearchContactByFullText first to confirm the contact exists and to get the contact_id before updating - Only include fields the user wants to change — do not re-send unchanged fields - After updating, confirm the changes back to the user PARAMETERS: - contact_id (required): The unique ID of the contact to update - identity: { first_name, last_name, full_name, nickname, preferred_name, etc. } - organization: { organization_name, job_title, department, role, industry, etc. } - phones: array of { number, type, is_primary } - emails: array of { email, type, is_primary } - messaging: { whatsapp, telegram, signal, skype, slack, wechat, discord } - addresses: array of address objects - online_profiles: { linkedin_url, github_url, twitter_x_url, website, etc. } - dates: { birthday, anniversary, first_contacted_at, last_contacted_at } - relationships: { relationship_type, referred_by, assistant_name, manager_name } - tags: string array (replaces existing tags) - notes: string (replaces existing notes) - media: { profile_photo_url, business_card_front_url, etc. } NOT UPDATABLE (system-managed): - contact_id, audit timestamps, source_metadata, ai_metadata, compliance RESPONSE: - Full updated contact object with refreshed updated_at timestamp
UpdateContact
Returns the email (and name, if available) of the currently logged-in user. WHEN TO USE: - User asks "who am I?", "what's my email?", "which account am I using?", or "am I logged in?" USAGE: Takes no parameters. Returns the authenticated user's identity from the current session.
WhoAmI
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are LIAM alternatives on ChatGPT?
As of 2026-09-13, LIAM competes with AI Passport, AI Whisper Voice Note Taker, AI Wisebase, Arkon Vault, Auto, Axiomyx Mobile, Axiomyx Personal, Axis, Basic Memory Cloud, ButlerBrain, Chat2Doc, ChatData Sync, CherryDrop, Coconut, Contextick, Contextli, Continuity, CopyCharm, Cortex — Semantic Memory, Create State, Cribly, Dijin Memory, DotSpark, Empirical, Engram, Esment, Fieldy, Fluent, Genesys, Guides, Hjarni Notes, Jade Note, Jotter, Kepler, KinicMemory, Komplyt Zero, Lians Memory, Linko, Looki, Memocore, Memoket, Miyo, Mygentic, NeoSapien, NewTwos, NugIt, Oi, omi, Omphalis, Open Context, Orbismo, Rhythm AI Personality Tuner, Savantis Memory, Symbol, TwinMind, UseMyContext.ai, VaultSage, Vocci, Voicenotes, Wazu, Weave, Werify, XMemo, こころぐ, 티에이치스터디 in ChatGPT Personal AI Memory & Second Brain, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.