Skip to main content
Glama
Norman Finance MCP Server

Norman Finance MCP Server

Official

Норман Финанс MCP Сервер

Этот сервер Model Context Protocol (MCP) позволяет ИИ взаимодействовать с API Norman Finance, обеспечивая доступ к бухгалтерскому учету, счетам, компаниям, клиентам, налогам и многому другому через стандартизированный протокол.

[!ПРИМЕЧАНИЕ]

Norman Finance MCP Server в настоящее время находится в стадии бета-тестирования. Мы приветствуем ваши отзывы и призываем вас сообщать о любых ошибках, открывая вопрос здесь .

Функции

  • 🔐 Аутентификация : безопасная аутентификация с помощью учетной записи Norman Finance

  • 💼 Управление компанией : управляйте данными своей компании, получайте баланс компании, налоговые декларации по НДС и т. д.

  • 📊 Бухгалтерский учет : следите за своими транзакциями, категоризация

  • 📝 (e-)Invoicing : Создавайте, просматривайте, отправляйте и обрабатывайте счета. Вы даже можете настроить повторяющиеся счета на основе ваших контрактов

  • 👥 Управление клиентами : создание и управление клиентами (CRM)

  • 💰 Налоги : просматривайте налоговую информацию и отчеты, создавайте официальные предварительные версии PDF-файлов Finanzamt и подавайте налоговые декларации

  • 📄 Документы : загрузка и управление вложениями (квитанции, счета-фактуры, документы и т. д.)

👇 Примеры использования Claude Desktop — переключить

Related MCP server: einvoice-mcp

Предпосылки

Перед использованием этого MCP-сервера вам необходимо:

  1. Создайте учетную запись на Norman Finance

  2. Приготовьте свой адрес электронной почты и пароль для аутентификации.

Удаленный MCP-сервер

Теперь Norman предлагает размещенный удаленный сервер MCP по адресу:

https://mcp.norman.finance/sse

Рекомендуется использовать удаленный MCP, поскольку он использует аутентификацию OAuth, что позволяет вам входить в систему напрямую с помощью учетной записи Norman без необходимости вручную создавать или управлять токенами доступа.

Установка

Интеграции Claude.ai

Добавление сервера Norman MCP в Claude.ai:

Для Клода Макса:

  1. Перейдите в Настройки > Профиль.

  2. Найдите раздел «Интеграции»

  3. Нажмите «Добавить еще»

  4. Введите URL-адрес сервера Norman MCP: https://mcp.norman.finance/sse

  5. Нажмите «Добавить», чтобы завершить.

Для Claude Enterprise и команд:

  1. Перейдите в Настройки > Интеграции (для Teams) или Настройки > Управление данными (для Enterprise).

  2. Найдите раздел «Интеграции»

  3. Нажмите «Добавить еще»

  4. Введите URL-адрес сервера Norman MCP: https://mcp.norman.finance/sse

  5. Нажмите «Добавить», чтобы завершить.

Включение интеграции Norman:

  1. Начать чат с Клодом.

  2. Откройте меню «Поиск и инструменты» .

  3. Нажмите «Подключиться», чтобы привязать свою учетную запись Norman.

  4. После подключения используйте то же меню для включения определенных инструментов Norman.

Добавление в Claude Desktop

Чтобы запустить сервер Norman Finance MCP с Claude Desktop, вы можете воспользоваться приведенной выше инструкцией или добавить его вручную, выполнив следующие действия:

1. Загрузите и настройте Claude Desktop

  1. Загрузите Claude Desktop .

  2. Запустите Claude и перейдите в: Настройки > Разработчик > Изменить конфигурацию.

  3. Обновите файл claude_desktop_config.json , указав следующую конфигурацию:

Удаленный MCP

{
  "mcpServers": {
    "norman-mcp-server": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.norman.finance/sse"]
    }
  }
}

Местный МКП

Установить УФ

Следуйте инструкциям здесь: Установка УФ

