Skip to main content
Glama
OlegStanKoptev

fintablo-mcp

fintablo-mcp

Только для чтения MCP-сервер поверх API Fintablo. Задайте финансовый вопрос на естественном языке — сервер вычисляет ответ в коде на основе актуальных данных API: без ручных выгрузок и устаревших срезов.

Главный инструмент: get_nzp — незавершённое производство (НЗП) по сделке, восстановленное из примитивов API и сверенное с собственной цифрой Fintablo.

Только чтение по умолчанию. В клиенте нет ни одного метода записи. Fintablo не получает от этого сервера никаких изменений — независимо от того, о чём попросили модель.

Формула НЗП

Расходы привязываются к этапам сделки, а не к сделке целиком. Открытые этапы (без даты акта) → НЗП; этапы, закрытые актом, → списаны. Для каждого открытого этапа — четыре слоя:

НЗП = Σ по открытым этапам [ операции + обязательства + зарплата + зарплатные налоги ]

Слой

Источник

Нюанс

операции

прямые списания по этапу (/v1/transaction)

сумма берётся из поля value, за вычетом НДС по строке (nds — это процент)

обязательства

все обязательства по этапу (/v1/obligation)

считаются целиком, даже если ещё не подписаны актом; поле amount уже без НДС

зарплата

сдельная зарплата по этапу (/v1/deal-salary)

сумма из поля value

зарплатные налоги

НДФЛ + взносы

оценка — пропорционально зарплате (см. ниже)

Выручка и «списано» сходятся к 100 %, итог НЗП — к ~98–99 %, остаток приходится целиком на слой зарплатных налогов.

Как расходы привязаны к этапам

В API сделка содержит массив stages[], у каждого этапа свой id, actDate и amount (выручка без НДС). У самих расходов нет отдельного поля stageId — они привязываются через поле dealId.

  • Операции (/v1/transaction): документация прямо говорит, что при прикреплении операции к этапу в dealId передаётся идентификатор этапа. Поэтому операции запрашиваются по id этапа (?dealId=<stageId>).

  • Обязательства и сдельная зарплата (/v1/obligation, /v1/deal-salary): здесь документация описывает dealId только как «идентификатор сделки», без оговорки про этап. Значит, Fintablo может хранить там либо id сделки, либо id этапа. Чтобы результат был верным в любом случае, сервер запрашивает эти слои по всем кандидатам сразу — id сделки + id всех этапов — и убирает дубликаты по id записи. Каждая запись затем относится к этапу по своему собственному dealId: если он совпадает с этапом — к этому этапу; если это id сделки целиком («на уровне сделки») — к первому открытому этапу, чтобы попасть в НЗП ровно один раз.

Сделка без этапов считается как единый расчётный объект (по собственным id/actDate/amount).

Related MCP server: Wallet BudgetBakers MCP

Известная неопределённость — как распознать неверный результат

⚠️ Документация Fintablo гарантирует привязку к этапу через dealId только для операций ДДС. Для обязательств и сдельной зарплаты поведение в спецификации не зафиксировано, и проверить его можно только на живой сделке с этапами. Сервер написан так, чтобы быть корректным при любом из вариантов (см. выше), но если цифра НЗП выглядит не так, как ожидается, в первую очередь проверьте именно эти два слоя.

На что смотреть:

  • Обязательства или зарплата «потерялись». Если по многоэтапной сделке вы видите в Fintablo обязательства/сдельную зарплату, а в НЗП соответствующий слой нулевой или заметно меньше — сообщите об этом: вероятно, привязка dealId устроена иначе, чем предполагалось.

  • Обязательство «уровня сделки» попало не на тот этап. Обязательство, привязанное к сделке целиком (а не к конкретному этапу), относится к первому открытому этапу. В разбивке по этапам (perStage) оно окажется на этом этапе — это намеренное упрощение. На итоговую сумму НЗП это не влияет (запись считается один раз), но распределение по этапам может выглядеть неожиданно.

  • Зарплата считается только сдельная. Слой зарплаты берётся из /v1/deal-salary (сдельная зарплата, привязанная к сделке). Зарплата, начисленная через Ведомость месяца (/v1/salary), в расчёт НЗП не попадает. Если в производстве есть труд, который проводится не как сдельный, этот слой будет занижен.

  • Зарплатные налоги — всегда оценка. См. раздел «О слое зарплатных налогов»: это коэффициент, а не фактические суммы.

Все перечисленное — вопросы бизнес-логики, а не ошибки в коде. Окончательно закрыть их можно, сверив результат с эталонной цифрой Fintablo на реальной сделке с этапами (см. Golden-тесты).

Инструменты

Инструмент

Назначение

get_nzp

НЗП по одной сделке по её коду (основной)

list_partners

справочник контрагентов

list_partner_groups

группы контрагентов

list_categories

статьи ОПиУ, с фильтром по pnlType

fintablo_get

ограниченный сырой GET для исследования (allowlist путей, лимит размера)

