Skip to main content
Glama
kaylum54

companies-house-screening-mcp

by kaylum54

companies-house-screening-mcp

Проверяйте британские компании по публичному реестру Companies House из MCP-хоста. Пакетная проверка списка поставщиков, мгновенные снимки компании одним вызовом и фактические сигналы вместо оценки риска.

Статус: этап 6 из 6. Одиннадцать инструментов, документация, генерируемая из работающего сервера и проверяемая в CI, эвал выбора инструментов и фикстуры, записанные с живого API. Пайплайн релиза построен; ещё не опубликован.

Есть ещё один проект, и вам стоит о нём знать

companies-house-mcp от @aicayzer существует с июля 2025 года, находится на версии v4.0.0 и активно поддерживается. Он покрывает тот же API. Этот проект не первый и не претендует на это.

Они устроены по-разному, так что выбор зависит от ваших задач.

Используйте их, если вам нужна широта. Он открывает больше API — реестры, освобождения, британские представительства, дисквалификации должностных лиц — и, что важно, он умеет скачивать сами поданные документы. Этот проект намеренно этого не делает: API документов Companies House здесь вне области действия.

Используйте этот, если вы проверяете, а не просматриваете. Различия, которые имеют значение:

Пакетная проверка

screen_companies принимает до 50 названий или номеров и возвращает по одной строке на каждую. Больше нигде такого нет.

Никогда не угадывает номер компании

Инструменты поиска отказываются от названия компании сразу, до любого запроса. Получив название, модель выдаёт номер, который выглядит правдоподобно, и правдоподобный неверный номер возвращает другую реальную компанию, которую ничто ниже по конвейеру не пометит как ошибку. ADR 5.

Сигналы, а не оценки

Факты, прочитанные из реестра, с датой или именем за каждым, и намеренно без рейтинга. Аргументация в ADR 7.

Ничего не теряется молча

Частичные результаты помечаются; таблица проверки, вернувшаяся неполной, всегда объясняет почему. ADR 8.

Документация, которая не может устареть

Справочник инструментов генерируется из работающего сервера, и каждый пример выполняется; CI падает, если что-то из этого расходится. ADR 9.

Эвал выбора инструментов

Спрашивает реальную модель, к какому инструменту она тянется, и падает на нестабильности. ADR 10.

Одиннадцать решений описаны в docs/adr, включая те, что пошли не очевидным путём.

Установка

npx -y companies-house-screening-mcp

Конфигурация хоста:

{
  "mcpServers": {
    "companies-house": {
      "command": "npx",
      "args": ["-y", "companies-house-screening-mcp"],
      "env": { "COMPANIES_HOUSE_API_KEY": "your_key" }
    }
  }
}

Или с Docker — обратите внимание на -i и отсутствие -t, потому что TTY портит JSON-RPC-кадрирование:

docker run --rm -i -e COMPANIES_HOUSE_API_KEY=your_key ghcr.io/OWNER/companies-house-screening-mcp

Получите бесплатный ключ API на developer.company-information.service.gov.uk: зарегистрируйтесь, создайте приложение в среде Live и создайте ключ типа REST (ключ потока аутентифицируется так же, но предназначен для другого сервиса).

Зачем ещё одна обёртка над API

Очевидный способ построить это — один MCP-инструмент на эндпоинт. Двадцать два тонких прокси, работа на выходные — и именно так устроено большинство опубликованных MCP-серверов. Это плохо по трём конкретным причинам:

  • Каждая схема инструмента находится в контексте модели на каждом ходу, независимо от того, нужна ли она для задачи.

  • Это перекладывает оркестрацию на модель. «Безопасно ли онбордить этого поставщика» превращается в поиск, затем профиль, затем должностных лиц, затем обременения, затем банкротство — пять кругов и пять шансов потерять нить.

  • Полезные нагрузки Companies House несут структуру, которую ни одна модель не читает — links, etag, kind, ETag'и на каждый элемент, массивы поданных транзакций, объекты адресов с девятью ключами. Упрощение экономит от 36% до 72% в зависимости от эндпоинта, измерено на реальных записанных ответах, а не на предположениях (npm run measure).

Поэтому этот сервер предоставляет одиннадцать инструментов, сформированных вокруг вопросов, два из которых (company_snapshot и screen_companies) выполняют разветвление на стороне сервера и возвращают один производный объект. Инструменты поиска принимают номер компании и отказываются от названия, потому что, получив название, модель угадает номер, а правдоподобный неверный номер компании возвращает реальную компанию, которую ничто ниже по конвейеру не помечает как ошибочную.

Инструменты

Инструмент

Возвращает

find_company

Ранжированных кандидатов по названию или номеру, с флагом disambiguation_needed.

find_officer

Кандидатные ID должностных лиц по имени человека, с количеством назначений.

get_company

Профиль плюс производные флаги для просроченных отчётов, обременений, банкротства и недавней регистрации.

get_officers

Текущих и ушедших должностных лиц, каждое с ID, необходимым для поиска их других компаний.

get_filing_history

Что и когда было подано, с фильтром по категории.

get_charges

Обеспеченный долг, с производным outstanding_count, который API никогда не сообщает.

get_psc

Кто на самом деле контролирует компанию и как этот контроль осуществляется.

get_insolvency

Дела о банкротстве и назначенных практиков.

get_officer_appointments

Каждую компанию, в которой состоит должностное лицо — инструмент проверки конфликта интересов.

company_snapshot

Профиль, должностных лиц, обременения и банкротство одним вызовом, с сигналами.

screen_companies

До 50 компаний на входе, по одной строке на выходе, ничего не теряется молча.

Полный справочник: docs/tools. Рабочие примеры: docs/recipes — проверка поставщиков, проверка конфликтов директоров, верификация счетов, риск дебитора, наблюдение за отчётностью конкурентов.

Сигналы — это факты, а не рейтинг. Этот сервер не оценивает компании и не скажет вам, безопасно ли с ними торговать — он сообщает, что нашёл в реестре, с датой или именем за каждым наблюдением, и оставляет суждение человеку, у которого есть контекст. Пустой список сигналов означает, что в списке ничего не найдено, а не то, что компания надёжна. ADR 7 содержит полную аргументацию.

Каждый инструмент аннотирован readOnlyHint: true, публикует схему вывода и принимает verbose, чтобы вернуть нетронутую полезную нагрузку вместе с упрощённой.

Под капотом

Компонент

Что делает

loadConfig

Проверяет каждую переменную окружения при запуске и сообщает обо всех проблемах сразу, называя переменную, а не внутреннее поле.

CompaniesHouseClient

Запросы с базовой аутентификацией, таймаут на запрос, повтор с джиттером на 429 и 5xx, условная ревалидация, запасной вариант stale-on-failure.

RateLimiter

Скользящее окно, рассчитанное на документированные 600 за пять минут, с запасом прочности и сериализованным получением.

ResponseCache

Память поверх диска, TTL по типу ресурса, атомарная запись, повреждённые записи считаются промахом.

CompaniesHouseError

Каждый сбой несёт стабильный код, простую фразу и следующий шаг.

Проекции

Верхний уровень читается защитно, поле за полем; вывод строго валидируется по опубликованной схеме.

284 теста, без сети, для запуска не требуется ключ API.

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

Требуется только одна переменная.

Переменная

По умолчанию

Примечания

COMPANIES_HOUSE_API_KEY

Обязательный. Создайте REST API-ключ на портале разработчика. Это ключ не для потокового API.

CH_API_BASE_URL

https://api.company-information.service.gov.uk

Можно переопределить для прокси.

CH_RATE_LIMIT

600

Запросов за окно. Уменьшите значение, если ключ используется совместно с другим процессом.

CH_RATE_WINDOW_MS

300000

Пять минут.

CH_RATE_SAFETY_MARGIN

0.95

Доля бюджета, которую использует этот процесс.

CH_CACHE_ENABLED

true

CH_CACHE_DIR

системная папка кэша

Учитывает XDG_CACHE_HOME и LOCALAPPDATA.

CH_TIMEOUT_MS

10000

На один запрос.

CH_MAX_RETRIES

3

Повторные попытки после первой.

CH_LOG_LEVEL

info

error, warn, info или debug. Логи выводятся в stderr.

CH_ENV_FILE

Абсолютный путь к файлу .env, который будет читать сервер. По умолчанию намеренно не задан.

Development

npm install
npm test
npm run typecheck
npm run build
npm run docs:generate

Документация генерируется и проверяется CI. docs/tools рендерится из работающего сервера через реального MCP-клиента, а каждый вызов из docs/recipes выполняется при сборке страниц. npm run docs:check завершается ошибкой, если закоммиченное отличается; CI запускает его перед тестами, а тестовый набор выполняет ту же сверку, так что сбой приходит, пока вы ещё держите изменения перед глазами. Изменили описание инструмента — перегенерируйте, иначе сборка покраснеет.

Тестовый набор работает офлайн на фикстурах, записанных с живого API Companies House, так что свежий клон работает без какой-либо настройки. npm run record-fixtures перезаписывает их — см. tests/fixtures/README.md: от каких компаний они взяты и почему выбраны именно они.

Когда получите ключ, скопируйте .env.example в .env и заполните его:

npm run test:live

