Skip to main content

A smart Agent-to-Server Bridge connecting AI agents to remote environments as an MCP server and REST API.

Project description

Gangway

A smart Agent-to-Server Bridge connecting AI agents (like Cursor and Claude Desktop) to remote environments (VPS, Kaggle, Colab) for full control, functioning as both an MCP server and a REST API.

Features

  • Directory State Management: Maintains and tracks the active working directory (CWD) across execution contexts, resolving relative paths and enforcing sandbox directory checks (allowed_root) to prevent path traversal.
  • Background Job Control: Execute long-running shell commands asynchronously. Captures logs (stdout and stderr) to disk. Supports recursive process tree termination (on Unix and Windows) and prevents PID recycling exploits.
  • Robust MCP Server: Provides standard stdio transport and SSE (Server-Sent Events) HTTP transport modes using Starlette and Uvicorn.
  • Bearer Token Authentication: Enforces token authentication case-insensitively in headers or query parameters for SSE transport.
  • Zero-Dependency Core: Leverages the low-level mcp library, standard libraries, starlette, uvicorn, psutil, and tomli.

Installation

Install from your local build or PyPI:

pip install gangway

Run with uvx (No Installation Required)

You can run Gangway as an MCP server instantly without installing it globally using uvx:

uvx gangway --transport stdio --token YOUR_SECRET_TOKEN --allowed-root /path/to/sandbox

Configuration

Gangway can be configured via Environment Variables, JSON/TOML configuration files, or CLI arguments (CLI arguments take the highest precedence).

Configuration Parameters

CLI Argument Environment Variable Configuration Key Default Description
--token GANGWAY_TOKEN token None Bearer token required for authentication.
--allowed-root GANGWAY_ALLOWED_ROOT allowed_root None Limit directory interactions to this root path.
--port GANGWAY_PORT port 8000 Port to run the SSE web server on.
--host GANGWAY_HOST host 127.0.0.1 Host address to bind the SSE server to.
--transport - - stdio Transport mode (stdio or sse).

CLI Usage

To run the server using stdio transport:

gangway --transport stdio --token secret-token --allowed-root /path/to/sandbox

To run the server using sse transport:

gangway --transport sse --host 127.0.0.1 --port 8000 --token secret-token --allowed-root /path/to/sandbox

Using a configuration file:

gangway --config /path/to/config.toml --transport sse

Register in AI Clients (Claude Desktop / Cursor)

Claude Desktop

Add the following to your claude_desktop_config.json (usually located at %APPDATA%\Claude\claude_desktop_config.json on Windows or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "gangway": {
      "command": "uvx",
      "args": [
        "gangway",
        "--transport", "stdio",
        "--token", "YOUR_SECRET_TOKEN",
        "--allowed-root", "/path/to/sandbox"
      ]
    }
  }
}

Cursor / VSCode

  1. Open Cursor Settings -> Features -> MCP.
  2. Click + Add New MCP Server.
  3. Enter:
    • Name: gangway
    • Type: command
    • Command: uvx gangway --transport stdio --token YOUR_SECRET_TOKEN --allowed-root /path/to/sandbox

Exposed MCP Tools

Gangway exposes 16 tools to connecting AI agents:

File Operations

  1. list_directory: Lists directory contents, returning file size and modification time.
  2. glob_search: Performs recursive file searches using glob patterns.
  3. preview_file: Safely previews a file by returning the first N lines and last M lines, avoiding token pollution.
  4. project_overview: Scans files up to depth 3, lists the 10 most recently modified files, and reads README.md.
  5. upload_chunk: Uploads base64-encoded file chunks for remote storage.
  6. assemble_upload: Assembles uploaded file chunks into a single file.
  7. download_chunk: Downloads a chunk of a remote file.
  8. compress_archive: Compresses a target directory into a .zip, .tar.gz, or .tgz archive.
  9. extract_archive: Extracts a .zip or .tar.gz archive to a target directory.

Directory State

  1. get_working_directory: Returns the current active working directory (CWD).
  2. change_working_directory: Changes the active working directory (validates against allowed root).

Background Jobs

  1. start_background_job: Spawns a command asynchronously in the background.
  2. get_job_status: Gets metadata, exit code, and run status of a job.
  3. list_background_jobs: Lists all background jobs sorted chronologically.
  4. read_job_logs: Previews logs for a specific background job.
  5. kill_background_job: Recursively kills a background job's process tree.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gangway-0.1.1.tar.gz (115.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gangway-0.1.1-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file gangway-0.1.1.tar.gz.

File metadata

  • Download URL: gangway-0.1.1.tar.gz
  • Upload date:
  • Size: 115.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for gangway-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6e70e9d0dbd326a0d350b5140515cecd6d8e568fe3a049d0ab09c927c091d94b
MD5 101776e48477d052a027095c3f117c49
BLAKE2b-256 99b59d40f702c166c50197fcf9c9f98b95b85a343bc644f631cd7ad04065870d

See more details on using hashes here.

File details

Details for the file gangway-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: gangway-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for gangway-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5a3319155c11f3fd0336c2a961ee759676404e450f7460843b8884f99a31bcca
MD5 9eca133fc3a5e38998612d9c526d06ac
BLAKE2b-256 5c312314b734f30ae43cb6f4549740d03d8f20f3c3ec444d4e7e4b25cf9c9975

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page