Skip to main content

A Model Context Protocol (MCP) server for AWS Lambda Tools using ChukMCPServer

Project description

Shepp Lambda MCP Server

A Model Context Protocol (MCP) server for AWS Lambda to select and run Lambda function as MCP tools without code changes.

Note: This is a fork with enhanced authentication flexibility - AWS profile is optional, you can use direct AWS credentials instead.

Features

This MCP server acts as a bridge between MCP clients and AWS Lambda functions, allowing generative AI models to access and run Lambda functions as tools. This is useful, for example, to access private resources such as internal applications and databases without the need to provide public network access. This approach allows the model to use other AWS services, private networks, and the public internet.

graph LR
    A[Model] <--> B[MCP Client]
    B <--> C["MCP2Lambda<br>(MCP Server)"]
    C <--> D[Lambda Function]
    D <--> E[Other AWS Services]
    D <--> F[Internet]
    D <--> G[VPC]

    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:4px
    style D fill:#fbb,stroke:#333,stroke-width:2px
    style E fill:#fbf,stroke:#333,stroke-width:2px
    style F fill:#dff,stroke:#333,stroke-width:2px
    style G fill:#ffd,stroke:#333,stroke-width:2px

From a security perspective, this approach implements segregation of duties by allowing the model to invoke the Lambda functions but not to access the other AWS services directly. The client only needs AWS credentials to invoke the Lambda functions. The Lambda functions can then interact with other AWS services (using the function role) and access public or private networks.

Prerequisites

  1. Install uv from Astral or the GitHub README
  2. Install Python using uv python install 3.11

Installation

Install directly from the GitHub repository:

uvx --from git+https://github.com/sam-shepp/shepp-lambda-mcp shepp-lambda-mcp

Configuration

Configure the MCP server in your MCP client configuration (e.g., for Kiro, edit ~/.kiro/settings/mcp.json).

Option 1: Using AWS Profile (Optional - for local development)

{
  "mcpServers": {
    "shepp-lambda-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sam-shepp/shepp-lambda-mcp", "shepp-lambda-mcp"],
      "env": {
        "AWS_PROFILE": "your-aws-profile",
        "AWS_REGION": "us-east-1",
        "FUNCTION_PREFIX": "your-function-prefix",
        "FUNCTION_LIST": "your-first-function, your-second-function",
        "FUNCTION_TAG_KEY": "your-tag-key",
        "FUNCTION_TAG_VALUE": "your-tag-value",
        "FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY": "your-function-tag-for-input-schema"
      }
    }
  }
}

Option 2: Using Direct AWS Credentials (Recommended for flexibility)

You can pass AWS credentials directly without using a profile. This is now the preferred method as it provides more flexibility:

{
  "mcpServers": {
    "shepp-lambda-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sam-shepp/shepp-lambda-mcp", "shepp-lambda-mcp"],
      "env": {
        "AWS_ACCESS_KEY_ID": "your-access-key-id",
        "AWS_SECRET_ACCESS_KEY": "your-secret-access-key",
        "AWS_SESSION_TOKEN": "your-session-token",
        "AWS_REGION": "us-east-1",
        "FUNCTION_PREFIX": "your-function-prefix",
        "FUNCTION_LIST": "your-first-function, your-second-function",
        "FUNCTION_TAG_KEY": "your-tag-key",
        "FUNCTION_TAG_VALUE": "your-tag-value",
        "FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY": "your-function-tag-for-input-schema"
      }
    }
  }
}

Note: AWS_SESSION_TOKEN is optional and only required for temporary credentials (e.g., from AWS STS).

Windows Installation

For Windows users, the MCP server configuration format is slightly different:

{
  "mcpServers": {
    "shepp-lambda-mcp": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uv",
      "args": [
        "tool",
        "run",
        "--from",
        "git+https://github.com/sam-shepp/shepp-lambda-mcp",
        "shepp-lambda-mcp.exe"
      ],
      "env": {
        "AWS_PROFILE": "your-aws-profile",
        "AWS_REGION": "us-east-1",
        "FUNCTION_PREFIX": "your-function-prefix",
        "FUNCTION_LIST": "your-first-function, your-second-function",
        "FUNCTION_TAG_KEY": "your-tag-key",
        "FUNCTION_TAG_VALUE": "your-tag-value",
        "FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY": "your-function-tag-for-input-schema"
      }
    }
  }
}

or docker after a successful docker build -t awslabs/bedrock-kb-retrieval-mcp-server .:

# fictitious `.env` file with AWS temporary credentials
AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_SESSION_TOKEN=AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
  {
    "mcpServers": {
      "shepp-lambda-mcp": {
        "command": "docker",
        "args": [
          "run",
          "--rm",
          "--interactive",
          "--env",
          "AWS_REGION=us-east-1",
          "--env",
          "FUNCTION_PREFIX=your-function-prefix",
          "--env",
          "FUNCTION_LIST=your-first-function,your-second-function",
          "--env",
          "FUNCTION_TAG_KEY=your-tag-key",
          "--env",
          "FUNCTION_TAG_VALUE=your-tag-value",
          "--env",
          "FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY=your-function-tag-for-input-schema",
          "--env-file",
          "/full/path/to/file/above/.env",
          "shepp-lambda-mcp:latest"
        ],
        "env": {},
        "disabled": false,
        "autoApprove": []
      }
    }
  }

