Skip to main content
Glama

Flexible Key-Value Extracting MCP Server

Гибкий сервер MCP для извлечения пар «ключ-значение»

Версия: 0.3.1

Этот сервер MCP извлекает пары ключ-значение из произвольного, зашумленного или неструктурированного текста с помощью LLM (GPT-4.1-mini) и pydantic-ai. Он обеспечивает безопасность типов и поддерживает несколько форматов вывода (JSON, YAML, TOML). Сервер устойчив к любым входным данным и всегда пытается максимально структурировать данные, однако идеальное извлечение не гарантируется .


🤔💡 Зачем использовать этот MCP-сервер?

В то время как многие службы Large Language Model (LLM) предлагают возможности структурированного вывода, этот сервер MCP обеспечивает явные преимущества для извлечения ключевого значения, особенно из сложного реального текста:

  • 🔑🔍 Автоматическое обнаружение ключей : основная сила заключается в его способности автономно идентифицировать и извлекать соответствующие пары ключ-значение из неструктурированного текста без необходимости предопределенных ключей . В то время как типичные структурированные выходные данные LLM требуют указания искомых ключей, этот сервер обнаруживает их, что делает его высокоэффективным для разнообразных и непредсказуемых данных, где структура заранее неизвестна.
  • 💪🧱 Превосходная надежность для сложных входных данных : он отлично справляется с произвольным, шумным или неструктурированным текстом, где стандартные структурированные выходные данные LLM могут давать сбои. Многоступенчатый конвейер специально разработан для просеивания и осмысления несовершенных данных.
  • 🌐🗣️ Расширенная многоязычная предварительная обработка : перед обработкой LLM используется spaCy для распознавания именованных сущностей (NER) на японском, английском и китайском (упрощенном/традиционном) языках, что значительно повышает точность извлечения для этих языков за счет предоставления фраз-кандидатов с богатым контекстом.
  • 🔄✍️ Итеративное уточнение и типизация : в отличие от однопроходного извлечения, этот сервер использует сложный конвейер, включающий аннотацию типа на основе LLM, оценку типа на основе LLM и нормализацию на основе правил/LLM-fallback. Это обеспечивает более точные и контекстно соответствующие типы данных.
  • ✅🛡️ Гарантированная безопасность типов и соответствие схеме : окончательное структурирование с помощью Pydantic гарантирует, что выходные данные не только структурированы, но и безопасны с точки зрения типов, а также проверены на соответствие определенной схеме, предоставляя надежные данные для последующих приложений.
  • 📊⚙️ Последовательный и предсказуемый вывод : сервер всегда возвращает правильно сформированный ответ, даже если извлечение выполнено частично или возникают проблемы, что имеет решающее значение для создания надежных автоматизированных систем.

Заметки о выпуске

v0.3.1

  • Обновление: улучшена подсказка по оценке типа для надежного исправления.
  • Обновление: Добавлена сильная сторона этого сервера MCP в README.md

v0.2.0

  • Исправление: языковой код для zh-cn / zh-tw.

v0.1.0

  • Первоначальный выпуск

Инструменты

  • /extract_json : Извлекает типобезопасные пары ключ-значение в формате JSON из входного текста.
  • /extract_yaml : Извлекает типобезопасные пары ключ-значение в формате YAML из входного текста.
  • /extract_toml : Извлекает типобезопасные пары ключ-значение в формате TOML из входного текста.
    • Примечание: Из-за спецификаций TOML массивы объектов (dicts) или глубоко вложенные структуры не могут быть представлены напрямую. Подробности см. в разделе «Примечание об ограничениях вывода TOML» ниже.

Примечание:

  • Поддерживаемые языки: японский, английский и китайский (упрощенный: zh-cn / традиционный: zh-tw).
  • Извлечение основано на pydantic-ai и LLM. Идеальное извлечение не гарантируется.
  • Более длинные вводные предложения займут больше времени для обработки. Пожалуйста, будьте терпеливы.
  • При первом запуске сервер загрузит модели spaCy, поэтому изначально процесс займет больше времени.

