Norman Finance MCP Server

Official
MIT License
1

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NORMAN_EMAILYesYour Norman Finance account email address
NORMAN_PASSWORDYesYour Norman Finance account password
NORMAN_API_TIMEOUTNoRequest timeout in seconds200
NORMAN_ENVIRONMENTNoEnvironment to use, 'production' or 'sandbox' for the development environmentproduction

Schema

Prompts

Interactive templates invoked by user choice

NameDescription
create_transaction_prompt Create a prompt for adding a new transaction with essential information. Args: amount: The transaction amount (positive value) description: The transaction description cashflow_type: Type of transaction (INCOME or EXPENSE) Returns: A formatted prompt for creating a transaction
create_client_prompt Create a prompt for adding a new client with basic information. Args: name: The client name or business name client_type: Type of client (business or private) Returns: A formatted prompt for creating a client
send_invoice_prompt Create a prompt for sending an invoice via email. Args: invoice_id: ID of the invoice to send Returns: A list of messages forming a conversation about sending an invoice
search_transactions_prompt Create a prompt for searching transactions with optional date range. Args: date_range: Optional description of date range (e.g., "last month", "this week") Returns: A formatted prompt for searching transactions

Resources

Contextual data attached and managed by the client

NameDescription
company://current
categories://list

Tools

Functions exposed to the LLM to take actions

NameDescription
get_company_details

Get detailed information about the user's company.

get_company_balance
Get the current balance of the company. Returns: Company balance information
get_company_tax_statistics
Get tax statistics for the company. Returns: Company tax statistics data
get_vat_next_report
Get the VAT amount for the next report period. Returns: VAT next report amount data
update_company_details

Update company information.

search_transactions
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
create_transaction
Create a new manual transaction. Args: amount: Transaction amount (positive for income, negative for expense) description: Transaction description category: Transaction category date: Transaction date in YYYY-MM-DD format (defaults to today) vat_rate: VAT rate (0, 7, 19) sale_type: Sale type (GOODS, SERVICES) supplier_country: Country of the supplier (DE, INSIDE_EU, OUTSIDE_EU) cashflow_type: Cashflow type of the transaction (INCOME, EXPENSE) category_id: Category ID of the transaction (If not provided, the transaction will be categorized automatically using AI) Returns: Information about the created transaction
update_transaction

Update an existing transaction.

