Serveur MCP vers DynamoDB
Le générateur connection relie un serveur MCP TypeScript à un projet DynamoDB TypeScript, en configurant le développement local pour que les deux démarrent ensemble automatiquement.
Prérequis
Section intitulée « Prérequis »Avant d’utiliser ce générateur, assurez-vous d’avoir :
- Un projet
ts#mcp-server - Un projet
ts#dynamodb
Utilisation
Section intitulée « Utilisation »Exécuter le générateur
Section intitulée « Exécuter le générateur »Exécuter ce générateur@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- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - connection - Remplissez les paramètres requis
- Cliquez sur
Generate
Composez votre commande5
Requis
Requis
Sélectionnez votre projet de serveur MCP comme source et votre projet DynamoDB comme cible. Si le projet contient plusieurs composants de serveur MCP, spécifiez sourceComponent pour lever l’ambiguïté.
sourceProjectRequisstringLe projet source
targetProjectRequisstringLe projet cible auquel se connecter
sourceComponentstringLe composant source depuis lequel se connecter (nom du composant, chemin relatif à la racine du projet source, ou identifiant de générateur). Utilisez '.' pour sélectionner explicitement le projet comme source.
targetComponentstringLe composant cible auquel se connecter (nom du composant, chemin relatif à la racine du projet cible, ou identifiant de générateur). Utilisez '.' pour sélectionner explicitement le projet comme cible.
preferInstallDependenciesbooleanPar défaut:trueIndique s'il faut privilégier l'installation des dépendances après l'exécution du générateur. Définir à false pour différer l'installation lors de l'exécution de plusieurs générateurs en lot (une installation s'exécute quand même si nécessaire pour que les générateurs suivants puissent calculer le graphe de projet Nx) ; installer une seule fois à la fin.
Sortie du générateur
Section intitulée « Sortie du générateur »Le générateur met à jour la cible <mcp-server-name>-dev du serveur MCP dans project.json pour dépendre de la cible dev du projet DynamoDB. Aucun fichier source n’est modifié.
Utiliser DynamoDB dans les outils
Section intitulée « Utiliser DynamoDB dans les outils »Importez les factories d’entités depuis le package DynamoDB et utilisez-les à l’intérieur de 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;};Infrastructure
Section intitulée « Infrastructure »Pour permettre au serveur MCP d’accéder à la table DynamoDB, accordez les permissions nécessaires dans votre infrastructure.
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);grantReadWriteData accorde à la fois les permissions DynamoDB et KMS au rôle d’exécution du serveur MCP.
Accordez au rôle d’exécution du serveur MCP l’accès à la table et à sa clé de chiffrement KMS via 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] }, ]}Développement local
Section intitulée « Développement local »Le générateur connection configure la cible dev de votre projet pour dépendre de la cible dev du projet DynamoDB. DynamoDB Local démarrera automatiquement en même temps que votre projet lors de l’exécution de dev.
La variable d’environnement LOCAL_DEV=true est définie automatiquement, de sorte que getDynamoDBClient() et resolveTableName() se connectent à l’instance locale DynamoDB Local au lieu d’AWS.