Token导航 LogoToken导航TokenDH.com
Flexible Key-Value Extracting MCP Server logo
搜索检索stdio官方级别未说明来源级核验

Flexible Key-Value Extracting MCP Server

MCP Server

@smithery/cli

This MCP server extracts key-value pairs from arbitrary, noisy, or unstructured text using LLMs (GPT-4.1-mini) and pydantic-ai. It keeps type safety and supports multiple output formats (JSON, YAML, TOML). The server is robust to any input and always attempts to structure data as much as possible.

工具数

3

提示词数

0

GitHub Stars

1

资源数

0
类型安全PythonClaudeClaude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

KunihiroS

提供方

KunihiroS

最后核验

2026/5/18 02:16

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

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

详细介绍

灵活的键值提取MCP服务器

](https://smithery.ai/server/@KunihiroS/kv-extractor-mcp-server)

版本:0.3.2

此MCP服务器使用LLM(GPT-4.1-mini)和pydantic ai从任意、嘈杂或非结构化文本中提取键值对。 它确保了类型安全,并支持多种输出格式(JSON、YAML、TOML)。服务器对任何输入都很稳健,并且总是试图尽可能多地构建数据,然而,完美的提取是 不保证.

______________________________________________________________________

🤔💡 为什么使用此MCP服务器?

虽然许多大型语言模型(LLM)服务提供结构化输出功能,但此MCP服务器为键值提取提供了独特的优势,特别是在具有挑战性的现实世界文本中:

  • 🔑🔍 自动密钥发现核心优势是它的能力 *自主识别和提取相关的键值对* 来自非结构化文本 *无需预定义密钥*。虽然典型的LLM结构化输出需要您指定要查找的密钥,但此服务器会发现它们,这使得它对事先不知道结构的多样化和不可预测的数据非常有效。
  • 💪🧱 对复杂输入具有卓越的鲁棒性:它擅长处理任意、嘈杂或非结构化的文本,而标准LLM结构化输出可能会出现问题。多步骤流水线是专门为筛选和理解不完美数据而设计的。
  • 🌐🗣️ 高级多语言预处理:在LLM处理之前,它利用spaCy进行日语、英语和中文(简体/繁体)的命名实体识别(NER),通过提供上下文丰富的候选短语,显著提高了这些语言的提取准确性。
  • 🔄✍️ 迭代细化和打字:与单次提取不同,此服务器采用了一个复杂的管道,包括基于LLM的类型注释、基于LLM类型评估和基于规则/LLM回退规范化。这确保了更准确、更符合上下文的数据类型。
  • ✅🛡️ 保证类型安全和模式遵守:使用Pydantic进行最终结构化可确保输出不仅结构化,而且类型安全,并根据定义的模式进行验证,为下游应用程序提供可靠的数据。
  • 📊⚙️ 一致且可预测的输出:服务器旨在始终返回格式良好的响应,即使提取是部分的或遇到问题,这对于构建强大的自动化系统至关重要。

______________________________________________________________________

发布说明

v0.3.2

  • 修复:FastMCP导致错误。

v0.3.1

  • 更新:改进类型评估提示,以进行稳健校正。
  • 更新:在README.md上添加了此MCP服务器的优点

v0.2.0版本

  • 修复:zh-cn/zh-tw的郎代码。

v0.1.0

  • 初始版本

工具

  • /extract_json :从输入文本中提取JSON格式的类型安全键值对。
  • /extract_yaml :从输入文本中提取YAML格式的类型安全键值对。
  • /extract_toml :从输入文本中提取TOML格式的类型安全键值对。

- *注意:由于TOML规范,对象数组(字典)或深度嵌套结构不能直接表示。有关详细信息,请参阅下面的“关于TOML输出限制的说明”。*

注:

  • 支持的语言:日语、英语和中文(简体:zh-cn/繁体:zh-tw)。
  • 提取依赖于媒染剂和LLMs。不能保证完美提取。
  • 较长的输入句子需要更多的时间来处理。请耐心等待。
  • 首次启动时,服务器将下载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:

flowchart TD
    A[Input Text] --> B[Step 0: Preprocessing with spaCy Lang Detect then NER]
    B --> C[Step 1: Key-Value Extraction - LLM]
    C --> D[Step 2: Type Annotation - LLM]
    D --> E[Step 3: Type Evaluation - LLM]
    E --> F[Step 4: Type Normalization - Static Rules + LLM]
    F --> G[Step 5: Final Structuring with Pydantic]
    G --> H[Output in JSON/YAML/TOML]

使用spaCy(多语言NER)进行预处理

此服务器使用 缥缈虚幻的 通过自动语言检测从输入文本中提取命名实体 之前 将其传递给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推断步骤1中提取的每个键值对的数据类型(int、str、bool、list等)。
  • 详情:

- 类型注释提示包括列表和多值支持的说明。

  • 输出:示例: 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的标准类型。 - 示例:将逗号分隔的值转换为列表,将“true”/“false”转换为bool,或将日期表达式转换为标准格式。 - 如果静态规则无法转换值,请使用基于LLM的类型转换回退。 - 不可转换的值被安全地处理为None或str。

  • 输出:Python类型规范化键值对列表。

步骤5:使用Pydantic进行最终结构化

  • 目的:使用Pydantic模型(KVOut/KVPayload)验证和构造类型规范化数据。
  • 详情:

- 将每个键值对映射到Pydantic模型,确保类型安全和数据完整性。 - 根据模式验证单个值、列表、null和复合类型。 - 如果验证失败,请在保留尽可能多的数据的同时附加错误信息。 - 最终输出以指定的格式(JSON、YAML或TOML)返回。

  • 输出:类型安全且经过验证的dict或指定格式(JSON/YAML/TOML)输出。

______________________________________________________________________

此管道旨在适应未来的列表格式支持和Pydantic模式扩展。

关于TOML输出限制的说明

  • 在TOML中。, items = ["A", "B"])可以用本机表示,但是

由于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"}]'

*注意:对象数组或嵌套结构在TOML中存储为JSON字符串。*

工具

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安装

通过以下方式自动为Claude Desktop安装kv提取器mcp服务器 史密瑟里:

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

需求

  • Python 3.9+
  • 用于OpenAI模型的API密钥(在 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提取器mcp服务器。请尝试使用最新版本(set x.y.z 通过以下设置将kv提取器mcp服务器设置为最新版本。
"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(和贡献者)

目录标签

目录标签

类型安全PythonClauderesearch-and-data键值提取本地部署自然语言处理多语言支持数据格式化

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Node.js

部署方式(deploymentType,部署类型)

remote-capable

来源包(packageName,安装包名)

@smithery/cli

工具数量(toolCount,工具数)

3

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiononeremote-capable

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP