loading…
Search for a command to run...
loading…
Transforms founder profiles from social media into actionable strategic intelligence through automated scraping, LLM analysis, and personalized news tracking. I
Transforms founder profiles from social media into actionable strategic intelligence through automated scraping, LLM analysis, and personalized news tracking. It leverages vector search and caching to provide deep insights and relevant updates on specific founders.
A production-grade Model Context Protocol (MCP) server that transforms founder profiles into actionable strategic intelligence.
┌───────────────────────────────────────────────────────────┐
│ MCP Client (Claude, etc.) │
│ ▲ stdio │
│ ┌──────────┴──────────┐ │
│ │ MCP Server (Node) │ │
│ │ 3 registered tools│ │
│ └──────┬──────────────┘ │
│ ┌───────────┬┼──────────────┐ │
│ ▼ ▼▼ ▼ │
│ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │
│ │ Apify │ │ Groq │ │ Embeddings │ │
│ │ Scraping│ │ LLM │ │ API │ │
│ └────┬─────┘ └─────┬─────┘ └──────┬───────┘ │
│ └──────────────┬┘──────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Supabase │ │
│ │ (Postgres + │ │
│ │ pgvector) │ │
│ └─────────────────┘ │
└───────────────────────────────────────────────────────────┘
| Operation | Cost | When It Runs |
|---|---|---|
| LinkedIn/Twitter scraping | High | Only on profile creation |
| Groq profile analysis | Medium | Once per profile (cached) |
| Google News + embeddings | High | Only when news > 24h stale |
| Read cached articles | Free | Every subsequent request |
The fetch_history table tracks last_profile_scrape and last_news_fetch timestamps. The staleCheck.js module compares these against configurable thresholds.
cd /Users/praveenkumar/Desktop/mcp
cp .env.example .env
# Edit .env with your real keys
npm install
Run the migration against your Supabase SQL Editor:
-- Paste contents of migrations/001_init.sql
Or via psql:
psql $DATABASE_URL < migrations/001_init.sql
node src/index.js
Add to your MCP client config (e.g., Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"founder-intelligence": {
"command": "node",
"args": ["/Users/praveenkumar/Desktop/mcp/src/index.js"],
"env": {
"SUPABASE_URL": "...",
"SUPABASE_SERVICE_KEY": "...",
"APIFY_API_TOKEN": "...",
"GROQ_API_KEY": "...",
"EMBEDDING_API_URL": "...",
"EMBEDDING_API_KEY": "..."
}
}
}
}
# Single run (for cron)
node src/backgroundWorker.js
# Daemon mode
BACKGROUND_LOOP=true node src/backgroundWorker.js
Cron example (every 6 hours):
0 */6 * * * cd /app && node src/backgroundWorker.js >> /var/log/worker.log 2>&1
/Users/praveenkumar/Desktop/mcp/
├── migrations/
│ └── 001_init.sql
├── src/
│ ├── db/
│ │ └── supabaseClient.js
│ ├── services/
│ │ ├── apifyService.js
│ │ ├── embeddingService.js
│ │ └── llmService.js
│ ├── tools/
│ │ ├── collectProfile.js
│ │ ├── analyzeProfile.js
│ │ └── fetchPersonalizedNews.js
│ ├── utils/
│ │ ├── similarity.js
│ │ └── staleCheck.js
│ ├── backgroundWorker.js
│ └── index.js
├── .env.example
├── .gitignore
├── .dockerignore
├── Dockerfile
├── package.json
└── README.md
docker build -t founder-intelligence-mcp .
docker run --env-file .env founder-intelligence-mcp
docker run --env-file .env founder-intelligence-mcp node src/backgroundWorker.js
version: '3.8'
services:
mcp-server:
build: .
env_file: .env
stdin_open: true
restart: unless-stopped
worker:
build: .
env_file: .env
command: ["node", "src/backgroundWorker.js"]
environment:
- BACKGROUND_LOOP=true
restart: unless-stopped
| Component | Strategy |
|---|---|
| MCP Server | One instance per client (stdio-based) |
| Background Worker | Single instance or Cloud Run Job on schedule |
| Supabase | Connection pooling via Supavisor; read replicas for scale |
| Apify | Concurrent actor runs (up to account limit) |
| Embeddings | Batch requests (20 per call) to reduce round trips |
| Groq | Rate-limit aware with retry-after header handling |
For high-profile-count deployments:
mcp user in container| Service | Cost Driver | Mitigation |
|---|---|---|
| Apify | Actor compute units | Scrape only on creation; cache results |
| Groq | Token usage | Analyze once (cached); batch news summaries |
| Embeddings | API calls | Batch 20 at a time; embed once per article |
| Supabase | Row count + storage | Deduplicate articles by URL; prune old articles |
Expected cost per profile lifecycle:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"founder-intelligence-engine": {
"command": "npx",
"args": []
}
}
}