SynaBun

io.github.danilokhuryPublished by GitHub account danilokhuryv2.2.2Updated Nov 6, 2026

Persistent memory MCP server for Claude Code, Codex and OpenCode, stored locally in SQLite

Overview

AI-generated overview

SynaBun is a local, self-hosted persistent memory server for AI coding tools, plus browser automation and social-platform extraction tools.

What you can do
  • Save, search, annotate, trash and restore memories, and organize them into categories
  • Check memories whose source files changed and browse recent memories or statistics
  • Drive a browser: navigate, click, type, scroll, upload, snapshot, read page content, screenshot, read console, run JavaScript, manage sessions and batch steps
  • Extract structured data from X, Facebook, TikTok, Instagram, LinkedIn and WhatsApp pages, with composer-state checks and a Facebook group directory
  • Use integrations for Google Search Console, YouTube Studio, Discord, Bluesky, a whiteboard, cards, git actions and a project style guide
  • Run repeating task loops and route to tool groups not loaded in the current session
When to use it
Useful when you want coding agents in Claude Code, Codex, OpenCode or another MCP client to keep decisions and context across sessions without a cloud account. Also relevant if you want an agent to operate a visible browser and harvest posts or feeds from social platforms.
Requirements
Local process via npx or a global npm install; Node.js 22.19 or newer. The app must be running for tools to reach memory. An optional embeddings setup step enables meaning-based search; the first start installs a Chromium build for browser tools. Optional integration credentials are entered in Settings.
Before you install
The local web interface has no login and listens on all network interfaces, so port 3344 should not be exposed to the internet. Browser tools can click, type, upload and publish on logged-in accounts, and social extraction reads your signed-in sessions. Memories and recalled context are sent to your AI tool's provider; optional integrations contact their services. Credentials are stored in a local .env file.

Installation

In SourceWeft

  1. Open SynaBun in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[SynaBun]

SynaBun

Long-term memory for your AI coding tools, stored on your own computer.

[npm version] [npm downloads] [license] [CI] [Discord] [X / Twitter]

synabun.ai · Docs · Blog · Compare · Changelog


SynaBun is an open-source, self-hosted AI workspace and persistent memory MCP server: SynaBun Assistant coordinates Claude Code, Codex and OpenCode agents. What you decided, fixed and explained in one session is there in the next one, in every project and every tool you connect, so you stop repeating yourself. It all lives in one SQLite file on your computer: no account, no cloud service, no API key.

bash
npm install -g synabun

synabun starts the app. synabun mcp is the MCP server on stdio, for any MCP client:

json
{  "mcpServers": {    "SynaBun": {      "command": "npx",      "args": ["-y", "synabun", "mcp"]    }  }}

After the global install, "command": "synabun", "args": ["mcp"] runs the same server. Read the docs, or see how SynaBun compares with other memory tools.

It connects to Claude Code, Codex CLI, Gemini CLI and OpenCode with one switch each, and to Cursor, Windsurf or any other tool that supports MCP (the Model Context Protocol) with a config snippet you copy. It comes with the Neural Interface, a local web app where you see what your tools remember and run your coding agents.

What you can do with it

  • Keep context between sessions. Your assistant saves what it learned as it works and looks it up before the next task. Search matches meaning as well as keywords.
  • See what it knows. Browse, search, edit and delete memories in the Neural Interface, on a 3D map where related memories sit together.
  • Run Claude Code, Codex and OpenCode side by side. Each has a side panel in the Neural Interface, next to terminals, a file explorer and a whiteboard, all sharing the same memory.
  • Delegate. The SynaBun Assistant plans a task, proposes a model for it, hands it to a worker in Claude Code, Codex or OpenCode and reports the result. You can also message it from WhatsApp.
  • Automate. Save a task as a template, then run it as a loop or on a schedule.
  • Give agents a browser. Browser tools let an agent open pages, click, type and read in a browser you can watch.

Quick start

You need Node.js 22.19 or newer.

bash
npm install -g synabunnpm --prefix "$(npm root -g)/synabun/mcp-server" run setup:embeddingssynabun
  1. Install. The first command installs SynaBun. The second downloads the model that powers search by meaning; without it SynaBun still works, with keyword search only. In Windows Command Prompt, replace $(npm root -g) with the path that npm root -g prints.

  2. Start. synabun starts the Neural Interface at http://localhost:3344 and opens the setup wizard in your browser. The first start also installs a Chromium build for the browser tools.

  3. Connect your AI tool. In the wizard, add your projects and switch on the tools you use. SynaBun registers itself with Claude Code, Codex CLI, Gemini CLI and OpenCode, and installs a short set of rules that tell each tool when to recall and when to remember. For Cursor, Windsurf or another MCP tool, copy the config snippet shown in the same step. You can change the connections later in Settings → AI connections.

  4. Try it. Start a new session in your AI tool and say:

    Remember that we deploy from the release branch, never from main.

    Start another session and ask:

    What do you remember about how we deploy?

    Then open http://localhost:3344 to see the memory on the map. Press / to search, a to open the Assistant, and the ? button in the title bar for a tour.

Leave synabun running while you work: Claude Code reaches its memory through it. Stop it with Ctrl+C. If something looks wrong, synabun doctor reports the state of your data and your tool connections.

To run from source instead:

bash
git clone --depth=1 https://github.com/danilokhury/Synabun.gitcd Synabunnpm start

npm start installs dependencies, builds the MCP server and starts the app. Once it is up, run npm --prefix mcp-server run setup:embeddings in a second terminal to turn on search by meaning.

How it works

Your AI tool ── MCP ──▶ SynaBun MCP server ──▶ memory.db (SQLite) ◀── Neural Interface (localhost:3344)
  • A local database. Memories live in one SQLite file on your disk. Each one is indexed for keyword search and for search by meaning, using a model that runs on your machine.
  • An MCP server. It gives your AI tool the memory tools: remember, recall, reflect, forget, restore and a few more. Any MCP client can use it.
  • The Neural Interface. A local web app on port 3344 that reads the same database. It holds the memory map, settings, the side panels, the Assistant and your automations.
  • Rules and hooks. The installed rules tell each tool to recall before substantial work and to remember after it. In Claude Code, hooks add to that: they bring relevant memories into the session and remind the assistant to save its work.

Features

Memory

  • Keyword and meaning search. recall combines both and can return compact results sized to a token budget.
  • Categories you define. Each category's description tells the assistant what belongs there.
  • One memory for every project. Recall favours the project you are in and still finds what you learned elsewhere.
  • Hard to lose. Edits keep a revision history you can undo, deleted memories go to a trash you can restore from, and sync flags memories whose source files have changed.
  • Backups. Scheduled, checksum-verified backups in Settings → Memory & backups. synabun restore-backup --from <backup.zip> checks a backup, and adding --apply restores it.

Neural Interface

  • Memory map. A 3D map of everything stored: top-level categories are continents, categories are islands, and similar memories sit side by side.
  • Workspace. Terminals, a file explorer and a whiteboard next to your memories.
  • Settings you can search, in English and Brazilian Portuguese.
  • A workspace tour behind the ? button.
  • Showcase mode for screenshots. Open the interface with ?showcase=1 and it loads your layout without saving any change to it, and blurs your own content: memories, session titles, transcripts, terminal output, account names and anything that looks private (emails, home folder paths, ids, keys, phone numbers, the names of your other projects). ?lang=en or ?lang=pt-BR sets the language for that page only. Map labels drawn on the canvas cannot be blurred one by one, and the whiteboard and memory positions you drag still save.

