MCP ターミナルサーバー
モデルコンテキストプロトコル(MCP)を実装した安全なターミナル実行サーバー。このサーバーは、セキュリティ機能とリソース制限を備えた制御されたコマンド実行機能を提供します。
特徴
コマンド実行: 出力キャプチャとエラー処理を備えたシェルコマンドを実行します。
セキュリティ制御: 許可されたコマンドを制限し、コマンドインジェクションを防止する
リソース制御:
コマンドタイムアウト
最大出力サイズの制限
MCP プロトコルサポート:
標準MCPメッセージ形式
機能広告
ストリーミング出力のサポート
Related MCP server: Terminal Controller for MCP
発達
ローカルセットアップ
# Clone the repository
git clone https://github.com/RinardNick/mcp-terminal.git
cd mcp-terminal
# Create and activate virtual environment using uv
uv venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
# Install development dependencies
uv pip install -e ".[dev]"PyPIへの公開
# Build the package
uv pip install build
python -m build
# Upload to PyPI
uv pip install twine
python -m twine upload dist/*MCP Inspectorによるテスト
MCP Inspector ツールを使用して、サーバーの実装をテストできます。
# Install inspector
npm install -g @modelcontextprotocol/inspector
# Test server
npx @modelcontextprotocol/inspector python3 src/mcp_terminal/server.py --allowed-commands "python,pip,git,ls,cd"テストの実行
# Run all tests
pytest tests/
# Run specific test file
pytest tests/test_terminal.py
# Run with coverage
pytest --cov=mcp_terminal tests/Claude Desktopでの使用
パッケージが PyPI に公開されたら:
UV をインストールします(まだインストールされていない場合)。
pip install uvUV を使用してパッケージをインストールします。
uv pip install mcp-terminalClaude Desktop を構成する: Claude Desktop 構成ファイルを編集します (通常、macOS では
~/Library/Application Support/Claude/claude_desktop_config.jsonにあります)。{ "mcpServers": { "terminal": { "command": "uv", "args": [ "pip", "run", "mcp-terminal", "--allowed-commands", "python,pip,git,ls,cd", "--timeout-ms", "30000", "--max-output-size", "1048576" ] } } }
プロトコルの実装
サーバーは、次の機能を備えたモデル コンテキスト プロトコル (MCP) を実装します。
機能広告
{
"protocol": "1.0.0",
"name": "terminal",
"version": "1.1.0",
"capabilities": {
"execute": {
"description": "Execute a terminal command",
"parameters": {
"command": {
"type": "string",
"description": "The command to execute"
}
},
"returns": {
"type": "object",
"properties": {
"exitCode": { "type": "number" },
"stdout": { "type": "string" },
"stderr": { "type": "string" },
"startTime": { "type": "string" },
"endTime": { "type": "string" }
}
}
}
}
}メッセージ形式
リクエスト:
{
"type": "execute",
"data": {
"command": "echo 'hello world'"
}
}応答:
{
"type": "result",
"data": {
"command": "echo 'hello world'",
"exitCode": 0,
"stdout": "hello world\n",
"stderr": "",
"startTime": "2024-01-20T12:34:56.789Z",
"endTime": "2024-01-20T12:34:56.790Z"
}
}エラー:
{
"type": "error",
"data": {
"message": "command not allowed"
}
}セキュリティに関する考慮事項
コマンド検証:
許可されたコマンドのみ実行できます
シェル演算子はブロックされています
コマンドインジェクションの試みは阻止される
資源保護:
コマンドタイムアウトによりハングアップを防止
出力サイズの制限によりメモリ不足を防止
すべての失敗ケースに対するエラー処理
ベストプラクティス:
本番環境では常に
allowed-commandsを設定する控えめなタイムアウトとサイズ制限を使用する
コマンド実行ログを監視する
貢献
リポジトリをフォークする
機能ブランチを作成します(
git checkout -b feature/amazing-feature)変更をコミットします (
git commit -m 'Add some amazing feature')ブランチにプッシュする (
git push origin feature/amazing-feature)プルリクエストを開く
ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。