mcp-fns-check
atomno-mcp-fns-check
用于通过俄罗斯联邦税务局 (FNS) 公开数据验证俄罗斯交易对手(法人实体和个体工商户)的 MCP 服务器:EGRUL/EGRIP、EFRSB、“透明商业”、FSSP、KAD。
可随时连接至 Claude Desktop、Cursor、Claude Code、Cline 以及任何其他兼容模型上下文协议 (MCP) 的客户端。
目的
AI 代理(Claude、Cursor 等)通常不了解俄罗斯的交易对手:EGRUL 未被搜索引擎正常索引,FNS“透明商业”中的数据位于 POST 请求和 CAPTCHA 之后,EFRSB 提供的是 HTML。此 MCP 服务器为代理提供了七个工具,通过这些工具,代理可以在一次调用中获得完整的概况:
身份信息:名称、地址、OKVED 代码、负责人。
存续状态:正常、清算中、破产、已注销、重组。
合作安全性:虚假地址、虚假负责人、取消资格、破产、税务债务、未提交报告、执行程序、仲裁案件。
主要工具 check_contractor(identifier) 接受 INN 或 OGRN,并返回带有结论(safe_to_proceed / manual_review_required / high_risk_do_not_proceed / impossible_contractor_defunct)的汇总报告以及具体的建议列表。
Related MCP server: mcp-egrul
快速入门
安装
pip install atomno-mcp-fns-check或通过 uv / pipx:
uv pip install atomno-mcp-fns-check
# или
pipx install atomno-mcp-fns-check验证运行
atomno-mcp-fns-check --version
# → atomno-mcp-fns-check 0.1.1
atomno-mcp-fns-check --help
# → полный список флагов: --transport / --host / --port / --log-level默认情况下,该包作为 stdio-MCP 服务器运行:代理通过 stdin/stdout JSON-RPC 与其通信。您无法直接从 shell 中“测试”它——请将其连接到 MCP 客户端。对于网络场景,可以使用带有 --host/--port 的 --transport {http,sse,streamable-http} 标志。
连接到 MCP 客户端
Cursor
编辑 mcp.json (Cursor → Settings → Cursor Settings → MCP):
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check"
}
}
}重启 Cursor。在聊天中询问:“检查交易对手 INN 7707083893”——代理将自动调用 check_contractor。
Claude Desktop
编辑 claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check"
}
}
}重启 Claude Desktop。
Claude Code (CLI)
claude mcp add fns-check atomno-mcp-fns-checkCline (VS Code)
在 cline_mcp_settings.json 中:
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check",
"disabled": false,
"autoApprove": []
}
}
}工具
工具 | 用途 | 输入 | 数据源 |
| 主要工具。 通过单个标识符进行全面检查 + 确定性结论和建议 |
| 全部 5 个 |
| EGRUL 基础卡片 |
| egrul.nalog.ru |
| 基于 OGRN/OGRNIP 的基础卡片 |
| egrul.nalog.ru |
| 带有丰富信息的生命周期状态 |
| EGRUL + EFRSB |
| 带有说明的 OKVED 代码 |
| EGRUL + OKVED-2 词典 |
| 当前负责人(+ 开放数据中的历史记录) |
| EGRUL |
| 8 项风险检查(4 项基础 + 4 项扩展) |
| 全部 5 个 |
使用的公共数据源:
egrul.nalog.ru — EGRUL/EGRIP,交易对手卡片。
bankrot.fedresurs.ru — EFRSB(联邦破产信息统一登记处)。
pb.nalog.ru — FNS 透明商业(税务债务、未提交报告)。
fssp.gov.ru — FSSP 执行程序数据库。
kad.arbitr.ru — 仲裁案件档案。
FNS 登记处的本地切片 — 虚假地址、虚假负责人、被取消资格人员(通过
atomno-mcp-fns-etl脚本从 FNS 开放数据加载)。
check_contractor 响应示例
{
"identifier": "7707083893",
"identifier_type": "inn",
"inn": "7707083893",
"ogrn": "1027700132195",
"card": {
"name": {"full": "ПАО СБЕРБАНК", "short": "СБЕРБАНК"},
"status": "active",
"address": {"full": "117997, Г.Москва, УЛ. ВАВИЛОВА, Д. 19", "is_mass_address": false},
"director": {"full_name": "Греф Г. О.", "position": "Президент"},
"okved_main": {"code": "64.19", "name": "Денежное посредничество прочее"}
},
"legal_status": {"status": "active", "status_label_ru": "Действующее", "sources_checked": ["egrul", "efrsb"]},
"risks": {"overall_risk_level": "low", "overall_risk_score": 0, "flags": [], "errors": []},
"verdict_action": "safe_to_proceed",
"verdict_reason_ru": "Статус «Действующее», уровень риска — low (score 0/100). Препятствий к заключению сделки по открытым источникам не найдено.",
"recommendations": [
"По открытым источникам препятствий к заключению сделки не обнаружено. Соблюдайте стандартные меры должной осмотрительности (ст. 54.1 НК РФ): копия устава, приказ на руководителя, договор."
],
"sources": {"sources_queried": ["efrsb", "egrul", "fssp", "kad", "pb_fns", "registries"]},
"tier": "open",
"checked_at": "2026-04-24T20:15:00Z"
}数据源故障处理
EGRUL 是唯一的 阻塞 (blocking) 数据源。如果它不可用,
check_contractor将引发SourceUnavailableError(代理将收到人类可读的消息)。其他数据源以 尽力而为 (best-effort) 方式混合:FSSP 上的 CAPTCHA、KAD 上的反机器人机制、pb.nalog.ru 上的 5xx 错误——所有这些都会被记录在
risks.errors[]中,且不会导致报告失败。顶层结论将变为manual_review_required。
配置
所有设置均通过环境变量进行。无需凭据(数据源为公开数据)。
变量 | 描述 | 默认值 |
| 卡片缓存 SQLite 文件路径 |
|
| 登记处 SQLite 文件路径(虚假地址/负责人/取消资格) |
|
| 缓存卡片的 TTL(小时) |
|
| HTTP 超时(秒) |
|
| HTTP 客户端 User-Agent |
|
| 日志级别 (DEBUG/INFO/WARNING/ERROR) |
|
模板为 .env.example。
FNS 本地登记处
虚假地址/负责人/被取消资格人员的登记处是 FNS 开放数据的 CSV/XML 导出文件。该包内置了一个小型种子 (registries_seed.json,合成测试记录)——足以让工具“开箱即用”并在测试 INN 上显示标志。
对于生产环境检查,请通过 CLI atomno-mcp-fns-etl 使用完整切片更新登记处:
atomno-mcp-fns-etl --registry mass_addresses --source ./fns_open_data/ulm.csv --commit
atomno-mcp-fns-etl --registry mass_directors --source ./fns_open_data/uchredt.csv --commit
atomno-mcp-fns-etl --registry disqualified --source ./fns_open_data/disqualified.csv --commit开放数据源:
mass_addresses→ nalog.gov.ru/opendata/7707329152-massreg/mass_directors→ nalog.gov.ru/opendata/7707329152-massuchredt/disqualified→ service.nalog.ru/disqualified.do
默认情况下,CLI 在 --dry-run 模式下运行(解析并打印样本);写入需要明确的 --commit。元字段 <registry>.last_etl、<registry>.last_etl_source、<registry>.last_etl_count 会自动保存——请使用它们进行数据新鲜度的 cron 监控。
开发
git clone https://github.com/atomno-labs/mcp-fns-check
cd mcp-fns-check
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv/Scripts/activate # Windows
pip install -e ".[dev]"
pytest -v --cov=src/atomno_mcp_fns_check测试中的外部 API 从不直接调用——仅通过 respx (httpx 模拟) + tests/fixtures/ 中的本地固定装置调用。
限制
没有负责人的历史记录 — FNS 不通过搜索 API 提供变更历史;完整历史将在加载 EGRUL 开放数据切片后出现(计划在 v0.5+ 中实现)。
FSSP / KAD 有时会阻止 CAPTCHA / 反机器人机制。在这种情况下,检查会落入
errors[],总结论变为manual_review_required。透明商业 仅提供事实(“有债务”/“未提交报告”),不提供金额。金额需要向税务局查询。
Pro-tier(atomno-mcp-fns-check-server 中的托管后端——闭源)通过以下方式消除了这些限制:24 小时 Redis 缓存、绕过 CAPTCHA 的代理轮换、完整的 EGRUL 开放数据切片、最多 100 个 INN 的批量检查、通过 LLM 进行 AI 总结。后端本身未发布。
安全与法律地位
所有数据源均为 FNS 及相关登记处的公开数据。根据第 149-FZ 号联邦法《关于信息、信息技术和信息保护》使用是合法的。
法人实体和个体工商户 不属于 第 152-FZ 号联邦法(关于个人数据)的范畴。
负责人个人的姓名由 FNS 在 EGRUL 中公开;在出站响应中,负责人个人的 INN 会被掩码处理(格式为
XXX*****YY)。不会对任何外部 API 进行写操作。
不需要任何凭据/令牌——数据源完全公开。
免责声明
本服务是 FNS 公开数据的聚合器和便捷接口。与俄罗斯联邦税务局、EFRSB、KAD、FSSP 无关联。使用风险自负。
服务响应中的信息 不能替代 全面的法律或财务评估。与交易对手签订合同的决定由您自行做出。
许可
MIT — 见 LICENSE。
链接
GitHub: atomno-labs/mcp-fns-check
更多 atomno 品牌的 MCP 服务器:atomno.ru 目录(即将推出)
MCP 规范: modelcontextprotocol.io
Available Tools
8 toolscheck_contractorA
Главный тул: полная проверка контрагента по одному идентификатору.
Принимает ИНН (10 цифр — юр.лицо, 12 — ИП/физлицо) или ОГРН (13 цифр — юр.лицо, 15 — ИП). Тип определяется строго по длине и контрольной цифре.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | ИНН (10/12 цифр) или ОГРН/ОГРНИП (13/15 цифр). Пример: '7707083893' (Сбербанк) или '1027700132195'. | |
| include_extended_risks | No | Запускать ли 4 расширенные проверки (Прозрачный бизнес, ФССП, КАД). По умолчанию True. | |
| lawsuits_threshold_rub | No | Порог фильтрации арбитражных дел в рублях. По умолчанию 1 000 000 ₽ — отсекает мелкие споры. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses identifier validation logic and parameter defaults (extended risks, lawsuit threshold), but does not elaborate on what the 'full check' entails, side effects, or authentication requirements. The output schema exists but is not referenced.
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 concise (three sentences) with the main purpose front-loaded. Every sentence adds critical information: identifier formats, validation, and parameter defaults. No redundant or vague phrasing.
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 output schema, return values are covered. The description sufficiently explains input validation and parameter behavior for a 3-param tool. It does not mention prerequisites (e.g., API keys) or how this tool relates to siblings beyond being the 'main' one, but overall it is adequate for agent invocation.
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?
With 100% schema coverage, the description adds significant value beyond the schema. It explains identifier format and validation rules, specifies what extended risks include (4 checks: transparent business, FSSP, KAD), and clarifies the lawsuit threshold filters small disputes. Default values are contextualized.
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 performs a full counterparty check using a single identifier (INN or OGRN). It specifies validation criteria (digit length, control digit) and implicitly differentiates from sibling tools (check_inn, check_ogrn) that only handle one identifier type.
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 advises when to use this tool (for a full check) and provides input validation rules. It does not explicitly state when to use alternatives or when not to use this tool, but the context of being the 'main tool' implies it is the default for comprehensive checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_for_red_flagsA
Агрегированный риск-чек по контрагенту (8 проверок, SPEC §3.5).
Базовые 4 проверки (всегда):
mass_address— массовый юр.адрес ФНС;mass_director— массовый руководитель (≥10 действующих компаний);disqualified_director— руководитель в реестре дисквалифицированных;bankruptcy_records— активные дела в ЕФРСБ.
Расширенные 4 проверки (include_extended=True):
tax_debts— индикатор задолженности по налогам (Прозрачный бизнес);no_reporting— нет налоговой отчётности > 1 года (Прозрачный бизнес);enforcement_proceedings— открытые исп.производства (Банк данных ФССП);active_lawsuits— активные арбитражные дела где контрагент ответчик (КАД), фильтр по сумме иска черезlawsuits_threshold_rub.
Любая внешняя проверка может вернуть ошибку (CAPTCHA, 5xx, timeout) — она
попадёт в errors[] и не сорвёт остальные проверки.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | Yes | ИНН контрагента (10 или 12 цифр). | |
| include_extended | No | запускать ли расширенные 4 проверки. По умолчанию True. | |
| lawsuits_threshold_rub | No | порог фильтра арбитражных дел в рублях. По умолчанию 1 000 000 ₽ (отсечь мелкие споры). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. Discloses possible errors (CAPTCHA, 5xx, timeout) and that errors are collected without failing other checks. Reveals behavioral traits beyond annotations.
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?
Well-structured with bullet points for readability, but slightly lengthy. Front-loaded with purpose. Could be slightly more 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?
Covers purpose, parameter details, error handling, and references SPEC. Output schema exists, so return values are handled. Adequate for a tool with 8 sub-checks and error handling.
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?
Input schema has 100% coverage, but description adds value by listing the specific checks controlled by include_extended and explaining the lawsuit filter threshold.
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?
Clearly states it performs a aggregated risk check with 8 checks, referencing SPEC §3.5. Differentiates from siblings like check_contractor, check_inn by being comprehensive.
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?
Explains basic vs extended checks with include_extended, and describes error handling. Does not explicitly contrast with sibling tools, but context is clear when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_innA
Полная карточка контрагента по ИНН (10 цифр — юр.лицо, 12 — ИП).
| Name | Required | Description | Default |
|---|---|---|---|
| inn | Yes | ИНН контрагента. Пример: '7707083893' (Сбербанк). | |
| include_extended | No | зарезервировано для S2.x (Прозрачный бизнес). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the output as a 'full card' but does not disclose behavioral traits such as auth requirements, rate limits, or side effects. The description adds minimal behavioral context beyond the input format.
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 a single, well-structured sentence that front-loads the main purpose. Every word adds value, with no filler. It is appropriately 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?
Given that an output schema exists, the description does not need to detail return values. However, the description is terse and does not specify what the 'full card' includes, leaving some ambiguity. It adequately covers the basic purpose but could be more comprehensive.
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%, so baseline is 3. The description adds meaningful context for the 'inn' parameter by specifying the digit length for legal entities vs IPs. For 'include_extended', it clarifies it is reserved for future use, adding value 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 clearly states the tool returns a full counterparty card by INN, and specifies the length distinction (10 digits for legal entities, 12 for individual entrepreneurs). This is a specific verb and resource, and it helps distinguish from sibling tools like check_ogrn (which checks OGRN).
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 usage for obtaining a counterparty card based on INN but does not explicitly state when to use this tool versus alternatives like check_contractor or check_for_red_flags. No when-not conditions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ogrnC
Карточка контрагента по ОГРН (13 цифр) или ОГРНИП (15 цифр).
| Name | Required | Description | Default |
|---|---|---|---|
| ogrn | Yes | ||
| include_extended | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose any behavioral traits, such as whether the operation is read-only, requires authentication, or has rate limits. The description only states what the tool does, not its side effects or safety profile.
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?
Single sentence that front-loads the purpose. No wasted words, but could be slightly more informative without losing conciseness.
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 output schema exists, return values need not be described. However, the description is minimal; it lacks context about the optional parameter and does not clarify the scope of 'counterparty card' relative to sibling tools.
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 coverage is 0%, so the description must compensate. It adds meaning to the 'ogrn' parameter by specifying digit length (13 or 15). However, it does not mention the 'include_extended' parameter, leaving it unexplained.
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 it returns a counterparty card by OGRN/OGRNIP, distinguishing it from siblings like check_inn which uses a different identifier. However, it doesn't elaborate on what the card contains, preventing a 5.
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 explicit guidance on when to use this tool versus alternatives like check_inn or check_contractor. The description only implies usage when an OGRN is available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directors_historyA
История смены руководителей и учредителей по ИНН.
На стадии S3 возвращает только текущего руководителя из egrul.nalog.ru плюс предупреждение о неполноте данных. Полная история (с датами назначения/увольнения) появится на стадии S5 после загрузки Open Data slice ЕГРЮЛ.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | Yes | ИНН контрагента (10 или 12 цифр). | |
| depth_years | No | на S3 не используется (история пока без дат). | |
| include_founders | No | на S3 не используется (ЕГРЮЛ-search не отдаёт учредителей). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses important behavioral traits: returns only current director at S3 with data incompleteness warning, and full history only at S5. Details about parameter non-usage at S3 add transparency. Doesn't mention auth or rate limits, but given no annotations, this is good.
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?
Three sentences with front-loaded purpose. No wasted words; each sentence provides distinct, necessary information (purpose, stage behavior, parameter notes).
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 3 parameters and existing output schema, the description covers stage-dependent behavior and parameter constraints. It doesn't detail output schema, but that's covered by the output schema itself. Sufficient for the complexity.
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 coverage is 100%, and the description adds value by noting that depth_years and include_founders are not effective at S3. This clarifies parameter behavior beyond the schema descriptions.
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?
Clearly states 'История смены руководителей и учредителей по ИНН' (History of changes of directors and founders by TIN), specifying the verb (get history) and resource (by TIN). This distinguishes it from sibling tools like check_inn or get_legal_status.
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?
Provides stage-specific behavior: at S3 returns only current director with a warning, full history at S5. Also explains that depth_years and include_founders are not used at S3. While it doesn't explicitly list when not to use or compare to siblings, it gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legal_statusB
Текущий жизненный статус: active / liquidating / bankruptcy / liquidated / reorganizing / excluded_inactive.
Минимум один из inn или ogrn обязателен.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | No | ||
| ogrn | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It lists possible output values, which is helpful, but it does not mention whether the tool is read-only, requires authentication, or has any side effects. There is no indication of error behavior if required parameters are missing.
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 with two sentences. The first sentence presents the output values upfront, and the second provides a critical usage requirement. No extraneous information is included.
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 output schema exists (context signals indicate it), the description does not leverage or reference it. It explains the return values but omits context about error handling, prerequisites (e.g., authentication), or how this tool fits into a workflow alongside siblings. The missing enforcement of the required parameter in the schema adds ambiguity.
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 0%, so the description must compensate. It only adds that at least one parameter is required, without explaining what 'inn' and 'ogrn' represent, their formats, or constraints. This minimal addition does not adequately compensate for the lack of schema descriptions.
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 tool name 'get_legal_status' combined with the description clearly indicates that the tool retrieves the current legal status from a list of enumerated values (active, liquidating, etc.). It is distinguishable from sibling tools like 'check_inn' and 'check_ogrn' which likely validate identifiers, and 'get_directors_history' which retrieves different data. However, the description does not explicitly contrast with these siblings.
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 states that at least one of 'inn' or 'ogrn' is required, which provides a key usage constraint. However, it does not explain when to use this tool versus alternatives such as 'check_inn' or 'check_for_red_flags'. The guideline is present but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_okvedsC
Перечень кодов ОКВЭД основной + дополнительные с расшифровкой по справочнику ОКВЭД-2.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | No | ||
| ogrn | No | ||
| include_history | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authorization needs, or rate limits. For a tool with no annotations, more behavioral context is needed.
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 a single short sentence, which is concise but omits essential information about inputs and usage. It is underspecified for a tool with multiple optional parameters.
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 param documentation and annotations, the description is insufficient. The output schema exists but the description does not cover input semantics or invocation requirements.
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 0%, and the description does not explain the purpose of any parameter (inn, ogrn, include_history). The agent cannot infer how to specify input correctly.
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 returns a list of OKVED codes with interpretations. However, it does not specify that the user must provide either INN or OGRN as input, which is crucial for clarity.
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 on when to use this tool versus siblings like check_inn or get_directors_history. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Диагностический тул: проверяет, что сервер запущен и доступен.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that the tool performs a read-only check without side effects. It is adequate for a ping tool; additional details like return type are covered by the output schema.
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?
Single sentence with no wasted words. Front-loaded purpose, efficient and structured.
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 tool's simplicity (no parameters, no side effects), the description is complete. Output schema exists to explain return values, so no further description needed.
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?
No parameters exist, so baseline score of 4 applies. Description adds no parameter info, but none is needed.
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 is a diagnostic tool that checks server availability, using specific verb 'проверяет' and resource 'сервер'. It distinguishes well from sibling tools which focus on business data.
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 usage for verifying server connectivity, which is distinct from siblings. However, it does not explicitly state when to use or when not to use, but the context is clear enough for a simple diagnostic tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.1- First observed
check_contractor - First observed
check_for_red_flags - First observed
check_inn - First observed
check_ogrn - First observed
get_directors_history - First observed
get_legal_status - First observed
get_okveds - First observed
ping
TDQS
Scored across 8 tools
Each tool targets a distinct aspect of contractor verification: comprehensive checks by identifier, risk flags, specific identifier lookups, director history, legal status, OKVED codes, and a diagnostic ping. No overlap in purpose.
Tools follow a consistent snake_case pattern with clear verb prefixes (check_, get_, ping). Minor deviation with 'check_for_red_flags' using 'for', but overall pattern is predictable.
8 tools is well-scoped for the domain of Russian contractor verification, covering all essential operations without being excessive or too sparse.
Covers core lifecycle: identifier validation, comprehensive checks, risk assessment, director history, legal status, and OKVED codes. Minor gaps like batch operations, but the main workflows are complete.
Maintenance
Related MCP Connectors
Russian company lookup (EGRUL/INN), Cyrillic search, RU page to Markdown. Pay per call in USDC.
Remote MCP server to enrich company profiles with structured B2B data and confidence scores.
MCP server for Russian books search, details, and recommendation candidates.
MCP server offering regulator-sourced legitimacy checks on investment entities by name or URL.
Related MCP Servers
- AlicenseAqualityBmaintenanceCentral Bank of Russia (CBR) data for AI agents — daily and historical currency rates, key rate, inflation, and macro statistics. Five typed MCP tools, in-memory TTL cache, MIT-licensed, no API key required.5104 PyPI1MIT
- AlicenseAqualityBmaintenanceMCP server for the Russian state registries EGRUL (legal entities) and EGRIP (individual entrepreneurs), built on official Federal Tax Service open-data dumps. Self-hosted via local SQLite.898 PyPI1MIT
- AlicenseAqualityBmaintenanceMCP server that provides 31 tools for the DaData API, enabling address autocomplete, company lookup, bank details, phone/email/passport validation, car recognition, geocoding, and reference directory queries.3113 npm3MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for verifying Polish business entities from the National Court Register (KRS) and VAT White List. Allows querying by KRS, NIP, or REGON to retrieve official company data including name, address, board, and capital.Apache 2.0