Skip to content

Create a MCP service for any AWS service that has a boto3 client

Notifications You must be signed in to change notification settings

kenliao94/aws_service_mcp_generator

Repository files navigation

AWS Service MCP Generator

A Python library that automatically generates MCP servers for any AWS service that has a boto3 client.

Installation

You can install the package using either pip or uv:

Using pip

pip install aws_service_mcp_generator

Using uv

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 .

Usage

The AWS Service MCP Generator allows you to quickly create MCP servers for any AWS service. Here's how to use it:

Basic Usage

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()

Advanced Configuration

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()

Contributing

Contributions are welcome! Here's how you can contribute to this project:

  1. Fork the Repository

    • Fork the repository on GitHub
  2. Clone Your Fork

    git clone https://github.com/your-username/aws_service_mcp_generator.git
    cd aws_service_mcp_generator
  3. 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
  4. Create a Branch

    git checkout -b feature/your-feature-name
  5. Make Your Changes

    • Implement your feature or bug fix
    • Add or update tests as necessary
    • Update documentation if needed
  6. Run Tests

    pytest
  7. Run Linters

    ruff check .
  8. Commit Your Changes

    git commit -m "Add feature: your feature description"
  9. Push to Your Fork

    git push origin feature/your-feature-name
  10. 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

Code Style

This project follows these coding standards:

  • Line length: 99 characters
  • Quote style: Single quotes
  • Python version: 3.10+
  • Use type hints

Running Tests

pytest

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

About

Create a MCP service for any AWS service that has a boto3 client

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages