awslabs.cfn-mcp-server 1.0.3__py3-none-any.whl → 1.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- awslabs/cfn_mcp_server/cloud_control_utils.py +20 -4
- awslabs/cfn_mcp_server/server.py +4 -4
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/METADATA +1 -1
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/RECORD +8 -8
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/WHEEL +0 -0
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/entry_points.txt +0 -0
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/licenses/LICENSE +0 -0
- {awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/licenses/NOTICE +0 -0
|
@@ -33,19 +33,18 @@ def validate_patch(patch_document: list):
|
|
|
33
33
|
raise ClientError(f"The '{patch_op['op']}' operation requires a 'from' field")
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def progress_event(response_event) -> dict[str, str]:
|
|
36
|
+
def progress_event(response_event, hooks_events) -> dict[str, str]:
|
|
37
37
|
"""Map a CloudControl API response to a standard output format for the MCP."""
|
|
38
38
|
response = {
|
|
39
39
|
'status': response_event['OperationStatus'],
|
|
40
40
|
'resource_type': response_event['TypeName'],
|
|
41
|
-
'is_complete': response_event['OperationStatus'] == 'SUCCESS'
|
|
41
|
+
'is_complete': response_event['OperationStatus'] == 'SUCCESS'
|
|
42
|
+
or response_event['OperationStatus'] == 'FAILED',
|
|
42
43
|
'request_token': response_event['RequestToken'],
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
if response_event.get('Identifier', None):
|
|
46
47
|
response['identifier'] = response_event['Identifier']
|
|
47
|
-
if response_event.get('StatusMessage', None):
|
|
48
|
-
response['status_message'] = response_event['StatusMessage']
|
|
49
48
|
if response_event.get('ResourceModel', None):
|
|
50
49
|
response['resource_info'] = response_event['ResourceModel']
|
|
51
50
|
if response_event.get('ErrorCode', None):
|
|
@@ -55,4 +54,21 @@ def progress_event(response_event) -> dict[str, str]:
|
|
|
55
54
|
if response_event.get('RetryAfter', None):
|
|
56
55
|
response['retry_after'] = response_event['RetryAfter']
|
|
57
56
|
|
|
57
|
+
# CloudControl returns a list of hooks events which may also contain a message which should
|
|
58
|
+
# take precedent over the status message returned from CloudControl directly
|
|
59
|
+
hooks_status_message = None
|
|
60
|
+
if hooks_events:
|
|
61
|
+
failed_hook_event_messages = (
|
|
62
|
+
hook_event['HookStatusMessage']
|
|
63
|
+
for hook_event in hooks_events
|
|
64
|
+
if hook_event.get('HookStatus', None) == 'HOOK_COMPLETE_FAILED'
|
|
65
|
+
or hook_event.get('HookStatus', None) == 'HOOK_FAILED'
|
|
66
|
+
)
|
|
67
|
+
hooks_status_message = next(failed_hook_event_messages, None)
|
|
68
|
+
|
|
69
|
+
if hooks_status_message:
|
|
70
|
+
response['status_message'] = hooks_status_message
|
|
71
|
+
elif response_event.get('StatusMessage', None):
|
|
72
|
+
response['status_message'] = response_event['StatusMessage']
|
|
73
|
+
|
|
58
74
|
return response
|
awslabs/cfn_mcp_server/server.py
CHANGED
|
@@ -202,7 +202,7 @@ async def update_resource(
|
|
|
202
202
|
except Exception as e:
|
|
203
203
|
raise handle_aws_api_error(e)
|
|
204
204
|
|
|
205
|
-
return progress_event(response['ProgressEvent'])
|
|
205
|
+
return progress_event(response['ProgressEvent'], None)
|
|
206
206
|
|
|
207
207
|
|
|
208
208
|
@mcp.tool()
|
|
@@ -253,7 +253,7 @@ async def create_resource(
|
|
|
253
253
|
except Exception as e:
|
|
254
254
|
raise handle_aws_api_error(e)
|
|
255
255
|
|
|
256
|
-
return progress_event(response['ProgressEvent'])
|
|
256
|
+
return progress_event(response['ProgressEvent'], None)
|
|
257
257
|
|
|
258
258
|
|
|
259
259
|
@mcp.tool()
|
|
@@ -305,7 +305,7 @@ async def delete_resource(
|
|
|
305
305
|
except Exception as e:
|
|
306
306
|
raise handle_aws_api_error(e)
|
|
307
307
|
|
|
308
|
-
return progress_event(response['ProgressEvent'])
|
|
308
|
+
return progress_event(response['ProgressEvent'], None)
|
|
309
309
|
|
|
310
310
|
|
|
311
311
|
@mcp.tool()
|
|
@@ -347,7 +347,7 @@ async def get_resource_request_status(
|
|
|
347
347
|
except Exception as e:
|
|
348
348
|
raise handle_aws_api_error(e)
|
|
349
349
|
|
|
350
|
-
return progress_event(response['ProgressEvent'])
|
|
350
|
+
return progress_event(response['ProgressEvent'], response.get('HooksProgressEvent', None))
|
|
351
351
|
|
|
352
352
|
|
|
353
353
|
@mcp.tool()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: awslabs.cfn-mcp-server
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: An AWS Labs Model Context Protocol (MCP) server for doing common cloudformation tasks and for managing your resources in your AWS account
|
|
5
5
|
Project-URL: homepage, https://awslabs.github.io/mcp/
|
|
6
6
|
Project-URL: docs, https://awslabs.github.io/mcp/servers/cfn-mcp-server/
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
awslabs/__init__.py,sha256=47wJeKcStxEJwX7SVVV2pnAWYR8FxcaYoT3YTmZ5Plg,674
|
|
2
2
|
awslabs/cfn_mcp_server/__init__.py,sha256=83bE3XbvOF6sigHPxEk0J9k7lNU9bzTwoCLde-IKQNA,611
|
|
3
3
|
awslabs/cfn_mcp_server/aws_client.py,sha256=w0cwuQq7b34IUaABEwZYpEols1QoMjO2gd3T98K5FcE,2783
|
|
4
|
-
awslabs/cfn_mcp_server/cloud_control_utils.py,sha256=
|
|
4
|
+
awslabs/cfn_mcp_server/cloud_control_utils.py,sha256=LI7gEcQlQuHxEjfIKYaKwgN0Yha336n7GazVBCyx_rI,3714
|
|
5
5
|
awslabs/cfn_mcp_server/context.py,sha256=YpJZPjyzHW7df9O-lyj2j8yuenZI-yPxLuVuyvmnAnE,777
|
|
6
6
|
awslabs/cfn_mcp_server/errors.py,sha256=0ADg9EesPyvjNZD-J89QLQ5OFcD6aSKDaMfW_4RQjfo,4481
|
|
7
7
|
awslabs/cfn_mcp_server/iac_generator.py,sha256=iTZ6tM92m430GHM60lH1qR5nlRdhSbx2m0_WTbkU1f8,7881
|
|
8
8
|
awslabs/cfn_mcp_server/schema_manager.py,sha256=7dw2W2hgdn1ODRU5PrUmOG9_rvnKUhGD51q8Wz4Ksks,6775
|
|
9
|
-
awslabs/cfn_mcp_server/server.py,sha256=
|
|
10
|
-
awslabs_cfn_mcp_server-1.0.
|
|
11
|
-
awslabs_cfn_mcp_server-1.0.
|
|
12
|
-
awslabs_cfn_mcp_server-1.0.
|
|
13
|
-
awslabs_cfn_mcp_server-1.0.
|
|
14
|
-
awslabs_cfn_mcp_server-1.0.
|
|
15
|
-
awslabs_cfn_mcp_server-1.0.
|
|
9
|
+
awslabs/cfn_mcp_server/server.py,sha256=TFadYC3k1fa0h42dZnhE07DBSgmOvyncGWvDwYWpQaw,16797
|
|
10
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/METADATA,sha256=IVY_ukqh5kV3rQVwLlVONnPA_eG5Cqkg9KgsGRLVXns,9121
|
|
11
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
12
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/entry_points.txt,sha256=Hartc24s_fYgi3o2m2tBHahod0pqXYwpebQy2_tXL7s,78
|
|
13
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/licenses/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
|
|
14
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/licenses/NOTICE,sha256=bcw4NZAgn5eQZzrtuDiwOe23BRSm_JiRzn0gxBLDzlg,90
|
|
15
|
+
awslabs_cfn_mcp_server-1.0.4.dist-info/RECORD,,
|
|
File without changes
|
{awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{awslabs_cfn_mcp_server-1.0.3.dist-info → awslabs_cfn_mcp_server-1.0.4.dist-info}/licenses/NOTICE
RENAMED
|
File without changes
|