mcpField
C
Compare JSON

Compare JSON

ローカル
github.com/unitstack開発ツール011 週間前に更新

Compare JSON について

JSON 文字列、値、ファイルを比較するコマンドラインツール兼 MCP サーバーです。追加、削除、型、値の変更を検出し、配列や大文字・小文字の比較方法を設定できます。

主な機能

  1. 01JSON 値またはファイルの比較
  2. 024 種類の差分を検出
  3. 03インデックス、LCS、順不同の配列比較
  4. 04キーと値の大文字・小文字を無視
  5. 05JSON または表形式で出力
  6. 06結果をファイルに保存

活用シーン

  1. 01JSON ファイル間の変更を確認
  2. 02API や設定データの差分を調査
  3. 03MCP クライアントから JSON を比較

MCP 対応

stdio 経由で MCP サーバーとして動作し、JSON 入力の構造化された差分を返す compare_json ツールを公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"compare-json-cli": {
"command": "npx",
"args": [
"-y",
"@compare-json/cli"
]
}
}
}
起動コマンドnpx -y @compare-json/cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@compare-json/cli

ツール

1

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
baseJSONanyいいえ基準 JSON 値
baseJSONStringstringいいえ基準の文字列化された JSON 値
baseJSONFilePathstringいいえ基準 JSON ファイルのパス
contrastJSONanyいいえ比較対象の JSON 値
contrastJSONStringstringいいえ比較対象の文字列化された JSON 値
contrastJSONFilePathstringいいえ比較対象の JSON ファイルパス
optionsobjectいいえ
options.arrayCompareMethodenumはい配列の比較方法byIndex | lcs | unordered
options.keyCaseInsensitivebooleanはいキーの比較で大文字と小文字を区別しない
options.valueCaseInsensitivebooleanはい値の比較で大文字と小文字を区別しない
options.numericStringEqualsNumberbooleanはい数値文字列を数値として扱う

詳細

@compare-json/cli

JSON ファイルや文字列を比較するコマンドラインツールおよびMCPサーバーです。@compare-json/coreを基盤としています。

オンラインプレイグラウンド

https://comparejson.comでお試しください。

インストール

# npm
npm install -g @compare-json/cli

# yarn
yarn global add @compare-json/cli

# pnpm
pnpm add -g @compare-json/cli

CLI

クイックスタート
# View help
compare-json --help

# Compare two JSON strings
compare-json '{"a":1}' '{"a":2}'

# Compare two JSON files
compare-json file1.json file2.json

# Output as JSON format
compare-json file1.json file2.json --json-export

# Save output to file
compare-json file1.json file2.json -o output.txt

# Start the MCP server (stdio transport)
compare-json --mcp
使い方
compare-json [base] [contrast] [options]

位置引数には、インラインのJSON文字列またはJSONファイルへのパスを指定できます。CLIは値を調べ、既存のファイルに解決される場合はファイルの内容を解析し、それ以外の場合は引数自体をJSONとして解析します。baseもcontrastも指定されていない場合(かつ--mcpが設定されていない場合)は、ヘルプが表示されます。

引数
引数説明
[base]ベースとなるJSON文字列またはファイルパス
[contrast]比較対象となるJSON文字列またはファイルパス
オプション
オプションエイリアス説明デフォルト
--array-compare-method <method>-a配列の比較方法:byIndex、lcs、unorderedbyIndex
--key-case-insensitive-kキーを大文字と小文字を区別せずに比較しますfalse
--value-case-insensitive-v値を大文字と小文字を区別せずに比較しますfalse
--numeric-string-equals-number–数値文字列を数値として扱いますfalse
--json-export-jJSON形式で出力しますfalse
--output <file>-o標準出力の代わりにファイルへ出力します–
--mcp–stdio経由でMCPサーバーとして実行しますfalse
--version-VCLIのバージョンを表示します–
--help-hヘルプを表示します–
使用例
基本的な比較
compare-json '{"name":"Alice","age":30}' '{"name":"Bob","age":30}'

出力:

┌─────────────┬──────────────┐
│ Key         │ Change Type  │
├─────────────┼──────────────┤
│ (Base) name │ valueChanged │
└─────────────┴──────────────┘
ファイルの比較
compare-json base.json contrast.json
配列の比較方法
# By index (default)
compare-json '[1,2,3]' '[2,3,4]'

# LCS — minimal diff for ordered arrays
compare-json '[1,2,3]' '[2,3,4]' -a lcs
compare-json '[1,2,3]' '[2,3,4]' --array-compare-method lcs

# Unordered — treat as multisets
compare-json '[1,2,3]' '[3,2,1]' -a unordered
compare-json '[1,2,3]' '[3,2,1]' --array-compare-method unordered
大文字と小文字を区別しない比較
# Case-insensitive keys
compare-json '{"Name":"Alice"}' '{"name":"Alice"}' -k
compare-json '{"Name":"Alice"}' '{"name":"Alice"}' --key-case-insensitive