Расчетное время обработки образца

Входные токеныВводимые символы (приблизительно)Измеренное время обработки (сек)Конфигурация модели
200~400~15gpt-4.1-мини

Фактическое время обработки может значительно варьироваться в зависимости от ответа API, состояния сети и нагрузки модели. Даже короткие тексты могут занять 15 секунд и более.

Функции

  • Гибкое извлечение : обрабатывает любые входные данные, включая зашумленные или поврежденные данные.
  • Полная поддержка JP / EN / ZH-CN / ZH-TW : предварительная обработка с помощью spaCy NER путем автоматического определения языка (поддерживаются японский, английский, китайский [упрощенный: zh-cn / традиционный: zh-tw]; другие отклоняются с ошибкой).
  • Типобезопасный вывод : использует Pydantic для проверки вывода.
  • Несколько форматов : возвращает результаты в формате JSON, YAML или TOML.
  • Надежная обработка ошибок : всегда возвращает правильно сформированный ответ, даже в случае возникновения ошибки.
  • Высокая точность : использует GPT-4.1-mini как для извлечения/аннотирования, так и для оценки типов, а также Pydantic для окончательного структурирования.

Проверенные сценарии

Сервер был протестирован с различными входными данными, включая:

  • Простые пары ключ-значение
  • Шумный или неструктурированный текст, в котором скрыта важная информация
  • Различные форматы данных (JSON, YAML, TOML) для вывода

Поток обработки

Ниже представлена блок-схема, представляющая поток обработки конвейера извлечения ключей и значений, реализованного в server.py :

Предварительная обработка с помощью spaCy (многоязычный NER)

Этот сервер использует spaCy с автоматическим определением языка для извлечения именованных сущностей из входного текста перед его передачей в LLM. Поддерживаемые языки: японский ( ja_core_news_md ), английский ( en_core_web_sm ) и китайский (упрощенный/традиционный, zh_core_web_sm ).

  • Язык вводимого текста автоматически определяется с помощью langdetect .
  • Если обнаруженный язык не является японским, английским или китайским, сервер возвращает ошибку: Unsupported lang detected .
  • Соответствующая модель spaCy автоматически скачивается и загружается по мере необходимости. Ручная установка не требуется.
  • Изв��еченный список фраз включается в приглашение LLM следующим образом:

    [Предварительная обработка фраз-кандидатов (spaCy NER)] Ниже приведен список фраз, автоматически извлеченных из входного текста с использованием обнаруженной языковой модели spaCy. Эти фразы представляют обнаруженные сущности, такие как имена, даты, организации, местоположения, числа и т. д. Этот список предназначен только для справки и может содержать нерелевантные или неверные элементы. LLM использует собственное суждение и рассматривает весь входной текст, чтобы гибко вывести наиболее подходящие пары ключ-значение.

Подробности шага

Конвейер извлечения ключ-значение этого проекта состоит из нескольких шагов. Подробности каждого шага следующие:

Шаг 0: Предварительная обработка с помощью spaCy (Определение языка → Распознавание именованных сущностей)

  • Назначение : Автоматически определять язык входного текста и использовать соответствующую модель spaCy (например, ja_core_news_md , en_core_web_sm , zh_core_web_sm ) для извлечения именованных сущностей.
  • Вывод : Извлеченный список фраз, который включается в подсказку LLM в качестве подсказки для повышения точности извлечения пар ключ-значение.

Шаг 1: Извлечение ключ-значение (LLM)

  • Назначение : использование GPT-4.1-mini для извлечения пар ключ-значение из входного текста и извлеченного списка фраз.
  • Подробности :
    • Подсказка содержит инструкции по возврату значений в формате списка, если один и тот же ключ встречается несколько раз.
    • Несколько примеров предназначены для включения выводов в виде списка.
  • Вывод : Пример: key: person, value: ["Tanaka", "Sato"]

Шаг 2: Тип аннотации (LLM)

  • Назначение : использовать GPT-4.1-mini для определения типа данных (int, str, bool, list и т. д.) каждой пары ключ-значение, извлеченной на шаге 1.
  • Подробности :
    • Подсказка аннотации типа включает инструкции по поддержке списков и множественных значений.
  • Вывод : Пример: key: person, value: ["Tanaka", "Sato"] -> list[str]

Шаг 3: Оценка типа (LLM)

  • Цель : использовать GPT-4.1-mini для оценки и исправления аннотаций типов из шага 2.
  • Подробности :
    • Для каждой пары «ключ-значение» GPT-4.1-mini повторно оценивает допустимость и контекст аннотации типа.
    • При обнаружении ошибок или неоднозначностей типа GPT-4.1-mini автоматически исправляет или дополняет тип.
    • Пример: Исправление значения, извлеченного как число, но должно быть строкой, или определение того, является ли значение списком или отдельным значением.
  • Вывод : список пар ключ-значение с оценкой типа.

Шаг 4: Нормализация типов (статические правила + резервный вариант LLM)

  • Назначение : Преобразовать данные с оцененным типом в стандартные типы Python (int, float, bool, str, list, None и т. д.).
  • Подробности :
    • Применяйте правила статической нормализации (регулярные выражения или функции преобразования типов) для преобразования значений в стандартные типы Python.
    • Пример: преобразование значений, разделенных запятыми, в списки, «истина»/«ложь» в логические значения или выражений дат в стандартные форматы.
    • Если статические правила не могут преобразовать значение, используйте резервное преобразование типов на основе LLM.
    • Неконвертируемые значения безопасно обрабатываются как None или str.
  • Вывод : список пар ключ-значение, нормализованный по типу Python.

Шаг 5: Окончательное структурирование с помощью Pydantic

  • Цель : Проверка и структурирование нормализованных по типу данных с использованием моделей Pydantic (KVOut/KVPayload).
  • Подробности :
    • Сопоставьте каждую пару «ключ-значение» с моделями Pydantic, гарантируя безопасность типов и целостность данных.
    • Проверяйте отдельные значения, списки, значения null и составные типы в соответствии со схемой.
    • Если проверка не пройдена, прикрепите информацию об ошибке, сохранив как можно больше данных.
    • Окончательный вывод возвращается в указанном формате (JSON, YAML или TOML).
  • Вывод : типобезопасный и проверенный словарь или указанный формат вывода (JSON/YAML/TOML).

Этот конвейер разработан с учетом поддержки будущих форматов списков и расширений схемы Pydantic.

Примечание об ограничениях вывода TOML

  • В TOML простые массивы (например, items = ["A", "B"] ) могут быть представлены изначально, но массивы объектов (dicts) или глубоко вложенные структуры не могут быть представлены напрямую из-за спецификаций TOML.
  • Поэтому сложные списки или вложенные структуры (например, [{"name": "A"}, {"name": "B"}] ) хранятся как "строки JSON" в значениях TOML.
  • Это решение было принято для предотвращения потери информации из-за ограничений спецификации TOML.
  • Форматы YAML и JSON могут представлять вложенные структуры «как есть».

Пример ввода/вывода

Вход:

Thank you for your order (Order Number: ORD-98765). Product: High-Performance Laptop, Price: 89,800 JPY (tax excluded), Delivery: May 15-17. Shipping address: 1-2-3 Shinjuku, Shinjuku-ku, Tokyo, Apartment 101. Phone: 090-1234-5678. Payment: Credit Card (VISA, last 4 digits: 1234). For changes, contact support@example.com.

Вывод (JSON):

{ "order_number": "ORD-98765", "product_name": "High-Performance Laptop", "price": 89800, "price_currency": "JPY", "tax_excluded": true, "delivery_start_date": "20240515", "delivery_end_date": "20240517", "shipping_address": "1-2-3 Shinjuku, Shinjuku-ku, Tokyo, Apartment 101", "phone_number": "090-1234-5678", "payment_method": "Credit Card", "card_type": "VISA", "card_last4": "1234", "customer_support_email": "support@example.com" }

Вывод (YAML):

