SynaBun
2 Nov 2026
io.github.danilokhury/synabun
Persistent memory MCP server for Claude Code, Codex and OpenCode, stored locally in SQLite
Install
npx -y synabun@2.1.0
Built for
Any MCP client. Works as a standard MCP server, so it can be added to any MCP client, including Claude, Cursor and Codex. Based on the listing description and package type. This is not a certification from those products.
Transports: stdio.
Links
Audit report
Tested by AddonAudit.
Sandbox handshake completed, with warnings: advisories, install scripts present.
Automated smoke test, not a security guarantee.
- Version
- 2.1.0
- Audited
- 2 Nov 2026
- Package
- npm synabun
- Advisories
- 1 critical, 13 high, 13 medium, 2 low
- Time to ready
- 338 ms
- Network
- Disabled
- Pass Version. Pinned npm synabun@2.1.0
- Issue found Known vulnerabilities. Critical or high advisories were returned.
- Pass License. Apache-2.0
- Warn Install scripts. Install-time scripts: postinstall
- Pass Credential patterns. No credential patterns in the published artifact.
- Pass Package size. 35.5 MB
- Pass Maintainer activity. Active 4 days ago.
- Pass Sandbox. MCP handshake completed. 80 tools listed. Tool count measured offline in our sandbox; some servers load more tools when connected.
Tools
- 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.
- 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 di
- 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.
- restore Restore a trashed memory by ID. Use this to undo a forget operation.
- 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.
- 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 projec
- category Manage memory categories. Actions: create, update, delete, list. Categories persist across sessions.
- 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
- 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.
- 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 Cl
- 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
- 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 wr
- 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 need
- browser_go_back Go back to the previous page in browser history.
- browser_go_forward Go forward to the next page in browser history.
- browser_reload Reload the current page. Useful after making changes or when content is stale.
- 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 change
- 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.
- 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.
- browser_hover Hover over an element (reveals dropdowns, tooltips, hover-triggered content). Pass ref from browser_snapshot (preferred) or a selector.
- browser_select Select an option from a <select> dropdown by ref or selector, and option value.
- browser_press Press a keyboard key or key combination. Supports modifiers like Control+A, Shift+Enter, etc.
- 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.
- 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.
- 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 a
- 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.
- 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 th
- 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
- 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.
- 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
- browser_session Manage browser sessions — list open sessions, create a new browser, or close an existing one.
- 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_cli
- 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_snapsh
- 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,
- 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
- 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); trig
- 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: s
- 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?=fals
- 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-scr
- browser_extract_tiktok_search Extract visible TikTok search result videos as structured JSON (videoUrl, handle, profileUrl, caption, views). Navigate to tiktok.com/search?q=<query> first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. Much faster
- 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 thi
- 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 gr
- 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
- 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
- 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
- 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
- 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.
- 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,
- browser_extract_ig_search Extract posts from the Instagram Explore page as structured JSON (url, alt, isReel). Navigate to instagram.com/explore/ first. Pass scrolls/minItems to auto-scroll, extract, and dedupe in ONE call. For hashtag search, navigate to instagram.
- 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 scro
- 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
- 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:acti
- 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, co
- 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.
- 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, extra
- 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}] (
- 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=QUER
- 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 i
- 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.
- 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.
- 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).
- bluesky_profile BlueSky: get an actor profile (did, handle, name, bio, follower/following/post counts, and your viewer relationship: following/followedBy/muted/blocking).
- 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.
- 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.
- 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.
- bluesky_graph BlueSky: list an actor's followers or follows as compact actor cards + next cursor. Pass maxItems to auto-paginate.
- 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.
- 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.
- 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 a
- 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.
- bluesky_resolve BlueSky: resolve a handle to its DID (com.atproto.identity.resolveHandle).
- 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.
- 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, pe
- 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 Goo
- 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, crawl
- 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`.
- 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, qu
- 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.
- 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 l
- 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.
Sandbox log excerpt
[SynaBun] Tools (strict): browser,browser_twitter,browser_facebook,browser_tiktok,browser_whatsapp,browser_instagram,browser_linkedin,browser_bluesky,gsc,youtube,discord,whiteboard,card,git,image,styleguide,morelogin,tictactoe (18 groups, instructions: 4975 chars) [SynaBun] Changing this runtime's tools never rewrites ~/.codex/config.toml: the canonical Codex registration loads every SynaBun tool (SYNABUN_TOOLS=all, deferred catalog) and a tool list only sets a Codex runtime's focus.
Metadata checks
- Repository activity: Active in the last 180 days
- License: Recognized SPDX id
- Metadata quality: High
Score 100 uses public metadata only. It is separate from the audit tier. Payment never changes a score. How listings are checked.
Tested by AddonAudit
Free to use on this listing. The mark links back to this page and does not change the score or the tier.
Light
[](https://addonaudit.com/addon/io-github-danilokhury-synabun/)
<a href="https://addonaudit.com/addon/io-github-danilokhury-synabun/"><img alt="Tested by AddonAudit" src="https://addonaudit.com/badges/tested.svg" width="162" height="20"></a>
Dark
[](https://addonaudit.com/addon/io-github-danilokhury-synabun/)
<a href="https://addonaudit.com/addon/io-github-danilokhury-synabun/"><img alt="Tested by AddonAudit" src="https://addonaudit.com/badges/tested-dark.svg" width="162" height="20"></a>
Seal, light
[](https://addonaudit.com/addon/io-github-danilokhury-synabun/)
<a href="https://addonaudit.com/addon/io-github-danilokhury-synabun/"><img alt="Tested by AddonAudit" src="https://addonaudit.com/badges/tested-seal.svg" width="240" height="240"></a>
Seal, dark
[](https://addonaudit.com/addon/io-github-danilokhury-synabun/)
<a href="https://addonaudit.com/addon/io-github-danilokhury-synabun/"><img alt="Tested by AddonAudit" src="https://addonaudit.com/badges/tested-seal-dark.svg" width="240" height="240"></a>
Self-hosted version
A remote image can be changed by whoever hosts it. To keep the badge fixed, download the SVG and commit it to your own repo, for example as .github/addonaudit-badge.svg. The snippet below uses that local file and links to this page.
Download light SVG · Download dark SVG
[](https://addonaudit.com/addon/io-github-danilokhury-synabun/)
Get your add-on audited
Request a free audit of a public MCP server or AI coding add-on. A request does not buy a listing, a tier, or a score change.
Data notes
- Tool count is not part of this registry record, so it is blank.