Coding agents

  • Side panels for Claude Code, Codex and OpenCode. Streaming answers, tool calls, approvals, plans and resumable sessions, on your own accounts. Gemini CLI and plain shells open as terminal tabs.
  • SynaBun Assistant. One assistant that recalls memory on every turn, proposes where a task should run, dispatches it to a worker and reads back a structured result. Budget caps and a token gauge keep spending visible.
  • WhatsApp Link. Message the Assistant from your phone as a linked device, with three permission levels. See docs/whatsapp.md.
  • Computer use on macOS. The Assistant can see and operate desktop apps, behind guards and stop controls.
  • Style Guide. A brand and design system per project, saved as DESIGN.md and design tokens. Agents read it and can only propose changes. See docs/style-guide.md.

Automations and tools

  • Automation Studio and schedules. Task templates you run as loops or on a schedule.
  • Browser tools. Navigate, click, type, read and take screenshots, or batch several actions into one call. See docs/browser-v2.md.
  • Integrations. Tool groups for Discord, Google Search Console, YouTube Studio, Leonardo.ai and Bluesky, and readers for X, Facebook, Instagram, LinkedIn, TikTok and WhatsApp Web. Tool profiles limit a session to the groups it needs.
  • Skills. /synabun brainstorms from memory, audits memories against your code, saves a conversation and creates schedules. /leonardo guides image and video prompts.
  • Claude Code hooks. How they are installed, isolated and measured: docs/hook-integrity.md.
  • AI decisions (optional). With your own TypeSafe API key, SynaBun asks for a judgment where a fixed rule would guess: is this memory a duplicate, does it hold a secret, is it stale. Every judgment has a local fallback, and nothing is sent without a key. See docs/judgments.md.

Requirements

  • Node.js 22.19 or newer.
  • macOS, Windows or Linux. Computer use is macOS only.
  • The coding tools you want to use, installed and signed in with your own accounts. SynaBun does not include model access.
  • Optional: C/C++ build tools. Terminals use a native module. If it has no prebuilt binary for your system, it is compiled during install; if that fails, everything except terminals still works.
  • Optional: credentials for integrations such as Discord, YouTube or AI decisions. You enter them in Settings when you turn the feature on.

Updating

bash
npm install -g synabun@latestnpm --prefix "$(npm root -g)/synabun/mcp-server" run setup:embeddings

SynaBun also offers new versions inside the app. Either way, run the second command after each update: the search model is kept inside the installed package, which the update replaces. If recall reports Local embeddings unavailable; keyword retrieval used., this is the fix.

Coming from 2026.x? Run npm i -g synabun@latest once by hand. Versions used to be dates (2026.9.5) and are now plain semver (2.0.0), so the in-app update check of an older install does not offer 2.0.0. From 2.0.0 on, the in-app updater works as before.

Running from source? git pull --ff-only, then npm run mcp:build and npm start.

Before a new version starts for the first time, SynaBun takes a verified snapshot of your data and keeps it in backups/updates in your data folder. If it cannot take the snapshot, it stops instead of starting.

Your data and privacy

Everything SynaBun stores is in one folder outside the app: ~/.synabun on macOS and Linux, %APPDATA%\synabun on Windows. Set SYNABUN_DATA_HOME to use another place.

~/.synabun/├── .env                 # settings and credentials for integrations├── data/                # interface state, schedules, logs├── backups/             # backups and pre-update snapshots└── mcp-data/memory.db   # your memories
  • Your memories stay on your machine. The database is a local file and the search model runs locally.
  • What does leave it. Your AI tools send your prompts, and the memories they recall, to their own providers. Optional features (AI decisions, WhatsApp, Discord, the browser) talk to their services once you set them up. SynaBun checks npm and GitHub for new versions, and the interface loads web fonts and one script from public CDNs.
  • Keep it on a network you trust. The Neural Interface has no login and listens on all network interfaces. Do not expose port 3344 to the internet. The full security model is in SECURITY.md.
  • Back up from the app. Copying memory.db by hand while SynaBun is running can miss recent writes.

Links

License

Licensed under the Apache License, Version 2.0.

You are free to use, modify, and distribute SynaBun under Apache 2.0. Premium features and enterprise extensions may be offered under a separate commercial license. See LICENSE-COMMERCIAL.md for details. Third-party notices are in NOTICE and THIRD-PARTY-LICENSES.md.

Trademark Notice

"SynaBun" is a trademark of its authors. The license does not grant permission to use the SynaBun name, trademarks, service marks, or branding. If you fork this project, you must use a different name for your derivative work.

Package verification: downloadable VirusTotal reports and SHA-256 hashes. Match the report to your exact version and file hash. Reports record engine coverage and analysis dates; they are not a guarantee of safety. Website results describe URL reputation, not a vulnerability audit.

Source: README.md at commit d49c2bb

Tools

136

remember

Store a piece of information in persistent memory. Use this when you learn something important, make a decision, discover a pattern, fix a hard bug, or want to preserve context for future sessions.

Parameterskindtagssourcecontentrequiredprojectrequiredcategoryrequiredimportancesource_refsubcategoryrelated_filesidempotency_key

recall

Search your persistent memory for relevant information. Use this at the start of any task to check what you already know, or when you need context about past decisions, known issues, or architectural patterns. Prefer format="compact" for discovery; use memories action="get" for full originals.

Parameterstagsafterlimitqueryrequiredscopebeforeformatrerankexplainprojectcategorymin_score+5 more

forget

Move a specific memory to trash by ID. The memory can be restored from the Neural Interface trash panel or via the restore tool. Use this to clean up outdated, incorrect, or superseded information.

Parametersmemory_idrequired

restore

Restore a trashed memory by ID. Use this to undo a forget operation.

Parametersmemory_idrequired

reflect

Update or annotate an existing memory. Use this when you discover additional context, when a decision changes, or when you want to adjust importance based on new information.

Parameterstagscontentprojectadd_tagscategorymemory_idrequiredimportancesupersedessubcategoryrelated_filesexpected_revisionrelated_memory_ids

memories

Browse recent memories, get statistics, or fetch one memory in FULL by id. Use action "get" with an id to pull a large/consolidated memory untruncated (list actions truncate content to 150 chars). Use to see what you remember about a project, review recent learnings, or check memory health.

Parametersididslimitactionrequiredprojectcategoryfeedbackrevisionoperationrelation_idtoken_budgetexpected_revision

category

Manage memory categories. Actions: create, update, delete, list. Categories persist across sessions.

Parametersnamecoloractionrequiredformatparentnew_nameis_parentdescriptionreassign_toreassign_children_to

sync

Check for stale memories whose related files have changed. Compares stored file checksums against current hashes. Returns compact output (ID + changed files only, no content). IMPORTANT: Always pass "categories" to scope the scan — calling without categories scans ALL memories and may produce output too large to return inline. For large memory sets, call iteratively per category rather than globally. Default limit is 50; increase only when using a narrow category filter.

