Skip to main content
Glama

create_transaction

Add a new transaction in YNAB by specifying account ID, amount, payee, and optional details like category and memo using the MCP YNAB Server.

Instructions

Create a new transaction in YNAB.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
account_idYes
amountYesAmount in dollars
category_nameNo
memoNo
payee_nameYes

Implementation Reference

  • The main handler function for the 'create_transaction' tool. It is decorated with @mcp.tool() which registers it and defines the schema from type annotations. Creates a new transaction in YNAB using the TransactionsApi.
    @mcp.tool() async def create_transaction( account_id: str, amount: Annotated[float, Field(description="Amount in dollars")], payee_name: str, category_name: Optional[str] = None, memo: Optional[str] = None, ) -> Dict[str, Any]: """Create a new transaction in YNAB.""" async with await get_ynab_client() as client: transactions_api = TransactionsApi(client) budgets_api = BudgetsApi(client) amount_milliunits = int(amount * 1000) # Use preferred budget ID if available, otherwise fetch a list of budgets budget_id = ynab_resources.get_preferred_budget_id() if not budget_id: budgets_response = budgets_api.get_budgets() budget_id = budgets_response.data.budgets[0].id category_id = None if category_name: category_id = await _find_category_id(client, budget_id, category_name) # Create transaction data transaction = NewTransaction( account_id=account_id, date=date.today(), amount=amount_milliunits, payee_name=payee_name, memo=memo, category_id=category_id, ) wrapper = PostTransactionsWrapper(transaction=transaction) response = transactions_api.create_transaction(budget_id, wrapper) if response.data and response.data.transaction: return response.data.transaction.to_dict() return {}
  • Helper utility function used by create_transaction to resolve category_name to a category_id by searching through category groups.
    async def _find_category_id(client: ApiClient, budget_id: str, category_name: str) -> Optional[str]: """Find a category ID by name.""" categories_api = CategoriesApi(client) categories_response = categories_api.get_categories(budget_id) categories = categories_response.data.category_groups for group in categories: for cat in group.categories: if cat.name.lower() == category_name.lower(): return cat.id return None

Latest Blog Posts

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/Meh-S-Eze/ynab-mcp-client2'

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