Pular para o conteúdo

TypeScript MCP Server

Filter this guidePick generator option values to hide sections that don't apply.

Gere um servidor TypeScript Model Context Protocol (MCP) para fornecer contexto a Large Language Models (LLMs), e opcionalmente implante-o no Amazon Bedrock AgentCore.

O Model Context Protocol (MCP) é um padrão aberto que permite que assistentes de IA interajam com ferramentas e recursos externos. Ele fornece uma maneira consistente para LLMs:

  • Executar ferramentas (funções) que realizam ações ou recuperam informações
  • Acessar recursos que fornecem contexto ou dados

Você pode gerar um servidor MCP TypeScript de duas maneiras:

Terminal window
pnpm nx g @aws/nx-plugin:ts#mcp-server
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:ts#mcp-server --dry-run
ParâmetroTipoPadrãoDescrição
project Obrigatóriostring-O projeto ao qual adicionar um servidor MCP
name string-O nome do seu servidor MCP (padrão: mcp-server)
auth iam | cognitoiamO método usado para autenticar com seu servidor MCP. Aplicável apenas quando infra está definido (ignorado quando infra é none).
iac inherit | cdk | terraforminheritO provedor IaC preferido. Por padrão, isso é herdado da sua seleção inicial.
infra agentcore | noneagentcoreO tipo de infraestrutura para hospedar seu servidor MCP. Selecione none para nenhuma hospedagem.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam computar o grafo de projetos do Nx); instale uma vez no final.

O gerador adicionará os seguintes arquivos ao seu projeto TypeScript existente:

  • Directoryyour-project/
    • Directorysrc/
      • Directorymcp-server/ (or custom name if specified)
        • index.ts Exports your server
        • server.ts Main server definition
        • stdio.ts Entry point for STDIO transport, useful for simple local MCP servers
        • http.ts Entry point for Streamable HTTP transport, useful for hosting your MCP server
        • Directorytools/
          • divide.ts Sample tool
        • Directoryresources/
          • sample-guidance.ts Sample resource
        • Dockerfile Entry point for hosting your MCP server (excluded when infra is set to None)
    • project.json Updated with MCP server serve target
infra = agentcore

Como este gerador fornece infraestrutura como código baseada no seu iac escolhido, ele criará um projeto em packages/common que inclui os constructs CDK relevantes ou módulos Terraform.

O projeto comum de infraestrutura como código é estruturado da seguinte forma:

  • Directorypackages/common/constructs
    • Directorysrc
      • Directoryapp/ Constructs for infrastructure specific to a project/generator
      • Directorycore/ Generic constructs which are reused by constructs in app
      • index.ts Entry point exporting constructs from app
    • project.json Project build targets and configuration

Para implantar seu MCP Server, os seguintes arquivos são gerados:

  • Directorypackages/common/constructs/src
    • Directoryapp
      • Directorymcp-servers
        • Directory<mcp-server-name>
          • <mcp-server-name>.ts CDK construct for deploying your MCP Server
infra = none

Se você selecionou none para infra, nenhum construto CDK ou módulo Terraform é gerado — o servidor MCP é configurado apenas para uso local STDIO / HTTP. A opção auth é ignorada neste modo, pois não há endpoint hospedado para autenticar.

