跳转到内容

MCP Server 到 DynamoDB

connection 生成器将 TypeScript MCP Server 连接到 TypeScript DynamoDB 项目,配置本地开发环境使两者自动一起启动。

在使用此生成器之前,请确保您拥有:

  1. 一个 ts#mcp-server 项目
  2. 一个 ts#dynamodb 项目

运行此生成器@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
构建你的命令5

必需

必需

选择您的 MCP server 项目作为源,选择您的 DynamoDB 项目作为目标。如果项目包含多个 MCP server 组件,请指定 sourceComponent 以消除歧义。

生成器选项5 个选项
sourceProject必需string

源项目

targetProject必需string

要连接到的目标项目

sourceComponentstring

要连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。

targetComponentstring

要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。

preferInstallDependenciesboolean默认值: true

是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。

生成器会更新 MCP server 的 <mcp-server-name>-dev 目标(在 project.json 中),使其依赖于 DynamoDB 项目的 dev 目标。不会修改任何源文件。

从 DynamoDB 包中导入实体工厂,并在 createServer 内部使用它们:

packages/my-service/src/my-mcp/server.ts
import { createExampleEntity } from '@my-scope/my-table';
export const createServer = async () => {
const server = new McpServer({ name: 'my-service', version: '1.0.0' });
server.registerTool(
'list_examples',
{ description: 'List all example items', inputSchema: {} },
async () => {
const entity = await createExampleEntity();
const result = await entity.scan.go();
return {
content: [{ type: 'text' as const, text: JSON.stringify(result.data) }],
};
},
);
return server;
};

要允许 MCP server 访问 DynamoDB 表,请在基础设施中授予必要的权限。

packages/infra/src/stacks/application-stack.ts
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');
const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);

grantReadWriteData 向 MCP server 的执行角色授予 DynamoDB 和 KMS 权限。

connection 生成器会配置您的项目的 dev 目标,使其依赖于 DynamoDB 项目的 dev 目标。当运行 dev 时,DynamoDB Local 将与您的项目一起自动启动。

LOCAL_DEV=true 环境变量会自动设置,因此 getDynamoDBClient()resolveTableName() 会连接到本地的 DynamoDB Local 实例,而不是 AWS。