使用说明
MCP JSON工具
通过强大的数据操作与本地JSON和NDJSON文件交互 洛达斯 并使用JSONPath进行查询。
杠杆作用 lodash 用于操纵和 jsonpath 用于查询 mcp_json_eval 和 mcp_json_multi_eval 工具。
主要特点
- 统一格式处理:自动读取标准JSON和换行符分隔的JSON(NDJSON/JSONL)。NDJSON文件被视为对象数组。
- 查询:使用JSON或NDJSON文件中的标准JSONPath表达式选择数据(
mcp_json_query). - 检查:检索JSON/NDJSON结构中的两个值及其精确路径(
mcp_json_nodes). - 分析和修改:在沙盒VM中执行JavaScript(使用Lodash
_和JSONPathjp)用于复杂分析或修改JSON/NDJSON文件(mcp_json_eval,mcp_json_multi_eval).修改保留原始文件格式(JSON或NDJSON)。 - 安全执行:使用Node.js
vm用于更安全地执行代码的模块eval工具,具有可配置的超时。 - 简单设置:通过以下方式作为标准Node.js进程运行
npx.
提供的工具
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(数字, 可选的):最大结果。
- 退货:匹配值的数组。
- 示例:获取所有书籍作者(来自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)
- 目标:从获取用户“alice”的事件类型
events.ndjson. - 工具调用:呼叫
mcp_json_query随着file_path="{abspath}/mcp-json-tools/test-data/events.ndjson"和json_path="$[?(@.user=='alice')].event"(注意$[?(...)]根数组的语法)。 - 期望输出:
["login", "login", "view_item"](作为字符串化数组)
- 目标:从获取用户“alice”的事件类型
2. mcp_json_nodes
- 行动:对本地JSON或NDJSON文件执行JSONPath查询,返回匹配的节点(值+路径)。自动读取这两种格式;NDJSON被视为用于查询的对象数组。
- 参数:
file_path(string):JSON或NDJSON文件的路径。json_path(string):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)
- 目标:从以下位置获取用户“bob”的完整事件对象(包括路径)
events.ndjson. - 工具调用:呼叫
mcp_json_nodes随着file_path="{abspath}/mcp-json-tools/test-data/events.ndjson"和json_path="$[?(@.user=='bob')]"(注意$[?(...)]根数组的语法)。 - 期望输出:包含节点对象的字符串化JSON数组
{path: ..., value: ...}为了鲍勃的活动。
- 目标:从以下位置获取用户“bob”的完整事件对象(包括路径)
3. mcp_json_eval
- 行动:读取JSON或NDJSON文件,在带有文件内容的沙盒VM中执行JavaScript代码(
$1:JSON对象,NDJSON对象数组),lodash(_),以及jsonpath(jp).如果代码的最后一个表达式为,则返回结果或修改文件(保留原始格式:JSON或NDJSON){ type: 'updateFile', data: <new_data> }。超时30秒。 - 参数:
file_path(string):JSON或NDJSON文件的路径。js_code(string):要执行的JavaScript代码。
- 文件修改:要触发文件写入 最后一个表达式 评估于
js_code必须 是({ type: 'updateFile', data: <new_data> })The<new_data>如果需要保留格式,则应与预期的结构(JSON的对象,NDJSON的数组)匹配。 - 退货:
- 如果最后一个表达式不是更新指令:
js_code执行(如果对象/数组为字符串,否则为原始值)。 - 如果最后一个表达式是更新指令:成功写入文件时的成功消息(例如。,
"Successfully updated json file: ..."或"Successfully updated ndjson file: ...").
- 如果最后一个表达式不是更新指令:
- ⚠️ 安全警告⚠️:在沙盒VM中执行用户提供的代码。虽然比生的更安全
eval(),检查代码是否存在潜在的资源耗尽或意外逻辑。使用受信任的代码。 - 示例:添加“onSale”属性(修改JSON)
- 目标:添加
onSale: false每一本书store.json. - JavaScript逻辑:
// $1 is the JSON object _.forEach($1.store.book, (book) => { book.onSale = false; }); ({ type: 'updateFile', data: $1 }); // Return update object - 工具调用:呼叫
mcp_json_eval随着file_path="test-data/store.json"上面的JavaScript逻辑js_code参数。 - 期望输出:
"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随着file_path="test-data/store.json"上面的JavaScript逻辑js_code参数。 - 期望输出:
10.99
- 目标:查找廉价小说的平均价格
- 示例:过滤失败事件(修改NDJSON)
- 目标:删除以下事件
success是false从test-data/events.ndjson并更新文件。 - 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(string):要执行的JavaScript代码。
- 文件修改:要触发文件写入 最后一个表达式 评估于
js_code必须 是({ type: 'updateMultipleFiles', updates: [{ index: <file_index>, data: <newData> }, ...] }).只有与输入中的有效索引对应的文件file_paths可以更新。这<newData>应与该索引处文件的原始格式匹配。 - 退货:
- 如果最后一个表达式不是多重更新指令:
js_code执行(如果对象/数组为字符串,否则为原始值)。 - 如果最后一个表达式是多更新指令:一条列出更新文件的成功消息(例如。,
"Successfully updated files: ...").
- 如果最后一个表达式不是多重更新指令:
- ⚠️ 安全警告⚠️:在沙盒VM中执行用户提供的代码。安全考虑因素与
mcp_json_eval申请。
配置
配置您的客户端(游标、VS代码)以使用以下命令运行服务器 npx这避免了需要绝对路径 服务器命令本身.
使用NPX(推荐):
-
关于文件路径的重要说明:使用NPX方法时
file_path或file_paths提供给工具 必须是绝对路径。由于以下原因,相对路径可能无法正确解析npx执行命令。 -
光标(
.cursor/mcp.json):{ "mcpServers": { "jsonTools": { "description": "Tools to query, inspect, and modify local JSON and NDJSON files.", "command": "npx", "args": [ "mcp-json-tools" ] } } } -
VS代码(
.vscode/mcp.json或用户设置):{ "jsonTools": { "description": "Tools to query, inspect, and modify local JSON and NDJSON files.", "command": "npx", "args": [ "mcp-json-tools" ] } }
替代方案:直接使用Node:
此方法要求您指定 绝对路径 到 mcp-json-tools/index.js 文件内 args 数组在你的 mcp.json 配置(例如。, "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文件。
