关于 MCP JSON Tools
MCP JSON Tools 可查询、检查、分析和修改本地 JSON 与 NDJSON 文件。它结合 JSONPath 查询与基于沙盒 VM 的 JavaScript 执行,并使用 Lodash 处理数据。
主要功能
- 01读取 JSON 和 NDJSON 文件
- 02使用 JSONPath 查询
- 03返回匹配值及其路径
- 04通过 JavaScript 分析或修改
- 05同时处理多个文件
- 06更新时保留文件格式
适用场景
- 01筛选本地数据文件中的记录
- 02查找值及其所在路径
- 03计算 JSON 数据中的统计结果
- 04更新 JSON 或 NDJSON 文件中的记录
MCP 相关
向 MCP 客户端提供查询、检查、执行代码和更新本地 JSON 与 NDJSON 文件的工具,支持单文件及多文件操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file_path | string | 是 | JSON 或 NDJSON 文件的绝对路径。由于通过 npx 运行时可能存在工作目录问题,因此此参数为必填项。 |
| json_path | string | 是 | JSONPath 查询字符串。**注意**:对于 JSON 对象,使用 `$.path...`;对于 NDJSON 数组,使用 `$[selector]`(例如 `$[*]` 或 `$[?(...)]`)。 |
| count | number | 否 | 结果的最大数量(可选)。 |
详细介绍
MCP JSON Tools
通过 Lodash 强大的数据处理功能和 JSONPath 查询,与本地 JSON 和 NDJSON 文件交互。
在 mcp_json_eval 和 mcp_json_multi_eval 工具中,使用 lodash 进行数据处理,并使用 jsonpath 执行查询。
主要功能
- 统一格式处理:自动读取标准 JSON 和按行分隔的 JSON(NDJSON/JSONL)。NDJSON 文件会被视为对象数组。
- 查询:使用标准 JSONPath 表达式,从 JSON 或 NDJSON 文件中选择数据(
mcp_json_query)。 - 检查:获取 JSON/NDJSON 结构中的值及其精确路径(
mcp_json_nodes)。 - 分析与修改:在沙箱虚拟机中执行 JavaScript(提供 Lodash
_和 JSONPathjp),以便对 JSON/NDJSON 文件进行复杂分析或修改(mcp_json_eval、mcp_json_multi_eval)。修改后会保留原始文件格式(JSON 或 NDJSON)。 - 安全执行:在
eval工具中使用 Node.jsvm模块安全地执行代码,并支持配置超时时间。 - 简单设置:通过
npx以标准 Node.js 进程运行。
提供的工具
1. mcp_json_query
- 操作:对本地 JSON 或 NDJSON 文件执行 JSONPath 查询,并返回匹配的值。自动读取这两种格式;查询时会将 NDJSON 视为对象数组。
- 参数:
file_path(string):JSON 或 NDJSON 文件的路径。json_path(string):JSONPath 查询。语法说明:- 对于标准 JSON(根节点为对象),路径通常以
$.开头(例如$.store.book[*].author)。 - 对于 NDJSON(根节点为数组),路径必须以
$后跟[开头(例如$[?(@.user=='alice')].event或$[*].user)。对根数组使用$[*][?(...)]不会得到预期结果。
- 对于标准 JSON(根节点为对象),路径通常以
count(number,可选):结果数量上限。
- 返回值:匹配值数组。
- 示例:获取所有图书作者(来自 JSON)
- 目标:从
store.json获取所有作者的姓名。 - 工具调用:调用
mcp_json_query,并设置file_path="test-data/store.json"和json_path="$.store.book[*].author"。 - 预期输出:
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]
- 目标:从
- 示例:获取用户 'alice' 的事件类型(来自 NDJSON)
- 目标:从
events.ndjson获取用户 'alice' 的事件类型。 - 工具调用:调用
mcp_json_query,并设置file_path="{abspath}/mcp-json-tools/test-data/events.ndjson"和json_path="$[?(@.user=='alice')].event"。(请注意,根数组使用$[?(...)]语法。) - 预期输出:
["login", "login", "view_item"](以字符串形式表示的数组)
- 目标:从
2. mcp_json_nodes
- 操作:对本地 JSON 或 NDJSON 文件执行 JSONPath 查询,并返回匹配的节点(值 + 路径)。自动读取两种格式;查询时会将 NDJSON 视为对象数组。
- 参数:
file_path(字符串):JSON 或 NDJSON 文件的路径。json_path(字符串):JSONPath 查询。语法说明:- 对于标准 JSON(根节点是对象),路径通常以
$.开头(例如,$.store.book[?(@.price<10)])。 - 对于 NDJSON(根节点是数组),路径必须以
$后接[开头(例如,$[?(@.user=='bob')]或$[*])。在根数组上使用$[*][?(...)]不会按预期工作。
- 对于标准 JSON(根节点是对象),路径通常以
count(数字,可选):结果数上限。
- 返回值:对象数组
{ path: Array<string|number>, value: any }。 - 示例:获取作者及其路径(来自 JSON)
- 目标:从
store.json中获取作者及其位置。 - 工具调用:调用
mcp_json_nodes,传入file_path="test-data/store.json"和json_path="$.store.book[*].author"。 - 预期输出(简化):
[ { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' }, ... ]
- 目标:从
- 示例:获取用户 'bob' 的完整事件对象(来自 NDJSON)
- 目标:从
events.ndjson中获取用户 "bob" 的完整事件对象(包括路径)。 - 工具调用:调用
mcp_json_nodes,传入file_path="{abspath}/mcp-json-tools/test-data/events.ndjson"和json_path="$[?(@.user=='bob')]"。(注意根数组使用$[?(...)]语法。) - 预期输出:字符串化的 JSON 数组,其中包含 bob 的事件节点对象
{path: ..., value: ...}。
- 目标:从
3. mcp_json_eval
- 操作:读取 JSON 或 NDJSON 文件,在沙盒 VM 中执行 JavaScript 代码,并提供文件内容(
$1:JSON 对象或 NDJSON 对象数组)、lodash(_)和 jsonpath(jp)。返回结果,或者在代码的最后一个表达式为{ type: 'updateFile', data: <new_data> }时修改文件(保留原始格式:JSON 或 NDJSON)。超时时间为 30 秒。 - 参数:
file_path(字符串):JSON 或 NDJSON 文件的路径。js_code(字符串):要执行的 JavaScript 代码。
- 文件修改:要触发文件写入,
js_code求值的最后一个表达式 必须是({ type: 'updateFile', data: <new_data> })。如果希望保留文件格式,<new_data>应符合预期结构(JSON 对象或 NDJSON 数组)。 - 返回值:
- 如果最后一个表达式不是更新指令:返回
js_code执行的直接结果(对象或数组会转换为字符串,否则返回原始值)。 - 如果最后一个表达式是更新指令:文件成功写入后返回成功消息(例如
"Successfully updated json file: ..."或"Successfully updated ndjson file: ...")。
- 如果最后一个表达式不是更新指令:返回
- ⚠️ 安全警告 ⚠️:会在沙盒 VM 中执行用户提供的代码。虽然比原始
eval()更安全,但仍需检查代码是否可能导致资源耗尽或意外逻辑。请仅使用可信代码。 - 示例:添加
onSale属性(修改 JSON)- 目标:为
store.json中的每本书添加onSale: false。 - JavaScript 逻辑:
// $1 is the JSON object _.forEach($1.store.book, (book) => { book.onSale = false; }); ({ type: 'updateFile', data: $1 }); // Return update object - 工具调用:调用
mcp_json_eval,并在js_code参数中传入file_path="test-data/store.json"和上述 JavaScript 逻辑。 - 预期输出:
"Successfully updated json file: test-data/store.json"
- 目标:为
- 示例:计算平均价格(分析 JSON)
- 目标:查找
store.json中价格低廉的小说类书籍的平均价格。 - JavaScript 逻辑:
// $1 is the JSON object const books = jp.query($1, "$.store.book[?(@.category=='fiction' && @.price < 15)]"); _.meanBy(books, 'price'); // Return the average price - 工具调用:调用
mcp_json_eval,并在js_code参数中传入file_path="test-data/store.json"和上述 JavaScript 逻辑。 - 预期输出:
10.99
- 目标:查找
- 示例:筛除失败事件(修改 NDJSON)
- 目标:从
test-data/events.ndjson中移除success为false的事件并更新文件。 - JavaScript 逻辑:
// $1 is the array of event objects from the NDJSON file const filteredData = _.filter($1, item => item.success === true); // Return the update object with the filtered array ({ type: 'updateFile', data: filteredData }); - 工具调用:调用
mcp_json_eval,并传入file_path="{abspath}/mcp-json-tools/test-data/events.ndjson"和 JS 逻辑。 - 预期输出:
"Successfully updated ndjson file: {abspath}/mcp-json-tools/test-data/events.ndjson"
- 目标:从
4. mcp_json_multi_eval
- 操作:读取多个 JSON 或 NDJSON 文件,在沙箱 VM 中执行 JS 代码。代码可访问文件内容($1 是一个数组,其中每个元素都是一个文件解析后的内容——JSON 文件对应对象,NDJSON 文件对应数组)、lodash(
_)和 jsonpath(jp)。返回结果,或者在代码的最后一个表达式为{ type: 'updateMultipleFiles', updates: [{ index: <file_index>, data: <newData> }, ...] }时修改文件(保留原始格式)。超时时间为 30 秒。 - 参数:
file_paths(字符串数组):JSON 或 NDJSON 文件的路径。js_code(字符串):要执行的 JavaScript 代码。
- 文件修改:要触发文件写入,
js_code中求值的最后一个表达式必须是({ type: 'updateMultipleFiles', updates: [{ index: <file_index>, data: <newData> }, ...] })。只能更新输入file_paths中索引有效的文件。<newData>应与该索引处文件的原始格式一致。 - 返回值:
- 如果最后一个表达式不是多文件更新指令:返回
js_code执行的直接结果(对象或数组会转换为字符串,否则返回原始值)。 - 如果最后一个表达式是多文件更新指令:返回列出已更新文件的成功消息(例如,
"Successfully updated files: ...")。
- 如果最后一个表达式不是多文件更新指令:返回
- ⚠️ 安全警告 ⚠️:在沙箱 VM 中执行用户提供的代码。安全注意事项与
mcp_json_eval相同。
配置
配置客户端(Cursor、VS Code),使用 npx 运行服务。这样就无需为服务命令本身指定绝对路径。
使用 NPX(推荐):
-
重要提示:文件路径:使用 NPX 方式时,传递给工具的
file_path或file_paths必须是绝对路径。由于npx执行命令的方式,可能无法正确解析相对路径。 -
Cursor(
.cursor/mcp.json):{ "mcpServers": { "jsonTools": { "description": "查询、检查和修改本地 JSON 和 NDJSON 文件的工具。", "command": "npx", "args": [ "mcp-json-tools" ] } } } -
VS Code(
.vscode/mcp.json或用户设置):{ "jsonTools": { "description": "查询、检查和修改本地 JSON 和 NDJSON 文件的工具。", "command": "npx", "args": [ "mcp-json-tools" ] } }
替代方案:直接使用 Node:
此方法要求你在 mcp.json 配置的 args 数组中指定 mcp-json-tools/index.js 文件的绝对路径(例如,"command": "node", "args": [ "/abs/path/to/mcp-json-tools/index.js" ])。与 NPX 方式相比,此方法的可移植性较差。
要使用此方法,你需要先在本地获取代码:
- 需要安装 Node.js(推荐使用 18 或更高版本)。
- 克隆仓库:
git clone https://github.com/zfirsty/mcp-json-tools.git - 进入目录:
cd mcp-json-tools - 安装依赖:
npm install(安装@modelcontextprotocol/sdk、jsonpath、lodash、zod)。 然后,配置客户端使用克隆所得index.js文件的绝对路径。
许可证
MIT 许可证。详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。