A Python library that automatically generates MCP servers for any AWS service that has a boto3 client.
You can install the package using either pip or uv:
pip install aws_service_mcp_generator
uv add aws_service_mcp_generator
For development installation:
# Clone the repository
git clone https://github.com/kenliao94/aws_service_mcp_generator.git
cd aws_service_mcp_generator
# Create and activate a virtual environment (optional but recommended)
uv venv --python 3.10
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install the package in development mode
uv pip install -e .
The AWS Service MCP Generator allows you to quickly create MCP servers for any AWS service. Here's how to use it:
from mcp.server.fastmcp import FastMCP
from aws_service_mcp_generator.generator import AWSToolGenerator
# Initialize FastMCP server
mcp = FastMCP()
# Create a generator for an AWS service
sns_generator = AWSToolGenerator(
service_name="sns",
service_display_name="Simple Notification Service",
mcp=mcp
)
# Generate MCP tools for all operations
sns_generator.generate()
# Start the MCP server
mcp.run()
You can customize the behavior of specific operations:
from mcp.server.fastmcp import FastMCP
from aws_service_mcp_generator.generator import AWSToolGenerator
mcp = FastMCP()
# Configure specific operations
tool_configuration = {
"list_topics": {
"documentation_override": "List all SNS topics in the specified region"
},
"create_topic": {
"validator": lambda mcp, client, kwargs: (
True if kwargs.get("Name") else (False, "Topic name is required")
)
},
"delete_topic": {
"ignore": True # Skip this operation
},
"publish": {
# Complete override of the function behavior
"func_override": lambda mcp, boto3_client_getter, operation: mcp.tool(description="Enhanced SNS publish with additional logging")(
async def publish_with_logging(message: str, topic_arn: str, region: str = "us-east-1"):
"""Publish a message to an SNS topic with additional logging"""
try:
client = boto3_client_getter(region)
print(f"Publishing message to {topic_arn} in {region}")
response = client(operation)(Message=message, TopicArn=topic_arn)
print(f"Successfully published message with ID: {response.get('MessageId')}")
return {
"success": True,
"message_id": response.get("MessageId"),
"timestamp": str(response.get("Timestamp", ""))
}
except Exception as e:
print(f"Error publishing message: {str(e)}")
return {"error": str(e)}
)
}
}
# Create generator with custom configuration
sns_generator = AWSToolGenerator(
service_name="sns",
service_display_name="Simple Notification Service",
mcp=mcp,
tool_configuration=tool_configuration
)
sns_generator.generate()
mcp.run()
Contributions are welcome! Here's how you can contribute to this project:
-
Fork the Repository
- Fork the repository on GitHub
-
Clone Your Fork
git clone https://github.com/your-username/aws_service_mcp_generator.git cd aws_service_mcp_generator
-
Set Up Development Environment
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -e . uv add --dev pyright ruff
-
Create a Branch
git checkout -b feature/your-feature-name
-
Make Your Changes
- Implement your feature or bug fix
- Add or update tests as necessary
- Update documentation if needed
-
Run Tests
pytest
-
Run Linters
ruff check .
-
Commit Your Changes
git commit -m "Add feature: your feature description"
-
Push to Your Fork
git push origin feature/your-feature-name
-
Submit a Pull Request
- Go to the original repository on GitHub
- Click "New Pull Request"
- Select your fork and branch
- Fill in the PR template with details about your changes
This project follows these coding standards:
- Line length: 99 characters
- Quote style: Single quotes
- Python version: 3.10+
- Use type hints
pytest
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.