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-сервера вам необходимо:
Создайте учетную запись на Norman Finance
Приготовьте свой адрес электронной почты и пароль для аутентификации.
Удаленный MCP-сервер
Теперь Norman предлагает размещенный удаленный сервер MCP по адресу:
Рекомендуется использовать удаленный MCP, поскольку он использует аутентификацию OAuth, что позволяет вам входить в систему напрямую с помощью учетной записи Norman без необходимости вручную создавать или управлять токенами доступа.
Установка
Интеграции Claude.ai
Добавление сервера Norman MCP в Claude.ai:
Для Клода Макса:
Перейдите в Настройки > Профиль.
Найдите раздел «Интеграции»
Нажмите «Добавить еще»
Введите URL-адрес сервера Norman MCP:
https://mcp.norman.finance/sseНажмите «Добавить», чтобы завершить.
Для Claude Enterprise и команд:
Перейдите в Настройки > Интеграции (для Teams) или Настройки > Управление данными (для Enterprise).
Найдите раздел «Интеграции»
Нажмите «Добавить еще»
Введите URL-адрес сервера Norman MCP:
https://mcp.norman.finance/sseНажмите «Добавить», чтобы завершить.
Включение интеграции Norman:
Начать чат с Клодом.
Откройте меню «Поиск и инструменты» .
Нажмите «Подключиться», чтобы привязать свою учетную запись Norman.
После подключения используйте то же меню для включения определенных инструментов Norman.
Добавление в Claude Desktop
Чтобы запустить сервер Norman Finance MCP с Claude Desktop, вы можете воспользоваться приведенной выше инструкцией или добавить его вручную, выполнив следующие действия:
1. Загрузите и настройте Claude Desktop
Загрузите Claude Desktop .
Запустите Claude и перейдите в: Настройки > Разработчик > Изменить конфигурацию.
Обновите файл
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:
Запустите сервер с транспортом SSE:
python -m norman_mcp --transport sseПри подключении к серверу вы будете перенаправлены на страницу входа
Введите свои учетные данные Norman Finance
Вы будете перенаправлены обратно в свое приложение с токенами аутентификации.
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 toolscategorize_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.
link_attachment_transactionCInspect
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
Inputs: attachment_id (required), transaction_id (required).
link_transactionBInspect
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
Inputs: invoice_id (required), transaction_id (required).
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
Scored across 34 tools
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.
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.
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.
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
Related MCP Connectors
German B2B E-Rechnung MCP server: EN 16931, KoSIT XRechnung 3.0 & DATEV ZUGFeRD 2.5 PDF/A-3b.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
Headless API-first double-entry accounting & bookkeeping engine. 84 MCP tools over HTTP.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- FlicenseBqualityDmaintenanceMCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.1559 npm-
- AlicenseAqualityDmaintenanceMCP 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.661 npm2MIT
- AlicenseAqualityDmaintenanceMCP 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.61MIT
- AlicenseAqualityCmaintenanceMCP 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).234MIT