Parameterslimitprojectcategories

loop

Autonomous loop control. Start a repeating task loop, check status, update progress journal, or stop it. The Stop hook drives iteration. Call "update" after each iteration with a brief summary to maintain context across compactions.

Parameterstaskactionrequiredcontextsummaryprogresstemplateiterationssession_idmax_minutes

tool_groups

Always-available router for SynaBun's tool groups. When a task needs a SynaBun tool this runtime does not list, call action="get", then action="add" with the group that has it, and continue once the host refreshes its tools. On Codex and Claude Code every SynaBun tool is already reachable on demand, so there it only moves the focus and needs no reload. Do not report a SynaBun capability unavailable before trying this. A change affects only this runtime, never other sessions or the default for new ones.

Parametersactionrequiredgroups

choice

Ask the user blocking multiple-choice questions through MCP form elicitation. Use this for SynaBun choices in Codex Default mode. If the result reports supported=false, ask the same numbered choices once in plain text and wait; do not call another question tool.

Parametersquestionsrequired

browser_batch

Run up to 10 known browser steps sequentially on one owned tab. Uses existing guarded tools, stops on the first failure, and returns one final snapshot by default. Never retry the whole batch after a partial failure. Steps run exactly as written: no Jev assistance inside a batch. A batch that navigated may end with one advisory "assessment" of the final page.

ParametersstepsrequiredtabIdsnapshotsessionId

browser_navigate

Navigate the browser to a URL (auto-creates a session if needed). By default the response includes an AI snapshot of the new page with [ref=eN] element refs — act on them directly with browser_click/fill/type, no separate snapshot call needed. A "Jev assessment:" line may follow (usable, loading, authentication_required, verification_required, consent_blocker, error, empty): it is advice about the page, never an action. On a sign-in or verification wall, stop and hand over to a human.

ParametersurlrequiredtabIdintentsnapshotsessionIdreturnSnapshot

browser_go_back

Go back to the previous page in browser history.

ParameterstabIdsessionId

browser_go_forward

Go forward to the next page in browser history.

ParameterstabIdsessionId

browser_reload

Reload the current page. Useful after making changes or when content is stale.

ParameterstabIdsessionId

browser_click

Click an element. Pass ref (e.g. "e12") from browser_snapshot — exact, no guessing. Selector is the fallback (CSS, text="...", :has-text(...), role=...; never :contains()). By default the response includes an AI snapshot diff of what changed, so you usually do NOT need a follow-up browser_snapshot.

ParametersreftabIdnthMatchselectorsnapshottextHintsessionIdreturnSnapshot

browser_fill

Clear an input/textarea and fill it with new text. Pass ref from browser_snapshot (preferred) or a selector. For contenteditable editors prefer browser_type.

ParametersreftabIdvaluerequirednthMatchselectortextHintsessionId

browser_type

Type text (simulates keystrokes; appends). Target by ref from browser_snapshot (preferred), selector, or omit both to type into the focused element. Prefer over browser_fill for contenteditable/rich-text editors.

ParametersrefmodetextrequiredtabIdnthMatchselectortextHintsessionId

browser_hover

Hover over an element (reveals dropdowns, tooltips, hover-triggered content). Pass ref from browser_snapshot (preferred) or a selector.

ParametersreftabIdnthMatchselectortextHintsessionId

browser_select

Select an option from a <select> dropdown by ref or selector, and option value.

ParametersreftabIdvaluerequirednthMatchselectortextHintsessionId

browser_press

Press a keyboard key or key combination. Supports modifiers like Control+A, Shift+Enter, etc.

ParameterskeyrequiredtabIdsessionId

browser_scroll

Scroll the page or a scrollable container (by ref or selector). Essential for infinite-scroll feeds — but for harvesting feed data, prefer the browser_extract_* tools with their scrolls param, which scroll+extract+dedupe in one call.

ParametersreftabIddistanceselectorsnapshotdirectionrequiredsessionIdreturnSnapshot

browser_upload

Upload files via a file input element (by ref or selector). For hidden/gated inputs, click the visible upload button first to reveal the input. See browser_cheatsheet for per-platform upload flows.

ParametersreftabIdnthMatchselectortextHintfilePathsrequiredsessionId

browser_snapshot

Observe page structure and element refs for click/fill/type. Scope with selector on complex pages. AI mode deduplicates delivered observations and supports snapshot IDs and diffs. Refs target elements in the latest captured scope; refresh after navigation or a stale-ref error.

ParametersdiffmodedepthforcetabIdformatintentmaxCharsselectorviewportsessionIdbaselineId

browser_content

Get the content of the current page. Set format="markdown" for clean markdown with structure preserved — preferred for LLM consumption. Returns up to maxChars (default 20000); pass offset to page through long pages.

ParameterstabIdformatoffsetmaxCharsselectorsessionId

browser_screenshot

Take a screenshot of the current page (localhost pages included): the viewport as JPEG, downscaled to 1024 px wide, by default. For visual QA pass width/height (breakpoints 375 / 768 / 1440 — emulated for this capture only), fullPage for the whole page, and save or path to write a PNG and get its path. Prefer browser_snapshot to read structure; it is far more token-efficient.

ParameterspathsavetabIdwidthformatheightqualityfullPagemaxWidthsessionId

browser_console

Read the current tab's console messages and uncaught page errors (the last 200, kept from when SynaBun opened the tab), localhost pages included. Use level "error" to check a page for errors, and clear or since to see only what a reload or an action produced.

ParametersclearlevellimitsincetabIdsessionId

browser_evaluate

Execute JavaScript in the browser page context and return the result. Useful for reading DOM state, extracting data, or performing actions not covered by other tools.

ParameterstabIdscriptsessionIdexpression

browser_wait

Wait for an element to reach a certain state, a page load state, or a fixed timeout. Useful after navigation or clicks that trigger async content loading. Use loadState="networkidle" after posting on Twitter/X or after navigation to ensure all async requests have settled.

ParametersstatetabIdtimeoutselectorloadStatesessionId

browser_session

Manage browser sessions — list open sessions and your tabs in them, see which tab you work in ("status"), create a new one, or close one (pass your tabId to close only that tab of yours). Use "status" to find your current tab id. When a browser tool's answer starts with "Your tab … was lost; a replacement tab … is open", continue in that tab (no create). Use "create" when your browser session or tab was lost (closed, disconnected, "Session not found", "Tab … not found"): it opens a new tab of your own in the SynaBun browser, starting the browser when it is not running, and in a loop or a dispatched run your next browser calls go to it. Only if create fails too, stop and report it; never switch to another browser. Closing a session other automations still use closes only your own tab in it; the session stays open for them.

ParametersurltabIdactionrequiredsessionId

browser_cheatsheet

Look up stable selectors and flow notes for a social platform (twitter, facebook, tiktok, whatsapp, instagram, linkedin). Call this before automating a platform the first time in a session — then reuse the returned selectors for browser_click / browser_type / browser_fill / browser_scroll / browser_snapshot.

ParameterstabIdactionplatformrequiredsessionId

browser_extract_tweets