{
  "mcpServers": {
    "norman-mcp-server": {
      "command": "<home_path>/.local/bin/uvx",
      "args": [
        "--from",
        "norman-mcp-server@latest",
        "norman-mcp"
      ],
      "env": {
        "NORMAN_EMAIL": "your-email@example.com",
        "NORMAN_PASSWORD": "your-password",
        "NORMAN_ENVIRONMENT": "production"
      }
    }
  }
}

Конфигурация

Методы аутентификации

Сервер Norman MCP поддерживает два метода аутентификации:

1. Аутентификация OAuth (для транспорта SSE)

При использовании сервера с MCP Inspector, Claude или другими клиентами SSE сервер использует аутентификацию OAuth 2.0:

  1. Запустите сервер с транспортом SSE:

    python -m norman_mcp --transport sse
  2. При подключении к серверу вы будете перенаправлены на страницу входа

  3. Введите свои учетные данные Norman Finance

  4. Вы будете перенаправлены обратно в свое приложение с токенами аутентификации.

2. Переменные среды (для транспорта stdio)

При использовании сервера с Claude Desktop или связью stdin/stdout укажите учетные данные через переменные среды:

# .env
NORMAN_EMAIL=your-email@example.com
NORMAN_PASSWORD=your-password
NORMAN_ENVIRONMENT=production  # or "sandbox" for the development environment
NORMAN_API_TIMEOUT=200  # Request timeout in seconds

Переменные среды

Сервер можно настроить с помощью следующих переменных среды:

# Authentication (for stdio transport)
NORMAN_EMAIL=your-email@example.com
NORMAN_PASSWORD=your-password
NORMAN_ENVIRONMENT=production  # or "sandbox" for the development environment

# Server configuration
NORMAN_MCP_HOST=0.0.0.0  # Host to bind to
NORMAN_MCP_PORT=3001     # Port to bind to
NORMAN_MCP_PUBLIC_URL=http://example.com  # Public URL for OAuth callbacks (important for remote access)
NORMAN_API_TIMEOUT=200   # Request timeout in seconds

Разработка

Этот раздел предназначен для участников, желающих развивать или расширять сервер Norman Finance MCP.

Локальная установка

git clone https://github.com/norman-finance/norman-mcp-server.git
cd norman-mcp-server
pip install -e .

Затем обновите файл claude_desktop_config.json, чтобы он напрямую указывал на модуль Python:

{
  "mcpServers": {
    "norman-mcp-server": {
      "command": "<path_to_your_python>/python",
      "args": ["-m", "norman_mcp"],
      "env": {
        "NORMAN_EMAIL": "your-email@example.com",
        "NORMAN_PASSWORD": "your-password",
        "NORMAN_ENVIRONMENT": "production"
      }
    }
  }
}

У вас есть идея для статьи или что-то, что вы хотели бы увидеть? Поделитесь своим предложением


Available Tools

34 tools
categorize_transactionBInspect
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

Inputs: transaction_amount (required), transaction_description (required), transaction_type (required).

create_attachmentBInspect
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

Inputs: file_path (required), additional_metadata, amount, amount_exchanged, +13 more.

create_clientBInspect
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

Inputs: name (required), address, city, client_type, +5 more.

create_invoiceAInspect
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

Inputs: client_id (required), items (required), bank_name, bic, +19 more.

create_recurring_invoiceAInspect
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

Inputs: client_id (required), frequency_type (required), frequency_unit (required), items (required), +23 more.

create_transactionBInspect
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

Inputs: amount (required), cashflow_type (required), description (required), supplier_country (required), +4 more.

delete_clientCInspect
Delete a client.

Args:
    client_id: ID of the client to delete
    
Returns:
    Confirmation of deletion

Inputs: client_id (required).

generate_finanzamt_previewCInspect
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.

Inputs: report_id (required).

get_clientCInspect
Get detailed information about a specific client.

Args:
    client_id: ID of the client to retrieve
    
Returns:
    Detailed client information

Inputs: client_id (required).

get_company_balanceCInspect
Get the current balance of the company.

Returns:
    Company balance information

Inputs: no named parameters.

get_company_detailsBInspect

Get detailed information about the user's company.

Inputs: no named parameters.

get_company_tax_statisticsCInspect
Get tax statistics for the company.