Quando implantado no Bedrock AgentCore Runtime, o servidor MCP é construído em uma imagem de contêiner, enviado para o Amazon ECR e executado no AgentCore Runtime. Assistentes de IA invocam o endpoint do plano de dados do AgentCore Runtime, que encaminha chamadas tools/* e resources/* para o seu servidor através do transporte HTTP streamable.

AI AssistantECRMCP Server(AgentCore Runtime)CloudWatch(Logs, Metrics) StreamableHTTP Containerimage

Ferramentas são funções que o assistente de IA pode chamar para realizar ações. Cada ferramenta fica em seu próprio arquivo em tools/ que exporta uma função register<Name>Tool, que você então chama de server.ts. Por exemplo, adicione tools/my-tool.ts:

tools/my-tool.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { z } from 'zod';
export const registerMyTool = (server: McpServer) => {
server.registerTool("toolName", {
description: "tool description",
inputSchema: { param1: z.string(), param2: z.number() } // Input schema using Zod
},
async ({ param1, param2 }) => {
// Tool implementation
return {
content: [{ type: "text", text: "Result" }]
};
}
);
};

Em seguida, registre-a dentro de createServer em server.ts:

server.ts
import { registerMyTool } from './tools/my-tool.js';
export const createServer = async () => {
const server = new McpServer({ name: 'my-server', version: '1.0.0' });
registerMyTool(server);
return server;
};

Recursos fornecem contexto ao assistente de IA. Como ferramentas, cada recurso fica em seu próprio arquivo em resources/ que exporta uma função register<Name>Resource chamada de server.ts. Você pode adicionar recursos estáticos de arquivos ou recursos dinâmicos:

resources/my-resource.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
export const registerMyResource = (server: McpServer) => {
const exampleContext = 'some context to return';
server.registerResource('resource-name', 'example://resource', {}, async (uri) => ({
contents: [{ uri: uri.href, text: exampleContext }],
}));
// Dynamic resource
server.registerResource('dynamic-resource', 'dynamic://resource', {}, async (uri) => {
const data = await fetchSomeData();
return {
contents: [{ uri: uri.href, text: data }],
};
});
};

A maioria dos assistentes de IA que suportam MCP usa uma abordagem de configuração similar. Você precisará criar ou atualizar um arquivo de configuração com os detalhes do seu servidor MCP:

{
"mcpServers": {
"your-mcp-server": {
"command": "npx",
"args": ["tsx", "/path/to/your-mcp-server/stdio.ts"]
}
}
}

Ao desenvolver seu servidor MCP, você pode desejar configurar a flag --watch para que o assistente de IA sempre veja as versões mais recentes das ferramentas/recursos:

{
"mcpServers": {
"your-mcp-server": {
"command": "npx",
"args": ["tsx", "--watch", "/path/to/your-mcp-server/stdio.ts"]
}
}
}

Por favor, consulte a seguinte documentação para configurar MCP com Assistentes de IA específicos:

Para executar seu servidor MCP (e tudo conectado a ele, como um banco de dados local) localmente, use o target dev do projeto:

Terminal window
pnpm nx dev your-project

Se você adicionou vários componentes ao seu projeto (servidores MCP, agentes, etc.), isso inicia todos eles. Para executar apenas este servidor MCP, direcione seu target <your-server-name>-dev:

Terminal window
pnpm nx your-server-name-dev your-project

O gerador configura um target chamado <your-server-name>-inspect, que inicia seu servidor MCP localmente (via target <your-server-name>-dev, incluindo quaisquer dependências conectadas, como um banco de dados local) e lança o MCP Inspector pré-configurado para se conectar a ele via transporte Streamable HTTP.

Terminal window
pnpm nx your-server-name-inspect your-project

Isso iniciará o inspector em http://localhost:6274. Comece clicando no botão “Connect”.

A maneira mais fácil de testar e usar um servidor MCP é usando o inspector ou configurando-o com um assistente de IA (como acima).

No entanto, você pode executar seu servidor com transporte STDIO diretamente usando o target <your-server-name>-serve-stdio.

Terminal window
pnpm nx your-server-name-serve-stdio your-project

Este comando usa tsx --watch para reiniciar automaticamente o servidor quando os arquivos mudam.

Se você quiser executar seu servidor MCP localmente usando transporte Streamable HTTP, você pode usar o target <your-server-name>-serve.

Terminal window
pnpm nx your-server-name-serve your-project

Este comando usa tsx --watch para reiniciar automaticamente o servidor quando os arquivos mudam.

infra = agentcore

Implantando Seu MCP Server no Bedrock AgentCore Runtime

Seção intitulada “Implantando Seu MCP Server no Bedrock AgentCore Runtime”

Se você selecionou agentcore para infra, a infraestrutura CDK ou Terraform relevante é gerada, que você pode usar para implantar seu servidor MCP no Amazon Bedrock AgentCore Runtime.

Um construto CDK é gerado para seu Servidor MCP, nomeado com base no name que você escolheu ao executar o gerador, ou <ProjectName>McpServer por padrão.

Você pode usar este construto CDK em uma aplicação CDK:

import { MyProjectMcpServer } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
// Add the MCP server to your stack
new MyProjectMcpServer(this, 'MyProjectMcpServer');
}
}

O gerador fornece uma opção auth para configurar a autenticação para seu servidor MCP. Você pode escolher entre autenticação IAM (padrão) ou Cognito ao gerar seu servidor MCP.

Por padrão, seu servidor MCP será protegido usando autenticação IAM, simplesmente implante-o sem nenhum argumento:

import { MyProjectMcpServer } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
new MyProjectMcpServer(this, 'MyProjectMcpServer');
}
}

Você pode conceder acesso para invocar seu servidor MCP no Bedrock AgentCore Runtime usando o método grantInvokeAccess. Por exemplo, você pode desejar que um agente gerado com o gerador py#agent chame seu servidor MCP:

import { MyProjectAgent, MyProjectMcpServer } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
const agent = new MyProjectAgent(this, 'MyProjectAgent');
const mcpServer = new MyProjectMcpServer(this, 'MyProjectMcpServer');
mcpServer.grantInvokeAccess(agent);
}
}

Quando você seleciona autenticação Cognito, o gerador configura o servidor MCP para usar Cognito para autenticação.

O construto gerado aceita uma propriedade identity que configura a autenticação Cognito:

import { MyProjectMcpServer, UserIdentity } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
const identity = new UserIdentity(this, 'Identity');
new MyProjectMcpServer(this, 'MyProjectMcpServer', {
identity,
});
}
}

O construto UserIdentity pode ser gerado usando o gerador ts#website#auth, ou você pode criar seu próprio UserPool e UserPoolClient CDK.

O gerador configura automaticamente um target bundle que usa Rolldown para criar um pacote de implantação:

Terminal window
pnpm nx bundle <project-name>

A configuração do Rolldown pode ser encontrada em rolldown.config.ts, com uma entrada por pacote a ser gerado. O Rolldown gerencia a criação de múltiplos pacotes em paralelo, se definidos.

O bundle target usa http.ts como ponto de entrada para o servidor MCP Streamable HTTP hospedar no Bedrock AgentCore Runtime.

O gerador configura um target <your-server-name>-docker que copia o Dockerfile do diretório de origem do seu servidor MCP para o diretório de saída do bundle. Isso coloca o Dockerfile junto com os artefatos empacotados, permitindo que o CDK construa a imagem Docker diretamente usando AgentRuntimeArtifact.fromAsset.

Um target docker também é gerado, que prepara o contexto docker para todos os servidores MCP se você tiver vários definidos.

A imagem Docker construída para este projeto pode ser verificada em busca de vulnerabilidades usando Trivy, executando a partir da imagem Trivy hospedada no ECR.

Um target trivy é adicionado ao seu projeto que verifica a imagem construída e sai com código diferente de zero se alguma vulnerabilidade de severidade HIGH ou CRITICAL for encontrada. O Dockerfile gerado usa uma imagem base sem vulnerabilidades corrigíveis conhecidas dessas severidades no momento da geração, e atualiza as ferramentas incluídas (como npm) para mantê-lo assim.

A verificação usa o mesmo mecanismo de contêiner que sua construção de imagem (docker ou finch), portanto nenhuma ferramenta adicional é necessária. Como a verificação só é executada novamente quando a imagem muda, uma imagem inalterada não é verificada novamente. O script raiz trivy fornecido verifica todas as imagens no workspace:

Terminal window
pnpm trivy

Pode haver casos em que você deseja suprimir uma vulnerabilidade específica, por exemplo, quando nenhuma correção está disponível ainda e você avaliou o risco como aceitável.

Adicione o ID da vulnerabilidade (um por linha) ao arquivo .trivyignore na raiz do seu projeto (ou seja, ao lado do seu project.json):

.trivyignore
# node-tar arbitrary file write - not exploitable in our usage
CVE-2024-XXXXX

Para mais detalhes sobre filtragem de descobertas, consulte a documentação de filtragem do Trivy.

Seu servidor MCP é configurado automaticamente com observabilidade usando o AWS Distro for Open Telemetry (ADOT), configurando a instrumentação automática no seu Dockerfile.

Você pode encontrar traces no Console AWS do CloudWatch, selecionando “GenAI Observability” no menu. Observe que para que os traces sejam preenchidos, você precisará habilitar o Transaction Search.

Para mais detalhes, consulte a documentação do AgentCore sobre observabilidade.

Use o gerador connection para integrar este projeto com outros em seu workspace. As seguintes conexões envolvem este projeto:

Strands AgentsTypeScriptModel Context Protocol
TypeScript Agent to MCPConnect a TypeScript Agent to an MCP server
Strands AgentsPythonModel Context Protocol
Python Agent to MCPConnect a Python Agent to an MCP server
Model Context ProtocolAmazon Aurora
MCP Server to Relational DatabaseConnect a TypeScript MCP Server to an Aurora relational database
Model Context ProtocolAmazon DynamoDB
MCP Server to TypeScript DynamoDBConnect a TypeScript MCP Server to a DynamoDB table
Amazon Bedrock AgentCore GatewayModel Context Protocol
AgentCore Gateway to MCP ServerAggregate an MCP server behind an AgentCore Gateway