# Case-insensitive values
compare-json '{"status":"OK"}' '{"status":"ok"}' -v
compare-json '{"status":"OK"}' '{"status":"ok"}' --value-case-insensitive
数値文字列の比較
compare-json '{"count":1}' '{"count":"1"}' --numeric-string-equals-number
JSON出力
compare-json file1.json file2.json -j
compare-json file1.json file2.json --json-export

出力:

[
  {
    "pathSegments": ["name"],
    "pathString": "name",
    "pathBelongsTo": "both",
    "diffType": "valueChanged"
  }
]
ファイルへの保存
# Save table format
compare-json file1.json file2.json -o diff.txt

# Save JSON format
compare-json file1.json file2.json -j -o diff.json

-oが設定されている場合、CLIは整形した結果をファイルに書き込み、標準出力にOutput written to <path>と表示します。

出力形式
テーブル形式(デフォルト)

Unicodeの罫線で描画されたテーブルです。各行には、そのパスを持つ側がラベルとして付けられます。

  • (Base) <path> — パスがベース側に存在します(値または型の変更、削除)。
  • (Contrast) <path> — パスがコントラスト側にのみ存在します(追加)。
  • (Root) — トップレベルの値自体が異なる場合に使用されます。
┌──────────────┬──────────────┐
│ Key          │ Change Type  │
├──────────────┼──────────────┤
│ (Base) a     │ valueChanged │
│ (Base) b     │ deleted      │
│ (Contrast) c │ added        │
└──────────────┴──────────────┘

2つの入力が完全に一致する場合、出力は次のとおりです。

No differences found
JSON形式
[
  {
    "pathSegments": ["name"],
    "pathString": "name",
    "pathBelongsTo": "both",
    "diffType": "valueChanged"
  },
  {
    "pathSegments": ["age"],
    "pathString": "age",
    "pathBelongsTo": "base",
    "diffType": "deleted"
  },
  {
    "pathSegments": ["email"],
    "pathString": "email",
    "pathBelongsTo": "contrast",
    "diffType": "added"
  }
]

完全な構造については、@compare-json/coreのJSONValueDifferenceを参照してください。

差分の種類
種類説明
added値がbaseにはなく、contrastに存在します。
deleted値がbaseに存在し、contrastにはありません。
typeChangedbaseとcontrastの間で値の型が変わりました(例:number → string)。
valueChanged型は同じまま、値が変わりました。

MCPサーバー

@compare-json/cliには、比較エンジンをAIアシスタント向けのツールとして提供するMCP(Model Context Protocol)サーバーも含まれています。

MCPサーバーの起動
# from a global install
compare-json --mcp

# or via npx
npx @compare-json/cli --mcp

サーバーはstdio経由で通信します。

利用可能なツール
compare_json

2 つの JSON 値を比較し、その差分を返します。

入力パラメーター:

パラメーター型必須説明
baseJSONany条件付きベースとなる JSON 値(解析済み)。
baseJSONStringstring条件付き文字列化されたベース JSON 値(サーバーが解析)。
baseJSONFilePathstring条件付きベース JSON ファイルのパス(サーバーが読み込み、解析)。
contrastJSONany条件付き比較対象の JSON 値(解析済み)。
contrastJSONStringstring条件付き文字列化された比較対象の JSON 値。
contrastJSONFilePathstring条件付き比較対象の JSON ファイルのパス。
optionsobjectいいえ比較オプション(以下を参照)。

baseJSON/baseJSONString/baseJSONFilePath のうち少なくとも 1 つと、contrastJSON/contrastJSONString/contrastJSONFilePath のうち少なくとも 1 つを指定する必要があります。同じ側で複数指定した場合は、ファイルパス、文字列、未加工の値の順に優先されます。

オプション:

オプション型デフォルト説明
arrayCompareMethod'byIndex' | 'lcs' | 'unordered''byIndex'配列の比較方法。
keyCaseInsensitivebooleanfalseキーの大文字と小文字を区別せずに比較します。
valueCaseInsensitivebooleanfalse値の大文字と小文字を区別せずに比較します。
numericStringEqualsNumberbooleanfalse数値文字列を数値と等しいものとして扱います。

出力:

JSONValueDifference オブジェクトの配列である structuredContent.differences と、同じデータを JSON テキストとして表す content[0].text を返します。

{
  "differences": [
    {
      "pathSegments": ["name"],
      "pathString": "name",
      "pathBelongsTo": "both",
      "diffType": "valueChanged"
    }
  ]
}
MCP クライアントの設定

以下を MCP クライアントの設定(例:mcp.json)に追加します。

{
  "mcpServers": {
    "compare-json": {
      "command": "npx",
      "args": ["@compare-json/cli@latest", "--mcp"]
    }
  }
}

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。