Skip to main content
Glama
norman-finance

Norman Finance MCP Server

Official

search_transactions

Search and filter financial transactions by description, date range, amount, category, status, and cashflow type. Retrieve matching results with sensitive data removed.

Instructions

Search for transactions matching specified criteria. Args: description: Text to search for in transaction descriptions from_date: Start date in YYYY-MM-DD format to_date: End date in YYYY-MM-DD format min_amount: Minimum transaction amount max_amount: Maximum transaction amount category: Transaction category limit: Maximum number of results to return (default 100) no_invoice: Whether to exclude invoices no_receipt: Whether to exclude receipts status: Status of the transaction (UNVERIFIED, VERIFIED) cashflow_type: Cashflow type of the transaction (INCOME, EXPENSE) Returns: List of matching transactions with sensitive data removed

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cashflow_typeNo
categoryNo
descriptionNo
from_dateNo
limitNo
max_amountNo
min_amountNo
no_invoiceNo
no_receiptNo
statusNo
to_dateNo

Implementation Reference

  • The core handler function for the 'search_transactions' tool. It uses @mcp.tool() decorator for registration, defines input schema with Pydantic Fields, and implements the logic to query the Norman Finance API for matching transactions based on provided filters.
    @mcp.tool() async def search_transactions( ctx: Context, description: Optional[str] = Field(description="Text to search for in transaction descriptions"), from_date: Optional[str] = Field(description="Start date in YYYY-MM-DD format"), to_date: Optional[str] = Field(description="End date in YYYY-MM-DD format"), min_amount: Optional[float] = Field(description="Minimum transaction amount"), max_amount: Optional[float] = Field(description="Maximum transaction amount"), category: Optional[str] = Field(description="Transaction category"), no_invoice: Optional[bool] = Field(description="Whether to exclude invoices"), no_receipt: Optional[bool] = Field(description="Whether to exclude receipts"), status: Optional[str] = Field(description="Status of the transaction (UNVERIFIED, VERIFIED)"), cashflow_type: Optional[str] = Field(description="Cashflow type of the transaction (INCOME, EXPENSE)"), limit: Optional[int] = Field(description="Maximum number of results to return (default 100)") ) -> Dict[str, Any]: """ Search for transactions matching specified criteria. Args: description: Text to search for in transaction descriptions from_date: Start date in YYYY-MM-DD format to_date: End date in YYYY-MM-DD format min_amount: Minimum transaction amount max_amount: Maximum transaction amount category: Transaction category limit: Maximum number of results to return (default 100) no_invoice: Whether to exclude invoices no_receipt: Whether to exclude receipts status: Status of the transaction (UNVERIFIED, VERIFIED) cashflow_type: Cashflow type of the transaction (INCOME, EXPENSE) Returns: List of matching transactions with sensitive data removed """ api = ctx.request_context.lifespan_context["api"] company_id = api.company_id if not company_id: return {"error": "No company available. Please authenticate first."} transactions_url = urljoin( config.api_base_url, f"api/v1/companies/{company_id}/accounting/transactions/" ) # Build query parameters params = {} if description: params["description"] = description if from_date: params["dateFrom"] = from_date if to_date: params["dateTo"] = to_date if min_amount: params["minAmount"] = min_amount if max_amount: params["maxAmount"] = max_amount if category: params["category_name"] = category if no_invoice: params["noInvoice"] = no_invoice if no_receipt: params["noAttachment"] = no_receipt if status: params["status"] = status if cashflow_type: params["cashflowType"] = cashflow_type if limit: params["limit"] = limit return api._make_request("GET", transactions_url, params=params)
  • The registration section in the MCP server setup where register_transaction_tools(server) is called. This invokes the registration of the search_transactions tool (and other transaction tools) with the FastMCP server instance.
    # Register all tools register_client_tools(server) register_invoice_tools(server) register_tax_tools(server) register_transaction_tools(server) register_document_tools(server) register_company_tools(server) register_prompts(server) register_resources(server)
  • Import of register_transaction_tools function from transactions.py, necessary for registering the tool.
    from norman_mcp.tools.transactions import register_transaction_tools

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/norman-finance/norman-mcp-server'

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