go-aws-mcp-proxy

module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 22, 2026 License: Apache-2.0

README

Go AWS MCP Proxy

go-aws-mcp-proxy is an early Go rewrite of aws/mcp-proxy-for-aws.

The upstream project solves an important problem: it lets MCP clients connect to IAM-authenticated AWS MCP endpoints by signing MCP traffic with AWS SigV4. This project keeps that value proposition, but targets enterprise-friendly distribution and operation by shipping a native binary instead of requiring a Python and uv runtime at agent startup.

Project status: early functional proxy. The current implementation can bridge stdio MCP clients to remote Streamable HTTP AWS MCP endpoints, including a live unsigned smoke test against the AWS documentation MCP endpoint.

Why Rewrite It In Go?

The upstream proxy is distributed and documented as a Python package. The common install path is:

uvx mcp-proxy-for-aws@latest <SigV4 MCP endpoint URL>

Local development and release workflows also rely on uv, Python packaging, and Python runtime dependencies such as FastMCP, boto3, and botocore. That is a good fit for Python-first users, but it creates friction in locked-down corporate environments:

  • uvx may download Python and dependencies on first launch, which is hard to approve, cache, audit, or make deterministic for every MCP client workstation.
  • Corporate TLS interception often requires a managed CA bundle. Public issues in the AWS MCP ecosystem show users hitting CERTIFICATE_VERIFY_FAILED behind products such as Zscaler and Cloudflare WARP.
  • Every proxied local AWS MCP server that depends on uvx inherits the same runtime, network, and certificate-management problem.
  • A binary can be signed, checksummed, SBOM-scanned, mirrored internally, and installed without bootstrapping Python tooling inside every AI client.

Go gives us a smaller operational surface:

  • one binary per platform for the proxy;
  • standard AWS credential loading through the AWS SDK for Go v2;
  • system trust store support through Go's TLS stack, plus an explicit CA bundle option when a company does not want to install roots globally;
  • straightforward cross-platform CI and release builds.

What This Proxy Should Do

The first functional version should match the upstream proxy's core behavior before adding new surface area:

  • bridge a stdio MCP client to a remote Streamable HTTP MCP endpoint;
  • sign outgoing requests with AWS SigV4;
  • load AWS credentials from the normal AWS chain, including profiles and SSO;
  • support region, service, profile, timeout, retry, metadata, and read-only options compatible with the upstream CLI where practical;
  • provide clear logging for startup, credential, TLS, throttling, and upstream MCP errors;
  • fail loudly when upstream tool discovery is suspicious instead of silently returning an empty tool list after transient throttling.

Non-goals for the first version:

  • replacing every AWS MCP server immediately;
  • building a Go library API equivalent to the upstream Python library mode;
  • adding client-specific plugins before the binary CLI and flags stabilize.

Current Local Development

Build the application:

go run ./cmd/scripts build

The binary is written to ./bin/aws-mcp-proxy.

Run tests:

go run ./cmd/scripts test

Run the full local CI path:

go run ./cmd/scripts ci

Run the proxy:

go run ./cmd/aws-mcp-proxy <SigV4 MCP endpoint URL> [flags]

For example, the public AWS documentation MCP endpoint can be queried without SigV4 signing:

go run ./cmd/aws-mcp-proxy https://aws-mcp.us-east-1.api.aws/mcp --skip-auth

Run the live AWS documentation smoke test:

go run ./cmd/scripts/main.go smoke:aws-mcp --skip-auth

That smoke test lists upstream tools and calls aws___search_documentation with an Amazon S3 documentation query. It is the default live validation path because it does not require AWS credentials.

Run a signed smoke manually by passing a configured AWS profile:

go run ./cmd/scripts/main.go smoke:aws-mcp --skip-auth=false --profile <profile>

Install from a GitHub release on Linux or macOS:

curl -fsSL https://raw.githubusercontent.com/ajbeck/go-aws-mcp-proxy/main/install.sh | sh

Planning

The first implementation scope, workflow plan, AWS MCP server rewrite sequence, and plugin packaging recommendation are tracked in getting started.

Upstream Research Notes

The README update is based on these upstream observations:

  • aws/mcp-proxy-for-aws documents uvx mcp-proxy-for-aws@latest for normal use and uv run / uv sync for local development.
  • The upstream pyproject.toml declares Python >=3.10,<3.15 and dependencies on FastMCP, boto3, and botocore.
  • The upstream workflows install uv, run Python checks and tests, build Python distributions, publish to PyPI, and publish a container image to public ECR.
  • awslabs/mcp documents many local AWS MCP servers using uvx awslabs.<server>@latest.
  • Public issues document corporate TLS and certificate failures, including awslabs/mcp#773 and awslabs/mcp#2498.
  • Public proxy issues also point to reliability improvements worth designing in early, including aws/mcp-proxy-for-aws#287 and aws/mcp-proxy-for-aws#295.

Directories

Path Synopsis
cmd
aws-mcp-proxy command
scripts command
internal
cli
Package proxy runs an MCP stdio proxy for SigV4-protected AWS MCP servers.
Package proxy runs an MCP stdio proxy for SigV4-protected AWS MCP servers.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL