A template repository for creating Model Context Protocol (MCP) servers in Node.js/TypeScript. This template demonstrates a simple notes management system using the MCP protocol.
The Model Context Protocol (MCP) is a standardized way for applications to provide context to Large Language Models (LLMs). Learn more at the Model Context Protocol Website.
- TypeScript implementation with strict type checking
- Simple notes management system with basic CRUD operations
- Complete examples of MCP concepts (Tools, Resources, Prompts)
- In-memory storage for notes
- Comprehensive error handling and validation
- Unit tests with Vitest
- VS Code debugging configuration
- GitHub Actions CI workflow for testing and building
- Node.js 18 or later
- npm or yarn
mcp-template-node/
├── build/ # Compiled JavaScript files
├── src/
│ ├── __tests__/ # Integration tests and test utilities
│ ├── errors/ # Custom error classes
│ ├── tools/ # MCP tool implementations
│ │ └── __tests__/ # Tool unit tests
│ ├── types/ # TypeScript type definitions
│ │ └── __tests__/ # Type tests
│ └── index.ts # Main server entry point with MCP examples
├── package.json # Project configuration
├── tsconfig.json # TypeScript configuration
├── eslint.config.mjs # ESLint flat configuration
└── README.md # Project documentation
-
Clone the repository:
git clone https://github.com/Rethunk-Tech/mcp-template-node.git cd mcp-template-node
-
Install dependencies:
yarn install
-
Build and run the server:
yarn build yarn start
- Start TypeScript compiler in watch mode:
yarn dev
- Lint your code:
yarn lint
- Fix linting issues:
yarn lint:fix
- Run tests:
yarn test
This project includes comprehensive tests to verify the functionality of the MCP server and its tools.
Run all tests:
yarn test
Run tests in watch mode (rerun tests when files change):
yarn test:watch
Run tests with coverage:
yarn test:coverage
- Unit Tests: Located in
__tests__
directories near the code they test - Integration Tests: Located in
src/__tests__/
- Test Utilities: Common test helpers in
src/__tests__/test-utils.ts
The project includes a MockMcpServer for testing tools without real MCP dependencies:
import { MockMcpServer } from '../__tests__/test-utils.js';
describe('My Tool Tests', () => {
let server: MockMcpServer;
beforeEach(() => {
server = new MockMcpServer();
// Register tools
registerMyTools(server as any);
});
it('should perform some action', async () => {
const result = await server.callTool('my_tool', { param: 'value' });
expect(result.content[0].text).toContain('Expected text');
});
});
For standalone testing, use the MCP Inspector tool:
yarn inspector
This will open an interactive session where you can test your MCP tools.
Creates a new note with title and content.
Lists all available notes with their IDs and titles.
Retrieves a specific note by ID.
Updates an existing note's title, content, or tags.
Deletes a note by ID.
To extend this template:
- Add new types in
src/types/
- Implement new tools in
src/tools/
- Add new resources in
src/index.ts
- Create new prompt templates as needed
- Add tests for your new functionality
See CONTRIBUTING.md for guidelines on how to contribute to this project.
MIT