MCP ターミナルサーバー
モデルコンテキストプロトコル(MCP)を実装した安全なターミナル実行サーバー。このサーバーは、セキュリティ機能とリソース制限を備えた制御されたコマンド実行機能を提供します。
特徴
- コマンド実行: 出力キャプチャとエラー処理を備えたシェルコマンドを実行します。
- セキュリティ制御: 許可されたコマンドを制限し、コマンドインジェクションを防止する
- リソース制御:
- MCP プロトコルサポート:
- 標準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 をインストールします(まだインストールされていない場合)。
- UV を使用してパッケージをインストールします。
uv pip install mcp-terminal
- Claude 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ファイルを参照してください。