mcp-ts-template 2.3.2 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +19 -1
  2. package/dist/index.js +70 -73
  3. package/package.json +8 -8
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  <div align="center">
7
7
 
8
- [![Version](https://img.shields.io/badge/Version-2.3.1-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP Spec](https://img.shields.io/badge/MCP%20Spec-2025--06--18-8A2BE2.svg?style=flat-square)](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-06-18/changelog.mdx) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.18.2-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Status](https://img.shields.io/badge/Status-Stable-brightgreen.svg?style=flat-square)](https://github.com/cyanheads/mcp-ts-template/issues) [![TypeScript](https://img.shields.io/badge/TypeScript-^5.9.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.2.23-blueviolet.svg?style=flat-square)](https://bun.sh/) [![Code Coverage](https://img.shields.io/badge/Coverage-87.74%25-brightgreen.svg?style=flat-square)](./coverage/lcov-report/)
8
+ [![Version](https://img.shields.io/badge/Version-2.3.3-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP Spec](https://img.shields.io/badge/MCP%20Spec-2025--06--18-8A2BE2.svg?style=flat-square)](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-06-18/changelog.mdx) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.18.2-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Status](https://img.shields.io/badge/Status-Stable-brightgreen.svg?style=flat-square)](https://github.com/cyanheads/mcp-ts-template/issues) [![TypeScript](https://img.shields.io/badge/TypeScript-^5.9.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.2.23-blueviolet.svg?style=flat-square)](https://bun.sh/) [![Code Coverage](https://img.shields.io/badge/Coverage-87.74%25-brightgreen.svg?style=flat-square)](./coverage/lcov-report/)
9
9
 
10
10
  </div>
11
11
 
@@ -26,6 +26,24 @@
26
26
 
27
27
  ## 🚀 Getting Started
28
28
 
29
+ ### MCP Client Settings/Configuration
30
+
31
+ Add the following to your MCP Client configuration file (e.g., `cline_mcp_settings.json`).
32
+
33
+ ```json
34
+ {
35
+ "mcpServers": {
36
+ "mcp-ts-template": {
37
+ "command": "bunx",
38
+ "args": ["mcp-ts-template@latest"],
39
+ "env": {
40
+ "MCP_LOG_LEVEL": "info"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
29
47
  ### Prerequisites
30
48
 
31
49
  - [Bun v1.2.0](https://bun.sh/) or higher.
package/dist/index.js CHANGED
@@ -117488,55 +117488,10 @@ var z = /* @__PURE__ */ Object.freeze({
117488
117488
  quotelessJson,
117489
117489
  ZodError
117490
117490
  });
117491
-
117492
- // src/types-global/errors.ts
117493
- var JsonRpcErrorCode;
117494
- ((JsonRpcErrorCode2) => {
117495
- JsonRpcErrorCode2[JsonRpcErrorCode2["ParseError"] = -32700] = "ParseError";
117496
- JsonRpcErrorCode2[JsonRpcErrorCode2["InvalidRequest"] = -32600] = "InvalidRequest";
117497
- JsonRpcErrorCode2[JsonRpcErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound";
117498
- JsonRpcErrorCode2[JsonRpcErrorCode2["InvalidParams"] = -32602] = "InvalidParams";
117499
- JsonRpcErrorCode2[JsonRpcErrorCode2["InternalError"] = -32603] = "InternalError";
117500
- JsonRpcErrorCode2[JsonRpcErrorCode2["ServiceUnavailable"] = -32000] = "ServiceUnavailable";
117501
- JsonRpcErrorCode2[JsonRpcErrorCode2["NotFound"] = -32001] = "NotFound";
117502
- JsonRpcErrorCode2[JsonRpcErrorCode2["Conflict"] = -32002] = "Conflict";
117503
- JsonRpcErrorCode2[JsonRpcErrorCode2["RateLimited"] = -32003] = "RateLimited";
117504
- JsonRpcErrorCode2[JsonRpcErrorCode2["Timeout"] = -32004] = "Timeout";
117505
- JsonRpcErrorCode2[JsonRpcErrorCode2["Forbidden"] = -32005] = "Forbidden";
117506
- JsonRpcErrorCode2[JsonRpcErrorCode2["Unauthorized"] = -32006] = "Unauthorized";
117507
- JsonRpcErrorCode2[JsonRpcErrorCode2["ValidationError"] = -32007] = "ValidationError";
117508
- JsonRpcErrorCode2[JsonRpcErrorCode2["ConfigurationError"] = -32008] = "ConfigurationError";
117509
- JsonRpcErrorCode2[JsonRpcErrorCode2["InitializationFailed"] = -32009] = "InitializationFailed";
117510
- JsonRpcErrorCode2[JsonRpcErrorCode2["DatabaseError"] = -32010] = "DatabaseError";
117511
- JsonRpcErrorCode2[JsonRpcErrorCode2["SerializationError"] = -32070] = "SerializationError";
117512
- JsonRpcErrorCode2[JsonRpcErrorCode2["UnknownError"] = -32099] = "UnknownError";
117513
- })(JsonRpcErrorCode ||= {});
117514
-
117515
- class McpError extends Error {
117516
- code;
117517
- data;
117518
- constructor(code, message, data, options) {
117519
- super(message, options);
117520
- this.code = code;
117521
- if (data) {
117522
- this.data = data;
117523
- }
117524
- this.name = "McpError";
117525
- Object.setPrototypeOf(this, McpError.prototype);
117526
- if (Error.captureStackTrace) {
117527
- Error.captureStackTrace(this, McpError);
117528
- }
117529
- }
117530
- }
117531
- var ErrorSchema = z.object({
117532
- code: z.nativeEnum(JsonRpcErrorCode).describe("Standardized error code from JsonRpcErrorCode enum"),
117533
- message: z.string().min(1, "Error message cannot be empty.").describe("Detailed human-readable error message"),
117534
- data: z.record(z.string(), z.unknown()).optional().describe("Optional structured data providing more context about the error")
117535
- }).describe("Schema for validating structured error objects, ensuring consistency in error reporting.");
117536
117491
  // package.json
117537
117492
  var package_default = {
117538
117493
  name: "mcp-ts-template",
117539
- version: "2.3.0",
117494
+ version: "2.3.3",
117540
117495
  mcpName: "io.github.cyanheads/mcp-ts-template",
117541
117496
  description: "The definitive, production-grade template for building powerful and scalable Model Context Protocol (MCP) servers with TypeScript, featuring built-in observability (OpenTelemetry), declarative tooling, robust error handling, and a modular, DI-driven architecture.",
117542
117497
  main: "dist/index.js",
@@ -117567,30 +117522,27 @@ var package_default = {
117567
117522
  scripts: {
117568
117523
  build: "bun build ./src/index.ts --outdir ./dist --target node",
117569
117524
  "build:worker": "bun build ./src/worker.ts --outdir ./dist --target bun --no-external",
117570
- "deploy:dev": "bunx wrangler dev",
117571
- "deploy:prod": "bunx wrangler deploy",
117525
+ "deploy:dev": "MCP_TRANSPORT_TYPE=http bunx wrangler dev",
117526
+ "deploy:prod": "MCP_TRANSPORT_TYPE=http bunx wrangler deploy",
117572
117527
  start: "bun ./dist/index.js",
117573
- "start:stdio": "MCP_LOG_LEVEL=debug MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
117574
- "start:http": "MCP_LOG_LEVEL=debug MCP_TRANSPORT_TYPE=http bun ./dist/index.js",
117575
- "start:agent": "MCP_LOG_LEVEL=debug bun ./dist/agent/cli/boot.js",
117528
+ "start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
117529
+ "start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js",
117576
117530
  dev: "bun --watch src/index.ts",
117577
117531
  "dev:stdio": "MCP_LOG_LEVEL=debug MCP_TRANSPORT_TYPE=stdio bun --watch src/index.ts",
117578
117532
  "dev:http": "MCP_LOG_LEVEL=debug MCP_TRANSPORT_TYPE=http bun --watch src/index.ts",
117579
- "dev:agent": "MCP_LOG_LEVEL=debug bun --watch src/agent/cli/boot.ts",
117580
117533
  devdocs: "bun run scripts/devdocs.ts",
117581
117534
  devcheck: "bun run scripts/devcheck.ts",
117582
117535
  rebuild: "bun run scripts/clean.ts && bun run build",
117583
- "docs:generate": "typedoc",
117536
+ "docs:generate": "bunx typedoc",
117584
117537
  depcheck: "bunx depcheck",
117585
- lint: "eslint .",
117586
- "lint:fix": "eslint . --fix",
117587
- typecheck: "tsc --noEmit",
117538
+ lint: "bunx eslint .",
117539
+ "lint:fix": "bunx eslint . --fix",
117540
+ typecheck: "bunx tsc --noEmit",
117588
117541
  tree: "bun run scripts/tree.ts",
117589
117542
  "fetch-spec": "bun run scripts/fetch-openapi-spec.ts",
117590
- format: 'bun run prettier --write "**/*.{ts,js,json,md,html,css}"',
117591
- prepare: "[ -d .husky ] && husky || true",
117543
+ format: 'bunx prettier --write "**/*.{ts,js,json,md,html,css}"',
117544
+ prepare: "bunx husky",
117592
117545
  inspector: "bunx mcp-inspector --config mcp.json --server mcp-ts-template",
117593
- "db:duckdb-example": "MCP_LOG_LEVEL=debug tsc && node dist/storage/duckdbExample.js",
117594
117546
  test: "bun test --config vitest.config.ts",
117595
117547
  "test:coverage": "bun test --coverage",
117596
117548
  audit: "bun audit",
@@ -117619,22 +117571,19 @@ var package_default = {
117619
117571
  jose: "^6.1.0",
117620
117572
  "js-yaml": "^4.1.0",
117621
117573
  "node-cron": "^4.2.1",
117622
- openai: "^6.0.0",
117574
+ openai: "^6.0.1",
117623
117575
  papaparse: "^5.5.3",
117624
117576
  "partial-json": "^0.1.7",
117625
117577
  "pdf-lib": "^1.17.1",
117626
117578
  pino: "^9.12.0",
117579
+ "pino-pretty": "^13.1.1",
117627
117580
  "reflect-metadata": "^0.2.2",
117628
117581
  repomix: "^1.6.0",
117629
117582
  "sanitize-html": "^2.17.0",
117630
117583
  tslib: "^2.8.1",
117631
117584
  tsyringe: "^4.10.0",
117632
117585
  validator: "13.15.15",
117633
- zod: "^3.23.8"
117634
- },
117635
- devDependencies: {
117636
- "@cloudflare/workers-types": "^4.20250927.0",
117637
- "@eslint/js": "^9.36.0",
117586
+ zod: "^3.23.8",
117638
117587
  "@opentelemetry/api": "^1.9.0",
117639
117588
  "@opentelemetry/auto-instrumentations-node": "^0.64.6",
117640
117589
  "@opentelemetry/exporter-metrics-otlp-http": "^0.205.0",
@@ -117644,10 +117593,14 @@ var package_default = {
117644
117593
  "@opentelemetry/sdk-metrics": "^2.1.0",
117645
117594
  "@opentelemetry/sdk-node": "^0.205.0",
117646
117595
  "@opentelemetry/sdk-trace-node": "^2.1.0",
117647
- "@opentelemetry/semantic-conventions": "^1.37.0",
117596
+ "@opentelemetry/semantic-conventions": "^1.37.0"
117597
+ },
117598
+ devDependencies: {
117599
+ "@cloudflare/workers-types": "^4.20251001.0",
117600
+ "@eslint/js": "^9.36.0",
117648
117601
  "@types/bun": "^1.2.23",
117649
117602
  "@types/js-yaml": "^4.0.9",
117650
- "@types/node": "^24.6.0",
117603
+ "@types/node": "^24.6.2",
117651
117604
  "@types/node-cron": "^3.0.11",
117652
117605
  "@types/papaparse": "^5.3.16",
117653
117606
  "@types/sanitize-html": "^2.16.0",
@@ -117663,12 +117616,11 @@ var package_default = {
117663
117616
  globals: "^16.4.0",
117664
117617
  husky: "^9.1.7",
117665
117618
  msw: "^2.11.3",
117666
- "pino-pretty": "^13.1.1",
117667
117619
  prettier: "^3.6.2",
117668
117620
  typedoc: "^0.28.13",
117669
- typescript: "^5.9.3",
117621
+ typescript: "^5.9.2",
117670
117622
  "typescript-eslint": "8.45.0",
117671
- vite: "^7.1.7",
117623
+ vite: "^7.1.8",
117672
117624
  "vite-tsconfig-paths": "^5.1.4",
117673
117625
  vitest: "^3.2.4"
117674
117626
  },
@@ -117721,6 +117673,51 @@ var package_default = {
117721
117673
  }
117722
117674
  };
117723
117675
 
117676
+ // src/types-global/errors.ts
117677
+ var JsonRpcErrorCode;
117678
+ ((JsonRpcErrorCode2) => {
117679
+ JsonRpcErrorCode2[JsonRpcErrorCode2["ParseError"] = -32700] = "ParseError";
117680
+ JsonRpcErrorCode2[JsonRpcErrorCode2["InvalidRequest"] = -32600] = "InvalidRequest";
117681
+ JsonRpcErrorCode2[JsonRpcErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound";
117682
+ JsonRpcErrorCode2[JsonRpcErrorCode2["InvalidParams"] = -32602] = "InvalidParams";
117683
+ JsonRpcErrorCode2[JsonRpcErrorCode2["InternalError"] = -32603] = "InternalError";
117684
+ JsonRpcErrorCode2[JsonRpcErrorCode2["ServiceUnavailable"] = -32000] = "ServiceUnavailable";
117685
+ JsonRpcErrorCode2[JsonRpcErrorCode2["NotFound"] = -32001] = "NotFound";
117686
+ JsonRpcErrorCode2[JsonRpcErrorCode2["Conflict"] = -32002] = "Conflict";
117687
+ JsonRpcErrorCode2[JsonRpcErrorCode2["RateLimited"] = -32003] = "RateLimited";
117688
+ JsonRpcErrorCode2[JsonRpcErrorCode2["Timeout"] = -32004] = "Timeout";
117689
+ JsonRpcErrorCode2[JsonRpcErrorCode2["Forbidden"] = -32005] = "Forbidden";
117690
+ JsonRpcErrorCode2[JsonRpcErrorCode2["Unauthorized"] = -32006] = "Unauthorized";
117691
+ JsonRpcErrorCode2[JsonRpcErrorCode2["ValidationError"] = -32007] = "ValidationError";
117692
+ JsonRpcErrorCode2[JsonRpcErrorCode2["ConfigurationError"] = -32008] = "ConfigurationError";
117693
+ JsonRpcErrorCode2[JsonRpcErrorCode2["InitializationFailed"] = -32009] = "InitializationFailed";
117694
+ JsonRpcErrorCode2[JsonRpcErrorCode2["DatabaseError"] = -32010] = "DatabaseError";
117695
+ JsonRpcErrorCode2[JsonRpcErrorCode2["SerializationError"] = -32070] = "SerializationError";
117696
+ JsonRpcErrorCode2[JsonRpcErrorCode2["UnknownError"] = -32099] = "UnknownError";
117697
+ })(JsonRpcErrorCode ||= {});
117698
+
117699
+ class McpError extends Error {
117700
+ code;
117701
+ data;
117702
+ constructor(code, message, data, options) {
117703
+ super(message, options);
117704
+ this.code = code;
117705
+ if (data) {
117706
+ this.data = data;
117707
+ }
117708
+ this.name = "McpError";
117709
+ Object.setPrototypeOf(this, McpError.prototype);
117710
+ if (Error.captureStackTrace) {
117711
+ Error.captureStackTrace(this, McpError);
117712
+ }
117713
+ }
117714
+ }
117715
+ var ErrorSchema = z.object({
117716
+ code: z.nativeEnum(JsonRpcErrorCode).describe("Standardized error code from JsonRpcErrorCode enum"),
117717
+ message: z.string().min(1, "Error message cannot be empty.").describe("Detailed human-readable error message"),
117718
+ data: z.record(z.string(), z.unknown()).optional().describe("Optional structured data providing more context about the error")
117719
+ }).describe("Schema for validating structured error objects, ensuring consistency in error reporting.");
117720
+
117724
117721
  // src/config/index.ts
117725
117722
  var packageManifest = package_default;
117726
117723
  var hasFileSystemAccess = typeof process !== "undefined" && typeof process.versions === "object" && process.versions !== null && typeof process.versions.node === "string";
@@ -119784,7 +119781,7 @@ var safeJSON = (text) => {
119784
119781
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
119785
119782
 
119786
119783
  // node_modules/openai/version.mjs
119787
- var VERSION = "6.0.0";
119784
+ var VERSION = "6.0.1";
119788
119785
 
119789
119786
  // node_modules/openai/internal/detect-platform.mjs
119790
119787
  var isRunningInBrowser = () => {
@@ -129998,7 +129995,7 @@ class ResourceRegistry {
129998
129995
  }
129999
129996
  ResourceRegistry = __legacyDecorateClassTS([
130000
129997
  import_tsyringe9.injectable(),
130001
- __legacyDecorateParamTS(0, import_tsyringe9.injectAll(ResourceDefinitions)),
129998
+ __legacyDecorateParamTS(0, import_tsyringe9.injectAll(ResourceDefinitions, { isOptional: true })),
130002
129999
  __legacyMetadataTS("design:paramtypes", [
130003
130000
  Array
130004
130001
  ])
@@ -130700,7 +130697,7 @@ class ToolRegistry {
130700
130697
  }
130701
130698
  ToolRegistry = __legacyDecorateClassTS([
130702
130699
  import_tsyringe12.injectable(),
130703
- __legacyDecorateParamTS(0, import_tsyringe12.injectAll(ToolDefinitions)),
130700
+ __legacyDecorateParamTS(0, import_tsyringe12.injectAll(ToolDefinitions, { isOptional: true })),
130704
130701
  __legacyMetadataTS("design:paramtypes", [
130705
130702
  Array
130706
130703
  ])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-ts-template",
3
- "version": "2.3.2",
3
+ "version": "2.3.3",
4
4
  "mcpName": "io.github.cyanheads/mcp-ts-template",
5
5
  "description": "The definitive, production-grade template for building powerful and scalable Model Context Protocol (MCP) servers with TypeScript, featuring built-in observability (OpenTelemetry), declarative tooling, robust error handling, and a modular, DI-driven architecture.",
6
6
  "main": "dist/index.js",
@@ -85,17 +85,14 @@
85
85
  "partial-json": "^0.1.7",
86
86
  "pdf-lib": "^1.17.1",
87
87
  "pino": "^9.12.0",
88
+ "pino-pretty": "^13.1.1",
88
89
  "reflect-metadata": "^0.2.2",
89
90
  "repomix": "^1.6.0",
90
91
  "sanitize-html": "^2.17.0",
91
92
  "tslib": "^2.8.1",
92
93
  "tsyringe": "^4.10.0",
93
94
  "validator": "13.15.15",
94
- "zod": "^3.23.8"
95
- },
96
- "devDependencies": {
97
- "@cloudflare/workers-types": "^4.20251001.0",
98
- "@eslint/js": "^9.36.0",
95
+ "zod": "^3.23.8",
99
96
  "@opentelemetry/api": "^1.9.0",
100
97
  "@opentelemetry/auto-instrumentations-node": "^0.64.6",
101
98
  "@opentelemetry/exporter-metrics-otlp-http": "^0.205.0",
@@ -105,7 +102,11 @@
105
102
  "@opentelemetry/sdk-metrics": "^2.1.0",
106
103
  "@opentelemetry/sdk-node": "^0.205.0",
107
104
  "@opentelemetry/sdk-trace-node": "^2.1.0",
108
- "@opentelemetry/semantic-conventions": "^1.37.0",
105
+ "@opentelemetry/semantic-conventions": "^1.37.0"
106
+ },
107
+ "devDependencies": {
108
+ "@cloudflare/workers-types": "^4.20251001.0",
109
+ "@eslint/js": "^9.36.0",
109
110
  "@types/bun": "^1.2.23",
110
111
  "@types/js-yaml": "^4.0.9",
111
112
  "@types/node": "^24.6.2",
@@ -124,7 +125,6 @@
124
125
  "globals": "^16.4.0",
125
126
  "husky": "^9.1.7",
126
127
  "msw": "^2.11.3",
127
- "pino-pretty": "^13.1.1",
128
128
  "prettier": "^3.6.2",
129
129
  "typedoc": "^0.28.13",
130
130
  "typescript": "^5.9.2",