SynaBun

io.github.danilokhury由 GitHub 账号 danilokhury 发布v2.2.2更新于 Nov 6, 2026

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

概览

AI 生成的概览

SynaBun 是本地自托管的持久记忆 MCP 服务器,面向 AI 编程工具,并提供浏览器自动化与社交平台数据提取工具。

可以做什么
  • 保存、检索、批注、移入回收站与恢复记忆,并按类别整理
  • 检查源文件已变更的记忆,浏览近期记忆或统计信息
  • 操作浏览器:导航、点击、输入、滚动、上传、快照、读取页面内容、截图、读取控制台、执行 JavaScript、管理会话与批量执行步骤
  • 从 X、Facebook、TikTok、Instagram、LinkedIn 和 WhatsApp 页面提取结构化数据,含发布框状态检查与 Facebook 群组目录
  • 使用 Google Search Console、YouTube Studio、Discord、Bluesky、白板、卡片、git 操作与项目风格指南等集成
  • 运行循环任务,并按需加载当前会话未列出的工具组
适用场景
适合希望 Claude Code、Codex、OpenCode 或其他 MCP 客户端中的编程助手在会话之间保留决策与上下文、且不想使用云账号的用户。也适合需要让助手操作可见浏览器并从社交平台采集帖子或信息流的场景。
运行要求
以 npx 或全局 npm 安装方式在本地运行,需要 Node.js 22.19 或更高版本。应用需保持运行,工具才能访问记忆。可选的嵌入模型安装步骤用于启用语义检索;首次启动会为浏览器工具安装 Chromium。可选集成的凭据在设置中填写。
安装前请注意
本地网页界面没有登录验证且监听所有网络接口,不应将 3344 端口暴露到互联网。浏览器工具可在已登录账号上点击、输入、上传和发布内容,社交提取会读取你的登录会话。记忆与被召回的上下文会发送给所用 AI 工具的提供商;可选集成会连接各自服务。凭据保存在本地 .env 文件中。

安装

在 SourceWeft 中

  1. 打开 控制台中的 SynaBun,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:README.md,提交 d49c2bb

工具

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.

输入参数kindtagssourcecontent必填project必填category必填importancesource_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.

输入参数tagsafterlimitquery必填scopebeforeformatrerankexplainprojectcategorymin_score另有 5 个

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.

输入参数memory_id必填

restore

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

输入参数memory_id必填

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.

输入参数tagscontentprojectadd_tagscategorymemory_id必填importancesupersedessubcategoryrelated_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.

输入参数ididslimitaction必填projectcategoryfeedbackrevisionoperationrelation_idtoken_budgetexpected_revision

category

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

输入参数namecoloraction必填formatparentnew_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.

输入参数limitprojectcategories

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.

输入参数taskaction必填contextsummaryprogresstemplateiterationssession_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.

输入参数action必填groups

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.

输入参数questions必填

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.

输入参数steps必填tabIdsnapshotsessionId

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.

输入参数url必填tabIdintentsnapshotsessionIdreturnSnapshot

browser_go_back

Go back to the previous page in browser history.

输入参数tabIdsessionId

browser_go_forward

Go forward to the next page in browser history.

输入参数tabIdsessionId

browser_reload

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

输入参数tabIdsessionId

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.

输入参数reftabIdnthMatchselectorsnapshottextHintsessionIdreturnSnapshot

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.

输入参数reftabIdvalue必填nthMatchselectortextHintsessionId

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.

输入参数refmodetext必填tabIdnthMatchselectortextHintsessionId

browser_hover

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

输入参数reftabIdnthMatchselectortextHintsessionId

browser_select

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

输入参数reftabIdvalue必填nthMatchselectortextHintsessionId

browser_press

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

输入参数key必填tabIdsessionId

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.

输入参数reftabIddistanceselectorsnapshotdirection必填sessionIdreturnSnapshot

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.

输入参数reftabIdnthMatchselectortextHintfilePaths必填sessionId

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.

输入参数diffmodedepthforcetabIdformatintentmaxCharsselectorviewportsessionIdbaselineId

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.

输入参数tabIdformatoffsetmaxCharsselectorsessionId

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.

输入参数pathsavetabIdwidthformatheightqualityfullPagemaxWidthsessionId

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.

输入参数clearlevellimitsincetabIdsessionId

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.

输入参数tabIdscriptsessionIdexpression

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.

输入参数statetabIdtimeoutselectorloadStatesessionId

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.

输入参数urltabIdaction必填sessionId

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.

输入参数tabIdactionplatform必填sessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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

输入参数tabIdsessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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

输入参数tabIdsessionId

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.

输入参数tabIdfieldsregionscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMsseedQueueId

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.

输入参数urllangnamenotelimitresetaction必填groupsreasonregionstatuscountry另有 11 个

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdsessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdsessionId

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.

输入参数tabIdsessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdsessionId

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.

输入参数tabIdsessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdsessionId

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/.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdsessionId

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.

输入参数tabIdfieldsscrollsmaxCharsmaxItemsminItemssessionIdtimeoutMs

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.

输入参数tabIdvalidatesessionId

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.

输入参数limittabIdcursormaxItemssessionId

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.

输入参数actor必填limittabIdcursorfiltermaxItemssessionId

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).

输入参数uri必填depthtabIdsessionIdparentHeight

bluesky_profile

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

输入参数actor必填tabIdsessionId

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.

