Skip to main content
Glama
RinardNick

MCP Terminal Server

by RinardNick

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 に公開されたら:

  1. UV をインストールします(まだインストールされていない場合)。

    pip install uv
  2. UV を使用してパッケージをインストールします

    uv pip install mcp-terminal
  3. 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"
  }
}

セキュリティに関する考慮事項

  1. コマンド検証:

    • 許可されたコマンドのみ実行できます

    • シェル演算子はブロックされています

    • コマンドインジェクションの試みは阻止される

  2. 資源保護

    • コマンドタイムアウトによりハングアップを防止

    • 出力サイズの制限によりメモリ不足を防止

    • すべての失敗ケースに対するエラー処理

  3. ベストプラクティス:

    • 本番環境では常にallowed-commandsを設定する

    • 控えめなタイムアウトとサイズ制限を使用する

    • コマンド実行ログを監視する

貢献

  1. リポジトリをフォークする

  2. 機能ブランチを作成します( git checkout -b feature/amazing-feature

  3. 変更をコミットします ( git commit -m 'Add some amazing feature' )

  4. ブランチにプッシュする ( git push origin feature/amazing-feature )

  5. プルリクエストを開く

ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RinardNick/mcp-terminal'

If you have feedback or need assistance with the MCP directory API, please join our Discord server