create_invoice
Create a new invoice. Ask for additional information if needed, for example: - If the client is not found, ask for the client details and create a new client if necessary. - If pyament reminder should be sent, ask for the reminder settings. - If the invoice type is GOODS, ask for the delivery date. - If the invoice type is SERVICES, ask for the service start and end dates. - If the invoice should be sent to the client, ask for the email data. Args: client_id: ID of the client for the invoice items: List of invoice items, each containing name, quantity, rate, vatRate and total. Example: [{"name": "Software Development", "quantity": 3, "rate": 30000, "vatRate": 19, "total": 1071}] // VAT rates might be 0, 7, 19. By default it's 19. Rate and total are in cents. invoice_number: Optional invoice number (will be auto-generated if not provided) issued: Issue date in YYYY-MM-DD format due_to: Due date in YYYY-MM-DD format currency: Invoice currency (EUR, USD), by default it's EUR payment_terms: Payment terms text notes: Additional notes language: Invoice language (en, de) invoice_type: Type of invoice (SERVICES, GOODS) is_vat_included: Whether prices include VAT bank_name: Name of the bank (gets from company details if exists) iban: IBAN for payments (gets from company details if exists) bic: BIC/SWIFT code (gets from company details if exists) create_qr: Whether to create payment QR code (only if BIC and IBAN provided) color_schema: Invoice style color (hex code) font: Invoice font (e.g. "Plus Jakarta Sans", "Inter") is_to_send: Whether to send invoice automatically to client mailing_data: Email data if is_to_send is True. Example: { "emailSubject": "Invoice No.{invoice_number} for {client_name}", "emailBody": "Dear {client_name},...", "customClientEmail": "client@example.com" // email to send the invoice to, if not provided, it will be sent to the client email address } settings_on_overdue: Configuration for overdue notifications. Example: { "isToAutosendNotification": true, // whether to send notification automatically "customEmailSubject": "Reminder: Invoice {invoice_number} is overdue", // custom email subject "customEmailBody": "Dear {client_name},...", // custom email body "notifyAfterDays": [1, 3], // days to notify after the due date "notifyInParticularDays": [] // days to notify in particular dates [2025-05-23", "2025-05-24"] } service_start_date: Service period start date (YYYY-MM-DD) by default it's today, should be provided if invoice_type is SERVICES service_end_date: Service period end date (YYYY-MM-DD) by default it's one month from today, should be provided if invoice_type is SERVICES delivery_date: Delivery date for goods (YYYY-MM-DD) by default it's today, should be provided if invoice_type is GOODS Returns: Information about the created invoice and always include the generated invoice pdf url from reportUrl field
create_recurring_invoice
Create a recurring invoice that will automatically generate new invoices based on specified frequency. Useful for contracts or services that bill on a regular basis. Always ask for reccurring configuration, for example: - How often to generate invoices (weekly, monthly) - Number of units for frequency (e.g. 1 for monthly = every month, 2 = every 2 months) - Start date - End date - End invoice count (optional) Ask for additional information if needed, for example: - If the client is not found, ask for the client details and create a new client if necessary. - If the invoice number is not provided, ask for it. - If the due date is not provided, ask for it. - If the payment terms are not provided, ask for it. - If the bank details are not provided, ask for it. Args: client_id: ID of the client for the invoice items: List of invoice items, each containing name, quantity, rate, vatRate and total frequency_type: How often to generate invoices ("weekly", "monthly") frequency_unit: Number of units for frequency (e.g. 1 for monthly = every month, 2 = every 2 months) starts_from_date: Date to start generating invoices from (YYYY-MM-DD) ends_on_date: Optional end date for recurring invoices (YYYY-MM-DD). Either ends_on_date or ends_on_invoice_count should be provided. ends_on_invoice_count: Optional number of invoices to generate before stopping. Either ends_on_date or ends_on_invoice_count should be provided. invoice_number: Base invoice number (will be auto-generated if not provided) issued: Issue date in YYYY-MM-DD format due_to: Due date in YYYY-MM-DD format currency: Invoice currency (EUR, USD), by default it's EUR payment_terms: Payment terms text notes: Additional notes language: Invoice language (en, de) invoice_type: Type of invoice (SERVICES, GOODS) is_vat_included: Whether prices include VAT bank_name: Name of the bank iban: IBAN for payments bic: BIC/SWIFT code create_qr: Whether to create payment QR code color_schema: Invoice style color (hex code) font: Invoice font (e.g. "Plus Jakarta Sans", "Inter") is_to_send: Whether to send invoices automatically to client settings_on_overdue: Configuration for overdue notifications service_start_date: Service period start date (for SERVICES type) service_end_date: Service period end date (for SERVICES type) delivery_date: Delivery date (for GOODS type) Returns: Information about the created recurring invoice setup and always include the generated invoice pdf url from reportUrl field
get_invoice
Get detailed information about a specific invoice. Args: invoice_id: ID of the invoice to retrieve Returns: Detailed invoice information
send_invoice
Send an invoice via email. Args: invoice_id: ID of the invoice to send subject: Email subject line body: Email body content additional_emails: List of additional email addresses to send to is_send_to_company: Whether to send the copy to the company email (Owner) custom_client_email: Custom email address for the client (By default the email address of the client is used if it is set) Returns: Response from the send invoice request
send_invoice_overdue_reminder
Send an overdue payment reminder for an invoice via email. Args: invoice_id: ID of the invoice to send reminder for subject: Email subject line body: Email body content additional_emails: List of additional email addresses to send to is_send_to_company: Whether to send the copy to the company email (Owner) custom_client_email: Custom email address for the client (By default the email address of the client is used if it is set) Returns: Response from the send overdue reminder request
link_transaction
Link a transaction to an invoice. Args: invoice_id: ID of the invoice transaction_id: ID of the transaction to link Returns: Response from the link transaction request
get_einvoice_xml
Get the e-invoice XML for a specific invoice. Args: invoice_id: ID of the invoice to get XML for Returns: E-invoice XML data
list_clients
Get a list of all clients for the company. Returns: List of clients with their details
get_client
Get detailed information about a specific client. Args: client_id: ID of the client to retrieve Returns: Detailed client information
create_client
Create a new client. Args: name: Client name or business name client_type: Type of client (defaults to "business"), Options: "business", "private" address: Client physical address zip_code: Client postal/zip code email: Client email address country: Client country code (e.g. "DE") vat_number: Client VAT number city: Client city phone: Client phone number Returns: Newly created client record
update_client
Update an existing client. Args: client_id: ID of the client to update name: Updated client name client_type: Updated client type ("business" or "private") address: Updated client physical address zip_code: Updated client postal/zip code email: Updated client email address country: Updated client country code (e.g. "DE") vat_number: Updated client VAT number city: Updated client city phone: Updated client phone number Returns: Updated client record
upload_bulk_attachments
Upload multiple file attachments in bulk. Args: file_paths: List of paths to files to upload cashflow_type: Optional cashflow type for the transactions (INCOME or EXPENSE) Returns: Response from the bulk upload request
list_attachments
Get list of attachments with optional filters. Args: file_name: Filter by file name (case insensitive partial match) linked: Filter by whether attachment is linked to transactions attachment_type: Filter by attachment type (invoice, receipt, contract, other) description: Filter by description (case insensitive partial match) brand_name: Filter by brand name (case insensitive partial match) Returns: List of attachments matching the filters
create_attachment
Create a new attachment. Args: file_path: Path to file to upload transactions: List of transaction IDs to link attachment_type: Type of attachment (invoice, receipt) amount: Amount related to attachment amount_exchanged: Exchanged amount in different currency attachment_number: Unique number for attachment brand_name: Brand name associated with attachment currency: Currency of amount (default EUR) currency_exchanged: Exchanged currency (default EUR) description: Description of attachment supplier_country: Country of supplier (DE, INSIDE_EU, OUTSIDE_EU) value_date: Date of value vat_sum_amount: VAT sum amount vat_sum_amount_exchanged: Exchanged VAT sum amount vat_rate: VAT rate percentage sale_type: Type of sale additional_metadata: Additional metadata for attachment Returns: Created attachment information
link_attachment_transaction
Link a transaction to an attachment. Args: attachment_id: ID of the attachment transaction_id: ID of the transaction to link Returns: Response from the link transaction request
categorize_transaction
Detect category for a transaction using AI. Args: transaction_amount: Amount of the transaction transaction_description: Description of the transaction transaction_type: Type of transaction ("income" or "expense") Returns: Suggested category information for the transaction
list_tax_reports