Extract visible tweets as structured JSON (author, handle, text, time, url, replies, reposts, likes, views). Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call (e.g. scrolls:3 minItems:30). Much faster than browser_snapshot for data harvesting. Navigate to x.com/search?q=%23hashtag&f=live first for latest-first hashtag results.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_x_compose_state

Inspect the X/Twitter compose surface in ONE call (read-only). Returns: composerOpen, composerText (read back from [data-testid="tweetTextarea_0"]), charCount, overLimit; quoteCard {present, type:"quote"|"link"|"none", author, handle, text, url} — type "quote" means a real embedded quoted-tweet card rendered (safe to post a quote), "link" means only a plain link-preview card (posting would publish a bare reply — do NOT post; fix the status URL or skip the target), "none" means nothing embedded; submitButton {testid:"tweetButtonInline"|"tweetButton", present, enabled, selector} (tweetButtonInline for inline replies, tweetButton for the compose dialog); isModal (the glitchy centered reply dialog is open — close it and retry inline), composerCount (>1 ⇒ pass nthMatch to disambiguate the two reply textareas), hasStaleDraft (duplicated/garbled leftover text — discard and reopen), warnings[]; and recommendedAction {submit|type|open-composer|fix-quote-url|trim-text|unknown} — the deterministic next step. QUOTE flow: navigate x.com/compose/tweet, browser_type the full status URL, call this probe, post via submitButton.selector ONLY if quoteCard.type==="quote". REPLY flow: click the reply icon, call this probe, if isModal close it and retry inline, type, post via submitButton.selector. After submitting, re-call this probe (composer should have cleared) and confirm with browser_extract_tweets on the author profile /with_replies (a NEW, higher status id = published). On loop tabs a server-side gate ALSO blocks a tweetButton click when a status URL is in the body but quoteCard.type!=="quote" (response carries quoteGuard) — so a quote can never silently misfire into a bare reply. Read-only — never types or clicks. When recommendedAction is "unknown" or warnings[] is non-empty, an additive `judgment` {advisory:true, state, confidence, suggestedControl?, note} may appear: a Jev reading of the ambiguous probe built from booleans and counts only (never the composer text or the quote

ParameterstabIdsessionId

browser_extract_fb_posts

Extract visible Facebook posts as structured JSON (author, authorUrl, text, time, postUrl, reactions). Works on group feeds and Pages. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Much faster than browser_snapshot for data harvesting from Facebook.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_fb_composer_state

Inspect the Facebook posting surface in ONE call (read-only). Returns: modal {open,title,closeSelector,containsComposer} (modal.open is true ONLY for a visible posting dialog — FBs permanent hidden 0x0 Notifications dialog is ignored); trigger {found,text,suggestedSelector} — the Create-post button to CLICK first when no composer dialog is open yet (on a bare feed the probe can only see boxes that already exist, so use this to OPEN the composer; after opening, browser_type with NO selector into the auto-focused editor — selector-targeting the dialog editor is flaky); composers[] (search boxes filtered out) each with scope inline|dialog, inDialog, visible, rect, text, ariaLabel, placeholder, isPersonalProfile, isComment, isPostComposer (a comment box is flagged isComment and is NEVER a post composer — do not type a post into it), suggestedSelector; submitButton {label,scope,matchType,selector,enabled} scoped to the active visible dialog (matchType "label" = matched a publish/approval verb incl. German Senden/Veröffentlichen/Zur Genehmigung senden; "heuristic" = inferred as the dialog footer primary button when the label was untranslated, so verify via submission.state after clicking); submission {state: visible-post|pending-approval|posting-failed|composer-open|unknown, evidence}; and recommendedAction {submit|type|open-composer|done|retry|unknown} — the deterministic next step (submit = composer open with text AND an enabled submit button; use it to FINISH a half-typed post before starting anything new). Locale-tolerant (PT/EN/TR/FR/ES/DE incl. approval-flow groups). Flow: probe; if recommendedAction is "submit", click submitButton.selector and confirm FIRST; else if no composer dialog, click trigger.suggestedSelector; re-probe; type the full post into the auto-focused isPostComposer box with browser_type mode:"insert" (blank lines between paragraphs, link alone on the final line — insertText keeps the paragraphs and the isolated URL without firing Enter, so the typ

ParameterstabIdsessionId

browser_extract_fb_groups

Extract ALL JOINED Facebook groups from the current page (navigate to facebook.com/groups/joins/?ordering=viewer_added first) as a region-sorted index. Auto-scrolls the full virtualized joins list and dedupes by url in ONE call (defaults: scrolls:10, maxItems:1000 — override for very large/small lists). Each group {name, url, subtitle, member_count, region, lang, currency, source} is reconciled against the curated seed-queue memory first; groups not in it are classified from name+slug (language tokens: pt/tr/de/fr/es/pl/it/nl, and country aliases) into region + posting-currency, source:"name-heuristic"; the still-ambiguous ones land in region "Unknown" and under "unmatched". Spanish groups split into LatAm (USD) vs Spain (EUR). Returns { counts, byRegion: { UK:[...], US:[...], EU:[...], Brazil:[...], LatAm:[...], ... }, unmatched:[...] }. Pass region to filter to one bucket. Feed the whole JSON to fb_groups import {fromExtract} to populate/refresh the structured directory.

ParameterstabIdfieldsregionscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMsseedQueueId

fb_groups

Structured Facebook group directory + per-group posting checklist (SQLite-backed; the single source of truth that replaces the free-text seed-queue). Actions: worklist {currency|region, offerSlug, limit?, freshDays?=14, includePending?=false, reset?} — returns the groups STILL to post to for this offer: joined, promo not forbidden, region/currency match, not pending/cooldown, not already posted for this offer within freshDays; never-posted first, then least-recently-posted, then largest. Re-call it to RESUME (it returns only what is left); a new offerSlug (or reset:true) starts FRESH. mark {url, offerSlug, currency, status, postUrl?, note?} — record ONE group right after posting (durable checklist; call after EACH group, never batch). status posted=visible-post, pending=pending-approval (success; engages a 48h cooldown so the worklist skips it), failed=posting-failed, skipped. import {fromMemoryIds?, fromExtract?} — (re)build the directory from the surviving memories and/or a live browser_extract_fb_groups payload (idempotent). set {url | groups:[…]} with region/lang/currency/country/name/member_count/allows_promo — curation: authoritatively classify one or many groups (currency must be a SUPPORTED deal currency: USD/GBP/EUR/BRL/TRY/CAD/AUD). exclude {url, reason} — mark a group promo-forbidden (permanently dropped from worklists). list/stats {region?} — coverage counts by region, pending/cooldown, last-posted per offer. recategorize {} — one-shot cleanup: re-derive region/lang/currency/country for every group from name + post history and backfill allows_promo from confirmed visible posts (idempotent). Region buckets: UK, US, EU, Brazil, LatAm, Turkey, Australia, Canada, Unknown.

Parametersurllangnamenotelimitresetactionrequiredgroupsreasonregionstatuscountry+11 more

browser_extract_tiktok_videos

Extract visible TikTok videos from the For You or Following feed as structured JSON (handle, videoUrl, caption, likes, comments, saves, shares, music). Navigate to tiktok.com/ or tiktok.com/following first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Much faster than browser_snapshot for data harvesting from TikTok feeds.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_tiktok_studio

Extract visible posts from TikTok Studio content list as structured JSON (title, url, date, privacy, stats[]). Navigate to tiktok.com/tiktokstudio/content first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Use this to audit, manage, or bulk-read your published TikTok content.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_tiktok_profile

Extract profile info and video grid from a TikTok profile page as structured JSON (name, handle, bio, followers, following, likes, videos[{videoUrl, views}]). Navigate to tiktok.com/@username first. Scroll down to load more videos in the grid. Use this to audit a creator profile or collect video URLs for further processing.

ParameterstabIdsessionId

browser_extract_wa_chats

Extract visible WhatsApp chats from the sidebar as structured JSON (name, lastMsg, time, unreadCount, muted, pinned). Must be on web.whatsapp.com with the chat list visible. Pass scrolls/minItems to auto-scroll the sidebar and dedupe in ONE call. Use browser_click on span[title="Chat Name"] to open a specific chat.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_wa_messages

Extract visible messages from the open WhatsApp chat as structured JSON (sender, time, date, direction, text, dataId). Open a chat first by clicking span[title="Chat Name"]. Pass scrolls/minItems to auto-scroll UP through history and dedupe in ONE call. direction is "in" for received and "out" for sent messages.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_ig_feed

Extract visible Instagram feed posts as structured JSON (username, profileUrl, postUrl, caption, likes, comments, time, datetime, isSponsored, hasFollow). Navigate to instagram.com/ first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_ig_profile

Extract Instagram profile data as structured JSON (username, displayName, bio, posts, followers, followerExact, following, isVerified, website, gridPosts, highlights). Navigate to instagram.com/username/ first. Returns bio, stats, post grid (up to 12), and story highlights.

ParameterstabIdsessionId

browser_extract_ig_post

Extract a single Instagram post with comments as structured JSON (author, caption, likes, commentCount, time, datetime, comments[{username, text, time, datetime}]). Navigate to instagram.com/p/POST_ID/ or instagram.com/reel/REEL_ID/ first. Scroll the comment area to load more comments before extracting.

ParameterstabIdsessionId

browser_extract_ig_reels

Extract visible Instagram Reels with engagement data as structured JSON (username, profileUrl, caption, likes, comments, audioName, audioUrl, hasFollow). Navigate to instagram.com/reels/ first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_li_feed

Extract visible LinkedIn feed posts as structured JSON (author, authorUrl, headline, time, text, reactions, commentsCount, mediaType, articleTitle, articleLink, isPromoted, isRepost, postUrl). Navigate to linkedin.com/feed/ first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Much faster than browser_snapshot for data harvesting from the LinkedIn feed.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_li_profile

Extract LinkedIn profile data as structured JSON (name, headline, location, profilePic, connections, about, sections[{heading, items[{title, subtitle, meta}]}], recentActivity). Navigate to linkedin.com/in/USERNAME/ first. Sections include Experience, Education, Skills, etc. Use linkedin.com/in/me/ for the logged-in user's own profile.

ParameterstabIdsessionId

browser_extract_li_post

Extract a single LinkedIn post with comments as structured JSON (author, authorUrl, headline, time, text, reactions, commentsCount, postUrn, comments[{author, authorUrl, text, time, likes}]). Navigate to linkedin.com/feed/update/urn:li:activity:ID/ first. Click "Comentar" button to expand comment section, then scroll to load more comments before extracting.

ParameterstabIdsessionId

browser_extract_li_notifications

Extract LinkedIn notifications as structured JSON (text, time, isUnread, url, image). Navigate to linkedin.com/notifications/ first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Useful for monitoring engagement, connection requests, and mentions.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_li_messages

Extract LinkedIn messaging data as structured JSON with two arrays: conversations[{name, lastMessage, time, isUnread, url}] (sidebar list) and activeThread[{sender, text, time, direction}] (open conversation messages). Navigate to linkedin.com/messaging/ first. Click a conversation to load its messages. To send a message: browser_fill on .msg-form__contenteditable then browser_click on .msg-form__send-button.

ParameterstabIdsessionId

browser_extract_li_search_people

Extract LinkedIn people search results as structured JSON (name, profileUrl, headline, location, mutual, actionButton, image). Navigate to linkedin.com/search/results/people/?keywords=QUERY first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Also works on linkedin.com/search/results/all/.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

browser_extract_li_network

Extract LinkedIn My Network data as structured JSON with two arrays: invitations[{name, subtitle, profileUrl, acceptLabel, ignoreLabel}] (pending connection requests) and suggestions[{name, subtitle, followers, profileUrl, action, image}] (people/creators to follow or connect). Navigate to linkedin.com/mynetwork/ first. Scroll down to load more suggestions. To accept an invitation: browser_click on button with the acceptLabel. To connect: browser_click on the respective Conectar/Connect button.

ParameterstabIdsessionId

browser_extract_li_jobs

Extract LinkedIn job listings as structured JSON (jobId, title, company, companyUrl, location, salary, jobUrl, logo, promoted, easyApply, postedDate). Works on linkedin.com/jobs/ (recommendations) and linkedin.com/jobs/search/?keywords=QUERY&location=LOCATION. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call.

ParameterstabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

bluesky_session

BlueSky: who am I? Returns the logged-in account (did, handle, pdsUrl). Use first to confirm you are signed in. A blank assigned tab is safely initialized at bsky.app; nonblank tabs are never navigated implicitly. An expired session token is renewed inside the tool (waiting for bsky.app, then reloading its tab at most once), so "not logged in" means the page really has no session. Pass validate:true to check the token against the server.

ParameterstabIdvalidatesessionId

bluesky_timeline

BlueSky: read your home timeline (following feed) as compact JSON posts (uri, cid, author, text, counts, viewer). Pass maxItems to auto-paginate. Returns the next cursor.

ParameterslimittabIdcursormaxItemssessionId

bluesky_author_feed

BlueSky: read a user's posts (author feed) as compact JSON. Pass actor (handle or DID), optional filter, and maxItems to auto-paginate.

ParametersactorrequiredlimittabIdcursorfiltermaxItemssessionId

bluesky_thread

BlueSky: read a post and its thread (parents + replies) as compact JSON. Accepts an AT-URI or a bsky.app post URL. Each post includes uri+cid (needed to reply/like/repost).

ParametersurirequireddepthtabIdsessionIdparentHeight

bluesky_profile

BlueSky: get an actor profile (did, handle, name, bio, follower/following/post counts, and your viewer relationship: following/followedBy/muted/blocking).

ParametersactorrequiredtabIdsessionId

bluesky_search_posts

BlueSky: full-text search posts. Supports sort (top/latest), since/until, author, lang. Pass maxItems to auto-paginate. Returns compact posts + next cursor.

ParametersqrequiredlangsortlimitsincetabIduntilauthorcursormaxItemssessionId

bluesky_search_actors

BlueSky: search for users (actors). Returns compact actor cards (did, handle, name, bio, viewer relationship) + next cursor. Pass maxItems to auto-paginate.

ParametersqrequiredlimittabIdcursormaxItemssessionId

bluesky_notifications

BlueSky: list your notifications (likes, reposts, replies, mentions, follows) as compact JSON. Pass markSeen:true to clear the unread badge, maxItems to auto-paginate.

ParameterslimittabIdcursormarkSeenmaxItemsprioritysessionId

bluesky_graph

BlueSky: list an actor's followers or follows as compact actor cards + next cursor. Pass maxItems to auto-paginate.

ParametersactorrequiredlimittabIdwhichrequiredcursormaxItemssessionId

bluesky_likes

BlueSky: list likes. mode=post → the actors who liked a given post; mode=actor → the posts an actor has liked. Pass maxItems to auto-paginate.

ParametersurimoderequiredactorlimittabIdcursormaxItemssessionId

bluesky_feed

BlueSky: read a custom feed generator (mode=feed) or a list timeline (mode=list) by its AT-URI. Returns compact posts + next cursor. Pass maxItems to auto-paginate.

ParametersurirequiredmoderequiredlimittabIdcursormaxItemssessionId

bluesky_post

BlueSky: publish a post. Supports plain text with auto-facets (@mentions, links, #hashtags), replies (replyTo), quote-posts (quote), and up to 4 images (by url or local path, each with alt text). A link card (OG preview with thumbnail) is auto-generated for the first URL when the post has no images and no quote. Returns the new post uri+cid. In a scheduled automation SynaBun spaces Bluesky writes (posts, replies, likes, reposts, follows and their undos, DMs) a minute or two apart inside this call: never sleep, start a background shell or a Monitor, or end your turn to wait between writes. When the gap needs longer than one call, the call writes nothing, says so, and the next identical call waits the rest.

ParameterstextrequiredlangsquotetabIdimagesreplyTosessionId

bluesky_action

BlueSky: act on a post or actor. Post: like/unlike, repost/unrepost, delete (your own). Actor: follow/unfollow, mute/unmute, block/unblock. Undo actions resolve the record key automatically — never pass rkeys. In a scheduled automation SynaBun spaces Bluesky writes (posts, replies, likes, reposts, follows and their undos, DMs) a minute or two apart inside this call: never sleep, start a background shell or a Monitor, or end your turn to wait between writes. When the gap needs longer than one call, the call writes nothing, says so, and the next identical call waits the rest.

ParameterstabIdactionrequiredtargetrequiredsessionId

bluesky_resolve

BlueSky: resolve a handle to its DID (com.atproto.identity.resolveHandle).

ParameterstabIdhandlerequiredsessionId

bluesky_dm

BlueSky DMs (chat.bsky.*): list_convos, read messages in a convo, send a message (by convoId or members), or mark_read. Returns compact JSON. In a scheduled automation SynaBun spaces Bluesky writes (posts, replies, likes, reposts, follows and their undos, DMs) a minute or two apart inside this call: never sleep, start a background shell or a Monitor, or end your turn to wait between writes. When the gap needs longer than one call, the call writes nothing, says so, and the next identical call waits the rest.

ParameterstextlimittabIdactionrequiredcursorconvoIdmembersmaxItemssessionId

gsc_navigate

Open a Google Search Console page (overview, performance, inspect, pages, sitemaps, removals, links, security, settings, etc.). Always call before any gsc_* tool to land on the right report. Pages: overview, insights, performance_search, performance_discover, performance_news, inspect, pages, videos, sitemaps, removals, cwv_mobile, cwv_desktop, https, security, manual_actions, enhancements_breadcrumbs, enhancements_faq, enhancements_sitelinks, enhancements_videos, enhancements_products, enhancements_recipes, enhancements_review, enhancements_events, enhancements_jobposting, enhancements_speakable, enhancements_qa, enhancements_logos, enhancements_sitenames, enhancements_dataset, enhancements_practice, enhancements_math, enhancements_video_indexing, links, achievements, settings, crawl_stats, users, change_address, associations, disavow, shopping, merchant.

ParameterspagerequiredtabIdpropertysessionId

gsc_property

Manage GSC property selection — list registered properties, switch the active one (re-navigates current page), read the active property from the URL, or open the Add Property dialog. [mutating for action=add — adds a new property to the Google account]

ParameterstypetabIdactionrequiredpropertysessionId

gsc_inspect_url

Run URL Inspection on a URL — opens the inspect tool, fills the URL, polls up to 30s for the result panel, returns structured JSON (pageIndexed, verdict, indexingState, coverage, canonicalUser, canonicalGoogle, lastCrawl, crawlStatus, crawlAllowed, fetchStatus, robotsAllowed, sitemap, referringPage, httpStatus, enhancements, summary, fullText).

ParametersurlrequiredtabIdpropertysessionIdtimeoutMs

gsc_inspect_test_live

Click the "Test live URL" button on the URL Inspection page and poll up to 90s for results. Useful to verify a live page after a fix without waiting for re-indexing. Returns same shape as gsc_inspect_url with `liveTest:true`.

ParametersurltabIdsessionIdtimeoutMs

gsc_inspect_request_indexing

[mutating — affects Google's crawl queue] Submit a URL to Google's indexing queue. Clicks "Request indexing" on the inspection result page (running a live test first if needed). Polls for the success/error modal and returns `{ requested, queued, error }`. Quota: ~10/day per property.

ParametersurltabIdsessionIdtimeoutMs

gsc_inspect_view_crawled

Open the "View crawled page" panel from the URL Inspection result and switch to the requested view (html / screenshot / http_response / more_info). Use browser_screenshot or browser_snapshot afterwards to capture content.

ParametersviewrequiredtabIdsessionId

gsc_performance_query

Run a Performance report query — sets searchType, dateRange (preset or custom), primary dimension, chip filters, and optional comparison; returns total clicks/impressions/CTR/position plus full table rows as JSON. Auto-scrolls the grid to load up to `limit` rows.

ParameterslimittabIdcomparefilterspropertycustomEnddateRangedimensionsessionIdsearchTypecustomStart

gsc_performance_export

Trigger Performance report export menu in the active tab. Format: csv → ZIP download; excel → XLSX; google_sheets → opens a new Sheet. Browser handles the actual download to its default download dir.

ParameterstabIdformatrequiredsessionId

gsc_performance_chart_screenshot

Capture a screenshot scoped to the Performance chart panel only — useful for visual reports.

ParameterstabIdsessionId

gsc_pages_report

Read the Pages (Coverage/Indexação) report — totals indexed/notIndexed and per-reason buckets with counts and trends. Pass `reason` to drill into a bucket and list URL examples.

ParameterstabIdreasonpropertysessionId

gsc_pages_validate_fix

[mutating — starts a Google validation cycle] Open a Pages-report reason bucket and click "Validate fix" so Google re-checks the URLs. Returns confirmation status.

ParameterstabIdreasonrequiredpropertysessionId

gsc_videos_report

Read the Video indexing report — same shape as gsc_pages_report but for video pages.

ParameterstabIdpropertysessionId

gsc_sitemap

Manage sitemaps. action=list returns all submitted sitemaps; action=submit adds a sitemap (mutating); action=delete removes one (mutating); action=view_errors opens the per-sitemap detail and returns issues.

ParametersurltabIdactionrequiredpropertysessionId

gsc_removals

Manage URL removals. list_* returns existing requests; action=new submits a new removal (mutating). removalType: temporary (6-month hide), outdated_content (refresh Google's cached version), safe_search (report adult content).

ParametersscopetabIdactionrequiredtargetpropertysessionIdremovalType

gsc_removals_cancel

[mutating] Cancel a pending temporary removal request. URL must match the listed entry exactly.

ParametersurlrequiredtabIdpropertysessionId

gsc_cwv_report

Read Core Web Vitals report for mobile or desktop. Returns counts of poor / needs-improvement / good URLs and per-issue URL group examples.

ParameterstabIddevicerequiredpropertysessionId

gsc_https_report

Read the HTTPS report — counts of HTTPS vs non-HTTPS URLs and reasons for non-HTTPS URLs with examples.

ParameterstabIdpropertysessionId

gsc_security_issues

Read Security Issues. action=list returns active + history. action=request_review clicks "Request review" (mutating, requires fixed issues).

ParameterstabIdactionpropertysessionId

gsc_manual_actions

Read Manual Actions. action=list returns penalties (or "No issues detected"). action=reconsideration submits a reconsideration request with `body` (mutating).

ParametersbodytabIdactionpropertysessionId

gsc_enhancements

Read a structured-data Enhancements report. Returns valid / warnings / errors counts and per-issue URL examples. Reports: breadcrumbs, faq, sitelinks, videos, products, recipes, review, events, jobposting, speakable, qa, logos, sitenames, dataset, practice, math, merchant.

ParameterstabIdreportrequiredpropertysessionId

gsc_settings

Read or modify property settings — ownership/verification, users, address. action=get returns the settings page summary; action=set_address/change_address mutate.

ParameterstabIdactionpropertysessionIdnewProperty

gsc_crawl_stats

Read Crawl Stats — totals (requests, download size, response time) and breakdowns by host status, response code, file type, Googlebot type.

ParameterstabIdpropertysessionId

gsc_users

Manage property users. list returns email + role. add invites a user (mutating). remove revokes (mutating). change_role updates permissions (mutating).

ParametersroleemailtabIdactionrequiredpropertysessionId

gsc_associations

Manage Associations (Analytics / Merchant / Ads / Play / YouTube / Actions / Chrome Web Store). list returns existing associations; add/remove mutate.

ParameterstabIdactionrequiredservicepropertysessionIdidentifier

gsc_disavow

[mutating for upload/delete — affects how Google trusts links to your site] Manage the Disavow Links file. download exports current; upload replaces (use sparingly).

ParameterstabIdactionrequiredfilePathpropertysessionId

gsc_shopping

Read Shopping/Merchant Listings report — counts and per-issue example URLs.

ParameterstabIdpropertysessionId

gsc_extract_table

Generic GSC grid → JSON extractor. Useful when no specific gsc_*_report tool covers a panel.

ParameterstabIdselectorsessionId

gsc_screenshot

Capture a full-page screenshot of the active GSC tab. Saved via SynaBun image staging.

ParameterstabIdsessionId

youtube_source

Discover FRESH candidate game trailers (already-posted ones are removed automatically via the youtube-videos memory ledger — no manual dedup/recall needed). Searches YouTube for recently published trailers, queries IGDB for games (+ Steam appid and official YouTube trailer ids), and resolves Steam direct mp4 URLs. Returns trimmed candidates: { game, source, igdbId, appid, releaseDate, trailerPublishedAt, trailerTitle, genres, ytTrailerIds, steamMp4Url, summary }. Feed one to youtube_download (prefer steamMp4Url; fall back to a ytTrailerIds value), then pass its game/igdbId/appid/sourceTrailerId back into youtube_upload so it records the ledger.

ParameterslimitqueryappidssourcelookbackDaysexcludePosted

youtube_download

Download a trailer file. Prefers steamMp4Url (direct publisher asset, lowest copyright risk); otherwise yt-dlp on ytId/url. Returns { filePath, bytes, source }. Pass filePath to youtube_upload. [requires yt-dlp + ffmpeg on the host for the YouTube fallback path].

ParametersurlytIdappidqualityfilenameuseCookiessteamMp4Url

youtube_navigate

Open a YouTube Studio section (dashboard, content, analytics, playlists, comments, subtitles, copyright, earn, customization). Auto-creates a browser session on studio.youtube.com using the signed-in Google account. Call before other youtube_* browser tools.

ParameterstabIdsectionrequiredsessionId

youtube_upload

Upload a local video file to YouTube Studio, publish it, and record it to the youtube-videos dedup ledger. Opens Create → Upload, sets the file, fills title/description/tags, advances the wizard, sets visibility, clicks Done, then verifies the wizard closed and resolves the new video id. [mutating — publishes to the channel]. Pass game/igdbId/appid/sourceTrailerId so the upload is remembered and never re-posted. Default visibility=private so you can schedule afterwards with youtube_schedule.

ParametersgametagsappidtabIdtitlerequiredigdbIdsourcefilePathrequiredsessionIdvisibilitydescriptionmadeForKids+1 more

youtube_metadata

Edit an existing video's metadata on its Studio edit page: title, description, tags, category, made-for-kids. Saves on completion. [mutating]. Use youtube_schedule for visibility/publish-time.

ParameterstagstabIdtitlevideoIdrequiredcategorysessionIddescriptionmadeForKids

youtube_thumbnail

Upload a custom thumbnail to a video via its Studio edit page (uses the hidden thumbnail file input). Saves on completion. [mutating].

ParameterstabIdvideoIdrequiredfilePathrequiredsessionId

youtube_schedule

Schedule a video to go public at a future time (or set immediate visibility) via the Studio visibility dialog. Pass publishAt for scheduling. [mutating]. Locale-aware date entry (US + pt-BR); the response echoes the picker read-back as scheduledDisplay — verify it matches your intended slot.

ParameterstabIdvideoIdrequiredpublishAtsessionIdvisibility

youtube_playlist

Manage playlists. action=list enumerates them; action=create makes a new playlist; action=add adds a video to an existing playlist (by name). [mutating for create/add].

ParametersnametabIdactionrequiredvideoIdsessionIdvisibility

youtube_endscreen

Apply an end-screen template to a video (links to a related video/playlist + a subscribe element) via the Studio end-screen editor, then save. [mutating]. End-screen editing is canvas-based and may need a manual touch-up.

ParameterstabIdvideoIdrequiredtemplatesessionId

youtube_analytics

Read-only YouTube Analytics (views, watch-time, likes, subscribers, etc.) via the API — needs the YouTube API configured/authorized in Settings → YouTube. Channel-wide or per-video.

ParametersendDatemetricsvideoIdchannelIdstartDate

youtube_channel

Read channel info or list recent uploads from Studio (browser). Use action=list to dedupe the autopilot against videos already on the channel.

ParameterslimittabIdactionrequiredsessionId

discord_guild

Discord server overview and listing. Actions: info, channels, members, roles, audit_log.

Parameterslimitactionrequiredguild_idaction_type

discord_channel

Discord channel management. Actions: create, edit, delete, list, permissions. Handles text, voice, categories, forums, stages.

Parametersdenynamensfwtypeallowtopicactionrequiredparentreasontargetbitratechannel+4 more

discord_role

Discord role management. Actions: create, edit, delete, list, assign (role to member), remove (role from member).

Parametersnamerolecolorhoistactionrequiredmemberreasonguild_idpositionmentionablepermissions

discord_message

Discord message operations. Actions: send, edit, delete, pin, unpin, react, bulk_delete, list.

Parametersafterembedemojilimitactionrequiredbeforechannelrequiredcontentguild_idreply_tomessage_idmessage_ids

discord_member

Discord member moderation. Actions: info, kick, ban, unban, timeout, nickname.

Parametersactionrequiredmemberrequiredreasondurationguild_idnicknamedelete_days

discord_onboarding

Discord server onboarding and setup. Actions: get, set_welcome, set_rules, set_verification, set_onboarding.

Parametersactionrequiredenabledpromptsguild_iddescriptionrules_channelsystem_channeldefault_channelswelcome_channelsverification_level

discord_webhook

Discord webhook management. Actions: create, edit, delete, list, execute (send message as webhook).

Parametersnameactionrequiredembedschannelcontentguild_idusernameavatar_urlwebhook_idwebhook_token

discord_thread

Discord thread management. Actions: create (from message or standalone), archive, unarchive, lock, delete.

Parametersnameactionrequiredthreadchannelprivateguild_idmessage_idauto_archive

whiteboard_read

Read the whiteboard. Returns viewport truth (usable canvas size, origin offset, whether a browser is connected and in Focus mode), every element with its final box x,y,w,h (text/list sizes are browser-measured; ~ marks server estimates not yet measured), z-order, rotation, resolved arrow endpoints and anchors, then a layout analysis: content bounds, elements overflowing the usable area, overlapping pairs, section containment (with spill-outs), z-order and dangling-anchor notes. Call it before placing or moving elements and after edits to verify. format:'json' returns the same as structured JSON; verbose:true prints full text.

Parametersformatverbose

whiteboard_add

Add elements. Coordinates: px (default) are absolute canvas pixels and are NOT offset — start at the origin reported by whiteboard_read (values are clamped into the usable area). pct = 0-100 of the usable area (offsets applied; also converts arrow/pen points). parent:<sectionId> makes x/y relative to that section and clamps inside it. layout row/column/grid/center overrides x/y using real sizes. Sizes: text/list auto-size (do not pass width/height); shapes default 160x100 (rect, pill, circle, triangle, drawn-circle); sections default per sectionType; images need width/height. Arrows: 2+ points plus optional startAnchor/endAnchor (unknown IDs dropped with a warning; anchored ends snap to the target edge). Returns the FINAL geometry per element after defaults/pct/layout/clamping with the adjustments made, then overflow/overlap warnings for the new elements. Guidance: keep content within ~70-80% of the usable width, centered, fit vertically, ~20px margins.

ParameterslayoutelementsrequiredcoordMode

whiteboard_update

Update one element ({id, updates}) or many atomically ({items:[{id, updates}]}: one save, one render, one undo step in the browser). Only listed fields change; changing content/items/fontSize re-estimates a text/list size until the browser re-measures it. coordMode pct and parent:<sectionId> work as in whiteboard_add. Positions are clamped into the usable area; unknown anchor IDs are dropped with a warning. Per-item results include the final geometry; a missing ID fails only that item.

ParametersiditemsparentupdatescoordMode

whiteboard_remove

Remove one element ({id}) or several atomically ({ids}). Arrows anchored to a removed element are detached and their endpoint moved to its centre (reported as cascade updates). Omit both to clear the whole board (undoable in the browser with Ctrl+Z).

Parametersidids

whiteboard_screenshot

Capture the live whiteboard from the primary connected browser window as a JPEG, preceded by a text block with the coordinate mapping (canvas size, image scale: image px ÷ scale = canvas px, usable viewport origin, element count). Fails with a clear message when no browser is connected. Use whiteboard_read for exact numbers; use this to judge visual overlap, legibility and how the board actually looks.

Parameterscrop

card_list

List all currently open memory cards in the Neural Interface. Returns each card's memory UUID, position, size, compact/pin state, content preview, and the current viewport dimensions (width x height). Use this before placing cards to know the available screen size.

Takes no parameters.

card_open

Open a memory as a floating card in the Neural Interface. Use card_list first to see viewport size. Coordinate modes (coordMode): "px" (default) = absolute pixels. "pct" = percentage of viewport (0-100), e.g. left:50 top:50 = center of screen. If the card is already open, it is brought to the front. Omit left/top for auto-cascade positioning.

ParameterstopleftcompactmemoryIdrequiredcoordMode

card_close

Close a memory card by its UUID, or close all open cards if no memoryId is provided. Use card_list first to see which cards are open.

ParametersmemoryId

card_update

Update an open memory card's position, size, compact/expand state, or pin state. Set coordMode to "pct" to use percentage-based positioning. Only specified fields are changed; others remain untouched. Changes appear in real-time.

ParameterstopleftwidthheightpinnedcompactmemoryIdrequiredcoordMode

card_screenshot

Take a visual screenshot of the Neural Interface showing all open memory cards in their current positions. Returns a JPEG image. Requires the Neural Interface to be open in a browser.

Takes no parameters.

git

Git repository operations. Actions: "status" shows branch and changed files, "diff" returns raw diff content for analysis, "commit" stages and commits with a message, "log" shows recent commit history, "branches" lists all branches. Use "diff" to analyze changes before generating commit messages.

Parameterspathrequiredcountfilesactionrequiredmessagemax_lines

image_staged

List, clear, or remove images from SynaBun's image store (data/images/). Images arrive when users paste them in the Neural Interface chat. Use "list" to see available images with their full absolute paths — these paths can be passed to browser_upload, Read, or any tool that accepts file paths. Use "clear" to delete all attachment-type images (auto-clear after use). Use "remove" to delete a specific file.

Parameterstypeactionrequiredfilename

style_guide

A project's SynaBun Style Guide: brand, colors (light/dark), type, spacing, motion, components and rules, as a summary, the full DESIGN.md or tokens (CSS variables, Tailwind theme, W3C design tokens). Call it BEFORE UI, design, copy, marketing, image or video work and use its tokens instead of inventing values. Pass projectPath (your working directory). To change the guide, use action "propose": the user reviews proposals; never edit DESIGN.md or the token files by hand.

ParametersbgfgsizemodelrunIdthemeactionformatreasonstatuschangesformats+4 more

morelogin

Manage MoreLogin (anti-detect, multi-account browser) profiles. Actions: "status" (is MoreLogin installed/running, which profile is the default AI browser), "list" (profiles), "create" (new profile), "start"/"stop" (launch/close a profile), "use_default" (set a profile as the default AI browser — afterwards all browser_* tools automatically drive that MoreLogin profile). Requires the MoreLogin desktop app to be running with its local API enabled.

ParametersnameenvIdactionrequired

tictactoe

Play Tic Tac Toe on the whiteboard. Actions: "start" sets up the board (piece defaults to X), "move" places the current turn's piece in cell 1-9, "state" shows the current board, "end" closes the game. The board renders visually on the whiteboard. X always goes first. Returns ASCII board + game status after each action.

Parameterscellpieceactionrequired

Version history

2
  1. v2.2.2LatestNov 6, 2026
  2. v2.1.0Oct 29, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts