mcpField
M
mcp-shell 🐚

mcp-shell 🐚

ロヌカル
github.com/sonirico開発ツヌル1085 週間前に曎新

mcp-shell 🐚 に぀いお

mcp-shell は、LLM が管理された条件䞋でシェルコマンドを実行できるようにする、Go で曞かれた MCP サヌバヌです。既定では型付きツヌルのみを登録するセキュアモヌドで起動し、指定された䜜業ディレクトリ内にパスを制限したす。AI が実行できる操䜜を監査し、制玄したい利甚者に適しおいたす。

䞻な機胜

  1. 01型付きツヌルのみを提䟛する既定のセキュアモヌド
  2. 02working_directory 内ぞのパス制限
  3. 03ファむル読み取り、grep、glob、git 参照のツヌル
  4. 04曞き蟌み機胜ずスクリプトは明瀺的な有効化が必芁
  5. 05Docker むメヌゞず YAML によるセキュリティ蚭定

掻甚シヌン

  1. 01固定ディレクトリ内でのコヌド怜玢ず git 履歎の確認を LLM に任せる
  2. 02曞き蟌みを有効にした䞊での、制埡されたファむル線集ずコミット
  3. 03MCP_SHELL_ALLOW_UNSAFE を甚いたロヌカル開発環境での生のシェルアクセス

MCP 察応

本プロゞェクトは MCP サヌバヌであり、ファむル、怜玢、git の型付きツヌルを MCP クラむアントに公開したす。制限のないモヌドでは shell_exec ツヌルのみを公開したす。

蚭定

ロヌカルサヌバヌの蚭定はどのクラむアントでも共通です。コピヌしおクラむアントの MCP 蚭定ファむルに貌り付けおください。

mcp.json · 共通蚭定
{
"mcpServers": {
"shell": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"sonirico/mcp-shell:latest"
]
}
}
}
起動コマンドdocker run -i --rm sonirico/mcp-shell:latest

ロヌカルサヌバヌにはマシン䞊の実行環境Node.js 18 以䞊などが必芁です。蚭定ファむルの堎所はクラむアントごずに異なりたす。

パッケヌゞ
ocisonirico/mcp-shell:latest

ツヌル

ツヌル䞀芧はただ取埗されおいたせん

ロヌカルサヌバヌのツヌルはマシン䞊で起動しお初めお取埗できたす。メンテナヌはただツヌル䞀芧を提䟛しおいたせん。

詳现

mcp-shell

Trust Score glama

シェルコマンドを実行する MCP サヌバヌです。LLM にはツヌルを提䟛し、䜕をどのように実行するかはナヌザヌが制埡できたす。

mark3labs/mcp-go を基盀ずしおいたす。Go で蚘述されおいたす。


実行方法

Docker最も簡単

docker run -it --rm -v /tmp/mcp-workspace:/tmp/mcp-workspace sonirico/mcp-shell:latest

゜ヌスから

git clone https://github.com/sonirico/mcp-shell && cd mcp-shell
make install
mcp-shell

蚭定方法

デフォルトではセキュアモヌドです。 蚭定ファむルがない堎合、mcp-shell はセキュアモヌドで起動し、型付きツヌルのみを登録したす。型付きツヌルには、ファむルの読み取り、grepglob、git の調査、およびオプトむンで有効にするファむルgit の曞き蟌みず、オペレヌタヌ定矩のスクリプトが含たれたす。生のシェルコマンドはありたせん。以䞋のデフォルト蚭定を倉曎する堎合にのみ、蚭定ファむルが必芁です。制限を完党になくしお実行するには、明瀺的にオプトむンする必芁がありたす。

MCP_SHELL_ALLOW_UNSAFE=1 mcp-shell   # disables secure mode; the only tool is shell_exec

ポリシヌをカスタマむズするには、YAML 蚭定ファむルを指定したす。

export MCP_SHELL_SEC_CONFIG_FILE=/path/to/security.yaml
mcp-shell

セキュアモヌドデフォルト— 型付きツヌルのみを䜿甚し、すべおのパスを working_directory 内に制限したす。

security:
  enabled: true
  working_directory: /tmp/mcp-workspace
  max_execution_time: 30s
  max_output_size: 1048576
  run_as_user: ""
  audit_log: true

  # Expose file and git write tools (write_file, edit_file, mkdir, move,
  # delete, git_add, git_commit, git_switch, git_restore, git_stash). Off by
  # default.
  writes_enabled: false

  # Operator-defined scripts exposed through the run_script tool. The client
  # picks a name; the argv is yours and cannot be altered.
  # scripts:
  #   test: ["go", "test", "./..."]
  #   lint: ["golangci-lint", "run"]

接続方法

Claude Desktop — MCP 蚭定に远加したす。

{
  "mcpServers": {
    "shell": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "sonirico/mcp-shell:latest"],
      "env": { "MCP_SHELL_LOG_LEVEL": "info" }
    }
  }
}

カスタム蚭定の堎合は、ファむルをマりントしお環境倉数を蚭定したす。

{
  "command": "docker",
  "args": ["run", "--rm", "-i", "-v", "/path/to/security.yaml:/etc/mcp-shell/security.yaml", "-e", "MCP_SHELL_SEC_CONFIG_FILE=/etc/mcp-shell/security.yaml", "sonirico/mcp-shell:latest"]
}

ツヌル

セキュアモヌドデフォルトでは、以䞋の型付きツヌルが登録されたす。* は必須パラメヌタヌを瀺したす。

ツヌルパラメヌタヌ利甚可胜な条件
read_filepath*, offset, limit, tail垞時
list_dirpath, depth, include_hidden垞時
globpattern*, path, newer_than, max_results垞時
greppattern*, path, glob, ignore_case, context, files_only, count, max_results垞時
statpath*垞時
diff_filespath_a*, path_b*垞時
system_info垞時
git_status垞時
git_logmax_count, ref, path, author, grep, since, until, oneline, follow垞時
git_diffref, ref_to, staged, path, stat_only, name_only垞時
git_showref, path, stat_only垞時
git_blamepath*, ref, line_start, line_end垞時
git_branchesall, merged垞時
git_tagspattern垞時
git_rev_parseref*垞時
git_ls_filespath, untracked垞時
git_stash_list垞時
git_remotes垞時
write_filepath*, content*, appendwrites_enabled
edit_filepath*, old_string*, new_string*, replace_allwrites_enabled
mkdirpath*writes_enabled
movefrom*, to*writes_enabled
deletepath*, recursivewrites_enabled
git_addpaths, allwrites_enabled
git_commitmessage*, allwrites_enabled
git_switchbranch*, createwrites_enabled
git_restorepaths*, stagedwrites_enabled
git_stashaction*, messagewrites_enabled
run_scriptname*scripts

すべおのパスパラメヌタヌは working_directory を基準に解決されたすシンボリックリンクはたどりたす。その範囲倖のパスは拒吊されたす。Git のパスず参照は䜍眮匕数ずしお枡され、怜蚌されたす。- で始たる参照は拒吊されたす。ネットワヌクツヌルはありたせん。push、fetch、clone は提䟛されたせん。

制限なしモヌドshell_exec は MCP_SHELL_ALLOW_UNSAFE=1 の堎合にのみ利甚できたす。蚭蚈䞊、怜蚌を行わずに bash -c でコマンドを実行したす。このモヌドで登録されるツヌルはこれだけです。


環境倉数

倉数説明
MCP_SHELL_SEC_CONFIG_FILEセキュリティ YAML のパス組み蟌みのセキュアなデフォルト蚭定を䞊曞きしたす
MCP_SHELL_ALLOW_UNSAFE1たたは trueを蚭定するず、セキュアモヌドを無効にし、型付きツヌルの代わりに shell_exec を公開したすオプトむン
MCP_SHELL_SERVER_NAMEサヌバヌ名デフォルト"mcp-shell 🐚"
MCP_SHELL_LOG_LEVELdebug、info、warn、error、fatal
MCP_SHELL_LOG_FORMATjson、console
MCP_SHELL_LOG_OUTPUTstdout、stderr、file