order_number: ORD-98765 product_name: High-Performance Laptop price: 89800 price_currency: JPY tax_excluded: true delivery_start_date: '20240515' delivery_end_date: '20240517' shipping_address: 1-2-3 Shinjuku, Shinjuku-ku, Tokyo, Apartment 101 phone_number: 090-1234-5678 payment_method: Credit Card card_type: VISA card_last4: '1234' customer_support_email: support@example.com

Вывод (TOML, простой случай):

order_number = "ORD-98765" product_name = "High-Performance Laptop" price = 89800 price_currency = "JPY" tax_excluded = true delivery_start_date = "20240515" delivery_end_date = "20240517" shipping_address = "1-2-3 Shinjuku, Shinjuku-ku, Tokyo, Apartment 101" phone_number = "090-1234-5678" payment_method = "Credit Card" card_type = "VISA" card_last4 = "1234"

Вывод (TOML, сложный случай):

items = '[{"name": "A", "qty": 2}, {"name": "B", "qty": 5}]' addresses = '[{"city": "Tokyo", "zip": "160-0022"}, {"city": "Osaka", "zip": "530-0001"}]'

Примечание: Массивы объектов или вложенные структуры хранятся в виде строк JSON в TOML.

Инструменты

1. extract_json

  • Описание : Извлекает пары «ключ-значение» из произвольного зашумленного текста и возвращает их в виде типобезопасного JSON (словарь Python).
  • Аргументы :
    • input_text (string): Входная строка, содержащая зашумленные или неструктурированные данные.
  • Возвращает : { "success": True, "result": ... } или { "success": False, "error": ... }
  • Пример :
    { "success": true, "result": { "foo": 1, "bar": "baz" } }

2. extract_yaml

  • Описание : Извлекает пары «ключ-значение» из произвольного зашумленного текста и возвращает их в виде типобезопасного YAML (строки).
  • Аргументы :
    • input_text (string): Входная строка, содержащая зашумленные или неструктурированные данные.
  • Возвращает : { "success": True, "result": ... } или { "success": False, "error": ... }
  • Пример :
    { "success": true, "result": "foo: 1\nbar: baz" }

3. extract_toml

  • Описание : Извлекает пары «ключ-значение» из произвольного зашумленного текста и возвращает их в виде типобезопасного TOML (строки).
  • Аргументы :
    • input_text (string): Входная строка, содержащая зашумленные или неструктурированные данные.
  • Возвращает : { "success": True, "result": ... } или { "success": False, "error": ... }
  • Пример :
    { "success": true, "result": "foo = 1\nbar = \"baz\"" }

Использование

Установка через Smithery

Чтобы автоматически установить kv-extractor-mcp-server для Claude Desktop через Smithery :

npx -y @smithery/cli install @KunihiroS/kv-extractor-mcp-server --client claude

Требования

  • Питон 3.9+
  • Ключ API для моделей OpenAI (устанавливается в settings.json в env )

Запуск сервера

python server.py

На случай, если вы хотите запустить сервер вручную.

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

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

  • --log=off : Отключить все журналы (журналы не пишутся)
  • --log=on --logfile=/absolute/path/to/logfile.log : Включить ведение журнала и записывать журналы в указанный абсолютный путь к файлу
  • Оба аргумента требуются , если включено ведение журнала. Сервер выйдет с ошибкой, если один из них отсутствует, путь не абсолютный или если указаны недопустимые значения.

Пример: ведение журнала отключено

"kv-extractor-mcp-server": { "command": "pipx", "args": ["run", "kv-extractor-mcp-server", "--log=off"], "env": { "OPENAI_API_KEY": "{apikey}" } }

Пример: Ведение журнала включено (требуется абсолютный путь к файлу журнала)

"kv-extractor-mcp-server": { "command": "pipx", "args": ["run", "kv-extractor-mcp-server", "--log=on", "--logfile=/workspace/logs/kv-extractor-mcp-server.log"], "env": { "OPENAI_API_KEY": "{apikey}" } }

Примечание:

  • Если включено ведение журнала, журналы записываются только по указанному абсолютному пути к файлу. Относительные пути или пропуск --logfile приведут к ошибке.
  • Если ведение журнала отключено, журналы не выводятся.
  • Если требуемые аргументы отсутствуют или недействительны, сервер не запустится и выведет сообщение об ошибке.
  • Файл журнала должен быть доступен и доступен для записи процессу сервера MCP.
  • Если у вас возникли проблемы с запуском этого сервера, это может быть связано с кэшированием старой версии kv-extractor-mcp-server. Попробуйте запустить его с последней версией (установите xyz на последнюю версию) kv-extractor-mcp-server с помощью следующих настроек.
"kv-extractor-mcp-server": { "command": "pipx", "args": ["run", "kv-extractor-mcp-server==x.y.z", "--log=off"], "env": { "OPENAI_API_KEY": "{apikey}" } }

Лицензия

GPL-3.0 или более поздняя версия

Автор

KunihiroS (и участники)

-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Извлекает структурированные пары «ключ-значение» из произвольного, зашумленного или неструктурированного текста с использованием LLM и предоставляет вывод в нескольких форматах (JSON, YAML, TOML) с обеспечением безопасности типов.

  1. 🤔💡 Зачем использовать этот MCP-сервер?
    1. Заметки о выпуске
      1. v0.3.1
      2. v0.2.0
      3. v0.1.0
    2. Инструменты
      1. Расчетное время обработки образца
    3. Функции
      1. Проверенные сценарии
        1. Поток обработки
          1. Предварительная обработка с помощью spaCy (многоязычный NER)
            1. Подробности шага
              1. Шаг 0: Предварительная обработка с помощью spaCy (Определение языка → Распознавание именованных сущностей)
              2. Шаг 1: Извлечение ключ-значение (LLM)
              3. Шаг 2: Тип аннотации (LLM)
              4. Шаг 3: Оценка типа (LLM)
              5. Шаг 4: Нормализация типов (статические правила + резервный вариант LLM)
              6. Шаг 5: Окончательное структурирование с помощью Pydantic
            2. Примечание об ограничениях вывода TOML
              1. Пример ввода/вывода
                1. Инструменты
                  1. 1. extract_json
                  2. 2. extract_yaml
                  3. 3. extract_toml
                2. Использование
                  1. Установка через Smithery
                  2. Требования
                  3. Запуск сервера
                3. Конфигурация хоста MCP
                  1. Пример: ведение журнала отключено
                  2. Пример: Ведение журнала включено (требуется абсолютный путь к файлу журнала)
                4. Лицензия
                  1. Автор

                    Related MCP Servers

                    • A
                      security
                      A
                      license
                      A
                      quality
                      Extracts and transforms webpage content into clean, LLM-optimized Markdown. Returns article title, main content, excerpt, byline and site name. Uses Mozilla's Readability algorithm to remove ads, navigation, footers and non-essential elements while preserving the core content structure.
                      Last updated -
                      1
                      247
                      13
                      MIT License
                    • A
                      security
                      A
                      license
                      A
                      quality
                      Enables extracting data from websites using natural language prompts, allowing users to specify exactly what content they want in plain English and returning structured JSON data.
                      Last updated -
                      1
                      564
                      6
                      TypeScript
                      MIT License
                      • Apple
                      • Linux
                    • A
                      security
                      A
                      license
                      A
                      quality
                      Fetches and extracts comprehensive package documentation from multiple programming language ecosystems (JavaScript, Python, Java, etc.) for LLMs like Claude without requiring API keys.
                      Last updated -
                      4
                      247
                      14
                      JavaScript
                      MIT License
                      • Apple
                      • Linux
                    • -
                      security
                      F
                      license
                      -
                      quality
                      A Model Context Protocol server that enables LLMs to extract and use content from unstructured documents across a wide variety of file formats.
                      Last updated -
                      6
                      Python
                      • Apple

                    View all related MCP servers

                    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/KunihiroS/kv-extractor-mcp-server'

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