Каждая команда разработки читает этот файл. Всё, что уже задано в вашем окружении, имеет приоритет. Опубликованный сервер не читает .env, если только CH_ENV_FILE не указывает на нужный файл: хост запускает его в рабочей директории хоста, и подхватить случайный лежащий рядом .env — верный способ загрузить чужие учётные данные.

Этот тест запускается по ночам в CI. Его задача — не пройти, а громко упасть в ту неделю, когда Companies House изменяет какое-то поле, чтобы фикстуры обновились раньше, чем расхождение заметит пользователь.

The tool-selection eval

Каждый тест в этом репозитории отвечает на вопрос: работает ли инструмент. Но ни один из них не может ответить, потянется ли модель к правильному инструменту, когда человек задаёт реальный вопрос: инструмент может быть правильным, быстрым и полностью покрытым тестами и всё равно так и не быть выбранным, потому что его описание расплывчато или пересекается с другим. Это самый частый реальный дефект опубликованных MCP-серверов.

npm run eval -- --repeat 3

Прогон выполняется через OpenRouter или Anthropic API — задайте OPENROUTER_API_KEY или ANTHROPIC_API_KEY. По умолчанию используется z-ai/glm-5.2 на OpenRouter, примерно 4p за полный прогон: оценку, которую никто не запускает из-за цены, смысла нет. Для сравнения укажите --model любую другую модель с поддержкой инструментов.

Четырнадцать вопросов, сформулированных как их сформулировал бы человек. Оценивается: какой инструмент был вызван первым, не коснулась ли модель запрещённого инструмента, верны ли аргументы и — это самое главное — не выдумала ли модель номер компании, которого не было в вопросе. Случай, прошедший два прогона из трёх, помечается как флаки и падает в тесте: непостоянный выбор означает, что два описания пересекаются.

При прогоне на трёх моделях (GLM 5.2, Kimi K3, DeepSeek V4 Pro) результат — 93–98%. Группа grounding-запросов — дано название компании и нет номера, нужно искать, а не угадывать по памяти — проходит 7/7 на всех трёх. Сбои группировались: три из них оказались дефектами в моих собственных описаниях инструментов и один — в самой оценке, а не в какой-либо модели.

Ключ Companies House не нужен; ничего не выполняется. Полное сравнение и результаты — в evals/README.md, обоснование — в [opened in ADR 10.

Design notes

Одиннадцать решений описаны в docs/adr:

  1. Запись архитектурных решений

  2. Ограничитель частоты запросов со скользящим окном и его запас прочности

  3. Ошибки как данные, а не исключения

  4. Кэширование, TTL и запасной вариант при устаревших данных

  5. Инструменты в форме вопроса и почему одно название отклоняется

  6. Зачем результат отдаётся дважды

  7. Сигналы, а не баллы

  8. Частичные результаты и честность о бюджете, ничего не теряется тихо

  9. Генерируемая документация, закрытая в CI

  10. Оценка выбора инструментов

  11. Релизы по тегам, с подписью происхождения (provenance)

Scope

Только чтение, навсегда. Каждый инструмент помечен readOnlyHint: true, пути записи нет. Companies House filing API, который подаёт документы от имени компании, — это другой продукт с другим профилем риска и вне рамок этого. Потоковый API тоже вне рамок. Получение PDF или iXBRL документа через document API — фаза 7 и тоже останется только на чтение.

Roadmap

Фаза

Содержание

Статус

1

Клиент, аутентификация, ограничитель частоты, кэш, маппинг ошибок, фикстуры

Готово

2

Девять примитивных инструментов со схемами Zod и нужными проекциями

Готово

3

company_snapshot и screen_companies

Готово

4

Сгенерированная документация по инструментам с CI-проверкой расхождений, пять готовых рецептов

Готово

5

Набор для оценки выбора инструментов, живой smoke-тест в CI, оставшиеся ADR

Готово

6

npm и Docker-релиз с подтверждением происхождения (provenance)

Пайплайн построен, ещё не выпущен

Лицензия

Исходный код: MIT.

Данные, возвращаемые этим сервером, публикуются Companies House под лицензией Open Government Licence v3.0: и не покрываются лицензией MIT. Если вы распространяете их дальше, сохраняйте атрибуцию, которую требует OGL:

Содержит информацию государственного сектора по лицензии Open Government Licence v3.0.

Этот проект не аффилирован с Companies House и не одобрен им.

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • Companies House MCP — UK statutory company registry (BYO key)

  • Remote MCP server to enrich company profiles with structured B2B data and confidence scores.

  • Company intelligence via UK Companies House and risk screening across 386 risk data sources.

View all MCP Connectors

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/kaylum54/companies-house-screening-mcp'

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