带有费用分析的MCP OAuth示例
这个项目展示了一个使用Google OAuth认证、FastMCP进行工具管理以及Gradio作为用户界面的安全支出分析应用程序。它连接到Supabase数据库以存储和查询交易数据。
特点
- 🔐 Google OAuth 认证
- 💬 使用Gradio的交互式聊天界面
- 由谷歌Gemini AI驱动的ReAct智能体
- 📊 交易分析工具
- 🔒 安全的数据库查询
- 🗄️ 与Supabase的集成
先决条件
- Python 3.8或更高版本
- 一个已配置OAuth 2.0的Google Cloud项目
- 一个已设置好交易表的Supabase项目
数据库模式
该应用程序期望一个 transactions 在Supabase中的表格,其模式如下:
CREATE TABLE transactions (
email_id VARCHAR(255) NOT NULL, -- identifies the person
amount NUMERIC(12,2) NOT NULL, -- transaction amount with 2 decimal places
currency VARCHAR(10) NOT NULL DEFAULT 'USD', -- ISO 4217 currency code
transaction_type VARCHAR(50) NOT NULL, -- e.g., 'debit', 'credit', 'refund'
category VARCHAR(50) NOT NULL, -- e.g., 'food', 'clothes', 'shopping', 'other'
description TEXT, -- optional description
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);设置
- 安装依赖项:
pip install -r requirements.txt- 在(系统/环境中)设置环境变量
.env:
# Google OAuth Configuration
CLIENT_ID=your_google_oauth_client_id
CLIENT_SECRET=your_google_oauth_client_secret
GOOGLE_API_KEY=your_gemini_api_key
# Supabase Configuration
SUPABASE_URL=your_supabase_project_url
SUPABASE_KEY=your_supabase_anon_key
SUPABASE_DATABASE_URL=your_supabase_direct_connection_string运行应用程序
- 启动MCP服务器:
fastmcp run server.py --transport http --port 8000- 在另一个终端中,启动聊天界面:
python react_agent.py聊天界面将在 http://localhost:7860。
可用工具
1. 用户信息
get_user_info()获取已认证用户的电子邮件和姓名
2. 交易分析
execute_transaction_query(query: str, email_id: str)在交易表上执行自定义的SELECT查询
- 支持聚合、过滤和复杂分析 - 需要 WHERE email_id = %s 安全条款 - 示例查询:
SELECT amount, category FROM transactions WHERE email_id = %s AND created_at < '2026-01-01'
SELECT SUM(amount) FROM transactions WHERE email_id = %s AND transaction_type = 'debit'聊天界面使用指南
聊天界面提供了一种交互式的方式来分析支出。示例查询:
- “创建费用分析”
- “有哪些可用的工具?”
- “你能帮我分析一些数据吗?”
ReAct代理将:
- 理解您的需求
- 使用适当的工具来收集数据
- 处理并分析信息
- 提供人性化的回应
安全特性
- 使用Google进行OAuth 2.0认证
- 使用参数化语句确保数据库查询安全
- 基于电子邮件的数据隔离
- 只读事务分析
- 需要进行电子邮件验证
屏幕截图
Google Sign-In Logs Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4
建筑
server.py带有工具定义和OAuth设置的MCP服务器react_agent.py聊天界面和ReAct代理实现- 用于网页界面的Gradio
- 用于自然语言理解的Gemini AI
- Supabase 用于安全数据存储
贡献;做出贡献
- 为仓库创建分支(或“克隆仓库”)
- 创建你的特性分支
- 提交您的更改
- 推送至分支
- 创建一个新的拉取请求
