Snapnia MCP服务器
Supabase支持 FastMCP 该服务器为MCP兼容客户端(如Claude Desktop和AI IDE)提供Snapnia工具。
特性
- FastMCP运行时 –轻量级的进程内MCP服务器
- Supabase集成 –用户和MCP密钥的安全存储
- 创意检索 –搜索、列出并获取详细的想法信息
- 工件管理 –读取和编辑项目规范文件
- 🤖 AI编排 –由LangChain+GPT-4/Claude提供的智能工作流程指导
- 根据想法制定实施计划 - 获取了解上下文的下一步建议 - 验证规范的完整性 - 解决实施障碍 - 按阶段跟踪项目进度
- Docker支持 –构建和运行用于生产的映像
- 类型化配置 –通过Pydantic设置进行管理
先决条件
- Python 3.11+
- 带有服务角色键的Supabase项目
- (可选)Docker和Docker Compose用于容器化部署
- 地方发展过程中的依赖管理诗
1.数据库设置
在Supabase项目中创建支持模式(SQL编辑器):
CREATE TABLE profiles (
id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
email TEXT UNIQUE NOT NULL,
full_name TEXT,
mcp_key TEXT UNIQUE,
is_active BOOLEAN DEFAULT true,
is_superuser BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can view own profile" ON profiles
FOR SELECT USING (auth.uid() = id);
CREATE POLICY "Users can update own profile" ON profiles
FOR UPDATE USING (auth.uid() = id);
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO public.profiles (id, email)
VALUES (NEW.id, NEW.email);
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();2.配置
创建 .env 从示例文件中选择并提供Supabase凭据:
cd snapnia-mcp
cp .env.example .env
# edit .env with SUPABASE_URL / SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY3.运行服务器
码头工人
make docker-build
make docker-up
# tail logs
make docker-logs
# stop
make docker-down地方发展
make install
make run4.提供MCP密钥
从外部生成MCP密钥(例如,通过Supabase SQL或管理UI)并将其存储在 public.profiles.mcp_key。服务器需要与匹配的密钥 mcp_ 由迁移强制执行的前缀。
5.从MCP客户端连接
将服务器添加到MCP客户端配置中(Claude Desktop示例):
{
"mcpServers": [
{
"name": "snapnia-mcp",
"type": "process",
"config": {
"command": "python",
"args": ["-m", "src.snapnia_mcp.fastmcp_server"],
"env": {
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_ANON_KEY": "...",
"SUPABASE_SERVICE_ROLE_KEY": "..."
}
}
}
]
}每个工具都需要一个 mcp_key 客户提供的论据。无效或无效的密钥将被拒绝。
项目结构
snapnia-mcp/
├── src/snapnia_mcp/
│ ├── fastmcp_server.py # FastMCP tools and runtime
│ ├── run.py # CLI entry point
│ ├── core/config.py # Settings
│ ├── services/supabase.py# Supabase integration
│ └── models/user.py # Pydantic models
├── database/migrations/ # Supabase SQL migrations
├── Dockerfile
├── docker-compose.yml
├── Makefile # Helper tasks
├── pyproject.toml # Poetry dependencies
└── requirements.txt # Pip dependencies (generated snapshot)有用的命令
make install # Install dependencies (poetry)
make run # Launch FastMCP runtime locally
make docker-up # Build & start container
make docker-down # Stop container
make format # Format code (black + ruff)
make lint # Run ruff / mypy
make clean # Remove caches安全说明
- 将Supabase服务角色密钥视为机密。
- 定期旋转MCP按键;从中删除已吊销的密钥
profiles. - 如果公开,请在容器或代理层限制CORS/ingress。
创意检索文档
有关从Snapnia数据库中检索用户想法和公开想法的详细信息:
- IDEA_RETRIEVAL_GUIDE.md -综合指南涵盖:
- 数据库结构和关系 - 行级安全(RLS)策略 - 用于检索带有注释、反应和视图的想法的SQL查询 - AI IDE集成的最佳实践 - 完整的数据字段参考
- 快速引用.md -快速参考:
- 常见SQL查询 - 关键表列 - RLS策略摘要 - 常见过滤器和模式
- examples/idea_trieval.example.py -Python示例显示:
- 创意检索辅助类 - 获取用户想法、公众想法和趋势内容的方法 - 搜索和过滤示例 - AI IDE集成模式
- examples/mcp集成示例.md -实用MCP集成:
- 使用MCP服务器工具的分步示例 - 基于AI的创意生成的上下文构建 - 错误处理和最佳实践
快速入门:检索想法
# 1. Authenticate user
user = mcp0_get_user_info(mcp_key="user_mcp_key")
# 2. Get user's ideas
result = mcp2_execute_sql(
project_id="uuojjdfwkwpkpkoebaof",
query=f"""
SELECT i.*, p.username, p.full_name
FROM ideas i
LEFT JOIN profiles p ON i.user_id = p.id
WHERE i.user_id = '{user['id']}'
AND i.deleted_at IS NULL
ORDER BY i.created_at DESC;
"""
)
# 3. Get public ideas
result = mcp2_execute_sql(
project_id="uuojjdfwkwpkpkoebaof",
query="""
SELECT i.*, p.username, p.avatar_url
FROM ideas i
LEFT JOIN profiles p ON i.user_id = p.id
WHERE i.is_private = false
AND i.deleted_at IS NULL
ORDER BY i.created_at DESC
LIMIT 50;
"""
)许可证
麻省理工学院
