Skip to content

Commit 4bfbb69

Browse files
committed
feat: update server-standard-ts template with stdio and web transports
1 parent 113c2f2 commit 4bfbb69

File tree

9 files changed

+77
-12
lines changed

9 files changed

+77
-12
lines changed

.changeset/empty-jokes-itch.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'create-mcp-kit': patch
3+
---
4+
5+
feat: update server-standard-ts template with stdio and web transports

packages/create-mcp-kit/template/server-standard-ts/LICENSE renamed to packages/create-mcp-kit/template/server-standard-ts/LICENSE.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) {{YEAR}} {{PROJECT_NAME}}
3+
Copyright (c) {{year}} {{projectName}}
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

packages/create-mcp-kit/template/server-standard-ts/_github/workflows/build.yml renamed to packages/create-mcp-kit/template/server-standard-ts/_github/workflows/build.yml.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77

88
jobs:
99
build:
10-
if: github.repository == '{{PROJECT_NAME}}'
10+
if: github.repository == '{{projectName}}'
1111
runs-on: ubuntu-latest
1212
steps:
1313
- name: Checkout

packages/create-mcp-kit/template/server-standard-ts/_github/workflows/npm-publish.yml renamed to packages/create-mcp-kit/template/server-standard-ts/_github/workflows/npm-publish.yml.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66

77
jobs:
88
build:
9-
if: github.repository == '{{PROJECT_NAME}}'
9+
if: github.repository == '{{projectName}}'
1010
runs-on: ubuntu-latest
1111
permissions:
1212
contents: read

