Lens MCP
Provides web search functionality through a self-hosted SearXNG instance, enabling AI agents to search the web without relying on paid search APIs.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lens MCPfetch the markdown of https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Continuum
Persistent memory for AI agents, exposed as an MCP server. Connect Claude Code, Claude.ai, or any MCP client, and it remembers your preferences, decisions, and project context across sessions instead of starting from zero every time.
Quick start
Use the hosted instance — no setup required:
Sign up at continuum.sshogunn.org.
Connect a client:
Claude Code:
claude mcp add --transport http continuum https://continuum-mcp.sshogunn.org/mcpClaude.ai: Settings → Connectors → Add custom connector →
https://continuum-mcp.sshogunn.org/mcp
Optional — install the auto-context hook so memory gets injected into every Claude Code prompt automatically, no tool call needed:
# macOS / Linux / WSL / Git Bash curl -fsSL https://continuum-mcp.sshogunn.org/install_hook.js | CONTINUUM_TOKEN=<token> node# Windows PowerShell $env:CONTINUUM_TOKEN="<token>"; irm https://continuum-mcp.sshogunn.org/install_hook.js | node -Get
<token>from the dashboard's Connections page. Needs Node 18+ onPATH(same requirement as Claude Code itself).
Both connect paths go through OAuth — no token to copy/paste there. The manual token above is just for the hook script, which has no browser to complete OAuth with.
Prefer to run your own instance? See Self-hosting.
Related MCP server: Playwright MCP Server
What it does
Persistent memory —
memory_save/memory_search/memory_list/memory_delete, scoped per user.Fact extraction — every saved memory is decomposed in the background into atomic, independently searchable facts (
memory_fact_search), so retrieval doesn't compete against a whole blob for relevance.Auto-injected context — an optional hook injects relevant memory into every Claude Code prompt without the model deciding to call a tool.
Session capture — an optional hook reviews finished conversations and proposes new memories to save or discard, instead of relying on the model remembering to write them.
Web tools —
fetch_page,screenshot_page,search_web(self-hosted SearXNG, no paid API),check_url,verify_quote.OAuth 2.0 — PKCE flow, verified working with Claude.ai.
Full breakdown of how the memory pipeline and hooks work: docs/architecture.md.
MCP tools
Tool | Description |
| Render page(s) via headless Chromium (Firefox fallback), return markdown. |
| PNG screenshot of a page. |
| Download an image with a desktop User-Agent + optional Referer. |
| Web search via a self-hosted SearXNG instance. |
| Verify a URL actually resolves. |
| Check whether a quoted string appears verbatim on a page, fuzzy-matching the closest passage if not. |
| Persistent memory CRUD. |
| Move a memory between recall tiers ( |
| Add a line to an existing memory without resending its whole body. |
| Semantic search over extracted atomic facts. |
Self-hosting
Continuum is a normal Docker Compose stack. It's MIT-licensed — clone it and run your own instance instead of (or alongside) the hosted one.
1. Create a Clerk application — auth runs on Clerk (free tier is enough). From the API Keys page, grab:
CLERK_SECRET_KEYandCLERK_PUBLISHABLE_KEY→backend/.envthe same publishable key as
VITE_CLERK_PUBLISHABLE_KEY→frontend/.env
2. Generate secrets:
openssl rand -hex 32 # → POSTGRES_PASSWORD (root .env)
openssl rand -hex 32 # → REDIS_PASSWORD (root .env)
openssl rand -hex 32 # → CONTINUUM_INTERNAL_SECRET (must match in backend/.env and core-mcp/.env)
# RS256 keypair backend mints MCP tokens with, core-mcp verifies with
openssl genrsa -out /tmp/continuum_jwt 2048
openssl rsa -in /tmp/continuum_jwt -pubout -out /tmp/continuum_jwt.pub
# each printed as one line with literal \n, ready to paste into the .env files below
awk 'NF {printf "%s\\n", $0}' /tmp/continuum_jwt # → backend/.env CONTINUUM_BACKEND_JWT_PRIVATE_KEY
awk 'NF {printf "%s\\n", $0}' /tmp/continuum_jwt.pub # → core-mcp/.env CONTINUUM_JWT_PUBLIC_KEY
rm /tmp/continuum_jwt /tmp/continuum_jwt.pub3. Fill in the .env files:
cp core-mcp/.env.example core-mcp/.env
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.envFill in the Clerk keys and generated secrets/keypair above — each file's comments say what's
required vs optional. You'll also need an LLM API key for CONTINUUM_FACT_EXTRACTION_API_KEY
(fact extraction) and CONTINUUM_EXTRACT_API_KEY (structured extraction) — any
litellm-supported provider works, and they don't need
to be the same one.
4. Run it:
docker compose up -d --buildThis starts frontend (:3000), backend (:8789), core-mcp (:8788), plus worker, postgres,
redis, and searxng — all reachable on localhost, no extra setup. postgres also publishes to
127.0.0.1:5432 for a host-local client. Schema migrations (alembic upgrade head) run
automatically on boot.
To expose it beyond localhost, put a reverse proxy (Caddy, nginx, Traefik) in front of ports
3000/8789/8788, or set CF_TUNNEL_TOKEN in the root .env and run
docker compose --profile tunnel up -d --build to use the built-in Cloudflare Tunnel instead —
that container only starts when the tunnel profile is requested. Either way, once you have a
public URL, update VITE_BACKEND_URL (frontend), CONTINUUM_FRONTEND_URL /
CONTINUUM_BACKEND_PUBLIC_URL (backend), and CONTINUUM_BACKEND_PUBLIC_URL /
VITE_CONTINUUM_MCP_URL (core-mcp / frontend) to match, then rebuild.
First run: visit the frontend and sign up — that's your account — then connect a client as in Quick start, pointing at your own URLs instead of the hosted ones.
Running a service outside Docker
cd core-mcp && uv sync && uv run playwright install chromium firefox
uv run alembic upgrade head
uv run python -m app.server
cd backend && uv sync && uv run alembic upgrade head && uv run python main.py
cd frontend && npm install && npm run devRepo layout
core-mcp/
app/
server.py # FastMCP app, tool definitions, lifespan
auth.py # JWT verification
infra/ # pg.py, db.py, browser_pool.py
memory/ # memory.py, facts.py, embeddings.py
alembic/ # schema migrations
backend/
app/ # FastAPI routes, OAuth, token management
alembic/
frontend/
src/pages/ # Vite SPA — dashboard, oauth-connect, landing
docker-compose.yml # all services — secrets come from the .env files, see .env.exampleEnvironment variables
Each service has an .env.example with inline comments for every variable. Notably:
core-mcp:CONTINUUM_DATABASE_URL,CONTINUUM_JWT_PUBLIC_KEY,CONTINUUM_FACT_EXTRACTION_MODEL/_API_KEY(litellm model string),CONTINUUM_SEARXNG_URL(optional — defaults to the self-hostedsearxngservice).backend:DATABASE_URL, Clerk keys,CONTINUUM_BACKEND_JWT_PRIVATE_KEY(paired with core-mcp's public key).frontend: Clerk keys,BACKEND_INTERNAL_URL.root:
POSTGRES_PASSWORD,REDIS_PASSWORD, and (optional,tunnelprofile only)CF_TUNNEL_TOKEN.
License
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Screenshot any URL/HTML as PNG/JPEG/WebP, or read it as clean Markdown/text for LLMs.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Fetch pages as markdown, search web and news, extract structured data. For AI agents.
Read any web page as clean Markdown for AI agents: fetch, search, metadata, links. SSRF-safe.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides web content fetching capabilities using Playwright browser automation, enabling LLMs to retrieve and process JavaScript-rendered content from web pages and convert HTML to markdown for easier consumption.14MIT
- AlicenseNot gradedqualityDmaintenanceProvides browser automation capabilities using Playwright, enabling users to navigate websites, extract content, take screenshots, and interact with web pages through natural language prompts.15MIT
- AlicenseAqualityDmaintenanceProvides web access capabilities for LLMs including search, fetching, content extraction, PDF reading, image viewing, and screenshots.346MIT
- AlicenseAqualityDmaintenanceEnables AI agents to fetch and render web pages (including JavaScript-heavy SPAs) with headless Chromium, extract readable content with Mozilla Readability, capture navigation links, download images, and return a clean markdown file path.116ISC
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SSShogunn/continuum'
If you have feedback or need assistance with the MCP directory API, please join our Discord server