List all available tax reports.

validate_tax_number
Validate a tax number for a specific region. Args: tax_number: Tax number to validate region_code: Region code (e.g. "BE" for Belgium) Returns: Validation result for the tax number
get_tax_report
Retrieve a specific tax report. Args: report_id: Public ID of the tax report to retrieve Returns: Tax report details
generate_finanzamt_preview
Generate a test Finanzamt preview for a tax report. Args: report_id: Public ID of the tax report Returns: Generate a PDF preview of the tax report. Always suggest to check the preview before sending it to the Finanzamt. Always include the path to the generated PDF file as a link to open the file from local file system. Get the report data from @get_tax_report and show line items and totals. You could add short summary based on the report data. Ask follow up question to file the tax report to the Finanzamt @submit_tax_report. Don't send the report to the Finanzamt without the user confirmation.
submit_tax_report
Submit a tax report to the Finanzamt. Args: report_id: Public ID of the tax report to submit Returns: Response from the submission request and a link to the tax report from reportFile to download. If response status is 403, it means a paid subscription is required to file the report.
list_tax_states
Get list of available tax states. Returns: List of tax states
list_tax_settings
Get list of tax settings for the current company. Returns: List of company tax settings
update_tax_setting
Update a tax setting. Always generate a preview of the tax report @generate_finanzamt_preview before submitting it to the Finanzamt. Args: setting_id: Public ID of the tax setting to update tax_type: Type of tax (e.g. "sales") vat_type: VAT type (e.g. "vat_subject") vat_percent: VAT percentage start_tax_report_date: Start date for tax reporting (YYYY-MM-DD) reporting_frequency: Frequency of reporting (e.g. "monthly") Returns: Updated tax setting
list_invoices
List invoices with optional filtering. Args: status: Filter by invoice status (draft, pending, sent, paid, overdue, uncollectible) name: Filter by invoice (client) name from_date: Filter invoices created after this date (YYYY-MM-DD) to_date: Filter invoices created before this date (YYYY-MM-DD) limit: Maximum number of invoices to return (default 100) Returns: List of invoices matching the criteria
delete_client
Delete a client. Args: client_id: ID of the client to delete Returns: Confirmation of deletion
ID: akjl8hgv47