packages/create-mcp-kit/template/server-standard-ts/package.json renamed to packages/create-mcp-kit/template/server-standard-ts/package.json.hbs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
2-
"name": "{{PROJECT_NAME}}",
2+
"name": "{{projectName}}",
33
"version": "0.0.0",
4-
"description": "{{PROJECT_NAME}}",
4+
"description": "{{projectName}}",
55
"author": "zhensherlock",
66
"type": "module",
77
"license": "MIT",
88
"bin": {
9-
"{{PROJECT_NAME}}": "./build/index.js"
9+
"{{projectName}}": "./build/index.js"
1010
},
1111
"files": [
1212
"build",
@@ -18,30 +18,37 @@
1818
"prepare": "husky",
1919
"lint": "npx eslint \"src/**/*.{ts,js}\"",
2020
"build": "tsc --noEmit && cross-env NODE_ENV=production node scripts/build.js",
21+
{{#if (and (includes transports 'stdio') (or (includes transports 'streamable') (includes transports 'sse')))}}
2122
"dev": "npm run dev:stdio",
2223
"dev:stdio": "cross-env NODE_ENV=local concurrently \"tsc --noEmit --watch\" \"node scripts/dev.js\"",
24+
{{else if (includes transports 'stdio')}}
25+
"dev": "npm run dev:stdio",
26+
"dev:stdio": "cross-env NODE_ENV=local concurrently \"tsc --noEmit --watch\" \"node scripts/dev.js\"",
27+
{{else}}
28+
"dev": "npm run dev:web",
2329
"dev:web": "cross-env NODE_ENV=local TRANSPORT=web concurrently \"tsc --noEmit --watch\" \"node scripts/dev.js\"",
30+
{{/if}}
2431
"test": "vitest run",
2532
"coverage": "rimraf coverage && npm run test && c8 report --reporter=lcov --reporter=html",
2633
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 -n changelog-option.js"
2734
},
2835
"dependencies": {
2936
"@modelcontextprotocol/sdk": "^1.17.1",
30-
"cors": "^2.8.5",
3137
"dotenv": "^17.2.1",
38+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
3239
"express": "^5.1.0",
3340
"nanoid": "^5.1.5",
34-
"node-fetch": "^3.3.2",
41+
{{/if}}
3542
"yargs": "^17.7.2",
3643
"zod": "^3.25.76"
3744
},
3845
"devDependencies": {
3946
"@commitlint/cli": "^19.8.1",
4047
"@commitlint/config-conventional": "^19.8.1",
4148
"@modelcontextprotocol/inspector": "^0.16.2",
42-
"@types/cors": "^2.8.19",
49+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
4350
"@types/express": "^5.0.3",
44-
"@types/node-fetch": "^2.6.13",
51+
{{/if}}
4552
"@types/yargs": "^17.0.33",
4653
"@typescript-eslint/eslint-plugin": "^8.38.0",
4754
"@typescript-eslint/parser": "^8.38.0",

packages/create-mcp-kit/template/server-standard-ts/src/index.ts renamed to packages/create-mcp-kit/template/server-standard-ts/src/index.ts.hbs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
#!/usr/bin/env node
22
import yargs, { type ArgumentsCamelCase } from 'yargs'
33
import { hideBin } from 'yargs/helpers'
4-
import { startWebServer, startStdioServer } from './services'
4+
{{#if (and (includes transports 'stdio') (or (includes transports 'streamable') (includes transports 'sse')))}}
5+
import { startStdioServer, startWebServer } from './services'
6+
{{else if (includes transports 'stdio')}}
7+
import { startStdioServer } from './services'
8+
{{else}}
9+
import { startWebServer } from './services'
10+
{{/if}}
511
import { getOptions } from './utils'
612
import 'dotenv/config'
713
import pkg from '../package.json' with { type: 'json' }
@@ -11,40 +17,60 @@ const name = 'node-mcp-server'
1117
const argv = await yargs()
1218
.scriptName(name)
1319
.usage('$0 <command> [options]')
20+
{{#if (includes transports 'stdio')}}
1421
.command(
1522
'stdio',
1623
'Start the server using the stdio transport protocol.',
1724
() => {},
1825
argv => startServer('stdio', argv),
1926
)
27+
{{/if}}
28+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
2029
.command(
2130
'web',
2231
'Start the web server transport protocol.',
2332
() => {},
2433
argv => startServer('web', argv),
2534
)
35+
{{/if}}
36+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
2637
.options({
2738
port: {
2839
describe: 'Specify the port for SSE or streamable transport (default: 8401)',
2940
type: 'string',
3041
default: process.env.PORT || '8401',
3142
},
3243
})
44+
{{/if}}
3345
.help()
3446
.parse(hideBin(process.argv))
3547

3648
if (!argv._[0]) {
49+
{{#if (includes transports 'stdio')}}
3750
startServer('stdio', argv)
51+
{{else}}
52+
startServer('web', argv)
53+
{{/if}}
3854
}
3955

4056
async function startServer(mode: string, argv: ArgumentsCamelCase) {
4157
const options = getOptions(argv, {
4258
name,
4359
version: pkg.version,
4460
})
61+
{{#if (and (includes transports 'stdio') (or (includes transports 'streamable') (includes transports 'sse')))}}
4562
if (mode === 'stdio') {
4663
startStdioServer(options).catch(console.error)
4764
} else if (mode === 'web') {
4865
startWebServer(options).catch(console.error)
4966
}
67+
{{else if (includes transports 'stdio')}}
68+
if (mode === 'stdio') {
69+
startStdioServer(options).catch(console.error)
70+
}
71+
{{else}}
72+
if (mode === 'web') {
73+
startWebServer(options).catch(console.error)
74+
}
75+
{{/if}}
5076
}

packages/create-mcp-kit/template/server-standard-ts/src/services/index.ts renamed to packages/create-mcp-kit/template/server-standard-ts/src/services/index.ts.hbs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
22
import { registerTools } from '@/tools'
33
import { registerResources } from '@/resources'
44
import { registerPrompts } from '@/prompts'
5+
{{#if (includes transports 'stdio')}}
56
import { stdioServer } from './stdio'
7+
{{/if}}
8+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
69
import { webServer } from './web'
10+
{{/if}}
711
import type { OptionsType } from '@/types'
812

913
const createServer = (options: OptionsType) => {
@@ -16,13 +20,17 @@ const createServer = (options: OptionsType) => {
1620
registerPrompts(server)
1721
return server
1822
}
23+
{{#if (includes transports 'stdio')}}
1924

2025
export async function startStdioServer(options: OptionsType) {
2126
const server = createServer(options)
2227
await stdioServer(server)
2328
}
29+
{{/if}}
30+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
2431

2532
export async function startWebServer(options: OptionsType) {
2633
const server = createServer(options)
2734
await webServer(server, options)
2835
}
36+
{{/if}}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
{{#if (includes transports 'stdio')}}
12
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
23
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
34

45
export async function stdioServer(server: McpServer) {
56
const transport = new StdioServerTransport()
67
await server.connect(transport)
78
}
9+
{{/if}}

packages/create-mcp-kit/template/server-standard-ts/src/services/web.ts renamed to packages/create-mcp-kit/template/server-standard-ts/src/services/web.ts.hbs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
{{#if (includes transports 'streamable')}}
12
import { nanoid } from 'nanoid'
3+
{{/if}}
4+
{{#if (or (includes transports 'streamable') (includes transports 'sse'))}}
25
import express from 'express'
6+
{{#if (includes transports 'streamable')}}
37
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js'
48
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'
9+
{{/if}}
10+
{{#if (includes transports 'sse')}}
511
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'
12+
{{/if}}
613
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
714
import type { OptionsType } from '@/types'
815

@@ -11,9 +18,15 @@ export async function webServer(server: McpServer, options: OptionsType) {
1118
app.use(express.json())
1219

1320
const transports = {
21+
{{#if (includes transports 'streamable')}}
1422
streamable: {} as Record<string, StreamableHTTPServerTransport>,
23+
{{/if}}
24+
{{#if (includes transports 'sse')}}
1525
sse: {} as Record<string, SSEServerTransport>,
26+
{{/if}}
1627
}
28+
{{#if (includes transports 'streamable')}}
29+
1730
app.post('/mcp', async (req, res) => {
1831
const sessionId = req.headers['mcp-session-id'] as string | undefined
1932
let transport: StreamableHTTPServerTransport
@@ -63,6 +76,8 @@ export async function webServer(server: McpServer, options: OptionsType) {
6376
app.get('/mcp', handleSessionRequest)
6477

6578
app.delete('/mcp', handleSessionRequest)
79+
{{/if}}
80+
{{#if (includes transports 'sse')}}
6681

6782
app.get('/sse', async (req, res) => {
6883
const transport = new SSEServerTransport('/messages', res)
@@ -85,6 +100,8 @@ export async function webServer(server: McpServer, options: OptionsType) {
85100
}
86101
})
87102

103+
{{/if}}
88104
app.listen(options.port)
89-
console.log(`MCP server started on port ${options.port}. SSE endpoint: /sse, streamable endpoint: /mcp`)
105+
console.log(`MCP server started on port ${options.port}.{{#if (includes transports 'sse')}} SSE endpoint: /sse{{/if}}{{#if (includes transports 'streamable')}} streamable endpoint: /mcp{{/if}}`)
90106
}
107+
{{/if}}

0 commit comments

Comments
 (0)