MCP Server to DynamoDB
connection 생성기는 TypeScript MCP Server를 TypeScript DynamoDB 프로젝트에 연결하여, 로컬 개발 시 두 프로젝트가 자동으로 함께 시작되도록 구성합니다.
사전 요구 사항
섹션 제목: “사전 요구 사항”이 생성기를 사용하기 전에 다음이 필요합니다:
ts#mcp-server프로젝트ts#dynamodb프로젝트
사용법
섹션 제목: “사용법”생성기 실행
섹션 제목: “생성기 실행”- 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
- VSCode에서 Nx 콘솔 열기
- 클릭
Generate (UI)"Common Nx Commands" 섹션에서 - 검색
@aws/nx-plugin - connection - 필수 매개변수 입력
- 클릭
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionMCP 서버 프로젝트를 소스로, DynamoDB 프로젝트를 타겟으로 선택하세요. 프로젝트에 여러 MCP 서버 컴포넌트가 포함되어 있는 경우, sourceComponent를 지정하여 명확히 구분하세요.
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| sourceProject 필수 | string | - | 소스 프로젝트 |
| targetProject 필수 | string | - | 연결할 대상 프로젝트 |
| sourceComponent | string | - | 연결을 시작할 소스 컴포넌트 (컴포넌트 이름, 소스 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 소스로 명시적으로 선택하려면 '.'을 사용하세요. |
| targetComponent | string | - | 연결할 대상 컴포넌트 (컴포넌트 이름, 대상 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 대상으로 명시적으로 선택하려면 '.'을 사용하세요. |
| preferInstallDependencies | boolean | true | 생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번만 설치합니다. |
생성기 출력
섹션 제목: “생성기 출력”생성기는 MCP 서버의 <mcp-server-name>-dev 타겟을 project.json에서 업데이트하여 DynamoDB 프로젝트의 dev 타겟에 의존하도록 합니다. 소스 파일은 수정되지 않습니다.
도구에서 DynamoDB 사용하기
섹션 제목: “도구에서 DynamoDB 사용하기”DynamoDB 패키지에서 엔티티 팩토리를 가져와서 createServer 내부에서 사용하세요:
import { createExampleEntity } from ':my-scope/my-table';
export const createServer = async () => { const server = new McpServer({ name: 'my-service', version: '1.0.0' });
server.tool('list_examples', 'List all example items', {}, async () => { const entity = await createExampleEntity(); const result = await entity.scan.go(); return { content: [{ type: 'text', text: JSON.stringify(result.data) }], }; });
return server;};인프라
섹션 제목: “인프라”MCP 서버가 DynamoDB 테이블에 액세스할 수 있도록 인프라에서 필요한 권한을 부여하세요.
import { MyTable } from ':my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);grantReadWriteData는 MCP 서버의 실행 역할에 DynamoDB 및 KMS 권한을 모두 부여합니다.
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
resource "aws_iam_role_policy" "dynamodb_access" { role = module.my_mcp_server.lambda_role_name
policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", ] Resource = [ module.my_table.table_arn, "${module.my_table.table_arn}/index/*", ] }, { Effect = "Allow" Action = [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", ] Resource = [module.my_table.kms_key_arn] }, ] })}로컬 개발
섹션 제목: “로컬 개발”connection 생성기는 프로젝트의 dev 타겟이 DynamoDB 프로젝트의 dev 타겟에 의존하도록 구성합니다. dev를 실행하면 DynamoDB Local이 프로젝트와 함께 자동으로 시작됩니다.
LOCAL_DEV=true 환경 변수가 자동으로 설정되므로, getDynamoDBClient()와 resolveTableName()은 AWS 대신 로컬 DynamoDB Local 인스턴스에 연결됩니다.