awslabs.cdk-mcp-server 0.1.2__tar.gz → 0.1.4__tar.gz
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_cdk_mcp_server-0.1.4/Dockerfile +75 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/PKG-INFO +24 -1
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/README.md +23 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/resources.py +104 -15
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/server.py +4 -3
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/tools.py +6 -1
- awslabs_cdk_mcp_server-0.1.4/awslabs/cdk_mcp_server/data/genai_cdk_loader.py +596 -0
- awslabs_cdk_mcp_server-0.1.4/docker-healthcheck.sh +12 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/pyproject.toml +1 -1
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/core/test_resources.py +65 -24
- awslabs_cdk_mcp_server-0.1.4/tests/core/test_resources_enhanced.py +257 -0
- awslabs_cdk_mcp_server-0.1.4/tests/core/test_search_utils.py +200 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/core/test_server.py +11 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/core/test_tools.py +1 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/data/test_cdk_nag_parser.py +11 -0
- awslabs_cdk_mcp_server-0.1.4/tests/data/test_genai_cdk_loader.py +448 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/data/test_lambda_powertools_loader.py +11 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/data/test_schema_generator.py +11 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/data/test_solutions_constructs_parser.py +11 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/uv.lock +447 -447
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/data/genai_cdk_loader.py +0 -437
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/actiongroups.md +0 -137
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/alias.md +0 -39
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/collaboration.md +0 -91
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/creation.md +0 -149
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/custom_orchestration.md +0 -74
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/overview.md +0 -78
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/agent/prompt_override.md +0 -70
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/bedrockguardrails.md +0 -188
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/chunking.md +0 -137
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/datasources.md +0 -225
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/kendra.md +0 -81
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/overview.md +0 -116
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/parsing.md +0 -36
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/transformation.md +0 -30
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/vector/aurora.md +0 -185
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/vector/creation.md +0 -80
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/vector/opensearch.md +0 -56
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/knowledgebases/vector/pinecone.md +0 -66
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/bedrock/profiles.md +0 -153
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/opensearch-vectorindex/overview.md +0 -135
- awslabs_cdk_mcp_server-0.1.2/awslabs/cdk_mcp_server/static/genai_cdk/opensearchserverless/overview.md +0 -17
- awslabs_cdk_mcp_server-0.1.2/tests/core/test_search_utils.py +0 -77
- awslabs_cdk_mcp_server-0.1.2/tests/data/test_genai_cdk_loader.py +0 -345
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/.gitignore +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/.pre-commit-config.yaml +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/.python-version +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/CHANGELOG.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/LICENSE +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/NOTICE +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/__init__.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/__init__.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/__init__.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/search_utils.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/__init__.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/cdk_nag_parser.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/construct_descriptions.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/lambda_layer_parser.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/lambda_powertools_loader.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/schema_generator.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/data/solutions_constructs_parser.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/server.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/CDK_GENERAL_GUIDANCE.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/CDK_NAG_GUIDANCE.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/__init__.py +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/bedrock.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/cdk.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/dependencies.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/index.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/insights.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/logging.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/metrics.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/static/lambda_powertools/tracing.md +0 -0
- {awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/tests/__init__.py +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
4
|
+
# with the License. A copy of the License is located at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
9
|
+
# OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
10
|
+
# and limitations under the License.
|
|
11
|
+
|
|
12
|
+
#FROM public.ecr.aws/sam/build-python3.10:1.137.1-20250411084548
|
|
13
|
+
FROM public.ecr.aws/sam/build-python3.10@sha256:a40f492a0cd8d76557f8a187fc00e49e8864b3cea683e74718ce317790c1ce61 AS uv
|
|
14
|
+
|
|
15
|
+
# Install the project into `/app`
|
|
16
|
+
WORKDIR /app
|
|
17
|
+
|
|
18
|
+
# Enable bytecode compilation
|
|
19
|
+
ENV UV_COMPILE_BYTECODE=1
|
|
20
|
+
|
|
21
|
+
# Copy from the cache instead of linking since it's a mounted volume
|
|
22
|
+
ENV UV_LINK_MODE=copy
|
|
23
|
+
|
|
24
|
+
# Prefer the system python
|
|
25
|
+
ENV UV_PYTHON_PREFERENCE=only-system
|
|
26
|
+
|
|
27
|
+
# Run without updating the uv.lock file like running with `--frozen`
|
|
28
|
+
ENV UV_FROZEN=true
|
|
29
|
+
|
|
30
|
+
# Copy the required files first
|
|
31
|
+
COPY pyproject.toml uv.lock ./
|
|
32
|
+
|
|
33
|
+
# Install the project's dependencies using the lockfile and settings
|
|
34
|
+
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
35
|
+
pip install uv && \
|
|
36
|
+
uv sync --frozen --no-install-project --no-dev --no-editable
|
|
37
|
+
|
|
38
|
+
# Then, add the rest of the project source code and install it
|
|
39
|
+
# Installing separately from its dependencies allows optimal layer caching
|
|
40
|
+
COPY . /app
|
|
41
|
+
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
42
|
+
uv sync --frozen --no-dev --no-editable
|
|
43
|
+
|
|
44
|
+
# Make the directory just in case it doesn't exist
|
|
45
|
+
RUN mkdir -p /root/.local
|
|
46
|
+
|
|
47
|
+
FROM public.ecr.aws/sam/build-python3.10@sha256:a40f492a0cd8d76557f8a187fc00e49e8864b3cea683e74718ce317790c1ce61
|
|
48
|
+
|
|
49
|
+
# Place executables in the environment at the front of the path and include other binaries
|
|
50
|
+
ENV PATH="/app/.venv/bin:$PATH:/usr/sbin"
|
|
51
|
+
|
|
52
|
+
# Install lsof for the healthcheck
|
|
53
|
+
# Install other tools as needed for the MCP server
|
|
54
|
+
# Add non-root user and ability to change directory into /root
|
|
55
|
+
RUN yum update -y && \
|
|
56
|
+
yum install -y lsof && \
|
|
57
|
+
yum clean all -y && \
|
|
58
|
+
rm -rf /var/cache/yum && \
|
|
59
|
+
groupadd --force --system app && \
|
|
60
|
+
useradd app -g app -d /app && \
|
|
61
|
+
chmod o+x /root
|
|
62
|
+
|
|
63
|
+
# Get the project from the uv layer
|
|
64
|
+
COPY --from=uv --chown=app:app /root/.local /root/.local
|
|
65
|
+
COPY --from=uv --chown=app:app /app/.venv /app/.venv
|
|
66
|
+
|
|
67
|
+
# Get healthcheck script
|
|
68
|
+
COPY ./docker-healthcheck.sh /usr/local/bin/docker-healthcheck.sh
|
|
69
|
+
|
|
70
|
+
# Run as non-root
|
|
71
|
+
USER app
|
|
72
|
+
|
|
73
|
+
# When running the container, add --db-path and a bind mount to the host's db file
|
|
74
|
+
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "docker-healthcheck.sh" ]
|
|
75
|
+
ENTRYPOINT ["awslabs.cdk-mcp-server"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: awslabs.cdk-mcp-server
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: An AWS CDK MCP server that provides guidance on AWS Cloud Development Kit best practices, infrastructure as code patterns, and security compliance with CDK Nag. This server offers tools to validate infrastructure designs, explain CDK Nag rules, analyze suppressions, generate Bedrock Agent schemas, and discover Solutions Constructs patterns.
|
|
5
5
|
Project-URL: Homepage, https://awslabs.github.io/mcp/
|
|
6
6
|
Project-URL: Documentation, https://awslabs.github.io/mcp/servers/cdk-mcp-server/
|
|
@@ -186,6 +186,29 @@ Here are some ways you can work with MCP across AWS, and we'll be adding support
|
|
|
186
186
|
}
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
+
or docker after a succesful `docker build -t awslabs/cdk-mcp-server .`:
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"mcpServers": {
|
|
194
|
+
"awslabs.cdk-mcp-server": {
|
|
195
|
+
"command": "docker",
|
|
196
|
+
"args": [
|
|
197
|
+
"run",
|
|
198
|
+
"--rm",
|
|
199
|
+
"--interactive",
|
|
200
|
+
"--env",
|
|
201
|
+
"FASTMCP_LOG_LEVEL=ERROR",
|
|
202
|
+
"awslabs/cdk-mcp-server:latest"
|
|
203
|
+
],
|
|
204
|
+
"env": {},
|
|
205
|
+
"disabled": false,
|
|
206
|
+
"autoApprove": []
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
189
212
|
## Security Considerations
|
|
190
213
|
|
|
191
214
|
When using this MCP server, you should consider:
|
|
@@ -156,6 +156,29 @@ Here are some ways you can work with MCP across AWS, and we'll be adding support
|
|
|
156
156
|
}
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
+
or docker after a succesful `docker build -t awslabs/cdk-mcp-server .`:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"mcpServers": {
|
|
164
|
+
"awslabs.cdk-mcp-server": {
|
|
165
|
+
"command": "docker",
|
|
166
|
+
"args": [
|
|
167
|
+
"run",
|
|
168
|
+
"--rm",
|
|
169
|
+
"--interactive",
|
|
170
|
+
"--env",
|
|
171
|
+
"FASTMCP_LOG_LEVEL=ERROR",
|
|
172
|
+
"awslabs/cdk-mcp-server:latest"
|
|
173
|
+
],
|
|
174
|
+
"env": {},
|
|
175
|
+
"disabled": false,
|
|
176
|
+
"autoApprove": []
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
159
182
|
## Security Considerations
|
|
160
183
|
|
|
161
184
|
When using this MCP server, you should consider:
|
|
@@ -14,10 +14,8 @@
|
|
|
14
14
|
import logging
|
|
15
15
|
from awslabs.cdk_mcp_server.data.cdk_nag_parser import get_errors, get_rule_pack, get_warnings
|
|
16
16
|
from awslabs.cdk_mcp_server.data.genai_cdk_loader import (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
get_genai_cdk_overview,
|
|
20
|
-
list_available_sections,
|
|
17
|
+
get_section,
|
|
18
|
+
list_sections,
|
|
21
19
|
)
|
|
22
20
|
from awslabs.cdk_mcp_server.data.lambda_powertools_loader import get_lambda_powertools_section
|
|
23
21
|
from awslabs.cdk_mcp_server.data.solutions_constructs_parser import get_pattern_raw
|
|
@@ -182,19 +180,29 @@ async def get_genai_cdk_construct_section_resource(
|
|
|
182
180
|
"""Get a specific section of documentation for a GenAI CDK construct.
|
|
183
181
|
|
|
184
182
|
Example URIs:
|
|
185
|
-
- genai-cdk-constructs://bedrock/
|
|
186
|
-
- genai-cdk-constructs://bedrock/
|
|
183
|
+
- genai-cdk-constructs://bedrock/agents/actiongroups
|
|
184
|
+
- genai-cdk-constructs://bedrock/agents/alias
|
|
187
185
|
- genai-cdk-constructs://bedrock/knowledgebases/chunking
|
|
188
186
|
|
|
189
187
|
Args:
|
|
190
188
|
construct_type: Type of the construct (e.g., 'bedrock')
|
|
191
|
-
construct_name: Name of the construct (e.g., '
|
|
189
|
+
construct_name: Name of the construct (e.g., 'agents', 'knowledgebases')
|
|
192
190
|
section: Section of the documentation (e.g., 'actiongroups', 'chunking')
|
|
193
191
|
|
|
194
192
|
Returns:
|
|
195
193
|
String containing the requested section of documentation
|
|
196
194
|
"""
|
|
197
|
-
|
|
195
|
+
# Fetch section from GitHub
|
|
196
|
+
result = await get_section(construct_type, construct_name, section)
|
|
197
|
+
|
|
198
|
+
# Check for error
|
|
199
|
+
if result.get('status') == 'error' or result.get('status') == 'not_found':
|
|
200
|
+
if 'error' in result:
|
|
201
|
+
return f'Error fetching section from GitHub: {result["error"]}'
|
|
202
|
+
else:
|
|
203
|
+
return f"Error: Section '{section}' not found in {construct_type}/{construct_name}"
|
|
204
|
+
|
|
205
|
+
return result['content']
|
|
198
206
|
|
|
199
207
|
|
|
200
208
|
async def get_genai_cdk_construct_nested_section_resource(
|
|
@@ -215,26 +223,55 @@ async def get_genai_cdk_construct_nested_section_resource(
|
|
|
215
223
|
Returns:
|
|
216
224
|
String containing the requested nested section of documentation
|
|
217
225
|
"""
|
|
226
|
+
# First try to use parent as the section name and child as a subsection
|
|
218
227
|
section = f'{parent}/{child}'
|
|
219
|
-
|
|
228
|
+
result = await get_section(construct_type, construct_name, section)
|
|
229
|
+
|
|
230
|
+
# Check if the first attempt succeeded
|
|
231
|
+
if result.get('status') == 'success':
|
|
232
|
+
return result['content']
|
|
233
|
+
|
|
234
|
+
# If that fails, try as a combined section name
|
|
235
|
+
section = f'{parent} {child}'
|
|
236
|
+
result = await get_section(construct_type, construct_name, section)
|
|
237
|
+
|
|
238
|
+
# Check for errors in both attempts
|
|
239
|
+
if result.get('status') == 'error' or result.get('status') == 'not_found':
|
|
240
|
+
if 'error' in result:
|
|
241
|
+
return f'Error fetching nested section from GitHub: {result["error"]}'
|
|
242
|
+
else:
|
|
243
|
+
return (
|
|
244
|
+
f"Error: Section '{parent}/{child}' not found in {construct_type}/{construct_name}"
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
return result['content']
|
|
220
248
|
|
|
221
249
|
|
|
222
250
|
async def get_available_sections_resource(construct_type: str, construct_name: str) -> str:
|
|
223
251
|
"""Get available sections for a specific construct.
|
|
224
252
|
|
|
225
253
|
Example URI:
|
|
226
|
-
- genai-cdk-constructs://bedrock/
|
|
254
|
+
- genai-cdk-constructs://bedrock/agents/sections
|
|
227
255
|
- genai-cdk-constructs://bedrock/knowledgebases/sections
|
|
228
256
|
|
|
229
257
|
Args:
|
|
230
258
|
construct_type: Type of the construct (e.g., 'bedrock')
|
|
231
|
-
construct_name: Name of the construct (e.g., '
|
|
259
|
+
construct_name: Name of the construct (e.g., 'agents', 'knowledgebases')
|
|
232
260
|
|
|
233
261
|
Returns:
|
|
234
262
|
String containing available sections in markdown format
|
|
235
263
|
"""
|
|
236
|
-
|
|
264
|
+
# Handle singular/plural conversion for agent
|
|
265
|
+
if construct_name.lower() == 'agent':
|
|
266
|
+
construct_name = 'agents'
|
|
237
267
|
|
|
268
|
+
# List sections from GitHub
|
|
269
|
+
result = await list_sections(construct_type, construct_name)
|
|
270
|
+
|
|
271
|
+
if 'error' in result:
|
|
272
|
+
return f'Error fetching sections from GitHub: {result["error"]}'
|
|
273
|
+
|
|
274
|
+
sections = result['sections']
|
|
238
275
|
if not sections:
|
|
239
276
|
return f'No sections found for {construct_name} in {construct_type}.'
|
|
240
277
|
|
|
@@ -252,8 +289,9 @@ async def get_genai_cdk_construct_resource(construct_type: str, construct_name:
|
|
|
252
289
|
"""Get essential information about a GenAI CDK construct.
|
|
253
290
|
|
|
254
291
|
Example URIs:
|
|
255
|
-
- genai-cdk-constructs://bedrock/
|
|
292
|
+
- genai-cdk-constructs://bedrock/Agents
|
|
256
293
|
- genai-cdk-constructs://bedrock/KnowledgeBase
|
|
294
|
+
- genai-cdk-constructs://bedrock/Amazon Bedrock Knowledge BasesVectorKnowledgeBase (from search results)
|
|
257
295
|
|
|
258
296
|
Args:
|
|
259
297
|
construct_type: Type of the construct (e.g., 'bedrock')
|
|
@@ -262,7 +300,50 @@ async def get_genai_cdk_construct_resource(construct_type: str, construct_name:
|
|
|
262
300
|
Returns:
|
|
263
301
|
String containing formatted properties and code examples in markdown
|
|
264
302
|
"""
|
|
265
|
-
|
|
303
|
+
from awslabs.cdk_mcp_server.data.genai_cdk_loader import fetch_readme as get_readme
|
|
304
|
+
|
|
305
|
+
# Handle search result format (e.g., "Amazon Bedrock Knowledge BasesVectorKnowledgeBase")
|
|
306
|
+
if construct_name.startswith('Amazon Bedrock Knowledge Bases'):
|
|
307
|
+
# Extract the section name that comes after "Amazon Bedrock Knowledge Bases"
|
|
308
|
+
# This is for the special case of knowledge-bases subdirectory in bedrock
|
|
309
|
+
section_name = construct_name.replace('Amazon Bedrock Knowledge Bases', '').strip()
|
|
310
|
+
if section_name:
|
|
311
|
+
# Get the section from the knowledge-bases README
|
|
312
|
+
result = await get_section('bedrock', 'knowledge-bases', section_name)
|
|
313
|
+
if 'error' not in result:
|
|
314
|
+
return result['content']
|
|
315
|
+
|
|
316
|
+
# If no section specified or section not found, get the whole README
|
|
317
|
+
result = await get_readme('bedrock', 'knowledge-bases')
|
|
318
|
+
if 'error' not in result:
|
|
319
|
+
return result['content']
|
|
320
|
+
|
|
321
|
+
# Normalize construct name
|
|
322
|
+
construct_name_lower = construct_name.lower()
|
|
323
|
+
|
|
324
|
+
# If the construct is Agent, use agents for GitHub
|
|
325
|
+
if construct_name_lower == 'agent':
|
|
326
|
+
construct_name_lower = 'agents'
|
|
327
|
+
|
|
328
|
+
# If it looks like a "knowledge base" reference, try the subdirectory
|
|
329
|
+
if 'knowledge' in construct_name_lower and 'base' in construct_name_lower:
|
|
330
|
+
result = await get_readme('bedrock', 'knowledge-bases')
|
|
331
|
+
if 'error' not in result:
|
|
332
|
+
return result['content']
|
|
333
|
+
|
|
334
|
+
# Fetch the entire README from GitHub
|
|
335
|
+
result = await get_readme(construct_type)
|
|
336
|
+
|
|
337
|
+
if 'error' not in result:
|
|
338
|
+
return result['content']
|
|
339
|
+
|
|
340
|
+
# If that fails, try to fetch a specific construct README
|
|
341
|
+
result = await get_readme(construct_type, construct_name_lower)
|
|
342
|
+
|
|
343
|
+
if 'error' in result:
|
|
344
|
+
return f'Error fetching construct from GitHub: {result["error"]}'
|
|
345
|
+
|
|
346
|
+
return result['content']
|
|
266
347
|
|
|
267
348
|
|
|
268
349
|
async def get_genai_cdk_overview_resource(construct_type: str) -> str:
|
|
@@ -279,4 +360,12 @@ async def get_genai_cdk_overview_resource(construct_type: str) -> str:
|
|
|
279
360
|
Returns:
|
|
280
361
|
String containing overview documentation in markdown
|
|
281
362
|
"""
|
|
282
|
-
|
|
363
|
+
from awslabs.cdk_mcp_server.data.genai_cdk_loader import fetch_readme as get_readme
|
|
364
|
+
|
|
365
|
+
# Fetch README from GitHub
|
|
366
|
+
result = await get_readme(construct_type)
|
|
367
|
+
|
|
368
|
+
if 'error' in result:
|
|
369
|
+
return f'Error fetching overview from GitHub: {result["error"]}'
|
|
370
|
+
|
|
371
|
+
return result['content']
|
{awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/server.py
RENAMED
|
@@ -41,15 +41,16 @@ mcp.resource('lambda-powertools://')(resources.get_lambda_powertools_index)
|
|
|
41
41
|
mcp.resource('aws-solutions-constructs://{pattern_name}')(
|
|
42
42
|
resources.get_solutions_construct_pattern_resource
|
|
43
43
|
)
|
|
44
|
+
# Fixed the ordering - more specific routes first
|
|
45
|
+
mcp.resource('genai-cdk-constructs://{construct_type}/{construct_name}/sections')(
|
|
46
|
+
resources.get_available_sections_resource
|
|
47
|
+
)
|
|
44
48
|
mcp.resource('genai-cdk-constructs://{construct_type}/{construct_name}/{section}')(
|
|
45
49
|
resources.get_genai_cdk_construct_section_resource
|
|
46
50
|
)
|
|
47
51
|
mcp.resource('genai-cdk-constructs://{construct_type}/{construct_name}/{parent}/{child}')(
|
|
48
52
|
resources.get_genai_cdk_construct_nested_section_resource
|
|
49
53
|
)
|
|
50
|
-
mcp.resource('genai-cdk-constructs://{construct_type}/{construct_name}/sections')(
|
|
51
|
-
resources.get_available_sections_resource
|
|
52
|
-
)
|
|
53
54
|
mcp.resource('genai-cdk-constructs://{construct_type}/{construct_name}')(
|
|
54
55
|
resources.get_genai_cdk_construct_resource
|
|
55
56
|
)
|
{awslabs_cdk_mcp_server-0.1.2 → awslabs_cdk_mcp_server-0.1.4}/awslabs/cdk_mcp_server/core/tools.py
RENAMED
|
@@ -396,11 +396,16 @@ async def search_genai_cdk_constructs(
|
|
|
396
396
|
|
|
397
397
|
The search is flexible and will match any of your search terms (OR logic).
|
|
398
398
|
It handles common variations like singular/plural forms and terms with/without spaces.
|
|
399
|
+
Content is fetched dynamically from GitHub to ensure the most up-to-date documentation.
|
|
399
400
|
|
|
400
401
|
Examples:
|
|
401
402
|
- "bedrock agent" - Returns all agent-related constructs
|
|
402
403
|
- "knowledgebase vector" - Returns knowledge base constructs related to vector stores
|
|
403
404
|
- "agent actiongroups" - Returns action groups for agents
|
|
405
|
+
- "opensearch vector" - Returns OpenSearch vector constructs
|
|
406
|
+
|
|
407
|
+
The search supports subdirectory content (like knowledge bases and their sections)
|
|
408
|
+
and will find matches across all available content.
|
|
404
409
|
|
|
405
410
|
Args:
|
|
406
411
|
ctx: MCP context
|
|
@@ -412,7 +417,7 @@ async def search_genai_cdk_constructs(
|
|
|
412
417
|
"""
|
|
413
418
|
try:
|
|
414
419
|
# Get list of constructs
|
|
415
|
-
constructs = list_available_constructs(construct_type)
|
|
420
|
+
constructs = await list_available_constructs(construct_type)
|
|
416
421
|
|
|
417
422
|
# If no query, return all constructs
|
|
418
423
|
if not query:
|