输入参数q必填langsortlimitsincetabIduntilauthorcursormaxItemssessionId

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.

输入参数q必填limittabIdcursormaxItemssessionId

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.

输入参数limittabIdcursormarkSeenmaxItemsprioritysessionId

bluesky_graph

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

输入参数actor必填limittabIdwhich必填cursormaxItemssessionId

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.

输入参数urimode必填actorlimittabIdcursormaxItemssessionId

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.

输入参数uri必填mode必填limittabIdcursormaxItemssessionId

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.

输入参数text必填langsquotetabIdimagesreplyTosessionId

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.

输入参数tabIdaction必填target必填sessionId

bluesky_resolve

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

输入参数tabIdhandle必填sessionId

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.

输入参数textlimittabIdaction必填cursorconvoIdmembersmaxItemssessionId

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.

输入参数page必填tabIdpropertysessionId

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]

输入参数typetabIdaction必填propertysessionId

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).

输入参数url必填tabIdpropertysessionIdtimeoutMs

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`.

输入参数urltabIdsessionIdtimeoutMs

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.

输入参数urltabIdsessionIdtimeoutMs

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.

输入参数view必填tabIdsessionId

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.

输入参数limittabIdcomparefilterspropertycustomEnddateRangedimensionsessionIdsearchTypecustomStart

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.

输入参数tabIdformat必填sessionId

gsc_performance_chart_screenshot

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

输入参数tabIdsessionId

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.

输入参数tabIdreasonpropertysessionId

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.

输入参数tabIdreason必填propertysessionId

gsc_videos_report

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

输入参数tabIdpropertysessionId

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.

输入参数urltabIdaction必填propertysessionId

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).

输入参数scopetabIdaction必填targetpropertysessionIdremovalType

gsc_removals_cancel

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

输入参数url必填tabIdpropertysessionId

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.

输入参数tabIddevice必填propertysessionId

gsc_https_report

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

输入参数tabIdpropertysessionId

gsc_security_issues

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

输入参数tabIdactionpropertysessionId

gsc_manual_actions

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

输入参数bodytabIdactionpropertysessionId

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.

输入参数tabIdreport必填propertysessionId

gsc_settings

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

输入参数tabIdactionpropertysessionIdnewProperty

gsc_crawl_stats

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

输入参数tabIdpropertysessionId

gsc_users

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

输入参数roleemailtabIdaction必填propertysessionId

gsc_associations

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

输入参数tabIdaction必填servicepropertysessionIdidentifier

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).

输入参数tabIdaction必填filePathpropertysessionId

gsc_shopping

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

输入参数tabIdpropertysessionId

gsc_extract_table

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

输入参数tabIdselectorsessionId

gsc_screenshot

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

输入参数tabIdsessionId

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.

输入参数limitqueryappidssourcelookbackDaysexcludePosted

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].

输入参数urlytIdappidqualityfilenameuseCookiessteamMp4Url

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.

输入参数tabIdsection必填sessionId

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.

输入参数gametagsappidtabIdtitle必填igdbIdsourcefilePath必填sessionIdvisibilitydescriptionmadeForKids另有 1 个

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.

输入参数tagstabIdtitlevideoId必填categorysessionIddescriptionmadeForKids

youtube_thumbnail

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

输入参数tabIdvideoId必填filePath必填sessionId

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.

输入参数tabIdvideoId必填publishAtsessionIdvisibility

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].

输入参数nametabIdaction必填videoIdsessionIdvisibility

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.

输入参数tabIdvideoId必填templatesessionId

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.

输入参数endDatemetricsvideoIdchannelIdstartDate

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.

输入参数limittabIdaction必填sessionId

discord_guild

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

输入参数limitaction必填guild_idaction_type

discord_channel

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

输入参数denynamensfwtypeallowtopicaction必填parentreasontargetbitratechannel另有 4 个

discord_role

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

输入参数namerolecolorhoistaction必填memberreasonguild_idpositionmentionablepermissions

discord_message

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

输入参数afterembedemojilimitaction必填beforechannel必填contentguild_idreply_tomessage_idmessage_ids

discord_member

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

输入参数action必填member必填reasondurationguild_idnicknamedelete_days

discord_onboarding

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

输入参数action必填enabledpromptsguild_iddescriptionrules_channelsystem_channeldefault_channelswelcome_channelsverification_level

discord_webhook

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

输入参数nameaction必填embedschannelcontentguild_idusernameavatar_urlwebhook_idwebhook_token

discord_thread

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

输入参数nameaction必填threadchannelprivateguild_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.

输入参数formatverbose

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.

输入参数layoutelements必填coordMode

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.

输入参数iditemsparentupdatescoordMode

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).

输入参数idids

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.

输入参数crop

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.

无需输入参数。

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.

输入参数topleftcompactmemoryId必填coordMode

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.

输入参数memoryId

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.

输入参数topleftwidthheightpinnedcompactmemoryId必填coordMode

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.

无需输入参数。

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.

输入参数path必填countfilesaction必填messagemax_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.

输入参数typeaction必填filename

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.

输入参数bgfgsizemodelrunIdthemeactionformatreasonstatuschangesformats另有 4 个

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.

输入参数nameenvIdaction必填

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.

输入参数cellpieceaction必填

版本历史

2
  1. v2.2.2最新Nov 6, 2026
  2. v2.1.0Oct 29, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分