DynamoDB MCP服务器
A. 模型上下文协议服务器 用于管理Amazon DynamoDB资源。此服务器提供用于表管理、容量管理和数据操作的工具。
作者
维格纳什·库马尔(rrvigneshkumar2002@gmail.com)
📋 快速参考:参见 快速引用.md 用于常见命令和配置。
快速开始
# Install dependencies
npm install
# Build the project
npm run build
# Set AWS credentials
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
export AWS_REGION="us-east-1"
# Start the server (binds to 0.0.0.0:3000 by default)
npm start
# Test the health endpoint
curl http://localhost:3000/health自定义配置
# Run with custom host and port
MCP_HOST=127.0.0.1 MCP_PORT=8080 npm start远程模式
此MCP服务器以远程模式独占运行,使用HTTP上的服务器发送事件(SSE)进行客户端连接。
特征:
- 基于HTTP的远程连接传输
- 允许多个客户端同时连接
- 非常适合团队环境和云部署
- 用于监控的健康检查端点
环境变量:
MCP_HOST:要绑定的主机(默认值:0.0.0.0)MCP_PORT:要侦听的端口(默认值:3000)
📖 有关详细的配置、安全最佳实践和部署指南,请参阅 远程模式.md
🚀 有关Smithery的使用和部署,请参阅 微笑_用法.md
特性
表格管理
- 使用可定制的配置创建新的DynamoDB表
- 列出现有表
- 获取详细的表格信息
- 配置表格设置
索引管理
- 创建和管理全球二级索引(GSI)
- 更新GSI容量
- 创建本地二级索引(LSI)
容量管理
- 更新配置的读/写容量单位
- 管理表吞吐量设置
数据操作
- 在表格中插入或替换项目
- 按主键检索项目
- 更新特定项目属性
- 带条件的查询表
- 使用筛选器扫描表
备注:不支持删除操作,以防止意外数据丢失。
设置
- 安装依赖项:
npm install- 将AWS凭据配置为环境变量:
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
export AWS_REGION="your_region"- 构建服务器:
npm run build- 启动服务器:
本地模式(stdio):
npm start远程模式(基于HTTP的SSE):
npm run start:remote或者使用自定义主机和端口:
MCP_TRANSPORT_MODE=sse MCP_HOST=0.0.0.0 MCP_PORT=8080 npm start工具
create_table
使用指定的配置创建新的DynamoDB表。
参数:
tableName:要创建的表的名称partitionKey:分区密钥的名称partitionKeyType:分区键的类型(S=字符串,N=数字,B=二进制)sortKey:(可选)排序键的名称sortKeyType:(可选)排序键的类型readCapacity:提供的读取容量单位writeCapacity:提供的写入容量单位
例子:
{
"tableName": "Users",
"partitionKey": "userId",
"partitionKeyType": "S",
"readCapacity": 5,
"writeCapacity": 5
}list_tables
列出帐户中的所有DynamoDB表。
参数:
limit:(可选)要返回的最大表数exclusiveStartTableName:(可选)分页起始表的名称
例子:
{
"limit": 10
}describe_table
获取DynamoDB表的详细信息。
参数:
tableName:要描述的表的名称
例子:
{
"tableName": "Users"
}create_gsi
在表上创建全局辅助索引。
参数:
tableName:表的名称indexName:新索引的名称partitionKey:索引的分区键partitionKeyType:分区密钥类型sortKey:(可选)索引的排序键sortKeyType:(可选)排序键的类型projectionType:投影类型(ALL、KEYS_ONLY、INCLUDE)nonKeyAttributes:(可选)项目的非关键属性readCapacity:提供的读取容量单位writeCapacity:提供的写入容量单位
例子:
{
"tableName": "Users",
"indexName": "EmailIndex",
"partitionKey": "email",
"partitionKeyType": "S",
"projectionType": "ALL",
"readCapacity": 5,
"writeCapacity": 5
}update_gsi
更新全局辅助索引的配置容量。
参数:
tableName:表的名称indexName:要更新的索引的名称readCapacity:新的读取容量单位writeCapacity:新的写入容量单位
例子:
{
"tableName": "Users",
"indexName": "EmailIndex",
"readCapacity": 10,
"writeCapacity": 10
}create_lsi
在表上创建本地辅助索引(必须在表创建期间完成)。
参数:
tableName:表的名称indexName:新索引的名称partitionKey:表的分区键partitionKeyType:分区密钥类型sortKey:索引的排序键sortKeyType:排序键的类型projectionType:投影类型(ALL、KEYS_ONLY、INCLUDE)nonKeyAttributes:(可选)项目的非关键属性readCapacity:(可选)提供的读取容量单元writeCapacity:(可选)提供的写入容量单元
例子:
{
"tableName": "Users",
"indexName": "CreatedAtIndex",
"partitionKey": "userId",
"partitionKeyType": "S",
"sortKey": "createdAt",
"sortKeyType": "N",
"projectionType": "ALL"
}update_容量
更新表的配置容量。
参数:
tableName:表的名称readCapacity:新的读取容量单位writeCapacity:新的写入容量单位
例子:
{
"tableName": "Users",
"readCapacity": 10,
"writeCapacity": 10
}输出项
插入或替换表中的项目。
参数:
tableName:表的名称item:要放入表中的项(作为JSON对象)
例子:
{
"tableName": "Users",
"item": {
"userId": "123",
"name": "John Doe",
"email": "john@example.com"
}
}获取项目
按主键从表中检索项。
参数:
tableName:表的名称key:要检索的项目的主键
例子:
{
"tableName": "Users",
"key": {
"userId": "123"
}
}update_item
更新表中项目的特定属性。
参数:
tableName:表的名称key:要更新的项目的主键updateExpression:更新表达式expressionAttributeNames:属性名称映射expressionAttributeValues:更新表达式的值conditionExpression:(可选)更新条件returnValues:(可选)返回什么值
例子:
{
"tableName": "Users",
"key": {
"userId": "123"
},
"updateExpression": "SET #n = :name",
"expressionAttributeNames": {
"#n": "name"
},
"expressionAttributeValues": {
":name": "Jane Doe"
}
}查询表
使用关键字条件和可选筛选器查询表。
参数:
tableName:表的名称keyConditionExpression:关键条件表达式expressionAttributeValues:关键条件表达式的值expressionAttributeNames:(可选)属性名称映射filterExpression:(可选)筛选结果表达式limit:(可选)要退回的最大项目数
例子:
{
"tableName": "Users",
"keyConditionExpression": "userId = :id",
"expressionAttributeValues": {
":id": "123"
}
}scan_table
使用可选筛选器扫描整个表。
参数:
tableName:表的名称filterExpression:(可选)筛选器表达式expressionAttributeValues:(可选)筛选器表达式的值expressionAttributeNames:(可选)属性名称映射limit:(可选)要退回的最大项目数
例子:
{
"tableName": "Users",
"filterExpression": "age > :minAge",
"expressionAttributeValues": {
":minAge": 21
}
}例题
以下是使用此DynamoDB MCP服务器时可以向Claude提出的一些示例问题:
表格管理
- 使用分区键“productId”(字符串)和排序键“timestamp”(数字)创建一个名为“Products”的新DynamoDB表
- “列出我帐户中的所有DynamoDB表”
- “用户表的当前配置是什么?”
- “在Users表的电子邮件字段上添加全局辅助索引”
容量管理
- “将用户表容量更新为20个读取单元和15个写入单元”
- “扩大用户表上的EmailIndex GSI容量”
- “订单表的当前配置容量是多少?”
数据操作
- “插入ID为'123'、名为'John Doe'、电子邮件为'的新用户john@example.com'"
- “获取ID为'123'的用户”
- “将用户'123'的电子邮件地址更新为'john.doe@example.com'"
- “查找用户'123'下的所有订单”
- “列出所有21岁以上的用户”
- “查询EmailIndex以查找具有电子邮件的用户”john@example.com'"
配置
设置AWS凭据
- 从AWS管理控制台获取AWS访问密钥ID、秘密访问密钥和区域。
- 如果使用临时凭据(例如IAM角色),还需要获取会话令牌。
- 确保这些凭据具有DynamoDB操作的适当权限。
使用Claude Desktop
首先,启动主机上的服务器:
npm start然后将此添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"dynamodb": {
"url": "http://your-server-host:3000/sse"
}
}
}对于本地测试,请使用 http://localhost:3000/sse.
安全说明: 确保采取了适当的网络安全措施:
- 在生产环境中使用HTTPS/TLS
- 实施身份验证和授权
- 使用防火墙限制网络访问
- 考虑使用带有SSL终止的反向代理(nginx、Apache)
建筑
码头工人
塑造形象:
docker build -t mcp/dynamodb-mcp-server -f Dockerfile .运行服务器:
docker run -d --rm \
-e AWS_ACCESS_KEY_ID="your_access_key" \
-e AWS_SECRET_ACCESS_KEY="your_secret_key" \
-e AWS_REGION="your_region" \
-p 3000:3000 \
--name dynamodb-mcp \
mcp/dynamodb-mcp-server使用自定义端口:
docker run -d --rm \
-e MCP_PORT=8080 \
-e AWS_ACCESS_KEY_ID="your_access_key" \
-e AWS_SECRET_ACCESS_KEY="your_secret_key" \
-e AWS_REGION="your_region" \
-p 8080:8080 \
--name dynamodb-mcp \
mcp/dynamodb-mcp-server发展
要在开发模式下自动重新加载运行:
npm run watch测试服务器
Linux/Mac:
chmod +x test-remote.sh
./test-remote.shWindows(PowerShell):
.\test-remote.ps1或者手动测试端点:
# Start server
npm start
# In another terminal, test the health endpoint
curl http://localhost:3000/health
# Test SSE connection
curl -N -H "Accept: text/event-stream" http://localhost:3000/sse许可证
此MCP服务器根据MIT许可证获得许可。这意味着您可以根据MIT许可证的条款和条件自由使用、修改和分发软件。有关更多详细信息,请参阅项目存储库中的LICENSE文件。
