DynamoDB MCP 管理工具
通过模型上下文协议(Model Context Protocol)启用对 DynamoDB 资源的管理,支持表和索引的创建、容量管理和数据操作,但不提供删除功能,以防止意外的数据丢失。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"dynamodb": {
"args": [
"run",
"-i",
"--rm",
"-e",
"AWS_ACCESS_KEY_ID",
"-e",
"AWS_SECRET_ACCESS_KEY",
"-e",
"AWS_REGION",
"-e",
"AWS_SESSION_TOKEN",
"mcp/dynamodb-mcp-server"
],
"command": "docker",
"env": {
"AWS_ACCESS_KEY_ID": "your_access_key",
"AWS_REGION": "your_region",
"AWS_SECRET_ACCESS_KEY": "your_secret_key",
"AWS_SESSION_TOKEN": "your_session_token"
}
}
}
}
该服务需要配置环境变量:AWS_ACCESS_KEY_ID、AWS_REGION、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN
服务介绍
DynamoDB MCP 服务器
一个用于管理 Amazon DynamoDB 资源的 Model Context Protocol 服务器。此服务器提供了表管理、容量管理和数据操作的工具。
作者
Iman Kamyabi (ikmyb@icloud.com)
特性
表管理
- 创建具有可自定义配置的新 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
- 启动服务器:
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_capacity
更新表的预置容量。
参数:
tableName: 表名readCapacity: 新的读取容量单位writeCapacity: 新的写入容量单位
示例:
{
"tableName": "Users",
"readCapacity": 10,
"writeCapacity": 10
}
put_item
插入或替换表中的一个项目。
参数:
tableName: 表名item: 要放入表中的项目(作为 JSON 对象)
示例:
{
"tableName": "Users",
"item": {
"userId": "123",
"name": "John Doe",
"email": "john@example.com"
}
}
get_item
通过主键从表中检索一个项目。
参数:
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"
}
}
query_table
使用键条件和可选过滤器查询表。
参数:
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 提出的示例问题:
表管理
- "创建一个新的名为 'Products' 的 DynamoDB 表,分区键为 'productId'(字符串)和排序键为 'timestamp'(数字)"
- "列出我账户中的所有 DynamoDB 表"
- "Users 表的当前配置是什么?"
- "在 Users 表的 email 字段上添加全局二级索引"
容量管理
- "将 Users 表的容量更新为 20 个读取单位和 15 个写入单位"
- "增加 Users 表上 EmailIndex GSI 的容量"
- "Orders 表当前配置的容量是多少?"
数据操作
- "插入一个新用户,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 一起使用
在 claude_desktop_config.json 中添加以下内容:
Docker (推荐)
{
"mcpServers": {
"dynamodb": {
"command": "docker",
"args": [ "run", "-i", "--rm", "-e", "AWS_ACCESS_KEY_ID", "-e", "AWS_SECRET_ACCESS_KEY", "-e", "AWS_REGION", "-e", "AWS_SESSION_TOKEN", "mcp/dynamodb-mcp-server" ],
"env": {
"AWS_ACCESS_KEY_ID": "your_access_key",
"AWS_SECRET_ACCESS_KEY": "your_secret_key",
"AWS_REGION": "your_region",
"AWS_SESSION_TOKEN": "your_session_token"
}
}
}
}
构建
Docker:
docker build -t mcp/dynamodb-mcp-server -f Dockerfile .
开发
要以开发模式运行并启用自动重新加载:
npm run dev
许可证
此 MCP 服务器根据 MIT 许可证许可。这意味着您可以在遵守 MIT 许可证条款和条件的前提下自由使用、修改和分发该软件。更多详情,请参见项目存储库中的 LICENSE 文件。