Kurlo について
Kurloは、ワークスペースをYAMLとしてGitで管理するチーム向けのオープンソースAPIクライアントです。MCPサーバーを通じてエージェントがリクエスト実行やテスト作成、失敗原因の確認を行え、モデルに見える出力ではシークレットがマスクされます。
主な機能
- 01認証とテスト付きリクエストの実行
- 02YAMLとGitによるワークスペース管理
- 03PostmanやOpenAPIなどのインポート
- 04ブラウザーのCORSとCSPの検査
- 05コレクション実行とCI用コマンドライン
活用シーン
- 01エージェントによる保存済みAPIリクエストの実行
- 02CIでのリクエストとテストスクリプトの実行
- 03ブラウザーのCORSまたはCSPエラーの再現
MCP 対応
KurloのMCPサーバーは、コレクションや環境の参照、リクエストやコレクションの実行、リクエスト編集、単発呼び出しをMCPクライアントに提供します。シークレットはAPIに送信されますが、モデルに見える内容ではマスクされます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Kurlo
AI エージェントが操作できる、オープンソースの Postman 代替ツールです。
アカウント不要、有料プランなし、テレメトリーなし。コレクションは Git リポジトリ内に YAML として保存されます。

Kurloを選ぶ理由
- チームの規模を問わず無料です。 上位プランへの移行も、アカウントの作成も必要ありません。チームは任意のGitホストを通じてワークスペースを共有でき、すべてのリクエストは読みやすいYAMLファイルとして保存され、APIの変更と同じプルリクエストでレビューできます。
- Postmanのコレクションをそのまま使えます。 Postman、Insomnia、Bruno、OpenAPI、HARファイルをインポートできます。
pm.test、chaiを使ったpm.expect、pm.sendRequest、require('lodash')は、記述されたとおりに動作します。 - AIエージェントから利用できます。
kurlo mcpを使うと、Claude Code、Cursor、Codex、その他のMCPクライアントで、認証情報やテストを含む保存済みリクエストの実行、新しいリクエストやテストの作成、直前の呼び出しが失敗した理由の説明ができます。シークレットはAPIに送信されますが、モデルには表示されません。 - ブラウザーでの動作を事前に確認できます。 ブラウザーのCORSおよびCSPルールを適用してリクエストを送信し、ユーザーに影響が出る前にエラーを確認できます。Postman、Insomnia、Brunoにはこの機能がありません。
- 軽量でネイティブです。 ElectronではなくGoとシステムのWebViewを使って構築されているため、macOS版のダウンロードサイズは22.7 MB、Linux版は12.0 MBです。
| Kurlo | Postman | Insomnia | Bruno | |
|---|---|---|---|---|
| 無料プラン | ✅ すべての機能をチームの規模を問わず利用可能 | 1ユーザー | Git Syncユーザーは最大3人 | プライベートGitホストにはProが必要 |
| アカウントが必要 | ✅ 不要 | コレクションには必要 | Scratch Padを超える場合は必要 | 不要 |
| Gitリポジトリ内のコレクション | ✅ | デスクトップアプリにネイティブのGit機能 | ✅ | ✅ |
Postmanのpm.*スクリプト | ✅ 記述どおりに実行 | ネイティブ | 互換レイヤー | bru.*に変換 |
| モックサーバー | ✅ ローカル、上限なし | クラウド、アカウントが必要 | 無料枠は月1,000リクエスト | ✅ ローカル |
| MCP | ✅ クライアントとサーバー | クライアント | クライアント | コミュニティサーバー |
| ブラウザーのCORSおよびCSPチェック | ✅ | — | — | — |
2026年10月15日時点の各社の料金ページに基づいています。詳細と情報源:Postmanとの比較、Insomniaとの比較、Brunoとの比較。
Kurloが時間の節約に役立ったら、⭐を付けていただくと、ほかの人にも見つけてもらいやすくなります。
ダウンロード
最新のビルドはリリースページから入手してください。
| プラットフォーム | インストーラー |
|---|---|
| macOS(Apple Silicon + Intel) | .dmg |
| Windows 10/11(x64、arm64) | .exe(NSIS インストーラー)、.msix |
| Linux(x64) | .AppImage |
すべてのリリースには SHA256 チェックサムと minisign 署名が付属しており、アプリ内アップデーターは、どちらかの検証に失敗したバイナリを拒否します。
コマンドライン(CI 向けの kurlo run、AI エージェント向けの kurlo mcp)は、npm の @kurlo/cli からも利用でき、x64 と arm64 の macOS、Linux、Windows 用のビルド済みバイナリが用意されています。デスクトップアプリは不要です。
npx -y @kurlo/cli --version
ガイド、スクリプトリファレンス、YAML ワークスペース形式については、**ドキュメントサイト**をご覧ください。
機能
リクエスト
- すべての HTTP メソッド:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS
- クエリパラメーター、ヘッダー、本文(JSON、form-data、x-www-form-urlencoded、プレーンテキスト/XML/HTML、バイナリファイル)
- cURL インポート — URL フィールドに curl コマンドを貼り付けると、自動的に解析されます
- パラメーター、ヘッダー、フォームフィールドの一括編集 — テーブルを
key: value形式のテキストエリアに切り替えて編集し、元に戻せます - GraphQL、Server-Sent Events、WebSocket、Socket.IO、gRPC、MCP のリクエストタイプ — MCP 呼び出しではサーバーのツール、リソース、プロンプトを検出し、ツールのスキーマに基づいて引数を設定して、生の JSON-RPC の送受信内容を表示します
- Postman、Insomnia、Bruno/OpenCollection、OpenAPI/Swagger、HAR、cURL、すべてのデータのバックアップをインポート
- OpenAPI/Swagger はファイルだけでなくリンクからもインポートできます。仕様書の URL を貼り付けると、Kurlo が取得してコレクションを作成します
- Postman、OpenAPI、OpenCollection、すべてのデータのバックアップをエクスポート
認証
- Bearer Token
- Basic Auth
- Digest Auth — MD5、SHA-256、SHA-512-256 と各
-sessバリアント、qop=authおよびauth-intに対応 - API Key — ヘッダーまたはクエリ文字列
- OAuth 2.0 — Client Credentials、Authorization Code(PKCE 対応)、Password、Device Code グラントに対応。ループバックを使ったブラウザーサインイン、リフレッシュトークン、送信前の自動トークン更新も利用できます
- AWS Signature v4
- クライアント証明書(相互 TLS)。リクエストごとに設定するか、コレクションから継承できます
- リクエストごとおよびコレクションのデフォルト設定と継承
スクリプト — サンドボックス化された JavaScript によるリクエスト前スクリプトとテストスクリプトに対応し、従来の Tengo もサポートしています:
// pre-request: inject a header
pm.request.headers.set("X-Client", "kurlo")
// pre-request: rewrite and sign the body
pm.request.body.update(JSON.stringify({ ...pm.request.body.json(), nonce: pm.crypto.randomHex(8) }))
// test: assert status and shape
pm.test("status is 200", () => pm.response.to.have.status(200))
pm.test("has an id", () => pm.response.to.have.jsonSchema({ type: "object", required: ["id"] }))
require は lodash、ajv、tv4、uuid、crypto-js、chai の同梱代替モジュールを解決するため、インポートした Postman スクリプトも引き続き動作します。pm.sendRequest はスクリプトから HTTP 呼び出しを行い、pm.execution.skipRequest() はリクエストの送信をスキップします。
環境と変数
- ワークスペースごとに複数の環境を設定でき、ワンクリックで切り替えられます
- マトリックス表示 — 各変数を行、各環境を列として表示し、その場で編集できます
- URL、ヘッダー、パラメーター、本文、認証フィールドで
{{variable}}のテンプレート構文を利用できます - テストスクリプトから変数を設定できます(
pm.variables.set、pm.environment.set) - 手動保存モードと自動保存モードの両方で、リクエストと環境の編集内容を保存できます
ワークスペースとコレクション
- プロジェクトやクライアントごとに複数のワークスペースを作成できます
- ネストしたフォルダー階層と空フォルダーの保持に対応したコレクション
- ドラッグ&ドロップで整理できます
- リクエスト履歴 — 送信ごとに専用ページを作成し、リクエストと保存されたレスポンスを並べて表示します。エディターで再度開くこともできます(保存期間は14日、最大1000件)
- コレクションランナー — 順次または並列実行、データファイル、反復実行、HTML レポートに対応し、各コレクションの最新の実行結果を保持します
- 診断機能、競合解決支援、ローカル限定のシークレットに対応した Git 管理の YAML ワークスペース
- CLI ランナー —
npx -y @kurlo/cli run ./workspace --env CIで、リクエストとそのテストスクリプトを CI 向けに実行できます。データ駆動型の反復実行(--data)、pretty/JSON/JUnit レポーター、変数のエクスポートに対応し、失敗時にはゼロ以外の終了コードを返します AI エージェント(MCP サーバー) — Kurlo のバイナリは Model Context Protocol サーバーでもあるため、Claude Code、Codex、Cursor、Claude Desktop、その他の MCP クライアントから、コレクションや環境の一覧表示、認証情報・スクリプト・テストを使った保存済みリクエストやコレクション全体の実行、{{variables}}を使った単発の呼び出しができます。また、ワークスペースを最新の状態に保つこともできます。リクエストを追加・変更してpm.*テストを設定し、レスポンスをサンプルとして保存し、環境変数を設定できます。いずれもアプリが書き込むものと同じ YAML に保存され、シークレットは保存されません。アプリから最後に送信したリクエストを読み取るため、「なぜ失敗したのか?」と尋ねる際にコピーする必要はありません。シークレットの値は API に送信されますが、モデルが参照するすべての内容では[secret]としてマスクされ、保護対象としてマークした環境にはアクセスできません。1 つのコマンドで、このマシン上のすべてのクライアントを設定できます。
npx -y @kurlo/cli mcp install --env Staging
代わりにリポジトリの共有 .mcp.json と .cursor/mcp.json に書き込むには、--project を追加します。これにより、チーム全体がリポジトリをクローンするだけでサーバーを利用できます。手動での設定、ツール、フラグについては、MCP サーバーガイドをご覧ください。
レスポンスのサンプル — 任意のレスポンスを、そのリクエストの名前付きサンプルとして保存できます。ステータス、ヘッダー、返された本文が、そのレスポンスを生成したリクエストとともに保存されます。保存時にシークレットは除外され、本文は変更されずバイト単位で保存されます。また、Postman、OpenCollection、HAR、OpenAPI のインポートとエクスポートでもサンプルが引き継がれます。レスポンスは、前回の送信結果ではなくサンプルと比較できます。
Cookie — ワークスペースごとの Cookie jar と、ドメインごとのエディターを備えています。リクエストごとに無効化できます。
- Cookie の同期:Kurlo をリポジトリ内のブラウザー拡張機能(
apps/desktop/extension、Chromium + Firefox)とペアリングすると、ブラウザーですでに使用しているセッションを Kurlo からの送信にも使えます。ループバックのみで動作するブリッジは有効にするまでオフのままで、Kurlo 上で 6 桁のコードを照合して承認し、両側で適用されるドメインごとの許可リストを設定します。Cookie の送信方向は一方向で、ブラウザーから Kurlo へのみです。
モックサーバー — コレクションの保存済みサンプルをローカルポートで HTTP 配信することで、まだ存在しないエンドポイントを対象にクライアントを構築できます。メソッドとサンプルのパステンプレート(/orders/:id)でルーティングし、記録されたクエリによって応答するサンプルを絞り込みます。また、クライアントからのリクエストと、応答したサンプルをライブログで確認できます。ループバックのみで動作し、すべてのオリジンの CORS プリフライトに応答します。
レスポンスビューアー
- 行番号付きの構文ハイライトされた本文
- 大きなレスポンスのページ分割表示(512 KB ごとに分割。レスポンスが 10 MB を超える場合に適用)
- 全文検索と一致箇所の移動
- レスポンスをファイルに保存、クリップボードにコピー
- ヘッダー表、テスト結果、スクリプトログをすべて 1 つのパネルに表示
- HTML、画像、PDF 用のプレビュータブ。バイナリ本文は文字化けした状態で表示せず、検出されます
- 前回のレスポンスまたは保存済みサンプルとの差分表示
- 接続の詳細と、ワイヤー上で送信されたリクエストを表示するタイムライン。シークレットはマスクされ、リダイレクトごとにブロックが分かれます
- SSE、WebSocket、Socket.IO、gRPC のレスポンス用リアルタイムパネル
コード生成 — 現在のリクエストを、14 種類のターゲットのいずれかで実行可能なスニペットとしてコピーできます:cURL、HTTPie、JavaScript fetch、Node.js fetch、Axios、Python requests、Go net/http、Java OkHttp、C# HttpClient、PHP cURL、Ruby Net::HTTP、Swift URLSession、Kotlin OkHttp、Rust reqwest。シークレット変数は {{name}} のプレースホルダーのままです。
ブラウザーリクエストのエミュレーション — クライアントではなく、ブラウザーのルールに従って送信します。Origin ヘッダー、CORS プリフライトとレスポンスのチェック、Content Security Policy の適用により、フロントエンドを実装する前にブラウザーでの動作を再現できます。
リクエストごとの設定:HTTP バージョン(auto / 1.1 / 2)、SSL 検証、リダイレクトポリシー(追従、メソッドを維持、認証情報を維持)、Cookie jar、タイムアウト、プロキシ、URL エンコード
キーボードファースト:すべてのアクションにショートカットを設定できます。コマンドパレット(Cmd/Ctrl K)でリクエストを検索してコマンドを実行し、クイック送信(Cmd/Ctrl Enter)、URL にフォーカス(Cmd/Ctrl L)、タブの切り替え(Cmd/Ctrl 1~8、最後のタブは 9)を行えます。Kurlo は macOS では Cmd、Windows と Linux では Ctrl を表示します。
ダークテーマとライトテーマがあり、組み込みのバリエーションも複数用意されています。
ローカルファーストのストレージ — ローカルの Kurlo プロファイルとそのシークレットは、保存時に AES-256-GCM で暗号化されます。キーは利用可能な場合、OS の認証情報ストアに保存され、Kurlo のアプリデータディレクトリ内にも 0600 のリカバリファイルとして保持されます。Git で管理されるワークスペースの YAML は、意図的に人が読める形式にしています。シークレット値はローカルプレースホルダーに置き換えられます。
ソースからのビルド
前提条件
- Go 1.25+
- Node.js 22.12+
- Wails v2 —
go install github.com/wailsapp/wails/v2/cmd/wails@latest - macOS:Xcode Command Line Tools
- Windows:NSIS(インストーラーのビルド用)および Windows SDK(MSIX のパッケージ化/署名ツール用)
- Linux:
libgtk-3-dev、libwebkit2gtk-4.1-dev
開発モード(フロントエンドのホットリロード+Go バックエンド):
git clone https://github.com/stormhop/kurlo
cd kurlo
npm install
make dev
現在のプラットフォーム向けの本番ビルド:
make build
すべてのプラットフォーム(各プラットフォームのツールチェーンが必要です):
make build-all
すべてのチェックを実行 — フロントエンドの型チェック、ユニットテスト、gofmt、go vet、競合検出を有効にした Go テスト:
make check
利用可能なすべてのターゲットについては、make help を参照してください。
プロジェクトの構成
apps/desktop/ Wails v2 desktop application
apps/desktop/main.go Entry point, window config, native menus
apps/desktop/cmd/kurlo/ Headless CLI (run, mcp) published to npm as @kurlo/cli
apps/desktop/internal/
api/ HTTP executor, auth, request store, state
api/auth/ Bearer, Basic, Digest, API Key, OAuth2, AWS SigV4
model/ Shared Go types (request, response, auth config)
script/ JavaScript/Tengo scripting engines + pm.* API
apps/desktop/frontend/src/
App.svelte Root shell and layout
lib/stores/app.svelte.ts Composed app view-model
lib/stores/features/ Feature slices for requests, collections, Git, import/export, etc.
lib/components/ UI components
lib/backend.ts Wails bridge type definitions
apps/desktop/extension/ Cookie Sync browser extension (MV3 + Firefox event page)
apps/web/ Astro Starlight documentation site
npm/cli/ The @kurlo/cli npm launcher; scripts/build-npm-packages.mjs adds the binaries
schemas/ Public Git/YAML workspace JSON Schema
perf/ Generated performance fixtures (ignored by Git)
スクリプト API リファレンス
スクリプトはデフォルトでサンドボックス化された JavaScript 環境で実行されます。既存のリクエストでは、レガシーの Tengo エンジンでも実行できます。インポート、ファイルシステム、プロセス、ネットワークへのアクセスは無効です。実行タイムアウトはデフォルトで 2 秒です。リクエストごとに最大 60 秒まで設定できます。
すべてのメソッド、変数スコープの優先順位ルール、Chai スタイルのアサーションエイリアスを含む全容は、スクリプト API リファレンスを参照してください。概要は次のとおりです。
| 対象 | 内容 |
|---|---|
pm.request | url、method、set_url()、headers.get/set/unset、params.get/set |
pm.request.body | raw、mode、json()、update()、および urlencoded/formdata のフィールドリスト |
pm.response | code、status、responseTime、size、body()、json()、headers.get() — テストスクリプトのみ |
pm.variables · pm.globals · pm.environment · pm.collectionVariables | get/set/unset/clear。読み書きするスコープのみが異なります |
pm.iterationData.get(key) | データ駆動型実行で現在のデータ行の値を取得します(読み取り専用) |
pm.info | requestName、eventName、iteration、iterationCount |
pm.cookies | このリクエストの Cookie jar が送信する Cookie に対する get/has/names |
pm.crypto · CryptoJS | MD5/SHA ダイジェスト、HMAC、base64、randomHex()、uuid() |
pm.sendRequest(req, cb) | 通常のリクエストエンジンを介した同期 HTTP 呼び出し |
pm.execution.skipRequest() | 事前リクエストスクリプトから送信をスキップします。失敗ではなくスキップとして報告されます |
pm.test(name, fnOrResult) | 名前付きアサーションを登録します |
pm.expect(value) | .equal · .contains · .exists · .has_key · … に加えて、.to.equal(v)、.to.include(v)、.to.have.property(k) |
pm.response.to.have.* | status(code)、header(name)、jsonBody(path?, value?)、jsonSchema(schema)(draft-07) |
pm.log(...values) | Scripts パネルに出力します |
require は、同梱された lodash、ajv、tv4、uuid、crypto-js、chai の代替実装を解決します。イベントループはありません。setTimeout、async、await は利用できず、pm.sendRequest のコールバックは即座に実行されます。
貢献
バグ報告、機能リクエスト、プルリクエストを歓迎します。まずは CONTRIBUTING.md をご覧ください。開発環境のセットアップ、CI でチェックされる項目、変更の範囲の決め方について説明しています。参加するすべての方には、行動規範に従っていただく必要があります。
セキュリティ上の問題を見つけた場合は、公開の issue を作成しないでください。非公開での報告方法については、SECURITY.md をご覧ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。