返回市场
动态数据库MCP服务器

动态数据库MCP服务器

作者:imankamyabi13 星标更新:2025-01-08

项目介绍

DynamoDB MCP Server

一个用于管理Amazon DynamoDB资源的模型上下文协议服务器。此服务器提供了表管理、容量管理和数据操作工具。

作者

Iman Kamyabi (ikmyb@icloud.com)

功能

表管理

  • 创建具有自定义配置的新DynamoDB表
  • 列出现有表
  • 获取详细表信息
  • 配置表设置

索引管理

  • 创建和管理全局二级索引(GSI)
  • 更新GSI容量
  • 创建本地二级索引(LSI)

容量管理

  • 更新预配置的读/写容量单位
  • 管理表吞吐量设置

数据操作

  • 在表中插入或替换项目
  • 通过主键检索项目
  • 更新特定项目的属性
  • 使用条件查询表
  • 使用过滤器扫描表

注意:不支持删除操作以防止意外的数据丢失。

设置

  1. 安装依赖项:
npm install
  1. 将AWS凭证配置为环境变量:
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"
export AWS_REGION="your_region"
  1. 构建服务器:
npm run build
  1. 启动服务器:
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
  }
}

示例问题

这里有一些你可以问Claude的问题,当你使用这个DynamoDB MCP服务器时:

表管理

  • "创建一个名为'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凭证

  1. 从AWS管理控制台获取AWS访问密钥ID、秘密访问密钥和区域。
  2. 如果使用临时凭证(例如IAM角色),还需获取会话令牌。
  3. 确保这些凭证具有适当的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文件。