expenselm-mcp-server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_TIMEOUT | No | Timeout for MCP requests (in milliseconds). | |
| EXPENSELM_API_KEY | Yes | Your ExpenseLM API key. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_latest_expensesB | Get the latest expense records. Also for searching expenses by the provided criterias. Args: skip (int): The number of records to skip. Default is 0. limit (int): The maximum number of records to return. Default is 10. from_date (Optional[date]): The start date for filtering. Default is None. Format is YYYY-MM-DD. to_date (Optional[date]): The end date for filtering. Default is None. Format is YYYY-MM-DD. text_input (Optional[str]): The text for semantic search. Default is None. Returns: list[ExpenseRecord]: The latest expense records. |
| get_expense_by_idA | Get an expense record by id. Args: id: The id of the expense. Returns: ExpenseImageData: The expense record. |
| get_latest_subscription_expensesA | Get the latest expense records related to regular subscriptions. Args: skip (int): The number of records to skip. Default is 0. limit (int): The maximum number of records to return. Default is 10. from_date (Optional[date]): The start date for filtering. Default is None. Format is YYYY-MM-DD. to_date (Optional[date]): The end date for filtering. Default is None. Format is YYYY-MM-DD. text_input (Optional[str]): The text for semantic search. Default is None. Returns: list[ExpenseRecord]: The latest subscription expense records. |
| get_expense_summary_by_month_by_currencyA | Get expense summary by month and currency for the provided period. Args: from_date (required): The start date for filtering. Format is YYYY-MM-DD. to_date (required): The end date for filtering. Format is YYYY-MM-DD. Returns: list[MonthCurAmtStatItem]: The expense summary by month and currency. For month, the format is YYYY-MM. |
| get_expense_summary_by_category_by_currencyA | Get expense summary by category and currency for the provided period. Args: from_date (required): The start date for filtering. Format is YYYY-MM-DD. to_date (required): The end date for filtering. Format is YYYY-MM-DD. Returns: list[CategoryCurAmtStatItem]: The expense summary by category and currency. |
| get_expense_summary_by_subscription_by_currencyA | Get expense summary by subscription and currency for the provided period. Args: from_date (required): The start date for filtering. Format is YYYY-MM-DD. to_date (required): The end date for filtering. Format is YYYY-MM-DD. Returns: list[SubscriptionCurAmtStatItem]: The expense summary by subscription and currency. |
| download_expense_receipt_imageA | Download an expense receipt image from the backend API. Args: expense_id: The ID of the expense to download the receipt image for thumbnail: Whether to download the thumbnail version (default: False) Returns: dict containing the image data (base64 encoded), content type, and metadata |
| save_expense_receipt_imageA | Download and save an expense receipt image to a local file. Args: expense_id: The ID of the expense to download the receipt image for save_path: Local file path where the image should be saved thumbnail: Whether to download the thumbnail version (default: False) Returns: dict containing success status and file information |
| get_expense_count_by_periodA | Get expense count for the provided period. Example usage: When user want to perform analytics for a period, first use this method to get the count of total expenses first. Then can use the get_latest_expenses tool to fetch the expenses by page to get all records. Args: from_date (required): The start date for filtering. Format is YYYY-MM-DD. to_date (required): The end date for filtering. Format is YYYY-MM-DD. Returns: int: The count of expense reocrds for the period. |
| get_subscription_expense_count_by_periodA | Get subscription based expense count for the provided period. Example usage: When user want to perform analytics of subscription based expenses for a period, first use this method to get the count of total subscription based expenses first. Then can use the get_latest_subscription_expenses tool to fetch the expenses by page to get all records. Args: from_date (required): The start date for filtering. Format is YYYY-MM-DD. to_date (required): The end date for filtering. Format is YYYY-MM-DD. Returns: int: The count of subscription based expense reocrds for the period. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Most tools are clearly separated by resource and action: expense list/by-id, subscription expenses, summary dimensions, counts, and receipts. The only real ambiguity is between download_expense_receipt_image and save_expense_receipt_image, which differ mainly in whether the image is returned as data or written to a local file.
All names consistently use snake_case with a clear verb (get, download, save) followed by the object and modifiers. Patterns like get_expense_summary_by_*_by_currency and get_*_expense_count_by_period make the toolset predictable and easy to navigate.
Ten tools is well-scoped for an expense retrieval and analytics server. Each tool covers a distinct retrieval, summary, count, or receipt operation, with no redundant or filler tools.
The server covers the apparent read-only analytics domain thoroughly: listing/searching/paginating expenses, by-id lookup, subscription expenses, monthly/category/subscription summaries, per-period counts, and receipt image retrieval/saving. The count + pagination flow is explicitly supported, so there are no dead ends.