Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

History Sync

БесплатноНе проверен

Chrome extension + MCP server: ask Claude, Cursor, or any MCP-capable agent what you've been reading. Hosted or self-host.

GitHubEmbed

Описание

Chrome extension + MCP server: ask Claude, Cursor, or any MCP-capable agent what you've been reading. Hosted or self-host.

README

A Chrome extension + small server that turns your browsing history into something your AI agents can query.

You install the extension. It captures pages you dwell on for 10+ seconds. Captured pages land on a server you trust (hosted or your own). Then you point Claude, Cursor, Claude Desktop, or any other MCP-capable client at that server and ask what you've been reading.

Status: friends-and-family alpha. Submitted to the Chrome Web Store; review pending. Until it's approved, install in developer mode (below).


Two ways to run it

Hosted Self-host
Where data lives history-sync.vercel.app (single operator's Vercel + Neon Postgres) Your machine or your server
Sign in Google OAuth Google OAuth (your own client)
MCP auth OAuth via Stytch — the client does a consent screen A long-lived bearer token you paste into your client
Setup time < 1 min — install extension, sign in ~30 min — see docs/SELF_HOSTING.md
Best for Trying it out; you trust the operator with the same data Chrome already has Anything you wouldn't put in someone else's database

⚠ Data is stored in plaintext at rest. No end-to-end encryption yet (v2 territory). On the hosted version, the operator can see your captures the same way they can see anything on their own Postgres. If your browsing includes things you wouldn't share with a single trusted operator, self-host. Even self-hosted, data is plaintext in your Postgres — keep that server private.

What never gets captured, in either mode: incognito tabs, chrome:// pages, extension internals, form contents, passwords, cookies, page-body text beyond title + meta tags, sites matching your disallow list.

The full privacy policy is at history-sync.vercel.app/privacy.


Install the extension (developer mode)

Until the Web Store approval lands, install from source:

git clone https://github.com/bradthebeeble/history-sync
cd history-sync
pnpm install
pnpm --filter @history-sync/extension build

Then in Chrome (or any Chromium browser — Comet, Brave, etc.):

  1. Open chrome://extensions
  2. Toggle Developer mode on (top-right)
  3. Click Load unpacked
  4. Pick apps/extension/.output/chrome-mv3/
  5. The History Sync icon appears in your toolbar — pin it for convenience

Note for self-hosters: if you also want the extension to talk to your own Google OAuth client (instead of the bake-time hosted one), rebuild with your client ID:

VITE_GOOGLE_CLIENT_ID=<your-client-id>.apps.googleusercontent.com \
VITE_SERVER_URL=https://<your-server> \
  pnpm --filter @history-sync/extension build

Then add https://<extension-id>.chromiumapp.org/ as an authorized redirect URI on that Google OAuth client (the extension shows you the exact ID and URL on first sign-in attempt).

Connect the extension

Open the popup, click Sign in with Google, finish the consent flow.

  • Hosted users: that's it — the extension is now syncing to history-sync.vercel.app.
  • Self-hosters: expand the Server chip at the top of the popup, paste your server URL (e.g. http://localhost:3000), save (the popup will sign you out), then sign in again — this time against your server.

The popup shows queue depth and last-sync timestamp so you can see capture working.


Connect your AI agent

The extension is the data pipe in. The MCP server is the data pipe out — for any agent that speaks Model Context Protocol over Streamable HTTP. Five tools are exposed:

Tool What it does
ping Liveness check + identity echo
search_history Full-text search by title + URL
list_visits_by_date List visits in a date range, paginated
count_by_domain Group visits by host, return top N
get_page_metadata Look up the most recent visit for a specific URL

Endpoint URLs

Mode URL
Hosted https://history-sync.vercel.app/api/mcp/mcp
Self-host https://<your-server>/api/mcp/mcp (or http://localhost:3000/api/mcp/mcp in dev)

Authentication

Hosted (Stytch OAuth): the MCP client does the dance for you — it'll register itself via Dynamic Client Registration, open a consent screen in your browser, and store the resulting OAuth tokens. Most modern clients (Claude.ai, Claude Desktop, Cursor, MCP Inspector) handle this transparently when you just give them the URL.

Self-host (static token): sign in to your /grants page, click Generate token, give it a label like "Claude Desktop", copy the raw value (shown once). Then configure your client to send it as Authorization: Bearer <token>.

Client-specific setup

Claude.ai / Claude Desktop

In Claude's settings → Connectors (or MCP servers, depending on version):

  • Name: history-sync
  • URL: the endpoint URL above
  • Auth: for hosted, leave on OAuth — Claude will prompt for sign-in. For self-host, choose Bearer / API key and paste your token.
Cursor

Settings → MCPAdd new MCP serverHTTP.

  • Name: history-sync
  • URL: the endpoint URL above
  • Headers (self-host only): Authorization: Bearer <your token>

Cursor handles OAuth in the hosted case the same way Claude does.

MCP Inspector (visual debugger)
npx -y @modelcontextprotocol/inspector

Opens a UI at http://localhost:6274.

  • Transport Type: Streamable HTTP
  • URL: the endpoint URL above
  • Authentication (self-host): Bearer Token + paste your token

Connect, then explore the tools list and try calls interactively.

Anything else (raw curl)

The endpoint speaks MCP 2024-11-05 JSON-RPC over Streamable HTTP:

curl -s "$URL" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Responses are SSE-framed when they cross transport-buffering boundaries; parse data: … lines.

Try it

Once your client is connected, just ask:

What blog posts did I read about Rust this week?

Top 10 domains I visited yesterday?

What was that LangChain GitHub issue I had open on Tuesday?


Disallow rules

Anything you don't want captured or stored — add a pattern:

  • Web app: /disallow*.bank.com, mail.google.com, secret-project.notion.so
  • Extension popup: same — and a one-click "Block this site" button for the current tab

Pattern matches are retroactive: adding *.bank.com deletes any prior matching entries from the server, not just future ones.


Build it yourself / contribute

pnpm install
pnpm db:up                  # Postgres 16 in Docker
pnpm -r typecheck           # workspace-wide tsc
Path What's there
apps/server/ Next.js 15 app — /api/sync (extension), /api/mcp/mcp (agents), web dashboard (/grants, /history, /disallow, /privacy), Auth.js v5 + Prisma
apps/extension/ Chrome MV3 extension — service worker, dwell tracker, sync queue, popup UI, content script for page metadata
packages/shared-types/ Wire-format types shared between extension and server

Useful scripts:

Command What
pnpm db:up / db:down / db:logs Local Postgres lifecycle
pnpm --filter @history-sync/server dev Run the server on :3000
pnpm --filter @history-sync/server prisma:migrate:deploy Apply migrations
pnpm --filter @history-sync/extension dev Live-reload extension build
pnpm --filter @history-sync/extension test Vitest
pnpm typecheck Workspace-wide type check

Default local Postgres URL (matches docker-compose.yml):

postgresql://history_sync:history_sync_dev@localhost:5432/history_sync

Docs

License

MIT.

from github.com/bradthebeeble/history-sync

Установка History Sync

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/bradthebeeble/history-sync

FAQ

History Sync MCP бесплатный?

Да, History Sync MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для History Sync?

Нет, History Sync работает без API-ключей и переменных окружения.

History Sync — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить History Sync в Claude Desktop, Claude Code или Cursor?

Открой History Sync на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Playwright

Browser automation, scraping, screenshots

Microsoftавтор: Microsoft

Puppeteer

Browser automation and web scraping.

modelcontextprotocolавтор: modelcontextprotocol

opentabs-dev/opentabs

Plugin-based MCP server + Chrome extension that gives AI agents access to web applications through the user's authenticated browser session. 100+ plugins with a

opentabs-devавтор: opentabs-dev

robhunter/agentdeals

1,500+ developer infrastructure deals, free tiers, and startup programs across 54 categories. Search deals, compare vendors, plan stacks, and track pricing chan

robhunterавтор: robhunter

hlydecker/ucsc-genome-mcp

MCP server to interact with the UCSC Genome Browser API, letting you find genomes, chromosomes, and more.

hlydeckerавтор: hlydecker

34892002/bilibili-mcp-js

A MCP server that supports searching for Bilibili content. Provides LangChain integration examples and test scripts.

34892002автор: 34892002

achiya-automation/safari-mcp

Native Safari browser automation for AI agents with 80+ tools. No Chrome dependency, optimized for Apple Silicon with 60% less CPU overhead.

achiya-automationавтор: achiya-automation

agent-infra/mcp-server-browser

Browser automation capabilities using Puppeteer, both support local and remote browser connection.

bytedanceавтор: bytedance

aparajithn/agent-scraper-mcp

Web scraping MCP server for AI agents. 6 tools: clean content extraction, structured scraping with CSS selectors, full-page screenshots via Playwright, link ext

aparajithnавтор: aparajithn

apireno/DOMShell

Browse the web using filesystem commands (ls, cd, grep, click). 38 MCP tools map Chrome's Accessibility Tree to a virtual filesystem via a Chrome Extension.

apirenoавтор: apireno

Compare History Sync with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории browse