Установка

npm install
cp .env.example .env        # добавьте ваш FINTABLO_TOKEN
npm run dev                 # запуск на stdio (tsx)
npm run inspect             # открыть MCP Inspector
npm test                    # запустить тесты математики

Сборка и подключение в Claude Desktop:

npm run build

Затем добавьте запись из claude_desktop_config.example.json в ваш claude_desktop_config.json (используйте абсолютный путь к dist/index.js).

Контракт API (проверено)

Эндпоинты и имена полей в src/fintablo/client.ts сверены с OpenAPI-спецификацией FinTablo (https://my.fintablo.ru/api/FinTablo-v1-swagger.yaml, она же отрисованная документация на https://my.fintablo.ru/api/docs):

  • Базовый URL: https://api.fintablo.ru, все ресурсы под /v1.

  • Авторизация: заголовок Authorization: Bearer <token>. Лимит — 300 запросов в минуту (клиент делает retry/backoff на 429 и 5xx).

  • Операции живут на /v1/transaction: сумма — value, тип — group (income/outcome/transfer), НДС — nds (процент). Разбитые операции приходят отдельными строками (через parentId), а не вложенным массивом.

  • Пагинация различается: /transactionpage + pageSize (до 1000), /dealpage (по 500), справочники (/partner, /partner-group, /category) не пагинируются.

  • Сделка ищется по name (поля code в API нет; человекочитаемый код вроде 02-26/Б — это имя сделки).

  • Обязательства (/v1/obligation): amount уже без НДС, отдельное поле nds — это сумма НДС. Привязка dealId к этапу спецификацией не гарантирована — см. «Известная неопределённость».

  • Сдельная зарплата (/v1/deal-salary): сумма — value. Не путать с /v1/salary (ведомость месяца — другой формат). Привязка dealId к этапу так же не гарантирована (см. там же).

О слое зарплатных налогов

Слой payrollTax — это оценка: общий коэффициент PAYROLL_TAX_RATE (НДФЛ + взносы), применённый к сумме зарплаты этапа. Реальные эффективные ставки различаются по сотрудникам, и привязать их к конкретному этапу из сырых данных нельзя.

При этом ведомость месяца /v1/salary возвращает фактические tax (НДФЛ) и fee (взносы) по сотруднику за месяц. Это месячные итоги, поэтому для разнесения по сделкам/этапам всё равно нужна пропорция — но их можно использовать, чтобы откалибровать PAYROLL_TAX_RATE по эталонным сделкам.

Golden-тесты

test/nzp.test.ts содержит синтетические проверки плюс TODO на самую ценную работу: записать реальные фикстуры DealData для 11-24/Г и 02-26/Б, затем проверять, что computeNzp(...) совпадает с эталонными цифрами в пределах допуска. Эти две сделки — ваша регрессионная сеть: любое будущее изменение API, ломающее математику, будет поймано.

Открытые вопросы, которые закроют именно эти фикстуры:

  • наследуют ли строки-части разбитой операции group/nds родителя (сейчас по умолчанию outcome);

  • значение PAYROLL_TAX_RATE, при котором итог сходится к ~98–99 %.

Структура

src/
  index.ts              # MCP-сервер: stdio + регистрация инструментов
  fintablo/
    client.ts           # клиент API: авторизация, пагинация, retry/backoff, raw→domain
    types.ts            # доменные типы, от которых зависит математика
  domain/
    nzp.ts              # формула — ЧИСТАЯ, без I/O, покрыта тестами
    vat.ts              # вычет НДС по строке (по проценту)
test/
  nzp.test.ts           # тесты математики + каркас golden-тестов

Лицензия

MIT

Available Tools

5 tools
fintablo_getПрямой GET-запрос к FintabloA

GET-запрос только для чтения к разрешённому пути Fintablo /v1 для исследования данных. НЕ используйте результаты как основу для итоговой цифры — для этого есть get_nzp.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesнапример, /deal или /transaction
queryNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses read-only nature and that it accesses permitted paths under /v1, but lacks details on authentication requirements, error behavior, or response format. With no annotations, more transparency would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with two efficient sentences. The first sentence conveys the purpose, and the second provides a critical usage warning. No superfluous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the tool's purpose and usage boundaries, it does not explain the return format or pagination. Given no output schema, additional details would improve completeness, but the tool is simple and context is adequate for exploration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides an example for the path parameter ('/deal или /transaction'), adding meaning beyond type. The query parameter lacks description, and the tool description does not elaborate further. 50% schema coverage is partially compensated by the example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies it is a read-only GET request to allowed Fintablo /v1 paths for data exploration. It distinguishes from sibling get_nzp by warning not to use results for final figures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when not to use the tool ('НЕ используйте результаты как основу для итоговой цифры') and points to the alternative get_nzp, providing clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nzpНезавершённое производство (НЗП) по сделкеA

Рассчитывает НЗП (незавершённое производство) по одной сделке по её коду, например «02-26/Б». Суммирует операции + обязательства + зарплату + зарплатные налоги по ОТКРЫТЫМ этапам, за вычетом НДС по каждой строке, на основе актуальных данных Fintablo. Слой зарплатных налогов — оценочный.

ParametersJSON Schema
NameRequiredDescriptionDefault
dealCodeYesКод сделки, например 02-26/Б

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It details the calculation components (operations, liabilities, salary, taxes on open stages, minus VAT) and notes the salary tax layer is estimated. This provides clear behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main verb and purpose, each sentence adds specific detail without redundancy. Very concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking output schema, the description explains the calculation sufficiently. The complexity is moderate with one parameter, and the description covers what the tool does and how it works, leaving only return format unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the tool description repeats the same example format. No additional semantic value beyond the schema is added, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool calculates WIP for a single transaction by its code, with an example format. It is specific and distinct from sibling tools which are generic list/get operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (for one deal's WIP) but does not explicitly state when not to use or compare with siblings. No alternative tools are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_categoriesСтатьи ОПиУC

Статьи ОПиУ, при необходимости отфильтрованные по pnlType.

ParametersJSON Schema
NameRequiredDescriptionDefault
pnlTypeNo

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It only states the basic operation without mentioning side effects, permissions, or any other traits. The agent gets little insight beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one line) and concise, but it sacrifices necessary detail. For a simple tool with one optional parameter, it is adequate but not optimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and parameter details, the description is incomplete. It explains the basic purpose but omits return behavior and any behavioral specifics, which is insufficient for full comprehension.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0%, but the description clarifies that the pnlType parameter is for filtering. This adds some meaning beyond the schema, but it does not specify format or possible values, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool lists categories ('Статьи ОПиУ') with optional filtering by pnlType. However, the verb is implicit and the purpose is somewhat vague without more context. It does not clearly distinguish from sibling tools like list_partner_groups, though the resource is different.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as list_partner_groups or list_partners. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_partner_groupsГруппы контрагентовC

Группы контрагентов.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides no behavioral details (e.g., authentication, pagination, performance). With no annotations, the description carries the full burden and fails to disclose any traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief but under-specified; it is concise but lacks any substantive information beyond the title, wasting the opportunity to provide useful content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description should at least state the scope or return format. It is incomplete and insufficient for an agent to understand full usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the schema coverage is 100%. Baseline for 0 parameters is 4, as no parameter information is needed. The description adds no value but is not required to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Группы контрагентов' repeats the title and does not specify the action 'list'. It is a tautology, providing no additional purpose beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus sibling tools like list_partners or list_categories. The description lacks context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_partnersКонтрагентыC

Справочник контрагентов.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only labels the tool as a 'directory'. It does not disclose whether the output is filtered, sorted, paginated, or any side effects. The burden falls entirely on the description, which fails to provide behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at three words (in Russian). It is front-loaded and contains no unnecessary text. However, it sacrifices informativeness for brevity, which is acceptable for a zero-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (no parameters, no annotations, no output schema), the description should at least hint at the output (e.g., list of partner names or IDs). It does not, leaving the agent without enough context about what the tool returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters; the schema coverage is trivially 100% (empty properties). Per guidelines, baseline is 4 since the description adds no necessary parameter information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Справочник контрагентов' (Directory of counterparties) indicates the resource but lacks an action verb like 'list' or 'get'. It is clear enough for a native speaker but does not explicitly state the operation, making it slightly ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus sibling tools (e.g., list_categories, list_partner_groups). The absence of any usage context or alternatives reduces clarity for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3/5.0
Disambiguation5/5

Each tool targets a distinct resource or operation: fintablo_get for raw data exploration, get_nzp for a specific calculation, and the three list_* tools for reference data. No two tools have overlapping purposes.

Naming Consistency3/5

Naming conventions are mixed: most tools use a verb_noun pattern (list_categories, list_partners, get_nzp), but fintablo_get uses a namespace prefix before the verb, breaking consistency. However, the patterns are still readable.

Tool Count5/5

With 5 tools, the set is well-scoped for a specialized financial data server. Each tool serves a clear purpose without being overwhelming or insufficient.

Completeness2/5

The tool surface lacks key operations for the domain, such as listing deals or transactions, creating/updating data, or other common calculations. This leaves significant gaps that could hinder an agent from fully accomplishing financial analysis tasks.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP and HTTP proxy server for accessing Monarch Money financial data, enabling transaction analysis, budget tracking, and cashflow insights through natural language.
    6
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for accessing Wallet by BudgetBakers financial data, allowing users to query accounts, transactions, categories, budgets, and more via natural language.
    10
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for programmatic read-only access to RiseUp cashflow data, allowing AI assistants to retrieve budget information via natural language.
    2
    154
    21
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server for querying public smallcase data (catalog, returns, risk metrics, stocks, mutual funds) via natural language. No API key required.
    8
    1
    MIT

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/OlegStanKoptev/fintablo-mcp'

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