cdk-serverless-mcp-server
by eleva
README.md
# π§ cdk-serverless-mcp-server
A super simple Model Context Protocol (MCP) server deployed on AWS Lambda and exposed via Amazon API Gateway, deployed with AWS CDK.
This skeleton is based on the awesome work of [FrΓ©dΓ©ric Barthelet](https://github.com/fredericbarthelet): which has developed a middy middleware for Model Context Protocol (MCP) server integration with AWS Lambda functions in [this repo](https://github.com/fredericbarthelet/middy-mcp)
## Long story
- π [Read the full article here on dev.to](https://dev.to/aws-builders/from-serverless-framework-to-aws-cdk-rebuilding-our-minimal-serverless-mcp-server-1232)
- π [Read the first article of the series here on dev.to](https://dev.to/aws-builders/deploy-a-minimal-mcp-server-on-aws-lambda-with-serverless-framework-3e42)
## π Features
- πͺ Minimal MCP server setup using @modelcontextprotocol/sdk
- π Deployed as a single AWS Lambda function
- π HTTP POST endpoint exposed via API Gateway at /mcp
- π Supports local development testing with jest
- π§ͺ Includes a simple example tool (add) with JSON-RPC interaction
## π¦ Project Structure
```
cdk-serverless-mcp-server/
βββ __tests__/ # Jest tests
βββ bin/ # CDK entry point
βββ cdk-serverless-mcp-server.ts # CDK app
βββ lib/ # CDK stack
β βββ cdk-serverless-mcp-server-stack.ts # CDK stack
βββ src/ # Source code
β βββ index.mjs # MCP server handler
βββ .gitignore # Git ignore file
βββ cdk.json # CDK Project config
βββ package.json # Project dependencies
βββ package-lock.json # Project lock file
βββ README.md # This documentation file
```
## π Prerequisites
- Node.js v22+
- [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-typescript.html) v2+
## π Getting Started
1. Install dependencies:
```bash
npm install
```
2. Install AWS CDK globally (if not already installed):
```bash
npm install -g aws-cdk
```
3. Test Locally with jest
```bash
npm run test
```
## 𧬠Code Breakdown
This code is based on the awesome work of [FrΓ©dΓ©ric Barthelet](https://github.com/fredericbarthelet): which has developed a middy middleware for Model Context Protocol (MCP) server integration with AWS Lambda functions in [this repo](https://github.com/fredericbarthelet/middy-mcp)
### src/index.js
```javascript
import middy from "@middy/core";
import httpErrorHandler from "@middy/http-error-handler";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import mcpMiddleware from "middy-mcp";
const server = new McpServer({
name: "Lambda hosted MCP Server",
version: "1.0.0",
});
server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }],
}));
export const handler = middy()
.use(mcpMiddleware({ server }))
.use(httpErrorHandler());
```
## π‘ Deploy to AWS
Just run:
```bash
npm run layer-dependencies-install # install dependencies for the layer
```
Then, deploy the stack:
```bash
cdk bootstrap
cdk deploy
```
After deployment, the MCP server will be live at the URL output by the command.
## π§ͺ Once deployed, test with curl requests
### List tools
```bash
curl --location 'http://your-endpoint/dev/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}'
```
### β Use the add Tool
```bash
curl --location 'http://your-endpoint/dev/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "add",
"arguments": {
"a": 5,
"b": 3
}
}
}'
```
## π License
MIT β feel free to fork, tweak, and deploy your own version!
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues