Skip to main content
Glama
klauern

MCP YNAB Server

by klauern

create_transaction

Add a new transaction in YNAB by specifying account ID, amount, payee name, and optional details like category and memo for accurate budget tracking.

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 handler function for the 'create_transaction' tool. Decorated with @mcp.tool() for automatic registration and schema derivation from type hints. Executes the YNAB API call to create a transaction.
    @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 function used by create_transaction to resolve category_name to a category_id by querying the YNAB categories API.
    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
  • The @mcp.tool() decorator registers the create_transaction function as an MCP tool, deriving input schema from parameters.
    @mcp.tool()

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/klauern/mcp-ynab'

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