fintablo-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fintablo-mcpCalculate the work-in-progress for deal code 12345"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fintablo-mcp
Только для чтения MCP-сервер поверх API Fintablo. Задайте финансовый вопрос на естественном языке — сервер вычисляет ответ в коде на основе актуальных данных API: без ручных выгрузок и устаревших срезов.
Главный инструмент: get_nzp — незавершённое производство (НЗП) по сделке, восстановленное из примитивов API и сверенное с собственной цифрой Fintablo.
Только чтение по умолчанию. В клиенте нет ни одного метода записи. Fintablo не получает от этого сервера никаких изменений — независимо от того, о чём попросили модель.
Формула НЗП
Расходы привязываются к этапам сделки, а не к сделке целиком. Открытые этапы (без даты акта) → НЗП; этапы, закрытые актом, → списаны. Для каждого открытого этапа — четыре слоя:
НЗП = Σ по открытым этапам [ операции + обязательства + зарплата + зарплатные налоги ]Слой | Источник | Нюанс |
операции | прямые списания по этапу ( | сумма берётся из поля |
обязательства | все обязательства по этапу ( | считаются целиком, даже если ещё не подписаны актом; поле |
зарплата | сдельная зарплата по этапу ( | сумма из поля |
зарплатные налоги | НДФЛ + взносы | оценка — пропорционально зарплате (см. ниже) |
Выручка и «списано» сходятся к 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 для исследования (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), а не вложенным массивом.Пагинация различается:
/transaction—page+pageSize(до 1000),/deal—page(по 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 toolsfintablo_getПрямой GET-запрос к FintabloA
GET-запрос только для чтения к разрешённому пути Fintablo /v1 для исследования данных. НЕ используйте результаты как основу для итоговой цифры — для этого есть get_nzp.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | например, /deal или /transaction | |
| query | No |
TDQS
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.
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.
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.
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.
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.
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. Слой зарплатных налогов — оценочный.
| Name | Required | Description | Default |
|---|---|---|---|
| dealCode | Yes | Код сделки, например 02-26/Б |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pnlType | No |
TDQS
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.
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.
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.
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.
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.
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
Группы контрагентов.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
Справочник контрагентов.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
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 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.
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.
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
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
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
MCP server for querying Forkast documentation
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- AlicenseAqualityDmaintenanceRead-only MCP and HTTP proxy server for accessing Monarch Money financial data, enabling transaction analysis, budget tracking, and cashflow insights through natural language.6MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for accessing Wallet by BudgetBakers financial data, allowing users to query accounts, transactions, categories, budgets, and more via natural language.10MIT

RiseUp MCP Serverofficial
AlicenseAqualityCmaintenanceMCP server for programmatic read-only access to RiseUp cashflow data, allowing AI assistants to retrieve budget information via natural language.215421MIT- AlicenseAqualityAmaintenanceRead-only MCP server for querying public smallcase data (catalog, returns, risk metrics, stocks, mutual funds) via natural language. No API key required.81MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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