费用追踪器MCP服务器
一个强大的 远程模型上下文协议(MCP)服务器 用于追踪支出、管理预算和分析消费模式。采用FastMCP构建,并部署在FastMCP云平台上。
  
特点/特性
核心费用管理
- 添加费用 - 记录支出时包括日期、金额、类别、子类别和备注
- 列出费用 - 查看任意日期范围内的费用
- 更新费用 - 修改现有的费用条目
- 删除费用 - 删除不需要的支出记录
高级分析
- 按类别总结 - 获取任意时间段内每个类别的总支出
- 消费统计 - 查看详细统计数据(总和、平均值、最小值、最大值、计数)
- 消费趋势 - 按天、周、月或年分析趋势
- CSV导出 - 将费用数据导出为CSV文件
预算管理
- 设定预算 - 为各类别设定支出限额
- 预算监控 - 检查预算状态,查看剩余金额及已使用百分比
- 预算超支提醒 - 当支出超出预算时收到通知
资源
- 费用类别 - 通过访问预定义的费用类别和子类别
expense://categories
建筑学
为何选择远程MCP服务器?
这个项目被部署为一个 远程MCP服务器 在FastMCP云上,允许:
- 网络可访问性 - 通过HTTP从任何客户端访问
- 集中化数据 - 您所有支出的唯一真实来源
- 可扩展性 - 处理多个并发客户端
- 云部署 - 客户端无需本地安装
为何选择异步?
我们从同步模式迁移到了 异步编程 使用 aiosqlite 出于几个关键原因:
- 非阻塞操作
- 数据库查询不会阻塞服务器 - 多个客户端可以同时发出请求 - 提高了响应速度和吞吐量
- 更佳性能
- 高效处理并发请求 - 减少I/O操作的延迟 - 资源的最佳利用
- FastMCP 要求
- FastMCP的HTTP传输基于异步框架(Uvicorn/FastAPI)构建 - 异步工具与事件循环无缝集成 - 与现代Python异步生态系统有更好的兼容性
- 可扩展性
- 单个服务器实例可以处理多个客户端 - 优雅处理缓慢的数据库操作 - 为未来添加更多异步操作做好准备
快速入门
先决条件
- Python 3.8 或更高版本
uv包管理器(推荐)或pip
安装
- 克隆仓库
git clone
cd test-remote-server- 安装依赖项
使用 uv (推荐):
uv pip install fastmcp aiosqlite或者使用 pip:
pip install fastmcp aiosqlite本地运行
启动服务器:
uv run --with fastmcp --with aiosqlite python main.py或者直接使用 Python:
python main.py服务器将在 http://0.0.0.0:8888/mcp
云部署
这台服务器部署在 FastMCP 云 并通过GitHub连接:
部署步骤
- 推送到GitHub
git add .
git commit -m "Deploy expense tracker"
git push origin main- 连接至FastMCP云
- 访问 fastmcp.cloud 翻译为中文可以是“快速MCP云服务”或“FastMCP云平台”,具体翻译可能根据上下文和品牌定位有所调整。这里,“fastmcp”可能代表某个特定的快速处理或云服务相关的项目或品牌名称,“.cloud”则表明这是一个与云计算或云服务相关的域名 - 连接你的GitHub仓库 - FastMCP Cloud 将自动部署您的服务器
- 访问您的服务器
- 您将收到一个为您的已部署服务器生成的唯一URL - 使用此URL从任何MCP客户端进行连接
可用工具
1. add_expense
添加一项新的费用记录。
参数:
date(字符串,必填)- 日期格式为YYYY-MM-DDamount(float,必填) - 费用金额category(字符串,必填)- 费用类别subcategory(字符串,可选) - 子类别note(字符串,可选)- 额外说明
示例:
{
"date": "2025-10-11",
"amount": 45.50,
"category": "Food & Dining",
"subcategory": "Restaurants",
"note": "Lunch with team"
}2. list_expenses
列出指定日期范围内的费用。
参数:
start_date(字符串,必填) - 开始日期 (YYYY-MM-DD)end_date(字符串,必填) - 结束日期 (YYYY-MM-DD)
3. update_expense
更新现有费用。
参数:
id(整数,必填)- 费用IDdate(字符串,可选)- 新日期amount(浮点数,可选) - 新金额category(字符串,可选)- 新类别subcategory(字符串,可选) - 新子类别note(字符串,可选) - 新备注
4. delete_expense
按ID删除一项支出。
参数:
id(整数,必填)- 要删除的费用ID
5. summarize
按类别获取支出汇总。
参数:
start_date(字符串,必填)- 开始日期end_date(字符串,必填) - 结束日期category(字符串,可选)- 按特定类别过滤
返回值: 各类别总额清单
6. get_statistics
获取详细的支出统计信息。
参数:
start_date(字符串,必填) - 开始日期end_date(字符串,必填)- 结束日期category(字符串,可选) - 按类别过滤
返回值:
{
"count": 25,
"total": 1250.75,
"average": 50.03,
"min": 5.99,
"max": 250.00
}7. get_spending_trends
分析随时间变化的支出趋势。
参数:
start_date(字符串,必填) - 开始日期end_date(字符串,必填) - 结束日期group_by(字符串,可选)- “day”(天)、“week”(周)、“month”(月)或“year”(年)(默认:“month”)category(字符串,可选) - 按类别过滤
返回值: 包含交易数量和金额的时间序列数据
8. export_to_csv
将费用导出到CSV文件。
参数:
start_date(字符串,必填) - 开始日期end_date(字符串,必填) - 结束日期file_path(字符串,必填) - 输出文件路径
9. set_budget
为某一类别设定预算上限。
参数:
category(字符串,必填) - 类别名称amount(浮点数,必填)- 预算金额start_date(字符串,必填) - 预算开始日期end_date(字符串,必填)- 预算结束日期
10. check_budget_status
检查某一类别的预算状态。
参数:
category(字符串,必填)- 类别名称start_date(字符串,必填)- 期间开始日期end_date(字符串,必填) - 期结束日期
返回值:
{
"status": "ok",
"category": "Food & Dining",
"budget_amount": 500.00,
"actual_spending": 425.50,
"remaining": 74.50,
"percentage_used": 85.10,
"is_over_budget": false
}项目结构
test-remote-server/
├── main.py # Main server application
├── categories.json # Expense categories and subcategories
├── README.md # This file
└── expenses.db # SQLite database (created automatically)数据库模式
expenses 桌子
CREATE TABLE expenses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
amount REAL NOT NULL,
category TEXT NOT NULL,
subcategory TEXT DEFAULT '',
note TEXT DEFAULT ''
)budgets 桌子
CREATE TABLE budgets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category TEXT NOT NULL,
amount REAL NOT NULL,
start_date TEXT NOT NULL,
end_date TEXT NOT NULL,
UNIQUE(category, start_date, end_date)
)费用类别
该服务器包含11个预定义类别,可通过(某种方式)访问 expense://categories 资源:
- 美食与餐饮 - 食品杂货、餐厅、咖啡与茶、快餐、零食
- 交通运输 - 汽油与燃料、公共交通、出租车与拼车服务、停车、汽车保养
- 购物 - 服装、电子产品、家居与园艺、书籍、礼品
- 娱乐 - 电影与电视节目,音乐,游戏,体育,爱好
- 账单与公用事业费 - 电、水、互联网、电话、天然气
- 医疗保健 - 医生、药店、保险、牙科、健身
- 教育 - 学费、书籍及用品、课程、软件、培训
- 个人 - 理发、水疗与美容、个人护理、订阅服务、会员资格
- 旅行 - 机票、酒店、租车、活动、美食
- 住房 - 租金、抵押贷款、房屋保险、维修、家具
- 其他 - 杂项、现金、费用、税费、慈善捐赠
配置
服务器使用以下默认配置:
- 主持人:
0.0.0.0(可通过任何网络接口访问) - 端口:
8888 - 交通: HTTP(可流式传输)
- 数据库: SQLite 存储在系统临时目录中(
/tmp/expenses.db)
贡献
欢迎投稿!请随意:
- 报告错误
- 建议新功能
- 提交拉取请求
许可证
这个项目是开源的,并且遵循MIT许可证发布。
链接
用例
- 个人财务管理 - 记录每日开销,确保不超预算
- 小企业会计 - 按类别监控业务支出
- 家庭预算规划 - 家庭共享费用追踪
- 财务分析 - 分析支出模式和趋势
- 预算合规性 - 确保支出在既定范围内
支持
如果您遇到任何问题或有任何疑问:
- 查阅FastMCP的文档
- 查看服务器日志中的错误信息
- 在GitHub上打开一个议题
______________________________________________________________________
这句话的直译可能是“使用制成”,但在中文中,这样的表达并不自然。根据上下文,我们可以将其翻译为更符合中文表达习惯的句子,比如:“由……制成”或“使用……制作”。具体翻译取决于“Made with using”后面接的内容。例如,如果原句是“Made with using recycled materials”,那么翻译为“由回收材料制成”或“使用回收材料制作” FastMCP | 部署于 FastMCP 云