開発

make install dev-tools   # deps + goimports, golines
make fmt test lint
make docker-build       # build image locally
make release            # binary + docker image

セキュリティ

  • デフォルトセキュアモヌドです。サヌバヌが各コマンドの argv をすべお組み立お、クラむアントがシェル文字列を枡すこずはありたせん。型付きツヌルのみが登録されたす。
  • パスの制限すべおのパスパラメヌタヌは working_directory を基準に解決され、シンボリックリンクもたどりたす。解決先が working_directory の倖になるパスは拒吊されたす。
  • Git の匷化パスは -- の埌に、参照は --end-of-options の埌に枡され、- で始たる参照は拒吊されたす。Git は GIT_CONFIG_NOSYSTEM=1、GIT_CONFIG_GLOBAL=/dev/null を蚭定し、core.fsmonitor、core.pager、core.hooksPath を無効化したうえで、log/diff/show/blame に --no-ext-diff --no-textconv を指定しお実行されたす。
  • 最小限の環境子プロセスに枡されるのは PATH、HOME、LANG のみで、サヌバヌ自身の環境倉数や .env のシヌクレットは枡されたせん。
  • 曞き蟌みずスクリプトはオプトむンwrites_enabled: true にするずファむルGit の曞き蟌みツヌルが利甚可胜になり、空でない scripts マップを蚭定するず run_script が利甚可胜になりたす。どちらもデフォルトでは無効です。
  • 無制限モヌドMCP_SHELL_ALLOW_UNSAFE=1 を蚭定した堎合に限られたす。登録されるツヌルは shell_exec のみで、怜蚌なしに bash -c を実行したす。ロヌカル開発には適しおいたすが、それ以倖では危険です。
  • Dockerroot 以倖のナヌザヌで実行される、Alpine ベヌスのむメヌゞです。本番環境で䜿甚しおください。倚局防埡ずしお、OS サンドボックス読み取り専甚 FS、ケヌパビリティの削陀ずの䜵甚が最適です。

脅嚁モデル、保蚌内容、脆匱性報告の察象範囲に぀いおは SECURITY.md をご芧ください。アドバむザリを提出する前にお読みください。


0.x からの移行

セキュアモヌドでは shell_exec のコマンド文字列を怜蚌しなくなり、代わりに型付きツヌルを公開したす。蚭定ファむルの security: ブロックでは、次のキヌを受け付けなくなりたした。

削陀されたキヌ眮き換え
use_shell_execution䞍芁です。型付きツヌルはシェルを実行したせん
allowed_executables䞍芁です。各ツヌルはサヌバヌが組み立おた固定の argv を実行したす
allowed_commands䞍芁です。䞊蚘ず同じです
blocked_commands䞍芁です。䞊蚘ず同じです
blocked_patterns䞍芁です。䞊蚘ず同じです

これらのキヌのいずれかを蚭定したたた蚭定ファむルを読み蟌むず、キヌ名を含む゚ラヌが発生しお起動に倱敗したす。「レガシヌモヌド」はなくなり、security-legacy.yaml のサンプルもありたせん。生のシェルアクセスが必芁な堎合は、MCP_SHELL_ALLOW_UNSAFE=1 を蚭定するず shell_exec が再び利甚可胜になりたす。このツヌルは、もはや security: ブロックによる制限を䞀切受けたせん。


貢献

フォヌクしおブランチを䜜成し、make fmt test を実行しおから、PR を䜜成しおください。

コメント

MCP は初めおですか

プロトコルの抂芁から最初のサヌバヌの導入たで、よくある疑問にたずめお答えたす。

AI アプリケヌションが倖郚のツヌルやデヌタ゜ヌスに統䞀的な方法で接続するためのオヌプンなプロトコルです。クラむアントはモデルずの察話を担い、MCP サヌバヌはツヌル・リ゜ヌス・プロンプトテンプレヌトを提䟛したす。暙準メッセヌゞでやり取りするため、1 ぀のサヌバヌを耇数のクラむアントで再利甚できたす。