使用说明
MCP费用日志
基于SSE的MCP服务器,提供记录费用的工具。
✨ 特性
- 将新的支出记入分类账。
- 删除费用记录。
- 检索所有可用支出类别的列表。
- 按付款人和类别检索和分组费用。
- 检索费用记录。
🚀 入门指南
先决条件
- Node.js
- A. PostgreSQL 数据库
安装和设置
-
克隆存储库:
git clone https://github.com/evanxd/expense-log-mcp.git -
安装依赖项:
npm install -
设置数据库:
- 创建一个
.env项目根目录中的文件。 - 将PostgreSQL连接字符串添加到
.env文件:DB_USER="postgres" DB_HOST="localhost" DB_PORT="5432" DB_DATABASE="postgres" DB_PASSWORD="YOUR_DB_PASSWORD" DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}?schema=public" - 将服务器配置添加到您的
.env文件:MCP_SECRET_KEY="YOUR_SECRET_KEY" # A strong, unique key for authenticating with the MCP server PORT="8080" # The port the MCP server will listen on (default is 8080) - 应用数据库架构:
npx prisma db push - 为数据库添加初始类别种子:
npm run db:seed
- 创建一个
-
构建并启动服务器:
npm run build && npm start此命令编译TypeScript代码,然后启动服务器,服务器将侦听指定对象上的传入请求
PORT(默认为8080)。 -
配置您的MCP主机(例如Gemini CLI):
- 将以下配置添加到Gemini CLI设置中(通常在
~/.gemini-cli/config.json或类似,具体取决于您的操作系统):
"mcpServers": { "expense-log-mcp": { "url": "http://localhost:8080/sse", "headers": { "Authorization": "Bearer YOUR_SECRET_KEY" } } }重要提示: 替换
YOUR_SECRET_KEY与实际MCP_SECRET_KEY你在你的.env文件。此命令告诉Gemini CLI如何连接到本地运行的Expense Log MCP服务器并对其进行身份验证。 - 将以下配置添加到Gemini CLI设置中(通常在
🛠️ 工具
服务器公开了以下工具:
addExpense
添加新的支出记录。
参数:
| 名称 | 类型 | 描述 |
|---|---|---|
ledgerId |
string | 要添加费用的分类账的ID |
categoryId |
string | 费用类别的ID。 |
messageId |
string | 消息的唯一ID,以防止重复。 |
description |
string | 费用的描述。 |
amount |
number | 费用金额。 |
payer |
string | 付款人的姓名。 |
退货:
已添加确认费用的JSON字符串,例如:
{
"success": true,
"code": "OK",
"message": "Expense added successfully.",
"data": {
"expenseId": "clx...456"
}
}
deleteExpense
删除费用记录。
参数:
| 名称 | 类型 | 描述 |
|---|---|---|
ledgerId |
string | 费用所属分类账的ID |
messageId |
string | 要删除的费用的唯一消息ID。 |
退货:
一个JSON字符串,确认费用已被删除,并包括已删除费用的详细信息,例如:
{
"success": true,
"code": "OK",
"message": "Expense deleted successfully.",
"data": {
"id": "clx...123",
"description": "Lunch",
"amount": 15.75,
"createdAt": "Sun Sep 07 2025"
}
}
getExpense
检索单个支出的详细信息。
参数:
| 名称 | 类型 | 描述 |
|---|---|---|
ledgerId |
string | 费用所属分类账的ID |
messageId |
string | 要删除的费用的唯一消息ID。 |
退货:
一个JSON字符串,确认已检索到费用,并包括费用的详细信息,例如:
{
"success": true,
"code": "OK",
"message": "Expense retrieved successfully.",
"data": {
"id": "clx...123",
"description": "Lunch",
"amount": 110,
"payer": "payer1",
"createdAt": "2025-09-07T00:00:00.000Z",
"updatedAt": "2025-09-07T00:00:00.000Z"
}
}
getExpenseCategories
检索所有费用类别的列表。
参数:
没有。
退货:
包含费用类别列表的JSON字符串,例如:
{
"success": true,
"code": "OK",
"message": "Expense categories retrieved successfully.",
"data": [
{
"expenseCategoryId": "clx...1",
"expenseCategoryName": "Transportation"
},
{
"expenseCategoryId": "clx...2",
"expenseCategoryName": "Utilities"
}
]
}
getGroupedExpenses
按付款人和类别名称检索和分组费用,返回每个类别的总金额, 具有类别ID、付款人和日期范围的可选过滤器。
参数:
| 名称 | 类型 | 描述 |
|---|---|---|
ledgerId |
string | 要从中检索费用的分类账的ID。 |
categoryIds |
string[] | 可选。要筛选的类别ID数组 |
payer |
string | 可选。要筛选的付款人的名称 |
startDate |
string | 可选。过滤费用的开始日期(ISO 8601格式)。 |
endDate |
string | 可选。过滤费用的结束日期(ISO 8601格式)。 |
退货:
包含分组费用的JSON字符串,例如:
{
"success": true,
"code": "OK",
"message": "Grouped expenses retrieved successfully.",
"data": {
"Payer1": {
"expenseCategories": {
"Entertainment": 100,
"Transportation": 50
},
"totalAmount": 150
},
"Payer2": {
"expenseCategories": {
"Dining/Snacks": 75
},
"totalAmount": 75
}
}
}
🗄️ 数据库模式
此项目使用Prisma来管理数据库架构。架构在中定义 prisma/schema.prisma 包括以下型号:
Ledger:代表一系列费用。ExpenseCategory:表示支出的类别。Expense:表示单个支出记录。添加了一个独特的约束ledgerId和messageId以防止重复支出。
所有型号包括 createdAt 和 updatedAt 时间戳。ID是通过以下方式生成的 cuid().
🙌 贡献
欢迎投稿!请随时提交拉取请求。
📄 许可证
该项目根据 MIT许可证.
