MCP Server a DynamoDB
Il generatore connection collega un MCP Server TypeScript a un progetto DynamoDB TypeScript, configurando lo sviluppo locale in modo che entrambi si avviino automaticamente insieme.
Prerequisiti
Sezione intitolata “Prerequisiti”Prima di utilizzare questo generatore, assicurati di avere:
- Un progetto
ts#mcp-server - Un progetto
ts#dynamodb
Utilizzo
Sezione intitolata “Utilizzo”Esegui il Generatore
Sezione intitolata “Esegui il Generatore”Esegui questo generatore@aws/nx-plugin:connection
pnpm nx g @aws/nx-plugin:connection yarn nx g @aws/nx-plugin:connection npx nx g @aws/nx-plugin:connection bunx nx g @aws/nx-plugin:connection- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
Generate
Componi il tuo comando5
Obbligatorio
Obbligatorio
Seleziona il tuo progetto MCP server come sorgente e il tuo progetto DynamoDB come destinazione. Se il progetto contiene più componenti MCP server, specifica sourceComponent per disambiguare.
Opzioni
Sezione intitolata “Opzioni”sourceProjectObbligatoriostringIl progetto sorgente
targetProjectObbligatoriostringIl progetto di destinazione a cui connettersi
sourceComponentstringIl componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come sorgente.
targetComponentstringIl componente destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto destinazione, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come destinazione.
preferInstallDependenciesbooleanPredefinito:trueSe preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.
Output del Generatore
Sezione intitolata “Output del Generatore”Il generatore aggiorna il target <mcp-server-name>-dev del MCP server in project.json per dipendere dal target dev del progetto DynamoDB. Nessun file sorgente viene modificato.
Utilizzo di DynamoDB negli Strumenti
Sezione intitolata “Utilizzo di DynamoDB negli Strumenti”Importa le factory di entità dal pacchetto DynamoDB e utilizzale all’interno di createServer:
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;};Infrastruttura
Sezione intitolata “Infrastruttura”Per consentire al MCP server di accedere alla tabella DynamoDB, concedi i permessi necessari nella tua infrastruttura.
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);grantReadWriteData concede sia i permessi DynamoDB che KMS al ruolo di esecuzione del MCP server.
Concedi al ruolo di runtime del MCP server l’accesso alla tabella e alla sua chiave di crittografia KMS tramite additional_iam_policy_statements:
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"
additional_iam_policy_statements = [ { 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] }, ]}Sviluppo Locale
Sezione intitolata “Sviluppo Locale”Il generatore connection configura il target dev del tuo progetto per dipendere dal target dev del progetto DynamoDB. DynamoDB Local si avvierà automaticamente insieme al tuo progetto quando esegui dev.
La variabile d’ambiente LOCAL_DEV=true viene impostata automaticamente, quindi getDynamoDBClient() e resolveTableName() si connettono all’istanza locale di DynamoDB Local invece che ad AWS.