About Seedlens
Seedlens is an MCP server published by caterpi11ar in the Communication category: marketing automation MCP server — crawl pages, extract SEO data & contacts, send marketing emails.
The repository has 1 stars and 0 forks, with the last commit 7 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.
Install
git clone https://github.com/caterpi11ar/seedlensThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (4)
extract_contactsCrawl a URL and extract emails, phone numbers, social media links, and physical addresses
Parameters not published.
extract_seo_dataCrawl a URL and extract meta tags, Open Graph, headings, images, links, JSON-LD, robots.txt, sitemap
Parameters not published.
preview_marketing_emailRender an email HTML preview without sending
Parameters not published.
send_marketing_emailRender and send a marketing email via SMTP using a React Email template
Parameters not published.
Ask AI
Ask AI about Seedlens
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
4 checks have not been run yet.
Releases
README
SeedLens
Marketing automation MCP server — crawl pages, extract SEO data & contacts, send marketing emails.
Overview
SeedLens is a Model Context Protocol (MCP) server that turns any AI assistant (Claude, Cursor, VS Code Copilot, etc.) into a marketing automation tool. It provides 4 tools:
| Tool | Description |
|---|---|
extract_contacts |
Crawl a URL and extract emails, phone numbers, social media links, and physical addresses |
extract_seo_data |
Crawl a URL and extract meta tags, Open Graph, headings, images, links, JSON-LD, robots.txt, sitemap |
send_marketing_email |
Render and send a marketing email via SMTP using a React Email template |
preview_marketing_email |
Render an email HTML preview without sending |
Tech Stack
- TypeScript (ESM) +
@modelcontextprotocol/sdkv2 - Zod v4 — input/output schema validation for all tools
- Playwright — headless Chromium browser for page crawling
- Nodemailer — SMTP email delivery (QQ Mail, Gmail, etc.)
- React Email — inline-styled HTML email templates
- Vitest — testing framework
Quick Start
Prerequisites
- Node.js >= 18
- npm
Install
npm install
npx playwright install chromium
Configure
Copy the example env file and fill in your SMTP credentials:
cp .env.example .env
.env fields:
| Variable | Description | Default |
|---|---|---|
SMTP_HOST |
SMTP server hostname | smtp.qq.com |
SMTP_PORT |
SMTP server port | 465 |
SMTP_USER |
Sender email address | — |
SMTP_PASSWORD |
SMTP authorization code | — |
BROWSER_HEADLESS |
Run browser headless | true |
BROWSER_TIMEOUT |
Page load timeout (ms) | 30000 |
Build & Run
# Build
npm run build
# Run (stdio transport)
npm start
# Dev mode (no build needed)
npm run dev
Test
npm test
IDE Integration
Claude Code
The MCP server is auto-configured via .claude/settings.local.json. After building, restart Claude Code and the 4 tools will be available.
Cursor
Configured via .cursor/mcp.json. Set SMTP environment variables in your shell or .env before launching.
VS Code
Configured via .vscode/mcp.json with input prompts — you'll be asked for SMTP credentials on first run.
Project Structure
seedlens/
├── src/
│ ├── index.ts # Entry: register tools + stdio transport
│ ├── config/env.ts # Environment variable validation (Zod)
│ ├── i18n/strings.ts # Email i18n strings + subject template resolver
│ ├── schemas/
│ │ ├── common.schema.ts # URL, timestamp, ExtractionMeta
│ │ ├── contact.schema.ts # Contact extraction input/output
│ │ ├── seo.schema.ts # SEO data input/output
│ │ └── email.schema.ts # Email tool input/output
│ ├── services/
│ │ ├── browser-manager.ts # Playwright singleton + withPage()
│ │ ├── contact-extractor.ts # Contact DOM extraction
│ │ ├── seo-extractor.ts # SEO DOM extraction
│ │ └── email-service.ts # Nodemailer + React Email rendering
│ ├── templates/
│ │ └── marketing-email.tsx # React Email marketing template
│ └── tools/
│ ├── extract-contacts.ts # extract_contacts tool registration
│ ├── extract-seo-data.ts # extract_seo_data tool registration
│ ├── send-marketing-email.ts # send_marketing_email tool registration
│ └── preview-marketing-email.ts # preview_marketing_email tool registration
├── tests/
│ ├── setup.ts # Vitest global setup/teardown
│ ├── extract-contacts.test.ts
│ ├── extract-seo-data.test.ts
│ ├── preview-marketing-email.test.ts
│ ├── resolve-subject.test.ts
│ └── send-marketing-email.test.ts
├── package.json
├── tsconfig.json
└── vitest.config.ts
Architecture
Browser Manager
A singleton Playwright browser instance is reused across requests to avoid the 1-3s cold start per launch. Each tool call gets an isolated BrowserContext via withPage(url, fn), ensuring no cookie/state leakage between requests. The browser is automatically cleaned up on process exit.
Single page.evaluate()
All DOM queries (contacts, SEO data) are executed in a single page.evaluate() call, minimizing IPC round-trips between Node.js and the browser for optimal performance.
Email Rendering
Marketing emails are built with React Email components using inline CSS styles for maximum email client compatibility. The renderEmail() function produces both HTML and plain text versions.
Schema Validation
Every tool uses Zod schemas for both inputSchema and outputSchema, providing type-safe validation and enabling MCP clients to understand the data structure.
Usage Examples
Once connected to an MCP client, you can use natural language:
"Extract contact information from https://example.com"
"Analyze the SEO of https://example.com"
"Analyze https://example.com, find the owner's email, and send them a marketing email about their SEO issues"
"Preview a marketing email for Bob about his website's missing meta descriptions"
License
MIT
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.