🚀 Curl用MCPサーバー

Model Context Protocol (MCP)サーバーで、curl機能を提供し、AIアシスタントが自身の環境から直接HTTPリクエストを行えるようにします。
✨ 主な機能
- HTTPメソッド:GET、POST、PUT、DELETEリクエストをサポート
- ファイルダウンロード:curlを使用したファイルのダウンロード
- 高度なオプション:カスタムヘッダー、タイムアウト、リダイレクトなど
- JSONサポート:POST/PUTリクエストでのJSONデータの組み込み処理
- ユーザーエージェント:カスタムユーザーエージェント文字列のサポート
- セキュリティ:入力検証による安全なサブプロセス実行
📦 インストール
方法1:NPMによるインストール(推奨)
npm install -g @247arjun/mcp-curl
npm install @247arjun/mcp-curl
方法2:ソースからのインストール
git clone https://github.com/247arjun/mcp-curl.git
cd mcp-curl
npm install
npm run build
npm link
方法3:GitHubから直接インストール
npm install -g git+https://github.com/247arjun/mcp-curl.git
📚 ドキュメント
Claude Desktopの設定
Claude Desktopの設定ファイルに以下を追加します。
場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
設定内容:
{
"mcpServers": {
"mcp-curl": {
"command": "mcp-curl",
"args": []
}
}
}
代替案:npxを使用する場合(グローバルインストール不要)
{
"mcpServers": {
"mcp-curl": {
"command": "npx",
"args": ["@247arjun/mcp-curl"]
}
}
}
ローカル開発環境の設定
{
"mcpServers": {
"mcp-curl": {
"command": "node",
"args": ["/absolute/path/to/mcp-curl/build/index.js"]
}
}
}
設定を追加した後、Claude Desktopを再起動してMCPサーバーを読み込みます。
利用可能なツール
1. curl_get
HTTP GETリクエストを行います。
パラメーター:
url
(文字列):GETリクエストを行うURL
headers
(配列、オプション):'Header: Value'形式のHTTPヘッダー
timeout
(数値、オプション):リクエストのタイムアウト時間(秒)
follow_redirects
(真偽値、オプション):リダイレクトを追跡するかどうか
user_agent
(文字列、オプション):カスタムユーザーエージェント文字列
例:
{
"url": "https://api.example.com/data",
"headers": ["Authorization: Bearer token"],
"timeout": 30,
"follow_redirects": true,
"user_agent": "MyApp/1.0"
}
2. curl_post
データを含むHTTP POSTリクエストを行います。
パラメーター:
url
(文字列):POSTリクエストを行うURL
json_data
(オブジェクト、オプション):POSTデータとして送信するJSONオブジェクト
data
(文字列、オプション):POSTリクエストのボディに送信するデータ
headers
(配列、オプション):HTTPヘッダー
content_type
(文字列、オプション):Content-Typeヘッダー
timeout
(数値、オプション):リクエストのタイムアウト時間(秒)
follow_redirects
(真偽値、オプション):リダイレクトを追跡するかどうか
例:
{
"url": "https://api.example.com/data",
"json_data": {"key": "value"},
"headers": ["Content-Type: application/json"]
}
3. curl_put
HTTP PUTリクエストを行います。
パラメーター:
url
(文字列):PUTリクエストを行うURL
json_data
(オブジェクト、オプション):PUTデータとして送信するJSONオブジェクト
data
(文字列、オプション):PUTリクエストのボディに送信するデータ
headers
(配列、オプション):HTTPヘッダー
content_type
(文字列、オプション):Content-Typeヘッダー
timeout
(数値、オプション):リクエストのタイムアウト時間(秒)
follow_redirects
(真偽値、オプション):リダイレクトを追跡するかどうか
例:
{
"url": "https://api.example.com/data/123",
"data": "raw data",
"content_type": "text/plain"
}
4. curl_delete
HTTP DELETEリクエストを行います。
パラメーター:
url
(文字列):DELETEリクエストを行うURL
headers
(配列、オプション):HTTPヘッダー
timeout
(数値、オプション):リクエストのタイムアウト時間(秒)
follow_redirects
(真偽値、オプション):リダイレクトを追跡するかどうか
例:
{
"url": "https://api.example.com/data/123",
"headers": ["Authorization: Bearer token"]
}
5. curl_download
ファイルをダウンロードします。
パラメーター:
url
(文字列):ダウンロードするファイルのURL
output_filename
(文字列、オプション):出力ファイル名
resume
(真偽値、オプション):ファイルが存在する場合に部分ダウンロードを再開するかどうか
timeout
(数値、オプション):リクエストのタイムアウト時間(秒)
follow_redirects
(真偽値、オプション):リダイレクトを追跡するかどうか
例:
{
"url": "https://example.com/file.zip",
"output_filename": "downloaded_file.zip",
"resume": true
}
6. curl_advanced
カスタム引数でcurlを実行します(上級者向け)。
パラメーター:
args
(配列):curl引数の配列('curl'自体を除く)
例:
{
"args": ["-X", "PATCH", "-H", "Content-Type: application/json", "-d", "{\"status\":\"updated\"}", "https://api.example.com/items/1"]
}
💻 使用例
GETリクエストを行う
{
"tool": "curl_get",
"url": "https://api.example.com/users",
"headers": ["Authorization: Bearer your-token"]
}
JSONデータをPOSTする
{
"tool": "curl_post",
"url": "https://api.example.com/users",
"json_data": {
"name": "John Doe",
"email": "john@example.com"
}
}
ファイルをダウンロードする
{
"tool": "curl_download",
"url": "https://example.com/file.zip",
"output_filename": "download.zip"
}
🔧 技術詳細
開発環境
- Node.js 18.0.0以上
- npmパッケージマネージャー
- curlコマンドラインツール
ビルド
npm run build
テスト
サーバーを手動でテストします。
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | node build/index.js
テストを実行します。
npm test
リント
npm run lint
npm run lint:fix
プロジェクト構造
mcp-curl/
├── src/
│ └── index.ts # メインサーバーの実装
├── build/
│ └── index.js # コンパイルされたJavaScript
├── test/
│ └── basic.test.js # 基本機能のテスト
├── examples/
│ └── test-server.js # 使用例
├── .github/
│ └── workflows/
│ └── ci.yml # CI/CDパイプライン
├── package.json # プロジェクトの設定
├── tsconfig.json # TypeScriptの設定
├── .eslintrc.json # ESLintの設定
├── LICENSE # MITライセンス
├── DEPLOYMENT.md # デプロイガイド
├── CONTRIBUTING.md # コントリビューションガイドライン
├── CHANGELOG.md # バージョン履歴
└── README.md # このファイル
検証
サーバーが正常に動作していることをテストします。
node build/index.js
トラブルシューティング
一般的な問題
-
"Command not found"エラー
- mcp-curlがグローバルにインストールされていることを確認します:
npm install -g @247arjun/mcp-curl
- または、npxを使用します:
"command": "npx", "args": ["@247arjun/mcp-curl"]
-
"Permission denied"エラー
- ファイルのパーミッションを確認します:
chmod +x build/index.js
- プロジェクトを再ビルドします:
npm run build
-
ClaudeにMCPサーバーが表示されない
- 設定ファイルのJSON構文を検証します
- Claude Desktopを完全に再起動します
- コマンドのパスが正しいことを確認します
-
"curl command not found"
- システムにcurlをインストールします(macOS/Linuxでは通常事前にインストールされています)
- Windowsユーザーは、パッケージマネージャーを使用するか、curlのウェブサイトからダウンロードします
デバッグ
環境変数を設定して詳細なログを有効にします。
DEBUG=1 node build/index.js
echo '{"jsonrpc": "2.0", "method": "initialize", "params": {}}' | node build/index.js
セキュリティに関する注意事項
- すべてのcurl引数に対する入力検証とサニタイズ
- 高度なモードでの制限付きファイル操作
- shellではなくspawnを使用した安全なサブプロセス実行
- 任意のshellコマンドの実行を禁止
- Zodスキーマによる入力検証
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細については、LICENSEファイルを参照してください。