Returns:
    Company tax statistics data

Inputs: no named parameters.

get_einvoice_xmlBInspect
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

Inputs: invoice_id (required).

get_invoiceCInspect
Get detailed information about a specific invoice.

Args:
    invoice_id: ID of the invoice to retrieve
    
Returns:
    Detailed invoice information

Inputs: invoice_id (required).

get_tax_reportBInspect
Retrieve a specific tax report.

Args:
    report_id: Public ID of the tax report to retrieve
    
Returns:
    Tax report details

Inputs: report_id (required).

get_vat_next_reportCInspect
Get the VAT amount for the next report period.

Returns:
    VAT next report amount data

Inputs: no named parameters.

list_attachmentsBInspect
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

Inputs: attachment_type, brand_name, description, file_name, +1 more.

list_clientsBInspect
Get a list of all clients for the company.

Returns:
    List of clients with their details

Inputs: no named parameters.

list_invoicesBInspect
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

Inputs: from_date, limit, name, status, +1 more.

list_tax_reportsBInspect

List all available tax reports.

Inputs: no named parameters.

list_tax_settingsBInspect
Get list of tax settings for the current company.

Returns:
    List of company tax settings

Inputs: no named parameters.

list_tax_statesBInspect
Get list of available tax states.

Returns:
    List of tax states

Inputs: no named parameters.

search_transactionsAInspect
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

Inputs: cashflow_type, category, description, from_date, +7 more.

send_invoiceBInspect
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

Inputs: body (required), invoice_id (required), subject (required), additional_emails, +2 more.

send_invoice_overdue_reminderBInspect
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

Inputs: body (required), invoice_id (required), subject (required), additional_emails, +2 more.

submit_tax_reportBInspect
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.

Inputs: report_id (required).

update_clientBInspect
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

Inputs: client_id (required), address, city, client_type, +6 more.

update_company_detailsDInspect

Update company information.

Inputs: activity_start, address, city, country, +7 more.

update_tax_settingAInspect
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

Inputs: setting_id (required), reporting_frequency, start_tax_report_date, tax_type, +2 more.

update_transactionCInspect

Update an existing transaction.

Inputs: transaction_id (required), amount, cashflow_type, category, +6 more.

upload_bulk_attachmentsBInspect
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

Inputs: file_paths (required), cashflow_type.

validate_tax_numberCInspect
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

Inputs: region_code (required), tax_number (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 34 tools

    Disambiguation4/5

    Most tools have distinct purposes, but there is some overlap between create_transaction and categorize_transaction, and between send_invoice and send_invoice_overdue_reminder, which could cause minor confusion. However, descriptions clarify their specific roles, and the majority of tools target unique resources or actions.

    Naming Consistency5/5

    All tool names follow a consistent snake_case pattern with a clear verb_noun structure, such as create_client, list_invoices, and update_transaction. This uniformity makes the tool set predictable and easy to navigate.

    Tool Count3/5

    With 34 tools, the count is borderline high for a finance server, potentially overwhelming for an agent. While the domain is broad (clients, invoices, transactions, taxes, attachments), some tools might be redundant or overly specialized, making the set feel heavy.

    Completeness5/5

    The tool set provides comprehensive coverage for financial management, including full CRUD operations for clients, invoices, transactions, and attachments, plus tax reporting, validation, and email functionalities. There are no obvious gaps, and tools support end-to-end workflows.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      B
      quality
      D
      maintenance
      MCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.
      15
      59 npm
      -
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for DACH e-invoicing. Create XRechnung (UBL) and ZUGFeRD 2.3 (Factur-X CII) invoices, validate against EN 16931 rules, extract data from XML, and convert between UBL, CII and JSON formats.
      6
      61 npm
      2
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for German e-invoice compliance (XRechnung 3.0 & ZUGFeRD 2.x) enabling AI agents to validate, generate, parse, and check compliance of electronic invoices per EN 16931.
      6
      1
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP server for Spanish accounting for freelancers and SMEs, enabling AI agents to issue invoices, OCR expense PDFs, reconcile bank transactions, and prepare quarterly VAT (Modelo 303).
      23
      4
      MIT