Skip to content

Commit 02998ed

Browse files
occhanggeswarjal
andauthored
feat(aws-transform-mcp-server): add AWS Transform MCP server (#3282)
* feat(aws-transform-mcp-server): add AWS Transform MCP server Python MCP server for AWS Transform enabling AI coding assistants to manage the full transformation lifecycle — workspaces, jobs, connectors, HITL tasks, artifacts, chat, and agent registry — directly from the IDE. 25 tools across 14 handlers. Dual auth: FES (cookie/SSO bearer) and TCP (SigV4). 413 tests passing. Pyright and Ruff clean. Port of internal TypeScript codebase (ATXCustomerFacingMcpV2) aligned with the awslabs/mcp monorepo Python architecture. Ref: RFC #2811 * refactor(aws-transform-mcp-server): remove poll_message, agent_registry, and connector tools; use send_message for job status Port of internal commit cac188d: replace poll_message with send_message for job status queries, remove agent_registry and connector tools, simplify get_resource and list_resources, improve audit logging. * feat(aws-transform-mcp-server): add get_job_status tool for IDE agent polling Add a new get_job_status tool that returns a unified job status snapshot (job metadata, worklogs, HITL tasks, messages, plan steps) in a single call. The tool includes _pollingGuidance in the response to instruct IDE agents to automatically poll every minute until the job reaches a terminal state. - Parallel FES calls via asyncio.gather for low latency - Server-side HITL task filtering for actionable statuses only - [CRITICAL] directives in tool description and suggestedAction output to prevent the IDE agent from ending its turn between polls - 9 tests covering all paths (terminal, in-progress, HITL, failures) * fix(aws-transform-mcp-server): add .python-version and bump pytest to fix CI Add missing .python-version file required by actions/setup-python and bump pytest from >=8.0.0 to >=9.0.3 to resolve GHSA-6w46-j5rx-g56g (insecure tmpdir handling). * add fes client and remove get_job_status * fix the fes json file * Revert "fix the fes json file" This reverts commit 90f2890. * Revert "add fes client and remove get_job_status" This reverts commit e792c6c. * refactor(aws-transform-mcp-server): auto-detect AWS credentials, remove configure_sigv4 Replace the frozen credential snapshot pattern with boto3 auto-detection. AWS credentials are now resolved from the standard credential chain (AWS_PROFILE, env vars, ~/.aws/credentials, instance profile) on every TCP call, matching the pattern used by aws-api-mcp-server, eks-mcp-server, and all other boto3-dependent servers in the monorepo. - Remove configure_sigv4 tool — credentials no longer need explicit configuration via a tool call - Move STS validation into get_status — shows accountId, ARN, stage, region, and TCP endpoint - Refactor tcp_client.py to resolve credentials per call via AwsHelper.create_session() instead of reading from frozen SigV4Config - Consolidate session/region helpers into AwsHelper class - Simplify accept_connector — infer awsAccountId from boto3 credentials via STS, remove it as a required parameter - Clean up config_store.py — remove SigV4Config state management - Update README, CHANGELOG, server instructions, and tests * feat(aws-transform-mcp-server): add gated SigV4 FES auth with startup probe Add SigV4 authentication support for FES API calls, gated behind SIGV4_FES_ENABLED = False in consts.py. When enabled, the server probes FES with SigV4 at startup and falls back to SigV4 for all FES tool calls when no cookie/SSO config exists. - Add call_fes_direct_sigv4 using manual SigV4 signing via AwsHelper - Add _probe_sigv4_fes startup probe with 6s timeout, 0 retries - Combine load_persisted_config + probe into single asyncio.run(_startup) - Add is_fes_available() guard — returns True if cookie/SSO OR SigV4 works - Update all tool handlers from is_configured to is_fes_available - Only disable SigV4 on 401/403 auth failures, not transient errors - Validate ATX_STAGE against allowlist to prevent endpoint injection - Eliminate duplicate session creation by passing region to SigV4 calls - Use existing session for STS in accept_connector - Separate ValueError from credential errors in get_status - Add get_status sigv4Fes section showing probe result - Add 13 SigV4 FES tests (probe, direct call, fallback, stage validation) - Add 3 accept_connector tests and AwsHelper cache test - Fix test mocks to use proper STS return values * test(aws-transform-mcp-server): increase test coverage from 86% to 94% Add tests for uncovered code paths across 9 test files: - test_audit.py (new): _safe_args, audited_tool wrapper logging, _extract_error - test_file_validation.py (new): blocked dirs, blocked filenames, valid paths - test_upload_helper.py: upload_file_artifact happy path, file too large, S3 failure - test_connector.py: _build_verification_link, create_connector (5 paths) - test_hitl.py: download_agent_artifact (success, non-JSON, HTTP error, exception) - test_get_resource.py: task with artifact download, dynamic schema, messageIds - test_oauth.py: _open_browser platform dispatch, CallbackHandler edge cases - test_http_utils.py: error body JSON fallback, retry loop safety net - test_configure.py: cookie/SSO exceptions, bearer expiry, bad region, STS failure * feat(aws-transform-mcp-server): add typed FES boto3 client and rework get_job_status fallback * feat(aws-transform-mcp-server): add multi-region profile discovery and SSO login fix - Fan out ListAvailableProfiles across all FES regions (5s timeout each) to auto-discover profiles without requiring the user to know the service region - Add MCP elicitation-based profile selection with fallback to profileName param - Add switch_profile tool for changing profiles without re-authentication - Extract service region from applicationUrl instead of conflating IdC and FES regions - Replace single region param with idcRegion (SSO) and auto-extraction (cookie) - Add defensive AWS_PROFILE handling for empty/whitespace env values - Add token expiry check before fan-out in switch_profile - Remove debug print that corrupted stdio transport * Add adaptive polling tool and update instructions * Fix listing artifacts * test(aws-transform-mcp-server): increase test coverage from 93% to 98% Add tests for uncovered code paths in configure.py (switch_profile, _discover_profiles, elicitation), fes_client.py (boto3 helpers, token refresh, SigV4), hitl_schemas.py (preprocessors, schema builders, validators), and tool_utils.py (format helpers, download edge cases). * reduce number of tools for hitl and move send message to get job status * fix(aws-transform-mcp-server): quote OAuth URL in Windows browser open to prevent &-truncation On Windows, cmd.exe interprets '&' in URLs as a command separator, causing the OAuth authorize URL to be truncated at the first query parameter. This drops client_id, code_challenge, and other PKCE parameters, resulting in "Client ID is required" errors on the IdC login page. Switch from list-form subprocess.Popen(['cmd', '/c', 'start', '', url]) to a quoted shell string: cmd /c start "" "{url}" which prevents cmd.exe from splitting on '&'. Also adds Windows Installation section to README with the standard uvx --from pattern used by other awslabs MCP servers. * fix(aws-transform-mcp-server): suppress Bandit B602 for Windows browser open The shell=True is required to properly quote the OAuth URL and prevent cmd.exe from interpreting '&' as a command separator. The URL is built internally from the OIDC authorization endpoint, not from user input. * fix vmware connector bugs * fix(aws-transform-mcp-server): resolve Semgrep subprocess-shell-true and logger-credential-leak findings Replace subprocess.Popen shell=True with os.startfile (Win32 ShellExecute) for the Windows browser-open path, eliminating the shell injection surface. Rephrase log message to avoid triggering credential-disclosure false positive. * defer downloading huge hitl artifacts and fix bug with connector selection * Remove Gamma access from mcp * feat(aws-transform-mcp-server): remove SIGV4_FES_ENABLED client-side … (#15) * feat(aws-transform-mcp-server): remove SIGV4_FES_ENABLED client-side feature flag The FES service gates SigV4 access per-account via AppConfig, making the client-side flag redundant. The startup probe now runs unconditionally. Also avoids Semgrep credential-disclosure false positive by removing 'token' keyword from log message. * fix(aws-transform-mcp-server): set region on session before credential resolution Botocore's LoginProvider creates an internal signin service client during credential refresh which requires a region. Create the session with region_name resolved from the profile config to prevent NoRegionError during the SigV4 FES probe at startup. * fix(aws-transform-mcp-server): pass region to call_fes_direct_sigv4 in probe The probe resolved region but didn't pass it to call_fes_direct_sigv4, which then created its own regionless session internally — still triggering NoRegionError from botocore's LoginProvider. * fix(aws-transform-mcp-server): create SigV4 FES client with user profile and region _create_sigv4_client was using _service_model.create_session() which creates a botocore session with no profile or region. This caused NoRegionError when credential providers (LoginProvider) tried to create internal service clients during credential resolution. Fix: create a fresh botocore session with the user's AWS_PROFILE and region set, register the vendored FES model on it, then use it for the client. This allows credential resolution to succeed. Also reverts the workaround of passing region through from the probe and the create_session_with_region helper, since the root cause is now fixed at the client creation level. * fix(aws-transform-mcp-server): don't permanently disable SigV4 on 401/403 and report SigV4 in get_status - Remove set_sigv4_fes_available(False) on 401/403 in call_fes(). Both status codes indicate transient credential expiry, not permanent loss of access. SigV4 stays enabled until user explicitly runs configure (which takes priority via config presence). - Update get_status to report fes.configured=True with authMode=sigv4 when SigV4 FES is available, preventing the LLM from reflexively calling configure and downgrading auth. * test(aws-transform-mcp-server): add test for SSO config superseding SigV4 Verifies that when explicit SSO/cookie config exists, the SigV4 path is never used even if sigv4_fes_available is True. Ensures explicit configure takes priority over auto-detected SigV4. * fix(aws-transform-mcp-server): remove unused variable flagged by ruff F841 * fix(aws-transform-mcp-server): improve auth status messages and instructions - get_status now presents all 3 auth options (SigV4, SSO, cookie) in error messages instead of only mentioning configure. - Server instructions updated to list SigV4 as the first (zero-config) option and clarify that any ONE method is sufficient. - Added explicit instruction: if get_status shows a valid connection, do NOT call configure. - Error messages for region/credential issues now include actionable guidance (set AWS_PROFILE, AWS_REGION in env block). * refactor(aws-transform-mcp-server): remove dead try/except HttpError: raise * fix(aws-transform-mcp-server): revert SigV4 switch_profile, return honest error SigV4 profile switching cannot work because: 1. call_fes() derives its endpoint from AWS_REGION — switching to a profile in a different region has no effect on subsequent calls. 2. VerifySession without an Origin header only confirms IAM creds, not profile access. 3. No persistence mechanism for selected profile in SigV4 mode. Instead, return a clear error explaining the user should set AWS_REGION to match their desired profile's region and restart. * fix(aws-transform-mcp-server): fail early with clear message when SSO token expired and unrefreshable When bearer token is expired but refresh fields are missing, raise immediately with actionable guidance instead of making a doomed FES call that returns a raw 401. * fix(aws-transform-mcp-server): suppress CodeQL clear-text-logging false positive The OAuth authorize URL printed on browser-open failure contains only public values (PKCE challenge, state, redirect_uri) — not tokens or secrets. The URL must be shown for the user to complete login manually. * fix(aws-transform-mcp-server): fix security scan findings - Upgrade python-multipart 0.0.26 → 0.0.27 (GHSA-pp6c-gr5w-3c5g, DoS via unbounded multipart part headers). - Suppress CodeQL clear-text-logging false positives on OAuth authorize URL prints — these contain only public PKCE values, not credentials, and must be shown for manual browser login. * feat(aws-transform-mcp-server): add endpoint and scope env var overri… (#19) * feat(aws-transform-mcp-server): add endpoint and scope env var overrides for local testing Add ATX_FES_ENDPOINT, ATX_TCP_ENDPOINT, and ATX_OAUTH_SCOPE environment variable overrides to allow testing against non-production environments without exposing internal endpoint patterns in source code. Endpoint overrides support {region} template interpolation for multi-region fan-out (e.g. https://api.transform-gamma.{region}.on.aws/), or can be set as static URLs. Also re-derives fes_endpoint at call-time from config.region (matching TCP's existing pattern) so that toggling the env var takes effect immediately without stale values persisted to config.json. * fix(aws-transform-mcp-server): add Origin header to SigV4 FES path via profile discovery The SigV4 FES path never sent an Origin header, causing HTTP 403 "Invalid request origin" on operations that require it. Cookie and bearer paths always sent Origin from their stored ConnectionConfig. Replace the startup ListWorkspaces probe with a ListAvailableProfiles fan-out across all FES regions using SigV4. If exactly one profile is found, auto-select it and store origin/region in memory. If multiple profiles exist, store the list and raise ProfileSelectionRequired on first tool call (switch_profile SigV4 support in follow-up change). Also: TCP client now uses the discovered profile region as source of truth, falling back to AWS_REGION. * fix(aws-transform-mcp-server): use ListWorkspaces region discovery instead of ListAvailableProfiles ListAvailableProfiles requires instanceArn and bearerToken which SigV4 callers don't have (TransformControlPlaneActivity.java:67-77). Replace with ListWorkspaces fan-out across all FES regions — any non-error response means the account has a SigV4-enabled profile in that region. SigV4 callers don't need an Origin header (RequestExtractionHandler passes SigV4 through without Origin). The FES service resolves the profile server-side via SigV4ProfileResolutionHandler. Remove all Origin injection code from the SigV4 path. Also fix stale config bug: call clear_config() in _startup() when load_persisted_config() returns False, preventing an expired bearer config from blocking the SigV4 path in call_fes(). * feat(aws-transform-mcp-server): add SigV4 region selection to switch_profile When SigV4 auth is active with multiple discovered regions, switch_profile now presents the available regions for selection via MCP elicitation (with fallback to returning the list). Previously switch_profile rejected SigV4 callers entirely. * Add region to switch profile tool. Optional * refactor(aws-transform-mcp-server): address code review feedback on SigV4 implementation - Use str.replace() instead of str.format() for env var interpolation - Add list[str] type parameters to bare list annotations - Set asyncio.wait_for timeout to PROFILE_DISCOVERY_TIMEOUT_SECONDS + 2 as a safety net (inner boto3 timeout fires first) - Remove redundant inline import os as _os - Switch to ctx.elicit() from lower-level elicit_with_validation - Add region parameter to switch_profile for direct LLM invocation - Improve switch_profile region description for LLM tool-use clarity * style: apply ruff format to test_sigv4_fes.py * docs(README): add VPC configuration section and fix tool inventory (#20) * docs(README): add VPC configuration section and fix tool inventory Add comprehensive VPC section documenting required endpoints, PrivateLink service names, security group rules, and troubleshooting guidance for running the MCP server in a VPC without direct internet access. All endpoints verified against source code and official AWS documentation. Fix Available Tools section to match actual codebase: - Correct tool count from 21 to 19 - Remove phantom poll_message tool (send_message handles both) - Add missing tools: switch_profile, get_job_status, adaptive_poll - Add users to list_resources supported types - Update Features list to reflect actual capabilities * Update and remove fes from file anme * Update test mock * Update test * Update * Update name * update test * Update wording for connection / code owner / add agent header for client (#22) --------- Co-authored-by: eswarjal <eswarjgs@gmail.com>
1 parent ff98a81 commit 02998ed

84 files changed

Lines changed: 40238 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ NOTICE @awslabs/mcp-admi
4242
/src/aws-pricing-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @nspring00 @aytech-in @s12v
4343
/src/aws-serverless-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @bx9900 @bnusunny @reedham-aws @roger-zhangg @valerena @Vandita2020 @seshubaws @vicheey @tobixlea @licjun
4444
/src/aws-support-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @Wook133
45+
/src/aws-transform-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @occhangg @youtuyy @lexpanteli @linchenk369
4546
/src/bedrock-kb-retrieval-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @theagenticguy @pranjbh
4647
/src/billing-cost-management-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @chittev @Rahul-1404 @shsrams @johnwangwyx @somsubhro @wangyuhere @Comusus @bhatia-di @callnmm @anniewn @finklen-amazon
4748
/src/ccapi-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ Build, deploy, and manage cloud infrastructure with Infrastructure as Code best
180180
| [AWS Lambda Tool MCP Server](src/lambda-tool-mcp-server) | Execute Lambda functions as AI tools for private resource access | [![Install](https://img.shields.io/badge/Install-Kiro-9046FF?style=flat-square&logo=kiro)](https://kiro.dev/launch/mcp/add?name=awslabs.lambda-tool-mcp-server&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22awslabs.lambda-tool-mcp-server%40latest%22%5D%2C%22env%22%3A%7B%22AWS_PROFILE%22%3A%22your-aws-profile%22%2C%22AWS_REGION%22%3A%22us-east-1%22%2C%22FUNCTION_PREFIX%22%3A%22your-function-prefix%22%2C%22FUNCTION_LIST%22%3A%22your-first-function%2C%20your-second-function%22%2C%22FUNCTION_TAG_KEY%22%3A%22your-tag-key%22%2C%22FUNCTION_TAG_VALUE%22%3A%22your-tag-value%22%2C%22FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY%22%3A%22your-function-tag-for-input-schema%22%7D%7D) <br/>[![Install](https://img.shields.io/badge/Install-Cursor-blue?style=flat-square&logo=cursor)](https://cursor.com/en/install-mcp?name=awslabs.lambda-tool-mcp-server&config=eyJjb21tYW5kIjoidXZ4IGF3c2xhYnMubGFtYmRhLXRvb2wtbWNwLXNlcnZlckBsYXRlc3QiLCJlbnYiOnsiQVdTX1BST0ZJTEUiOiJ5b3VyLWF3cy1wcm9maWxlIiwiQVdTX1JFR0lPTiI6InVzLWVhc3QtMSIsIkZVTkNUSU9OX1BSRUZJWCI6InlvdXItZnVuY3Rpb24tcHJlZml4IiwiRlVOQ1RJT05fTElTVCI6InlvdXItZmlyc3QtZnVuY3Rpb24sIHlvdXItc2Vjb25kLWZ1bmN0aW9uIiwiRlVOQ1RJT05fVEFHX0tFWSI6InlvdXItdGFnLWtleSIsIkZVTkNUSU9OX1RBR19WQUxVRSI6InlvdXItdGFnLXZhbHVlIiwiRlVOQ1RJT05fSU5QVVRfU0NIRU1BX0FSTl9UQUdfS0VZIjoieW91ci1mdW5jdGlvbi10YWctZm9yLWlucHV0LXNjaGVtYSJ9fQ%3D%3D) <br/>[![Install on VS Code](https://img.shields.io/badge/Install-VS_Code-FF9900?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=AWS%20Lambda%20Tool%20MCP%20Server&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22awslabs.lambda-tool-mcp-server%40latest%22%5D%2C%22env%22%3A%7B%22AWS_PROFILE%22%3A%22your-aws-profile%22%2C%22AWS_REGION%22%3A%22us-east-1%22%2C%22FUNCTION_PREFIX%22%3A%22your-function-prefix%22%2C%22FUNCTION_LIST%22%3A%22your-first-function%2C%20your-second-function%22%2C%22FUNCTION_TAG_KEY%22%3A%22your-tag-key%22%2C%22FUNCTION_TAG_VALUE%22%3A%22your-tag-value%22%2C%22FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY%22%3A%22your-function-tag-for-input-schema%22%7D%7D) |
181181

182182

183+
#### Migration & Modernization
184+
185+
| Server Name | Description | Install |
186+
|-------------|-------------|---------|
187+
| [AWS Transform MCP Server](src/aws-transform-mcp-server) | Manage AWS Transform workspaces, jobs, connectors, HITL tasks, and artifacts for mainframe, VMware, .NET, and custom code transformations | [![Install](https://img.shields.io/badge/Install-Kiro-9046FF?style=flat-square&logo=kiro)](https://kiro.dev/launch/mcp/add?name=awslabs.aws-transform-mcp-server&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22awslabs.aws-transform-mcp-server%40latest%22%5D%2C%22env%22%3A%7B%22FASTMCP_LOG_LEVEL%22%3A%22ERROR%22%7D%7D) <br/>[![Install](https://img.shields.io/badge/Install-Cursor-blue?style=flat-square&logo=cursor)](https://cursor.com/en/install-mcp?name=awslabs.aws-transform-mcp-server&config=eyJjb21tYW5kIjoidXZ4IGF3c2xhYnMuYXdzLXRyYW5zZm9ybS1tY3Atc2VydmVyQGxhdGVzdCIsImVudiI6eyJGQVNUTUNQX0xPR19MRVZFTCI6IkVSUk9SIn0sImRpc2FibGVkIjpmYWxzZSwiYXV0b0FwcHJvdmUiOltdfQ==) <br/>[![Install on VS Code](https://img.shields.io/badge/Install-VS_Code-FF9900?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=AWS%20Transform%20MCP%20Server&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22awslabs.aws-transform-mcp-server%40latest%22%5D%2C%22env%22%3A%7B%22FASTMCP_LOG_LEVEL%22%3A%22ERROR%22%7D%2C%22disabled%22%3Afalse%2C%22autoApprove%22%3A%5B%5D%7D) |
188+
183189
#### Support
184190

185191
| Server Name | Description | Install |
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
title: AWS Transform MCP Server
3+
---
4+
5+
import ReadmeContent from "../../../src/aws-transform-mcp-server/README.md";
6+
7+
<div className="readme-content">
8+
<style>
9+
{`
10+
.readme-content h1:first-of-type {
11+
display: none;
12+
}
13+
`}
14+
</style>
15+
<ReadmeContent />
16+
</div>

docusaurus/sidebars.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ const sidebars: SidebarsConfig = {
4343
label: "Documentation",
4444
items: ["servers/aws-documentation-mcp-server"],
4545
},
46+
{
47+
type: "category",
48+
label: "Migration & Modernization",
49+
items: [
50+
"servers/aws-transform-mcp-server",
51+
],
52+
},
4653
{
4754
type: "category",
4855
label: "Infrastructure & Deployment",

docusaurus/static/assets/server-cards.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,29 @@
6262
}
6363
],
6464
"servers": [
65+
{
66+
"category": "Infrastructure & Deployment",
67+
"description": "Manage AWS Transform workspaces, jobs, connectors, HITL tasks, and artifacts for mainframe, VMware, .NET, and custom code transformations.",
68+
"icon": "\ud83d\udd04",
69+
"id": "aws-transform-mcp-server",
70+
"name": "AWS Transform MCP Server",
71+
"source_path": "src/aws-transform-mcp-server/",
72+
"subcategory": "Migration & Modernization",
73+
"tags": [
74+
"aws-transform",
75+
"migration",
76+
"modernization",
77+
"mainframe",
78+
"vmware",
79+
"dotnet",
80+
"hitl",
81+
"transformation"
82+
],
83+
"workflows": [
84+
"vibe-coding",
85+
"autonomous"
86+
]
87+
},
6588
{
6689
"category": "Essential Setup",
6790
"description": "Secure, auditable AWS operations with API access, documentation, Agent SOPs, and CloudTrail logging.",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.10
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.1.0] - 2026-05-07
9+
10+
### Added
11+
12+
- First release of AWS Transform MCP Server with 19 tools
13+
- **Configuration tools:**
14+
- `configure` — connect via session cookie or SSO/IdC bearer token (OAuth + PKCE)
15+
- `get_status` — check connection status, validate AWS credentials via STS, show server version
16+
- `switch_profile` — switch between regions when multiple credential-enabled profiles are discovered
17+
- **Workspace management:**
18+
- `create_workspace` — create a new transformation workspace
19+
- `delete_workspace` — delete a workspace with explicit confirmation
20+
- **Job management:**
21+
- `create_job` — create and start a transformation job
22+
- `control_job` — start or stop an existing job
23+
- `delete_job` — delete a job with explicit confirmation
24+
- **Job status and polling:**
25+
- `get_job_status` — check job status with AI-generated summary or detailed raw snapshot
26+
- `adaptive_poll` — wait then return a follow-up message for transitional states
27+
- **Chat:**
28+
- `send_message` — send a message to the Transform assistant and poll up to 60s for a reply
29+
- **HITL task management:**
30+
- `complete_task` — submit HITL task responses (APPROVE, REJECT, SEND_FOR_APPROVAL, SAVE_DRAFT) with schema validation and file upload
31+
- `upload_artifact` — upload files (JSON, ZIP, PDF, HTML, TXT) up to 500 MB
32+
- **Job instructions:**
33+
- `load_instructions` — load job-specific workflow instructions from the artifact store
34+
- **Connectors:**
35+
- `create_connector` — create an S3 or code source connector in a workspace
36+
- `accept_connector` — associate an IAM role with a connector (requires both Web API and AWS credentials)
37+
- **Resource browsing:**
38+
- `list_resources` — browse workspaces, jobs, connectors, tasks, artifacts, messages, worklogs, plan, agents, collaborators, users
39+
- `get_resource` — fetch a single resource with full details including HITL task output schema enrichment
40+
- **Collaborators:**
41+
- `manage_collaborator` — add or remove workspace collaborators
42+
- AWS credentials auto-detected from environment (AWS_PROFILE, credential chain) with multi-region discovery at startup
43+
- Persisted authentication state in `~/.aws-transform-mcp/config.json` with auto-load on restart
44+
- VPC configuration documentation with required endpoints, PrivateLink service names, and troubleshooting
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
2+
Apache License
3+
Version 2.0, January 2004
4+
http://www.apache.org/licenses/
5+
6+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7+
8+
1. Definitions.
9+
10+
"License" shall mean the terms and conditions for use, reproduction,
11+
and distribution as defined by Sections 1 through 9 of this document.
12+
13+
"Licensor" shall mean the copyright owner or entity authorized by
14+
the copyright owner that is granting the License.
15+
16+
"Legal Entity" shall mean the union of the acting entity and all
17+
other entities that control, are controlled by, or are under common
18+
control with that entity. For the purposes of this definition,
19+
"control" means (i) the power, direct or indirect, to cause the
20+
direction or management of such entity, whether by contract or
21+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
22+
outstanding shares, or (iii) beneficial ownership of such entity.
23+
24+
"You" (or "Your") shall mean an individual or Legal Entity
25+
exercising permissions granted by this License.
26+
27+
"Source" form shall mean the preferred form for making modifications,
28+
including but not limited to software source code, documentation
29+
source, and configuration files.
30+
31+
"Object" form shall mean any form resulting from mechanical
32+
transformation or translation of a Source form, including but
33+
not limited to compiled object code, generated documentation,
34+
and conversions to other media types.
35+
36+
"Work" shall mean the work of authorship, whether in Source or
37+
Object form, made available under the License, as indicated by a
38+
copyright notice that is included in or attached to the work
39+
(an example is provided in the Appendix below).
40+
41+
"Derivative Works" shall mean any work, whether in Source or Object
42+
form, that is based on (or derived from) the Work and for which the
43+
editorial revisions, annotations, elaborations, or other modifications
44+
represent, as a whole, an original work of authorship. For the purposes
45+
of this License, Derivative Works shall not include works that remain
46+
separable from, or merely link (or bind by name) to the interfaces of,
47+
the Work and Derivative Works thereof.
48+
49+
"Contribution" shall mean any work of authorship, including
50+
the original version of the Work and any modifications or additions
51+
to that Work or Derivative Works thereof, that is intentionally
52+
submitted to Licensor for inclusion in the Work by the copyright owner
53+
or by an individual or Legal Entity authorized to submit on behalf of
54+
the copyright owner. For the purposes of this definition, "submitted"
55+
means any form of electronic, verbal, or written communication sent
56+
to the Licensor or its representatives, including but not limited to
57+
communication on electronic mailing lists, source code control systems,
58+
and issue tracking systems that are managed by, or on behalf of, the
59+
Licensor for the purpose of discussing and improving the Work, but
60+
excluding communication that is conspicuously marked or otherwise
61+
designated in writing by the copyright owner as "Not a Contribution."
62+
63+
"Contributor" shall mean Licensor and any individual or Legal Entity
64+
on behalf of whom a Contribution has been received by Licensor and
65+
subsequently incorporated within the Work.
66+
67+
2. Grant of Copyright License. Subject to the terms and conditions of
68+
this License, each Contributor hereby grants to You a perpetual,
69+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70+
copyright license to reproduce, prepare Derivative Works of,
71+
publicly display, publicly perform, sublicense, and distribute the
72+
Work and such Derivative Works in Source or Object form.
73+
74+
3. Grant of Patent License. Subject to the terms and conditions of
75+
this License, each Contributor hereby grants to You a perpetual,
76+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77+
(except as stated in this section) patent license to make, have made,
78+
use, offer to sell, sell, import, and otherwise transfer the Work,
79+
where such license applies only to those patent claims licensable
80+
by such Contributor that are necessarily infringed by their
81+
Contribution(s) alone or by combination of their Contribution(s)
82+
with the Work to which such Contribution(s) was submitted. If You
83+
institute patent litigation against any entity (including a
84+
cross-claim or counterclaim in a lawsuit) alleging that the Work
85+
or a Contribution incorporated within the Work constitutes direct
86+
or contributory patent infringement, then any patent licenses
87+
granted to You under this License for that Work shall terminate
88+
as of the date such litigation is filed.
89+
90+
4. Redistribution. You may reproduce and distribute copies of the
91+
Work or Derivative Works thereof in any medium, with or without
92+
modifications, and in Source or Object form, provided that You
93+
meet the following conditions:
94+
95+
(a) You must give any other recipients of the Work or
96+
Derivative Works a copy of this License; and
97+
98+
(b) You must cause any modified files to carry prominent notices
99+
stating that You changed the files; and
100+
101+
(c) You must retain, in the Source form of any Derivative Works
102+
that You distribute, all copyright, patent, trademark, and
103+
attribution notices from the Source form of the Work,
104+
excluding those notices that do not pertain to any part of
105+
the Derivative Works; and
106+
107+
(d) If the Work includes a "NOTICE" text file as part of its
108+
distribution, then any Derivative Works that You distribute must
109+
include a readable copy of the attribution notices contained
110+
within such NOTICE file, excluding those notices that do not
111+
pertain to any part of the Derivative Works, in at least one
112+
of the following places: within a NOTICE text file distributed
113+
as part of the Derivative Works; within the Source form or
114+
documentation, if provided along with the Derivative Works; or,
115+
within a display generated by the Derivative Works, if and
116+
wherever such third-party notices normally appear. The contents
117+
of the NOTICE file are for informational purposes only and
118+
do not modify the License. You may add Your own attribution
119+
notices within Derivative Works that You distribute, alongside
120+
or as an addendum to the NOTICE text from the Work, provided
121+
that such additional attribution notices cannot be construed
122+
as modifying the License.
123+
124+
You may add Your own copyright statement to Your modifications and
125+
may provide additional or different license terms and conditions
126+
for use, reproduction, or distribution of Your modifications, or
127+
for any such Derivative Works as a whole, provided Your use,
128+
reproduction, and distribution of the Work otherwise complies with
129+
the conditions stated in this License.
130+
131+
5. Submission of Contributions. Unless You explicitly state otherwise,
132+
any Contribution intentionally submitted for inclusion in the Work
133+
by You to the Licensor shall be under the terms and conditions of
134+
this License, without any additional terms or conditions.
135+
Notwithstanding the above, nothing herein shall supersede or modify
136+
the terms of any separate license agreement you may have executed
137+
with Licensor regarding such Contributions.
138+
139+
6. Trademarks. This License does not grant permission to use the trade
140+
names, trademarks, service marks, or product names of the Licensor,
141+
except as required for reasonable and customary use in describing the
142+
origin of the Work and reproducing the content of the NOTICE file.
143+
144+
7. Disclaimer of Warranty. Unless required by applicable law or
145+
agreed to in writing, Licensor provides the Work (and each
146+
Contributor provides its Contributions) on an "AS IS" BASIS,
147+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148+
implied, including, without limitation, any warranties or conditions
149+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150+
PARTICULAR PURPOSE. You are solely responsible for determining the
151+
appropriateness of using or redistributing the Work and assume any
152+
risks associated with Your exercise of permissions under this License.
153+
154+
8. Limitation of Liability. In no event and under no legal theory,
155+
whether in tort (including negligence), contract, or otherwise,
156+
unless required by applicable law (such as deliberate and grossly
157+
negligent acts) or agreed to in writing, shall any Contributor be
158+
liable to You for damages, including any direct, indirect, special,
159+
incidental, or consequential damages of any character arising as a
160+
result of this License or out of the use or inability to use the
161+
Work (including but not limited to damages for loss of goodwill,
162+
work stoppage, computer failure or malfunction, or any and all
163+
other commercial damages or losses), even if such Contributor
164+
has been advised of the possibility of such damages.
165+
166+
9. Accepting Warranty or Additional Liability. While redistributing
167+
the Work or Derivative Works thereof, You may choose to offer,
168+
and charge a fee for, acceptance of support, warranty, indemnity,
169+
or other liability obligations and/or rights consistent with this
170+
License. However, in accepting such obligations, You may act only
171+
on Your own behalf and on Your sole responsibility, not on behalf
172+
of any other Contributor, and only if You agree to indemnify,
173+
defend, and hold each Contributor harmless for any liability
174+
incurred by, or claims asserted against, such Contributor by reason
175+
of your accepting any such warranty or additional liability.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
awslabs.aws-transform-mcp-server
2+
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

0 commit comments

Comments
 (0)