ts-mcp-template/README.md
Jax 8df0a58dfa feat: migrate verified template implementation into main repo
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 22:10:25 +08:00

87 lines
3.3 KiB
Markdown

# TS MCP Template (V1)
A Node.js template for building Model Context Protocol (MCP) servers with TypeScript. This template focuses on a local-first development experience, protocol-safe stdio execution, and explicit capability registration.
## Status: V1 Alpha
This template supports:
- Node.js 20+ runtime
- Single-package architecture
- Protocol-safe Local Stdio transport (Primary)
- Streamable HTTP transport (Secondary)
- Explicit, function-based tool, resource, and prompt registration
- Vitest-powered transport and core logic testing
It does not currently support Bun, Deno, edge runtimes, built-in authentication, or telemetry.
## Quickstart: Local Stdio
Stdio is the primary transport for local development and integration with desktop LLM clients like Claude.
1. **Install dependencies**
```bash
npm install
```
2. **Run with MCP Inspector**
The template includes a protocol-safe launch configuration in `package.json` to avoid stdout pollution. Use this command to test your server:
```bash
npx @modelcontextprotocol/inspector node ./node_modules/tsx/dist/cli.mjs src/stdio.ts
```
3. **Build the project**
To prepare for production or use with a compiled entry point:
```bash
npm run build
```
## Usage: HTTP
The HTTP transport uses the Node-native `StreamableHTTPServerTransport` for remote or web-based connections.
1. **Start the HTTP server**
```bash
npm run dev:http
```
The server defaults to `127.0.0.1:3000`. You can configure the port via the `HTTP_PORT` environment variable.
2. **Endpoints**
- `POST /mcp`: Initialize a new session and handle requests.
- `GET /mcp`: Handle ongoing session requests.
## Development and Testing
- **Typecheck**: `npm run typecheck`
- **Test**: `npm test` (Runs Vitest smoke tests for stdio, HTTP, and core logic)
- **Dev (Core Logic)**: `npm run dev` (Executes `src/index.ts`)
## Repository Structure
- `src/core/`: The shared MCP core factory (`createMcpCore`) that builds the server and registry.
- `src/capabilities/`: Definitions and handlers for tools, resources, and prompts.
- `src/stdio.ts`: The stdio entry point and transport setup.
- `src/http.ts`: The HTTP entry point and session management.
- `src/config/`: Runtime configuration and environment variable parsing.
- `src/lib/`: Internal utilities, stderr-safe logging, and error handling.
## Extension Guidance
This template uses an explicit, function-based registration pattern instead of decorators or reflection.
### 1. Define Contracts
Add new tool or prompt schemas in `src/capabilities/contracts.ts` to share types between handlers and tests.
### 2. Implement Handlers
Create or update files in `src/capabilities/` (e.g., `tools.ts`):
1. Define the handler logic.
2. Update the `register...Capabilities` function to add descriptors to the registry.
3. Update the `register...Handlers` function to wire the logic to the `McpServer` instance.
### 3. Register with Core
If you create new capability modules, ensure they are called within `src/capabilities/index.ts` in the `registerCoreCapabilities` and `registerCoreMcpCapabilities` functions.
## V1 Limitations
- **No Auth**: HTTP transport does not include built-in authentication.
- **Node-only**: Specifically tuned for Node.js 20+.
- **No Monorepo**: Designed as a standalone project template.
- **Local Focus**: Deployment guides for cloud providers are not provided in V1.