muthuishere/mcp-server-bash-sdk

MCP server SDK/example implemented entirely in bash — build a Model Context Protocol server with no runtime dependency beyond a POSIX shell.

📦 mcp-server-bash-sdk とは何ですか?

完全に Bash で書かれた、Model Context Protocol (MCP) 2026-07-28 の非常に小さな、オーバーヘッドゼロの実装です。これにより、AIエージェントクライアントに get_weather や list_files などの tool 関数を、大規模な MCP サーバーが使用するのと同じ JSON-RPC 形式で公開できますが、Node や Python などの重いランタイムを導入する必要はありません。


🎯 コアのアイデア

  • 状態なし、リクエストごとのプロトコル – 2026-07-28 リビジョンではハンドシェイクやセッションが削除されたため、各リクエストは単一の JSON ラインであり、シンプルな read-loop で処理可能です。
  • 1つのコードベース、2つのトランスポート – 同じ Bash スクリプトが stdio(LLMエージェントがサブプロセスを起動する通常の方法)または ローカル HTTP POST エンドポイント(socat/netcat を使用)の両方でリクエストを処理できます。
  • 名前によるツール発見 – tool_ で始まる名前の Bash 関数は、自動的に server/discover 応答にリストアップされ、tools/call で呼び出すことができます。

🛠️ 主要なコンポーネント(README に記載)

ファイル / ディレクトリ 役割
mcpserver_core.sh JSON-RPC フレーミング、MCP メソッドディスパッチ、バージョンネゴシエーション、および公式 JSON スキーマ(jq とオプションの jsonschema を使用)に基づく出力の検証を処理します。
mcpserver_http.sh コアを ストリーミング HTTP リスナー(POSTのみ、ループバックのみ)に変換する薄いラッパーです。
moviemcpserver.sh(およびその他の例) コアを source し、ビジネスロジックを含む tool_* 関数を定義する具体的なサーバースクリプトです。
assets/ サーバー(discover ペイロード)とツール一覧(tools ペイロード)を記述する JSON ファイル。
spec/ コンプライアンステストスイートで使用されるバニラ化された MCP スキーマ。
docs/adr/ および docs/spikes/ アーキテクチャ決定記録(ADR)と、macOS、Debian、Alpine などでの特定の Bash 動作を検証した実験用スクリプト。
examples/ 映画カタログ、gitラッパー、天気API、ファイルサーバーの4つの実行可能なサーバーデモに加え、ステップバイステップの「自分だけのサーバー構築」ガイド。
test_*.sh および scripts/test-linux.sh コアロジック、ディスカバリの形状、スキーマ準拠、および複数の Linux フレーバーでの両方のトランスポートをカバーするユニットおよび統合テスト。

🚀 クイックスタート(初期設定フロー)

  1. クローンして実行可能に
    git clone https://github.com/muthuishere/mcp-server-bash-sdk
    cd mcp-server-bash-sdk
    chmod +x mcpserver_core.sh moviemcpserver.sh
    
  2. stdio でリクエストを実行
    echo '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28"}}}' |
    ./moviemcpserver.sh
    
  3. ローカル HTTP エンドポイントとして実行
    ./moviemcpserver.sh --http   # http://127.0.0.1:3000/mcp でリッスン
    
  4. テストスイートを実行(jq が必要;スキーマテストにはオプションで python + jsonschema)
    ./test_mcpserver_core.sh          # 31 個のユニットテスト
    ./test_http_transport.sh          # 19 個の HTTP テスト
    ./scripts/test-linux.sh all       # Docker を使って Debian、Ubuntu、Alpine で検証
    

🧩 Bash で あなたの MCP サーバーを構築する方法

  1. ラッパースクリプトを作成(例:weatherserver.sh)。
  2. 設定パスを設定(MCP_CONFIG_FILE、MCP_TOOLS_LIST_FILE、MCP_LOG_FILE)を mcpserver_core.sh を source する 前 に設定します。
  3. tool_* 関数を定義 – 各関数は単一の JSON 文字列引数を受け取り、成功時は結果を echo し、0 を返す必要があります。エラー時は説明文を echo し、1 を返します。コアはこれを isError: true を含む JSON 応答に変換します(HTTP/stdio のラウンドトリップは成功とみなされます)。
  4. トランスポートを選択 – 引数なしでスクリプトを実行すると stdio、--http(およびオプションの MCP_HTTP_PORT、MCP_HTTP_BIND、MCP_ALLOWED_ORIGINS)で HTTP を選択できます。
  5. MCP クライアント設定にサーバーを追加 – 例として、LLMアシスタントの mcp.servers JSON で type を stdio、command をあなたのスクリプトに設定します。

📌 制限事項(作者がリストアップ)

  • ローカルのみの HTTP – TLS や認証なし;公開するにはリバースプロキシが必要。
  • SSE / ストリーミング応答なし – 2026-07-28 リビジョンではセッションベースのストリームが削除されたため、進行状況通知はサポートされません。
  • 単一クライアント stdio – 1つのプロセスが1つのクライアントを同時に処理(約30 req/s)。
  • 機能の欠落 – resources、prompts、MRTR 入力、および「tasks」拡張なし。
  • バージョンロック – 2026-07-28 リビジョンのみ実装済み;古い MCP バージョンは拒否されます。

📚 ドキュメントとコミュニティ


✅ TL;DR

AIエージェントにシンプルなツールを公開する必要がある場合(例:プロトタイピング、ローカル開発、Node/Python のインストールが望ましくない環境)、このリポジトリは、stdio とローカル HTTP 両方のバインディングを備えた、仕様準拠の実装を提供します。徹底的なテストと、独自のツール関数を追加するための明確なガイドも付いています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト