← WebMCP Directory

Tool tree

openmemoz.vercel.app

Media & PersonalTools verified
Website
A UAGC platform where users direct and AI agents curate open-source content. Exposes 32 WebMCP tools via document.modelContext.
Explore capabilities
    openmemoz.get_editionAnswer

    Get today's newspaper edition overview: date, edition number, sections, story count, and a list of story headlines with their provenance tier. Call this FIRST to see what content already exists and avoid duplicates. Tier 1 = source text (quotable). Tier 2 = AI-synthesized (cite sources). Use the section breakdown to identify gaps — if Finance has 5 stories but Science has none, suggest adding Science content.

    View tool JSON
    {
      "name": "openmemoz.get_edition",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get today's newspaper edition overview: date, edition number, sections, story count, and a list of story headlines with their provenance tier. Call this FIRST to see what content already exists and avoid duplicates. Tier 1 = source text (quotable). Tier 2 = AI-synthesized (cite sources). Use the section breakdown to identify gaps — if Finance has 5 stories but Science has none, suggest adding Science content.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.list_editionsAnswer

    List all available edition dates. Use this to discover which dates can be targeted when removing or updating stories with the editionDate parameter. Adding a story to a date with no edition yet creates that edition automatically.

    View tool JSON
    {
      "name": "openmemoz.list_editions",
      "kind": "answer",
      "impl": "imperative",
      "description": "List all available edition dates. Use this to discover which dates can be targeted when removing or updating stories with the editionDate parameter. Adding a story to a date with no edition yet creates that edition automatically.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.search_storiesAction

    Search today's edition by keyword. If no results are found, use openmemoz.discover_youtube_content, openmemoz.discover_bluesky_trending, or openmemoz.discover_web_content to find content from external sources, then add it with openmemoz.add_story. Use a returned storyIdentifier with openmemoz.get_story for full details.

    View tool JSON
    {
      "name": "openmemoz.search_stories",
      "kind": "act",
      "impl": "imperative",
      "description": "Search today's edition by keyword. If no results are found, use openmemoz.discover_youtube_content, openmemoz.discover_bluesky_trending, or openmemoz.discover_web_content to find content from external sources, then add it with openmemoz.add_story. Use a returned storyIdentifier with openmemoz.get_story for full details.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Words to match in headline or excerpt"
          },
          "section": {
            "type": "string",
            "description": "Optional section name to narrow results"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_storyAnswer

    Get a single story in full detail — licence basis, source attribution, citations, and full excerpt. Read this to understand what's already covered before writing a related story, or to improve the headline/excerpt with openmemoz.update_story. Use storyIdentifier from get_edition or search_stories.

    View tool JSON
    {
      "name": "openmemoz.get_story",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get a single story in full detail — licence basis, source attribution, citations, and full excerpt. Read this to understand what's already covered before writing a related story, or to improve the headline/excerpt with openmemoz.update_story. Use storyIdentifier from get_edition or search_stories.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The story's unique identifier"
          }
        },
        "required": [
          "storyIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_reading_contextAnswer

    Returns what the reader is currently viewing: active section filter, visible story count, and available sections. Use this to suggest related content based on what the reader is focused on — if they're filtered to 'Science', discover more science content for them.

    View tool JSON
    {
      "name": "openmemoz.get_reading_context",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns what the reader is currently viewing: active section filter, visible story count, and available sections. Use this to suggest related content based on what the reader is focused on — if they're filtered to 'Science', discover more science content for them.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.set_section_filterAction

    Filter the newspaper to show only stories from a specific section, or pass 'ALL' to show everything. Page updates immediately. Use this to focus the reader's view on a topic during a conversation — e.g. filter to 'AI' while discussing machine learning stories.

    View tool JSON
    {
      "name": "openmemoz.set_section_filter",
      "kind": "act",
      "impl": "imperative",
      "description": "Filter the newspaper to show only stories from a specific section, or pass 'ALL' to show everything. Page updates immediately. Use this to focus the reader's view on a topic during a conversation — e.g. filter to 'AI' while discussing machine learning stories.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "description": "Section name to filter by (e.g. 'Tech', 'Science', 'Finance'), or 'ALL' to reset"
          }
        },
        "required": [
          "section"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.explain_connectionsAction

    Explains how today's stories relate to each other thematically. Returns story pairs that share sections or topics. Use this to find thematic gaps — if few connections exist, the edition needs more cohesion. Suggest stories that bridge isolated sections.

    View tool JSON
    {
      "name": "openmemoz.explain_connections",
      "kind": "act",
      "impl": "imperative",
      "description": "Explains how today's stories relate to each other thematically. Returns story pairs that share sections or topics. Use this to find thematic gaps — if few connections exist, the edition needs more cohesion. Suggest stories that bridge isolated sections.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.get_youtube_videoAnswer

    Fetch metadata and FULL TRANSCRIPT for any public YouTube video. Returns title, channel, thumbnails, embed URL, and the complete auto-generated transcript with timestamps. Use this to READ a video's content before writing about it — the transcript gives you the actual words spoken. After reading, write an original summary and call openmemoz.add_story to publish it with the youtubeVideoId for embedding. No API key required.

    View tool JSON
    {
      "name": "openmemoz.get_youtube_video",
      "kind": "answer",
      "impl": "imperative",
      "description": "Fetch metadata and FULL TRANSCRIPT for any public YouTube video. Returns title, channel, thumbnails, embed URL, and the complete auto-generated transcript with timestamps. Use this to READ a video's content before writing about it — the transcript gives you the actual words spoken. After reading, write an original summary and call openmemoz.add_story to publish it with the youtubeVideoId for embedding. No API key required.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "videoUrl": {
            "type": "string",
            "description": "YouTube URL (e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ)"
          }
        },
        "required": [
          "videoUrl"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.add_storyAction

    Add a new story to an edition. Omit editionDate to target TODAY's edition — if no edition exists for that date yet, one is created automatically with the next edition number and the page navigates to it. Pass editionDate to add to a specific date instead. The page updates IMMEDIATELY after each call — the reader sees the story appear in real-time. Call this multiple times in sequence to build an edition incrementally (each story appears as it's added). You are the search engine — browse the web, find interesting content, and write ORIGINAL articles in your own words. For YouTube videos, pass the full URL as youtubeVideoId. For vague requests like 'add stories for tomorrow', use discover tools first (discover_youtube_content, discover_bluesky_trending, discover_mastodon_trending, discover_web_content) to find topics, then add stories one by one across different sections. You can search anywhere and write original content. sourceUrl is optional — omit it for original articles. Only ~280 banned domains (major paywalled publishers) are rejected; everything else is accepted.

    View tool JSON
    {
      "name": "openmemoz.add_story",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a new story to an edition. Omit editionDate to target TODAY's edition — if no edition exists for that date yet, one is created automatically with the next edition number and the page navigates to it. Pass editionDate to add to a specific date instead. The page updates IMMEDIATELY after each call — the reader sees the story appear in real-time. Call this multiple times in sequence to build an edition incrementally (each story appears as it's added). You are the search engine — browse the web, find interesting content, and write ORIGINAL articles in your own words. For YouTube videos, pass the full URL as youtubeVideoId. For vague requests like 'add stories for tomorrow', use discover tools first (discover_youtube_content, discover_bluesky_trending, discover_mastodon_trending, discover_web_content) to find topics, then add stories one by one across different sections. You can search anywhere and write original content. sourceUrl is optional — omit it for original articles. Only ~280 banned domains (major paywalled publishers) are rejected; everything else is accepted.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "headline": {
            "type": "string",
            "description": "The story headline"
          },
          "excerpt": {
            "type": "string",
            "description": "A 1-3 sentence summary of the story"
          },
          "section": {
            "type": "string",
            "description": "Section to place the story in (e.g. 'Tech', 'Science', 'Sports'). Use openmemoz.get_edition to see available sections, or create a new one."
          },
          "sourceName": {
            "type": "string",
            "description": "Name of the source (e.g. 'Reuters', 'Agent Contribution')"
          },
          "sourceUrl": {
            "type": "string",
            "description": "URL of the original source, or empty string if none"
          },
          "imageUrl": {
            "type": "string",
            "description": "Optional URL of a hero image for the story. Use a direct image link (jpg/png/webp)."
          },
          "youtubeVideoId": {
            "type": "string",
            "description": "Optional YouTube video ID (e.g. 'dQw4w9WgXcQ') to embed a video with the story."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target in YYYY-MM-DD format (e.g. '2026-09-02'). Defaults to today's date. If no edition exists for the date, a new empty edition is created automatically."
          },
          "position": {
            "type": "string",
            "description": "Where to insert: 'first' (default, appears at top), 'last' (append to end), or 'after:<storyIdentifier>' / 'before:<storyIdentifier>' to place relative to another story."
          },
          "pinAsHero": {
            "type": "boolean",
            "description": "If true, pins this story as the hero (large featured story at top). Only one story can be hero at a time."
          },
          "author": {
            "type": "string",
            "description": "Author name (Schema.org/Dublin Core compatible)."
          },
          "language": {
            "type": "string",
            "description": "ISO 639-1 language code (e.g. 'en', 'es', 'ko'). Default: 'en'."
          },
          "tags": {
            "type": "array",
            "description": "Content tags for cross-platform categorization (JSON Feed 1.1 compatible).",
            "items": {
              "type": "string"
            }
          },
          "contentUrl": {
            "type": "string",
            "description": "Canonical URL of the original content (Schema.org compatible)."
          }
        },
        "required": [
          "headline",
          "excerpt",
          "section",
          "sourceName"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.remove_storyAction

    Remove a story from an edition by storyIdentifier. Page updates immediately. Use to clear outdated, irrelevant, or low-quality content. Combine with get_edition to review what to keep and what to remove.

    View tool JSON
    {
      "name": "openmemoz.remove_story",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a story from an edition by storyIdentifier. Page updates immediately. Use to clear outdated, irrelevant, or low-quality content. Combine with get_edition to review what to keep and what to remove.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The storyIdentifier of the story to remove"
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target (e.g. '2026-09-02'). Defaults to the currently viewed edition."
          }
        },
        "required": [
          "storyIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.update_storyAction

    Update fields of an existing story — headline, excerpt, section, media, or metadata. Use after reading the source with get_youtube_video to improve a summary, or to fix headlines and move stories between sections. Page updates immediately.

    View tool JSON
    {
      "name": "openmemoz.update_story",
      "kind": "act",
      "impl": "imperative",
      "description": "Update fields of an existing story — headline, excerpt, section, media, or metadata. Use after reading the source with get_youtube_video to improve a summary, or to fix headlines and move stories between sections. Page updates immediately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The storyIdentifier of the story to update"
          },
          "headline": {
            "type": "string",
            "description": "New headline (optional)"
          },
          "excerpt": {
            "type": "string",
            "description": "New excerpt (optional)"
          },
          "section": {
            "type": "string",
            "description": "Move to a different section (optional)"
          },
          "sourceName": {
            "type": "string",
            "description": "Update the source name (optional)"
          },
          "sourceUrl": {
            "type": "string",
            "description": "Update the source URL (optional)"
          },
          "imageUrl": {
            "type": "string",
            "description": "Set or update the hero image URL (optional). Pass empty string to remove."
          },
          "youtubeVideoId": {
            "type": "string",
            "description": "Set or update the YouTube video ID (optional). Pass empty string to remove."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target (e.g. '2026-09-02'). Defaults to the currently viewed edition."
          },
          "author": {
            "type": "string",
            "description": "Update the author name (optional)."
          },
          "language": {
            "type": "string",
            "description": "Update ISO 639-1 language code (optional)."
          },
          "tags": {
            "type": "array",
            "description": "Update content tags (optional).",
            "items": {
              "type": "string"
            }
          },
          "contentUrl": {
            "type": "string",
            "description": "Update canonical content URL (optional)."
          }
        },
        "required": [
          "storyIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_user_interestsAnswer

    Returns the reader's chosen topics and weights. Use this to understand what the reader cares about before generating or curating stories. Topics with higher weights should appear more prominently. Combine with openmemoz.add_story to create personalized content.

    View tool JSON
    {
      "name": "openmemoz.get_user_interests",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the reader's chosen topics and weights. Use this to understand what the reader cares about before generating or curating stories. Topics with higher weights should appear more prominently. Combine with openmemoz.add_story to create personalized content.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.get_reading_historyAnswer

    Returns the reader's browsing behavior: which stories they clicked, how long they spent reading, and aggregated section preferences. Use this to understand what the reader actually consumes (not just what they say they want). Combine with get_user_interests for a full picture of the reader's preferences.

    View tool JSON
    {
      "name": "openmemoz.get_reading_history",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the reader's browsing behavior: which stories they clicked, how long they spent reading, and aggregated section preferences. Use this to understand what the reader actually consumes (not just what they say they want). Combine with get_user_interests for a full picture of the reader's preferences.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.save_memoryAction

    Store a fact or observation about the reader for future sessions. The memory persists in the reader's browser across page reloads. Use this to remember preferences, patterns, or insights you discovered while curating content — e.g. 'reader prefers analysis over headlines' or 'reader always skips finance stories'. Call openmemoz.recall_memories to retrieve stored facts later.

    View tool JSON
    {
      "name": "openmemoz.save_memory",
      "kind": "act",
      "impl": "imperative",
      "description": "Store a fact or observation about the reader for future sessions. The memory persists in the reader's browser across page reloads. Use this to remember preferences, patterns, or insights you discovered while curating content — e.g. 'reader prefers analysis over headlines' or 'reader always skips finance stories'. Call openmemoz.recall_memories to retrieve stored facts later.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "memoryIdentifier": {
            "type": "string",
            "description": "A short unique slug for this memory (e.g. 'pref-long-form', 'skip-finance'). Saving with the same identifier overwrites the previous value."
          },
          "content": {
            "type": "string",
            "description": "The fact or observation to remember (e.g. 'Reader prefers long-form analysis over short headlines')"
          },
          "category": {
            "type": "string",
            "description": "Category for organizing memories: 'preference', 'behavior', 'feedback', or 'insight'"
          }
        },
        "required": [
          "memoryIdentifier",
          "content",
          "category"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.recall_memoriesAnswer

    Retrieve all facts and observations previously stored about this reader. Use this at the start of a session to remember what you learned in previous interactions. Memories are organized by category: preference, behavior, feedback, insight.

    View tool JSON
    {
      "name": "openmemoz.recall_memories",
      "kind": "answer",
      "impl": "imperative",
      "description": "Retrieve all facts and observations previously stored about this reader. Use this at the start of a session to remember what you learned in previous interactions. Memories are organized by category: preference, behavior, feedback, insight.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.set_hero_storyAction

    Pin a story as the hero — the most visually prominent position at the top of the page. Choose based on visual impact: stories with YouTube videos or images make the best heroes. Only one hero at a time — setting a new one unpins the old. Omit storyIdentifier to clear the pin (reverts to automatic scoring).

    View tool JSON
    {
      "name": "openmemoz.set_hero_story",
      "kind": "act",
      "impl": "imperative",
      "description": "Pin a story as the hero — the most visually prominent position at the top of the page. Choose based on visual impact: stories with YouTube videos or images make the best heroes. Only one hero at a time — setting a new one unpins the old. Omit storyIdentifier to clear the pin (reverts to automatic scoring).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The storyIdentifier to pin as hero. Omit to clear the hero pin."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target. Defaults to the currently viewed edition."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.batch_add_storiesAction

    Add multiple stories to an edition in one call. Each story needs headline, excerpt, section, and sourceName. Optionally include imageUrl, youtubeVideoId per story. Stories are inserted in order at the specified position. Persists via localStorage. Omit editionDate to target today's edition; it is created automatically if it does not exist yet.

    View tool JSON
    {
      "name": "openmemoz.batch_add_stories",
      "kind": "act",
      "impl": "imperative",
      "description": "Add multiple stories to an edition in one call. Each story needs headline, excerpt, section, and sourceName. Optionally include imageUrl, youtubeVideoId per story. Stories are inserted in order at the specified position. Persists via localStorage. Omit editionDate to target today's edition; it is created automatically if it does not exist yet.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stories": {
            "type": "array",
            "description": "Array of story objects to add",
            "items": {
              "type": "object",
              "properties": {
                "headline": {
                  "type": "string"
                },
                "excerpt": {
                  "type": "string"
                },
                "section": {
                  "type": "string"
                },
                "sourceName": {
                  "type": "string"
                },
                "sourceUrl": {
                  "type": "string"
                },
                "imageUrl": {
                  "type": "string"
                },
                "youtubeVideoId": {
                  "type": "string"
                },
                "author": {
                  "type": "string"
                },
                "language": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "contentUrl": {
                  "type": "string"
                }
              },
              "required": [
                "headline",
                "excerpt",
                "section",
                "sourceName"
              ]
            }
          },
          "position": {
            "type": "string",
            "description": "Where to insert all stories: 'first' (default) or 'last'."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target in YYYY-MM-DD format. Defaults to today's date. If no edition exists for the date, a new empty edition is created automatically."
          }
        },
        "required": [
          "stories"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.batch_remove_storiesAction

    Remove multiple stories from an edition in one call. Pass an array of storyIdentifiers. Persists via localStorage.

    View tool JSON
    {
      "name": "openmemoz.batch_remove_stories",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove multiple stories from an edition in one call. Pass an array of storyIdentifiers. Persists via localStorage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifiers": {
            "type": "array",
            "description": "Array of storyIdentifier strings to remove",
            "items": {
              "type": "string"
            }
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target. Defaults to the currently viewed edition."
          }
        },
        "required": [
          "storyIdentifiers"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.toggle_favouriteAction

    Mark or unmark a story as a favourite. Favourited stories can be retrieved with openmemoz.get_favourites. Use this to let readers bookmark stories they want to revisit. Persists via localStorage.

    View tool JSON
    {
      "name": "openmemoz.toggle_favourite",
      "kind": "act",
      "impl": "imperative",
      "description": "Mark or unmark a story as a favourite. Favourited stories can be retrieved with openmemoz.get_favourites. Use this to let readers bookmark stories they want to revisit. Persists via localStorage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The storyIdentifier to toggle favourite on"
          },
          "isFavourite": {
            "type": "boolean",
            "description": "True to favourite, false to unfavourite. Omit to toggle."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target. Defaults to the currently viewed edition."
          }
        },
        "required": [
          "storyIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_favouritesAnswer

    List all stories marked as favourite across all loaded editions. Returns the story details and which edition they belong to.

    View tool JSON
    {
      "name": "openmemoz.get_favourites",
      "kind": "answer",
      "impl": "imperative",
      "description": "List all stories marked as favourite across all loaded editions. Returns the story details and which edition they belong to.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.set_color_paletteAction

    Change the newspaper's color palette. 13 palettes available — combine with set_visual_style for 52 total visual combinations. Match mood to content: use warm palettes for lifestyle, dark for tech, classic for finance. Page updates immediately. Available: midnight, slate, broadsheet, sepia, ivory, stone, ocean, charcoal, rosewood, mint, indigo, typewriter, forest.

    View tool JSON
    {
      "name": "openmemoz.set_color_palette",
      "kind": "act",
      "impl": "imperative",
      "description": "Change the newspaper's color palette. 13 palettes available — combine with set_visual_style for 52 total visual combinations. Match mood to content: use warm palettes for lifestyle, dark for tech, classic for finance. Page updates immediately. Available: midnight, slate, broadsheet, sepia, ivory, stone, ocean, charcoal, rosewood, mint, indigo, typewriter, forest.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paletteIdentifier": {
            "type": "string",
            "description": "The palette to apply: 'midnight' (Midnight Press), 'slate' (Slate Gray), 'broadsheet' (Classic Broadsheet), 'sepia' (Sepia Gazette), 'ivory' (Ivory Folio), 'stone' (Cool Stone), 'ocean' (Deep Ocean), 'charcoal' (Charcoal Desk), 'rosewood' (Rosewood), 'mint' (Mint Press), 'indigo' (Indigo Night), 'typewriter' (Typewriter), 'forest' (Forest Floor)"
          }
        },
        "required": [
          "paletteIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.set_visual_styleAction

    Change the newspaper's visual style (card morphism). Combine with set_color_palette for 52 total visual combinations. Available: 'flat' (clean, minimal), 'glass' (frosted glass cards), 'neu' (neumorphic embossed cards), 'paper' (textured paper). Page updates immediately.

    View tool JSON
    {
      "name": "openmemoz.set_visual_style",
      "kind": "act",
      "impl": "imperative",
      "description": "Change the newspaper's visual style (card morphism). Combine with set_color_palette for 52 total visual combinations. Available: 'flat' (clean, minimal), 'glass' (frosted glass cards), 'neu' (neumorphic embossed cards), 'paper' (textured paper). Page updates immediately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "styleIdentifier": {
            "type": "string",
            "description": "'flat', 'glass', or 'neu'"
          }
        },
        "required": [
          "styleIdentifier"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_themeAnswer

    Get the current theme settings: color palette and visual style. Also lists all available palettes and styles for reference.

    View tool JSON
    {
      "name": "openmemoz.get_theme",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get the current theme settings: color palette and visual style. Also lists all available palettes and styles for reference.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.reorder_storyAction

    Move a story to a different position within the edition. Use 'first', 'last', 'up', 'down', or a specific index (0-based). Persists via localStorage.

    View tool JSON
    {
      "name": "openmemoz.reorder_story",
      "kind": "act",
      "impl": "imperative",
      "description": "Move a story to a different position within the edition. Use 'first', 'last', 'up', 'down', or a specific index (0-based). Persists via localStorage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "storyIdentifier": {
            "type": "string",
            "description": "The storyIdentifier to move"
          },
          "moveTo": {
            "type": "string",
            "description": "'first', 'last', 'up' (one position earlier), 'down' (one position later), or a number like '3' for a specific 0-based index."
          },
          "editionDate": {
            "type": "string",
            "description": "Optional edition date to target. Defaults to the currently viewed edition."
          }
        },
        "required": [
          "storyIdentifier",
          "moveTo"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.get_approved_sourcesAnswer

    Returns the list of approved open-licensed content sources that OpenMemoz accepts. Stories added via openmemoz.add_story must reference only these approved sources or original agent-generated content. Sources from banned domains (major news publishers, social media with restrictive terms) will be rejected. Use this to discover which sources you can reference.

    View tool JSON
    {
      "name": "openmemoz.get_approved_sources",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the list of approved open-licensed content sources that OpenMemoz accepts. Stories added via openmemoz.add_story must reference only these approved sources or original agent-generated content. Sources from banned domains (major news publishers, social media with restrictive terms) will be rejected. Use this to discover which sources you can reference.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Optional filter: 'government', 'creative-commons', 'open-api', 'video', 'academic', 'prediction', 'international'. Omit for all."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.get_banned_domainsAnswer

    Returns the list of banned domains that OpenMemoz will reject. These are copyrighted news publishers and social media platforms with restrictive terms. Do NOT use these as sourceUrl in add_story.

    View tool JSON
    {
      "name": "openmemoz.get_banned_domains",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the list of banned domains that OpenMemoz will reject. These are copyrighted news publishers and social media platforms with restrictive terms. Do NOT use these as sourceUrl in add_story.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.discover_youtube_contentAnswer

    Discover recent videos from curated YouTube channels. Returns titles, thumbnails, and video URLs. Use 'query' to filter by keyword (e.g. 'AI', 'market'). RECOMMENDED WORKFLOW: (1) discover videos here, (2) call openmemoz.get_youtube_video on the best result to read its full transcript, (3) write an original summary from the transcript, (4) call openmemoz.add_story with your summary and the videoId. Alternatively, search YouTube yourself and pass any video URL to get_youtube_video directly.

    View tool JSON
    {
      "name": "openmemoz.discover_youtube_content",
      "kind": "answer",
      "impl": "imperative",
      "description": "Discover recent videos from curated YouTube channels. Returns titles, thumbnails, and video URLs. Use 'query' to filter by keyword (e.g. 'AI', 'market'). RECOMMENDED WORKFLOW: (1) discover videos here, (2) call openmemoz.get_youtube_video on the best result to read its full transcript, (3) write an original summary from the transcript, (4) call openmemoz.add_story with your summary and the videoId. Alternatively, search YouTube yourself and pass any video URL to get_youtube_video directly.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Keyword to filter videos by title (e.g. 'Real Madrid', 'AI', 'NASA'). Videos matching this keyword are returned."
          },
          "category": {
            "type": "string",
            "description": "Optional category filter: 'Tech', 'Science', 'World', 'Finance', 'Space', 'Sports', 'Health'. Omit for all categories."
          },
          "limit": {
            "type": "number",
            "description": "Max videos to return (default 10, max 50)."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.discover_bluesky_trendingAction

    Discover trending discussions on Bluesky (AT Protocol). Returns top posts with text, author, engagement counts, and external links. Good for finding what people are talking about RIGHT NOW — breaking news, hot takes, viral threads. After discovering, write original summaries and call add_story to publish.

    View tool JSON
    {
      "name": "openmemoz.discover_bluesky_trending",
      "kind": "act",
      "impl": "imperative",
      "description": "Discover trending discussions on Bluesky (AT Protocol). Returns top posts with text, author, engagement counts, and external links. Good for finding what people are talking about RIGHT NOW — breaking news, hot takes, viral threads. After discovering, write original summaries and call add_story to publish.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "description": "Max posts to return (default 10, max 50)."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.discover_mastodon_trendingAnswer

    Discover the most-shared links across the Mastodon fediverse (ActivityPub). Returns trending news links ranked by share count — these are what thousands of people are sharing right now. Try different instances for different communities: mastodon.social (general), hachyderm.io (tech), fosstodon.org (open source).

    View tool JSON
    {
      "name": "openmemoz.discover_mastodon_trending",
      "kind": "answer",
      "impl": "imperative",
      "description": "Discover the most-shared links across the Mastodon fediverse (ActivityPub). Returns trending news links ranked by share count — these are what thousands of people are sharing right now. Try different instances for different communities: mastodon.social (general), hachyderm.io (tech), fosstodon.org (open source).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "Mastodon instance to query (default: mastodon.social). Try hachyderm.io for tech, fosstodon.org for FOSS."
          },
          "limit": {
            "type": "number",
            "description": "Max trending links to return (default 10, max 40)."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.discover_web_contentAction

    Discover trending stories from the open web. Hacker News for tech, startups, and AI (ranked by community votes). Federal Register for US government policy and regulations. Returns headlines, excerpts, source URLs, and engagement scores. Use 'sources' param to pick: 'hackernews', 'federalregister', or both (default). Write original summaries from the results and call add_story to publish.

    View tool JSON
    {
      "name": "openmemoz.discover_web_content",
      "kind": "act",
      "impl": "imperative",
      "description": "Discover trending stories from the open web. Hacker News for tech, startups, and AI (ranked by community votes). Federal Register for US government policy and regulations. Returns headlines, excerpts, source URLs, and engagement scores. Use 'sources' param to pick: 'hackernews', 'federalregister', or both (default). Write original summaries from the results and call add_story to publish.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "description": "Max stories per source to return (default 10, max 30)."
          },
          "sources": {
            "type": "string",
            "description": "Comma-separated source names to query. Options: hackernews, federalregister. Default: all."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.discover_and_summarizeAction

    Discover content from ALL sources in one call: YouTube (trending videos), Hacker News (top tech stories), and Mastodon (most-shared links). Returns combined results ranked by engagement score. Saves multiple tool calls — use this instead of calling each discover tool separately. After reviewing results, use get_youtube_video to read video transcripts, then add_story to publish original summaries.

    View tool JSON
    {
      "name": "openmemoz.discover_and_summarize",
      "kind": "act",
      "impl": "imperative",
      "description": "Discover content from ALL sources in one call: YouTube (trending videos), Hacker News (top tech stories), and Mastodon (most-shared links). Returns combined results ranked by engagement score. Saves multiple tool calls — use this instead of calling each discover tool separately. After reviewing results, use get_youtube_video to read video transcripts, then add_story to publish original summaries.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "description": "Max results per source (default 5, max 20)."
          },
          "query": {
            "type": "string",
            "description": "Optional keyword to filter results by title across all sources."
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.clear_user_dataSensitive Action

    Clear user-generated content from localStorage. Use 'all' to wipe everything (stories, themes, memories, reading history). Use 'stories' to reset editions to defaults only. Use 'older_than_days' with a number to remove stories added more than N days ago. This is destructive and cannot be undone.

    View tool JSON
    {
      "name": "openmemoz.clear_user_data",
      "kind": "transact",
      "impl": "imperative",
      "description": "Clear user-generated content from localStorage. Use 'all' to wipe everything (stories, themes, memories, reading history). Use 'stories' to reset editions to defaults only. Use 'older_than_days' with a number to remove stories added more than N days ago. This is destructive and cannot be undone.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string",
            "description": "'all' — wipe everything. 'stories' — reset editions only. 'older_than_days' — remove stories older than N days (requires 'days' param)."
          },
          "days": {
            "type": "number",
            "description": "Required when scope is 'older_than_days'. Remove stories added more than this many days ago."
          }
        },
        "required": [
          "scope"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.export_dataAction

    Export all OpenMemoz data from localStorage as JSON. Includes editions, themes, memories, reading history, and interests. Use for backup, migration, or syncing content to another device. The export is a complete snapshot of the reader's personal content library.

    View tool JSON
    {
      "name": "openmemoz.export_data",
      "kind": "act",
      "impl": "imperative",
      "description": "Export all OpenMemoz data from localStorage as JSON. Includes editions, themes, memories, reading history, and interests. Use for backup, migration, or syncing content to another device. The export is a complete snapshot of the reader's personal content library.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    openmemoz.format_for_deliveryAction

    Package stories for delivery outside OpenMemoz. Returns formatted content the agent can present in chat or copy into an email, social post, or another service. Formats: 'briefing' (structured markdown summary), 'social' (short-form per story for social media posts), 'newsletter' (full email-ready markdown with sections), 'html' (rich HTML page with YouTube embeds and images — ready to open in a browser), 'data' (clean typed JSON array of Story objects). Pass specific storyIdentifiers or omit for the full edition. The agent decides the destination — paste in chat, email it, post it, or use it to populate another WebMCP page.

    View tool JSON
    {
      "name": "openmemoz.format_for_delivery",
      "kind": "act",
      "impl": "imperative",
      "description": "Package stories for delivery outside OpenMemoz. Returns formatted content the agent can present in chat or copy into an email, social post, or another service. Formats: 'briefing' (structured markdown summary), 'social' (short-form per story for social media posts), 'newsletter' (full email-ready markdown with sections), 'html' (rich HTML page with YouTube embeds and images — ready to open in a browser), 'data' (clean typed JSON array of Story objects). Pass specific storyIdentifiers or omit for the full edition. The agent decides the destination — paste in chat, email it, post it, or use it to populate another WebMCP page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "description": "'briefing', 'social', 'newsletter', 'html', or 'data'"
          },
          "storyIdentifiers": {
            "type": "array",
            "description": "Optional array of storyIdentifier strings. Omit for all stories.",
            "items": {
              "type": "string"
            }
          },
          "maxStories": {
            "type": "number",
            "description": "Optional limit on number of stories to include (default: all)."
          }
        },
        "required": [
          "format"
        ],
        "additionalProperties": false
      }
    }
    openmemoz.set_user_interestsAction

    Update the reader's topic interests and weights. Use this to onboard new readers, adjust preferences based on reading behavior, or let the reader tell the agent what they care about. Available topics: AI & Machine Learning, Startups, Finance & Markets, World News, Science, Cybersecurity, Climate & Energy, Space, Developer Tools, Health. Pass activeTopics (array of topic strings to enable) and/or weights (object mapping topic names to 0-100 priority scores). Higher weights mean the topic appears more prominently. This is the standard WebMCP interest onboarding pattern — any page can adopt the same schema.

    View tool JSON
    {
      "name": "openmemoz.set_user_interests",
      "kind": "act",
      "impl": "imperative",
      "description": "Update the reader's topic interests and weights. Use this to onboard new readers, adjust preferences based on reading behavior, or let the reader tell the agent what they care about. Available topics: AI & Machine Learning, Startups, Finance & Markets, World News, Science, Cybersecurity, Climate & Energy, Space, Developer Tools, Health. Pass activeTopics (array of topic strings to enable) and/or weights (object mapping topic names to 0-100 priority scores). Higher weights mean the topic appears more prominently. This is the standard WebMCP interest onboarding pattern — any page can adopt the same schema.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "activeTopics": {
            "type": "array",
            "description": "Topics to enable. Available: AI & Machine Learning, Startups, Finance & Markets, World News, Science, Cybersecurity, Climate & Energy, Space, Developer Tools, Health",
            "items": {
              "type": "string"
            }
          },
          "weights": {
            "type": "object",
            "description": "Topic name → priority score (0-100). Higher = more prominent."
          },
          "addTopics": {
            "type": "array",
            "description": "Topics to add to existing active list (without replacing).",
            "items": {
              "type": "string"
            }
          },
          "removeTopics": {
            "type": "array",
            "description": "Topics to remove from active list.",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    }
    openmemoz.configure_auto_curationAction

    Manage the automatic content curation scheduler. The scheduler periodically discovers content from YouTube, Bluesky, Mastodon, and approved web sources (Hacker News, Federal Register) and adds the best stories to the edition automatically. Actions: 'status' (check current state), 'enable' (start the scheduler), 'disable' (stop it), 'run_now' (trigger one curation run immediately), 'configure' (update settings like interval, max stories, or which sources to use).

    View tool JSON
    {
      "name": "openmemoz.configure_auto_curation",
      "kind": "act",
      "impl": "imperative",
      "description": "Manage the automatic content curation scheduler. The scheduler periodically discovers content from YouTube, Bluesky, Mastodon, and approved web sources (Hacker News, Federal Register) and adds the best stories to the edition automatically. Actions: 'status' (check current state), 'enable' (start the scheduler), 'disable' (stop it), 'run_now' (trigger one curation run immediately), 'configure' (update settings like interval, max stories, or which sources to use).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "description": "'status', 'enable', 'disable', 'run_now', or 'configure'"
          },
          "intervalHours": {
            "type": "number",
            "description": "Hours between runs (default 24). Only used with 'configure' or 'enable'."
          },
          "maxStoriesPerRun": {
            "type": "number",
            "description": "Max stories to add per run (default 5). Only used with 'configure' or 'enable'."
          },
          "enableYoutube": {
            "type": "boolean",
            "description": "Include YouTube in discovery (default true)."
          },
          "enableBluesky": {
            "type": "boolean",
            "description": "Include Bluesky in discovery (default true)."
          },
          "enableMastodon": {
            "type": "boolean",
            "description": "Include Mastodon in discovery (default true)."
          },
          "enableWeb": {
            "type": "boolean",
            "description": "Include web sources (Hacker News, Federal Register) in discovery (default true)."
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      }
    }