Skip to main content
Glama

MCP Agent - AI Expense Tracker

by dev-muhammad
models.py•3.33 kB
""" Data models for the Income/Expense Tracker API """ from pydantic import BaseModel, Field from typing import List, Optional from datetime import datetime from enum import Enum class TransactionType(str, Enum): """Transaction type enumeration""" INCOME = "income" EXPENSE = "expense" class Category(str, Enum): """Predefined categories for transactions""" # Income categories SALARY = "salary" FREELANCE = "freelance" INVESTMENT = "investment" BUSINESS = "business" OTHER_INCOME = "other_income" # Expense categories FOOD = "food" TRANSPORTATION = "transportation" HOUSING = "housing" UTILITIES = "utilities" HEALTHCARE = "healthcare" ENTERTAINMENT = "entertainment" SHOPPING = "shopping" EDUCATION = "education" TRAVEL = "travel" OTHER_EXPENSE = "other_expense" class TransactionBase(BaseModel): """Base transaction model""" title: str = Field(..., min_length=1, max_length=100, description="Transaction title") amount: float = Field(..., gt=0, description="Transaction amount (positive value)") type: TransactionType = Field(..., description="Transaction type (income or expense)") category: Category = Field(..., description="Transaction category") description: Optional[str] = Field(None, max_length=500, description="Additional description") tags: List[str] = Field(default_factory=list, description="Transaction tags") date: datetime = Field(default_factory=datetime.now, description="Transaction date") class TransactionCreate(TransactionBase): """Model for creating a new transaction""" pass class TransactionUpdate(BaseModel): """Model for updating a transaction (all fields optional)""" title: Optional[str] = Field(None, min_length=1, max_length=100) amount: Optional[float] = Field(None, gt=0) type: Optional[TransactionType] = None category: Optional[Category] = None description: Optional[str] = Field(None, max_length=500) tags: Optional[List[str]] = None date: Optional[datetime] = None class Transaction(TransactionBase): """Complete transaction model with metadata""" id: str = Field(..., description="Unique transaction identifier") created_at: datetime = Field(..., description="Creation timestamp") updated_at: datetime = Field(..., description="Last update timestamp") class TransactionSummary(BaseModel): """Summary statistics for transactions""" total_income: float = Field(..., description="Total income amount") total_expenses: float = Field(..., description="Total expenses amount") net_balance: float = Field(..., description="Net balance (income - expenses)") transaction_count: int = Field(..., description="Total number of transactions") income_count: int = Field(..., description="Number of income transactions") expense_count: int = Field(..., description="Number of expense transactions") class CategorySummary(BaseModel): """Summary by category""" category: str = Field(..., description="Category name") total_amount: float = Field(..., description="Total amount for this category") transaction_count: int = Field(..., description="Number of transactions in this category") percentage: float = Field(..., description="Percentage of total amount")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dev-muhammad/MCPAgent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server