ts#mcp-server
TypeScript MCP Server Generator
Generate a TypeScript Model Context Protocol (MCP) server for providing context to Large Language Models (LLMs).
What is MCP?
The Model Context Protocol (MCP) is an open standard that allows AI assistants to interact with external tools and resources. It provides a consistent way for LLMs to:
- Execute tools (functions) that perform actions or retrieve information
- Access resources that provide context or data
Usage
Generate an MCP Server
You can generate a TypeScript MCP server in two ways:
- Install the Nx Console VSCode Plugin if you haven't already
- Open the Nx Console in VSCode
- Click
Generate (UI)
in the "Common Nx Commands" section - Search for
@aws/nx-plugin - ts#mcp-server
- Fill in the required parameters
- Click
Generate
pnpm nx g @aws/nx-plugin:ts#mcp-server
yarn nx g @aws/nx-plugin:ts#mcp-server
npx nx g @aws/nx-plugin:ts#mcp-server
bunx nx g @aws/nx-plugin:ts#mcp-server
You can also perform a dry-run to see what files would be changed
pnpm nx g @aws/nx-plugin:ts#mcp-server --dry-run
yarn nx g @aws/nx-plugin:ts#mcp-server --dry-run
npx nx g @aws/nx-plugin:ts#mcp-server --dry-run
bunx nx g @aws/nx-plugin:ts#mcp-server --dry-run
Options
Parameter | Type | Default | Description |
---|---|---|---|
name Required | string | - | MCP server project name. |
directory | string | packages | Parent directory where the MCP server is placed. |
subDirectory | string | - | The sub directory the MCP server is placed in. By default this is the MCP server project name. |
Generator Output
The generator will create the following project files:
Directorypackages/<name>/
- README.md Documentation for the MCP server with usage instructions
- project.json Nx project configuration with build, bundle, and dev targets
Directorysrc/
- index.ts Entry point for the MCP server
- server.ts Main server definition, defining tools and resources
- global.d.ts TypeScript type declarations for importing markdown files
Directoryresources/
- example-context.md Example markdown file used as a resource for the MCP server
Working with Your MCP Server
Adding Tools
Tools are functions that the AI assistant can call to perform actions. You can add new tools in the server.ts
file:
server.tool("toolName", { param1: z.string(), param2: z.number() }, // Input schema using Zod async ({ param1, param2 }) => { // Tool implementation return { content: [{ type: "text", text: "Result" }] }; });
Adding Resources
Resources provide context to the AI assistant. You can add static resources from files or dynamic resources:
// Static resource from a fileimport exampleContext from './resources/example-context.md';
server.resource('resource-name', 'example://resource', async (uri) => ({ contents: [{ uri: uri.href, text: exampleContext }],}));
// Dynamic resourceserver.resource('dynamic-resource', 'dynamic://resource', async (uri) => { const data = await fetchSomeData(); return { contents: [{ uri: uri.href, text: data }], };});
Configuring with AI Assistants
To use your MCP server with AI assistants, you need to bundle it first:
pnpm nx run your-mcp-server:bundle
yarn nx run your-mcp-server:bundle
npx nx run your-mcp-server:bundle
bunx nx run your-mcp-server:bundle
This creates a bundled version in dist/packages/your-mcp-server/bundle/index.js
(path may vary based on your directory settings).
Configuration Files
Most AI assistants that support MCP use a similar configuration approach. You’ll need to create or update a configuration file with your MCP server details:
{ "mcpServers": { "your-mcp-server": { "command": "node", "args": [ "/path/to/workspace/dist/packages/your-mcp-server/bundle/index.js" ], "transportType": "stdio" } }}
Replace /path/to/workspace/dist/packages/your-mcp-server/bundle/index.js
with the actual path to your bundled MCP server.
Assistant-Specific Configuration
Please refer to the following documentation for configuring MCP with specific AI Assistants:
Development Workflow
Build Targets
The generator is built on top of the TypeScript project generator and as such inherits its targets, as well as adding the following additional targets:
Bundle
The bundle
task uses esbuild to create a single bundled JavaScript file that can be used with AI assistants:
pnpm nx run your-mcp-server:bundle
yarn nx run your-mcp-server:bundle
npx nx run your-mcp-server:bundle
bunx nx run your-mcp-server:bundle
This creates a bundled version in dist/packages/your-mcp-server/bundle/index.js
(path may vary based on your directory settings).
Dev
The dev
task watches for changes in your project and automatically rebuilds the bundle:
pnpm nx run your-mcp-server:dev
yarn nx run your-mcp-server:dev
npx nx run your-mcp-server:dev
bunx nx run your-mcp-server:dev
This is particularly useful during development as it ensures your AI Assistant utilises the latest version of your MCP server.