Supabase MCP 让 Claude Code 使用自然语言直接查询您的 Postgres 数据库。结合搜索丰富化,您的人工智能代理可以回答诸如“哪些客户与最近获得资助的公司相匹配?”之类的问题。通过将内部数据与实时网络结果相结合。本教程设置 Supabase MCP,配置只读访问以确保安全,并添加搜索丰富步骤,以使用新的 Web 数据增强查询结果。成本:每个搜索丰富查询 0.005 美元。
前置条件
- 包含数据的 Supabase 项目
- Supabase 服务角色密钥或只读密钥
- 安装克劳德代码
- Python 3.9+ 和请求库
操作指南
步骤 1: 在 Claude 代码中配置 Supabase MCP
将 Supabase MCP 服务器添加到您的 .mcp.json。使用只读密钥来防止意外写入。
import json
from pathlib import Path
mcp_config = {
'mcpServers': {
'supabase': {
'command': 'npx',
'args': ['-y', '@supabase/mcp-server'],
'env': {
'SUPABASE_URL': 'https://your-project.supabase.co',
'SUPABASE_KEY': 'your-read-only-key-here'
}
}
}
}
mcp_path = Path('.mcp.json')
if mcp_path.exists():
existing = json.loads(mcp_path.read_text())
existing['mcpServers']['supabase'] = mcp_config['mcpServers']['supabase']
mcp_config = existing
mcp_path.write_text(json.dumps(mcp_config, indent=2))
print('Supabase MCP configured in .mcp.json')
print('Restart Claude Code to connect.')步骤 2: 从 Python 查询 Supabase 进行丰富
使用 Supabase Python 客户端提取您想要通过搜索结果丰富的数据。这个例子拉动客户公司去研究。
import os
from supabase import create_client
SUPABASE_URL = os.environ['SUPABASE_URL']
SUPABASE_KEY = os.environ['SUPABASE_KEY']
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
# Pull companies to research
result = supabase.table('customers').select('id, company_name, domain').limit(10).execute()
companies = result.data
print(f'Loaded {len(companies)} companies to enrich')
for c in companies[:5]:
print(f' {c["company_name"]}: {c["domain"]}')步骤 3: 通过实时搜索丰富数据库记录
对于 Supabase 中的每家公司,在网络上搜索最新新闻、资金或招聘信号,然后写回丰富内容。
import requests
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def enrich_company(company: dict) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': f'{company["company_name"]} funding news 2026',
'country_code': 'us', 'num_results': 3})
results = resp.json().get('organic_results', [])
signals = []
for r in results:
snippet = r.get('snippet', '').lower()
if any(w in snippet for w in ['funding', 'raised', 'series', 'acquisition']):
signals.append('funding_news')
if any(w in snippet for w in ['hiring', 'job', 'careers', 'open role']):
signals.append('actively_hiring')
return {
'company_id': company['id'],
'top_result': results[0]['title'] if results else '',
'signals': list(set(signals)),
'results_count': len(results)
}
enriched = [enrich_company(c) for c in companies[:5]]
for e in enriched:
print(f' Company {e["company_id"]}: {e["signals"] or ["no signals"]} -- {e["top_result"][:50]}')
print(f'Cost: {len(enriched)} searches = ${len(enriched) * 0.005:.3f}')Python 示例
import os, requests
from supabase import create_client
supabase = create_client(os.environ['SUPABASE_URL'], os.environ['SUPABASE_KEY'])
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
companies = supabase.table('customers').select('id, company_name').limit(5).execute().data
for c in companies:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': f'{c["company_name"]} news 2026', 'country_code': 'us', 'num_results': 3})
top = resp.json().get('organic_results', [{}])[0].get('title', 'N/A')
print(f'{c["company_name"]}: {top}')JavaScript 示例
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY);
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function enrichCompanies() {
const { data: companies } = await supabase.from('customers').select('id, company_name').limit(5);
for (const c of companies) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `${c.company_name} news 2026`, country_code: 'us', num_results: 3 })
});
const top = (await resp.json()).organic_results?.[0]?.title || 'N/A';
console.log(`${c.company_name}: ${top}`);
}
}
enrichCompanies();预期输出
Loaded 10 companies to enrich
Acme Corp: acme.io
TechFlow: techflow.dev
Company 1: ['funding_news'] -- Acme Corp Raises $15M Series A
Company 2: ['actively_hiring'] -- TechFlow Careers - 12 Open Roles
Company 3: ['funding_news', 'actively_hiring'] -- DataSync Acquir
Cost: 5 searches = $0.025