NOTE: Your credentials will need to be kept refreshed from your host

AWS Authentication

Important: AWS Profile is now optional! The server supports multiple authentication methods with the following priority:

  1. Direct Credentials (highest priority, recommended): Set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and optionally AWS_SESSION_TOKEN
  2. AWS Profile (optional): Set AWS_PROFILE to use a named profile from your AWS credentials file
  3. Default Credentials Chain (lowest priority): Uses the standard AWS SDK credential resolution (environment variables, EC2 instance profile, etc.)

The AWS_REGION defaults to us-east-1 if not specified.

Note: You can now use this server without configuring an AWS profile - simply provide your access keys directly in the configuration.

You can specify FUNCTION_PREFIX, FUNCTION_LIST, or both. If both are empty, all functions pass the name check. After the name check, if both FUNCTION_TAG_KEY and FUNCTION_TAG_VALUE are set, functions are further filtered by tag (with key=value). If only one of FUNCTION_TAG_KEY and FUNCTION_TAG_VALUE, then no function is selected and a warning is displayed.

IMPORTANT: The function name is used as MCP tool name. The function description in AWS Lambda is used as MCP tool description. The function description should clarify when to use the function (what it provides) and how (which parameters). For example, a function that gives access to an internal Customer Relationship Management (CRM) system can use this description:

Retrieve customer status on the CRM system based on { 'customerId' } or { 'customerEmail' }

The lambda function parameters can also be provided through the EventBridge Schema Registry, which provides formal JSON Schema. See Schema Support below.

Sample functions that can be deployed via AWS SAM are provided in the examples folder.

Schema Support

The Lambda MCP Server supports input schema through AWS EventBridge Schema Registry. This provides formal JSON Schema documentation for your Lambda function inputs.

Configuration

To use schema validation:

  1. Create your schema in EventBridge Schema Registry
  2. Tag your Lambda function with the schema ARN:
    Key: FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY (configurable)
    Value: arn:aws:schemas:region:account:schema/registry-name/schema-name
    
  3. Configure the MCP server with the tag key:
    {
      "env": {
        "FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY": "your-schema-arn-tag-key"
      }
    }
    

When a Lambda function has a schema tag, the MCP server will:

  1. Fetch the schema from EventBridge Schema Registry
  2. Add the schema to the tool's documentation

This provides better documentation compared to describing parameters in the function description.

Best practices

  • Use the FUNCTION_LIST to specify the functions that are available as MCP tools.
  • Use the FUNCTION_PREFIX to specify the prefix of the functions that are available as MCP tools.
  • Use the FUNCTION_TAG_KEY and FUNCTION_TAG_VALUE to specify the tag key and value of the functions that are available as MCP tools.
  • AWS Lambda Description property: the description of the function is used as MCP tool description, so it should be very detailed to help the model understand when and how to use the function
  • Use EventBridge Schema Registry to provide formal input validation:
    • Create JSON Schema definitions for your function inputs
    • Tag functions with their schema ARNs
    • Configure FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY in the MCP server

Security Considerations

When using this MCP server, you should consider:

  • Only Lambda functions that are in the provided list or with a name starting with the prefix are imported as MCP tools.
  • The MCP server needs permissions to invoke the Lambda functions.
  • Each Lambda function has its own permissions to optionally access other AWS resources.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shepp_lambda_mcp-2.0.17.tar.gz (81.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shepp_lambda_mcp-2.0.17-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file shepp_lambda_mcp-2.0.17.tar.gz.

File metadata

  • Download URL: shepp_lambda_mcp-2.0.17.tar.gz
  • Upload date:
  • Size: 81.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for shepp_lambda_mcp-2.0.17.tar.gz
Algorithm Hash digest
SHA256 0311bca5c2b6aa21f898540f870171a87c0a2393da90ad68908e29c9c8bf2c71
MD5 f7e7c6d98fc99218b32af9d7ffcc08c1
BLAKE2b-256 26f920f770237b0a522517138572491d368cd7192592b5d00cbdf487bf335834

See more details on using hashes here.

File details

Details for the file shepp_lambda_mcp-2.0.17-py3-none-any.whl.

File metadata

File hashes

Hashes for shepp_lambda_mcp-2.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 c2643051cc9a1554f27adad88515154d2e49db42bf75bb32d8de7e978f7f2794
MD5 3e2c8d565ec385bcebedc4ad349f6c30
BLAKE2b-256 937f78dd7f839c597cb6654cf0e64094b9e05326c7a73dca9007e58c16777c53

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page