@1mcp/agent 0.8.0 → 0.9.0

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.
package/README.md CHANGED
@@ -59,10 +59,10 @@ npx -y @1mcp/agent --help
59
59
  ```
60
60
 
61
61
  Available options:
62
- - `--transport, -t`: Choose transport type ("stdio" or "sse", default: "sse")
62
+ - `--transport, -t`: Choose transport type ("stdio" or "http", default: "http")
63
63
  - `--config, -c`: Use a specific config file
64
- - `--port, -P`: Change SSE port (default: 3050)
65
- - `--host, -H`: Change SSE host (default: localhost)
64
+ - `--port, -P`: Change HTTP port (default: 3050)
65
+ - `--host, -H`: Change HTTP host (default: localhost)
66
66
  - `--tags, -g`: Filter servers by tags (see Tags section below)
67
67
  - `--help, -h`: Show help
68
68
 
@@ -85,7 +85,7 @@ You can also run 1MCP using Docker:
85
85
  # Pull the latest image
86
86
  docker pull ghcr.io/1mcp-app/agent:latest
87
87
 
88
- # Run with SSE transport (default)
88
+ # Run with HTTP transport (default)
89
89
  docker run -p 3050:3050 ghcr.io/1mcp-app/agent
90
90
 
91
91
  # Run with a custom config file
@@ -103,9 +103,9 @@ Available image tags:
103
103
  ### Environment Variables
104
104
 
105
105
  You can configure 1MCP using environment variables prefixed with `ONE_MCP_`:
106
- - `ONE_MCP_TRANSPORT`: Transport type ("stdio" or "sse", default: "sse")
107
- - `ONE_MCP_PORT`: SSE port (default: 3050)
108
- - `ONE_MCP_HOST`: SSE host (default: "localhost")
106
+ - `ONE_MCP_TRANSPORT`: Transport type ("stdio" or "http", default: "http")
107
+ - `ONE_MCP_PORT`: HTTP port (default: 3050)
108
+ - `ONE_MCP_HOST`: HTTP host (default: "localhost")
109
109
  - `ONE_MCP_CONFIG`: Path to config file
110
110
  - `ONE_MCP_TAGS`: Comma-separated list of tags to filter servers
111
111
 
@@ -227,12 +227,12 @@ graph TB
227
227
  S3[Server 3]
228
228
  end
229
229
 
230
- A1 -->|sse| MCP
231
- A2 -->|sse| MCP
232
- A3 -->|sse| MCP
233
- A4 -->|sse| MCP
230
+ A1 -->|http| MCP
231
+ A2 -->|http| MCP
232
+ A3 -->|http| MCP
233
+ A4 -->|http| MCP
234
234
 
235
- MCP --> |sse| S1
235
+ MCP --> |http| S1
236
236
  MCP --> |stdio| S2
237
237
  MCP --> |stdio| S3
238
238
  ```
@@ -6,6 +6,7 @@ export declare const PORT = 3050;
6
6
  export declare const HOST = "127.0.0.1";
7
7
  export declare const SSE_ENDPOINT = "/sse";
8
8
  export declare const MESSAGES_ENDPOINT = "/messages";
9
+ export declare const STREAMABLE_HTTP_ENDPOINT = "/mcp";
9
10
  export declare const ERROR_CODES: {
10
11
  INTERNAL_SERVER_ERROR: number;
11
12
  TRANSPORT_NOT_FOUND: number;
@@ -20,7 +21,7 @@ export declare const ERROR_CODES: {
20
21
  };
21
22
  export declare const MCP_CONFIG_FILE = "mcp.json";
22
23
  export declare const MCP_SERVER_NAME = "1mcp";
23
- export declare const MCP_SERVER_VERSION = "0.8.0";
24
+ export declare const MCP_SERVER_VERSION = "0.9.0";
24
25
  export declare const MCP_URI_SEPARATOR = "_1mcp_";
25
26
  export declare const CONFIG_DIR_NAME = "1mcp";
26
27
  export declare const DEFAULT_CONFIG: {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG5F,eAAO,MAAM,IAAI,OAAO,CAAC;AACzB,eAAO,MAAM,IAAI,cAAc,CAAC;AAGhC,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAG7C,eAAO,MAAM,WAAW;;;;;;;;;;;CAWvB,CAAC;AAGF,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAG1C,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAY3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAGD,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,kBAWrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,kBAOrC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG5F,eAAO,MAAM,IAAI,OAAO,CAAC;AACzB,eAAO,MAAM,IAAI,cAAc,CAAC;AAGhC,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAG/C,eAAO,MAAM,WAAW;;;;;;;;;;;CAWvB,CAAC;AAGF,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAG1C,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAY3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAGD,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,kBAWrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,kBAOrC,CAAC"}
@@ -7,6 +7,7 @@ export const HOST = '127.0.0.1';
7
7
  // API endpoints
8
8
  export const SSE_ENDPOINT = '/sse';
9
9
  export const MESSAGES_ENDPOINT = '/messages';
10
+ export const STREAMABLE_HTTP_ENDPOINT = '/mcp';
10
11
  // Error codes
11
12
  export const ERROR_CODES = {
12
13
  INTERNAL_SERVER_ERROR: -32000,
@@ -23,7 +24,7 @@ export const ERROR_CODES = {
23
24
  // MCP constants
24
25
  export const MCP_CONFIG_FILE = 'mcp.json';
25
26
  export const MCP_SERVER_NAME = '1mcp';
26
- export const MCP_SERVER_VERSION = '0.8.0';
27
+ export const MCP_SERVER_VERSION = '0.9.0';
27
28
  export const MCP_URI_SEPARATOR = '_1mcp_';
28
29
  // Global config paths
29
30
  export const CONFIG_DIR_NAME = '1mcp';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,uBAAuB;AACvB,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC;AACzB,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAEhC,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,qBAAqB,EAAE,CAAC,KAAK;IAC7B,mBAAmB,EAAE,CAAC,KAAK;IAC3B,cAAc,EAAE,CAAC,KAAK;IACtB,uBAAuB,EAAE,CAAC,KAAK;IAC/B,kBAAkB,EAAE,CAAC,KAAK;IAC1B,cAAc,EAAE,CAAC,KAAK;IACtB,gBAAgB,EAAE,CAAC,KAAK;IACxB,iBAAiB,EAAE,CAAC,KAAK;IACzB,aAAa,EAAE,CAAC,KAAK;IACrB,wBAAwB,EAAE,CAAC,KAAK;CACjC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,EAAE;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,SAAS,GACb,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3D,CAAC,CAAC,GAAG,OAAO,YAAY,eAAe,EAAE;QACzC,CAAC,CAAC,GAAG,OAAO,oBAAoB,eAAe,EAAE,CAAC;IAEtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,kBAAkB,EAAE,IAAI,eAAe,EAAE,CAAC;AACtD,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAuB;IACzD,OAAO,EAAE,EAAE;IACX,SAAS,EAAE;QACT,WAAW,EAAE,KAAK;KACnB;IACD,KAAK,EAAE;QACL,WAAW,EAAE,KAAK;KACnB;IACD,OAAO,EAAE;QACP,WAAW,EAAE,KAAK;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAuB;IACzD,KAAK,EAAE;QACL,WAAW,EAAE,KAAK;KACnB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,KAAK;KACnB;CACF,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,uBAAuB;AACvB,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC;AACzB,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAEhC,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE/C,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,qBAAqB,EAAE,CAAC,KAAK;IAC7B,mBAAmB,EAAE,CAAC,KAAK;IAC3B,cAAc,EAAE,CAAC,KAAK;IACtB,uBAAuB,EAAE,CAAC,KAAK;IAC/B,kBAAkB,EAAE,CAAC,KAAK;IAC1B,cAAc,EAAE,CAAC,KAAK;IACtB,gBAAgB,EAAE,CAAC,KAAK;IACxB,iBAAiB,EAAE,CAAC,KAAK;IACzB,aAAa,EAAE,CAAC,KAAK;IACrB,wBAAwB,EAAE,CAAC,KAAK;CACjC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,EAAE;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,SAAS,GACb,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3D,CAAC,CAAC,GAAG,OAAO,YAAY,eAAe,EAAE;QACzC,CAAC,CAAC,GAAG,OAAO,oBAAoB,eAAe,EAAE,CAAC;IAEtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,kBAAkB,EAAE,IAAI,eAAe,EAAE,CAAC;AACtD,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAuB;IACzD,OAAO,EAAE,EAAE;IACX,SAAS,EAAE;QACT,WAAW,EAAE,KAAK;KACnB;IACD,KAAK,EAAE;QACL,WAAW,EAAE,KAAK;KACnB;IACD,OAAO,EAAE;QACP,WAAW,EAAE,KAAK;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAuB;IACzD,KAAK,EAAE;QACL,WAAW,EAAE,KAAK;KACnB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,KAAK;KACnB;CACF,CAAC"}
package/build/index.js CHANGED
@@ -15,20 +15,20 @@ const argv = yargs(hideBin(process.argv))
15
15
  .options({
16
16
  transport: {
17
17
  alias: 't',
18
- describe: 'Transport type to use (stdio or sse)',
18
+ describe: 'Transport type to use (stdio or http)',
19
19
  type: 'string',
20
- choices: ['stdio', 'sse'],
21
- default: 'sse',
20
+ choices: ['stdio', 'http', 'sse'],
21
+ default: 'http',
22
22
  },
23
23
  port: {
24
24
  alias: 'P',
25
- describe: 'SSE port to listen on, applicable when transport is sse',
25
+ describe: 'HTTP port to listen on, applicable when transport is http',
26
26
  type: 'number',
27
27
  default: PORT,
28
28
  },
29
29
  host: {
30
30
  alias: 'H',
31
- describe: 'SSE host to listen on, applicable when transport is sse',
31
+ describe: 'HTTP host to listen on, applicable when transport is http',
32
32
  type: 'string',
33
33
  default: HOST,
34
34
  },
@@ -79,7 +79,7 @@ function setupGracefulShutdown(serverManager) {
79
79
  */
80
80
  async function main() {
81
81
  try {
82
- if (argv.transport === 'sse') {
82
+ if (argv.transport !== 'stdio') {
83
83
  enableConsoleTransport();
84
84
  }
85
85
  ConfigManager.getInstance(argv.config);
@@ -87,25 +87,36 @@ async function main() {
87
87
  const serverManager = await setupServer();
88
88
  // Set up graceful shutdown handling
89
89
  setupGracefulShutdown(serverManager);
90
- if (argv.transport === 'stdio') {
91
- // Use stdio transport
92
- const transport = new StdioServerTransport();
93
- // Parse and validate tags from CLI if provided
94
- let tags;
95
- if (argv.tags) {
96
- tags = argv.tags.split(',').filter((tag) => tag.trim().length > 0);
97
- if (tags.length === 0) {
98
- logger.warn('No valid tags provided, ignoring tags parameter');
99
- tags = undefined;
90
+ switch (argv.transport) {
91
+ case 'stdio': {
92
+ // Use stdio transport
93
+ const transport = new StdioServerTransport();
94
+ // Parse and validate tags from CLI if provided
95
+ let tags;
96
+ if (argv.tags) {
97
+ tags = argv.tags.split(',').filter((tag) => tag.trim().length > 0);
98
+ if (tags.length === 0) {
99
+ logger.warn('No valid tags provided, ignoring tags parameter');
100
+ tags = undefined;
101
+ }
100
102
  }
103
+ await serverManager.connectTransport(transport, 'stdio', tags);
104
+ logger.info('Server started with stdio transport');
105
+ break;
101
106
  }
102
- await serverManager.connectTransport(transport, 'stdio', tags);
103
- logger.info('Server started with stdio transport');
104
- }
105
- else {
106
- // Use HTTP/SSE transport
107
- const expressServer = new ExpressServer(serverManager);
108
- expressServer.start(argv.port, argv.host);
107
+ case 'sse': {
108
+ logger.warning('sse option is deprecated, use http instead');
109
+ }
110
+ // eslint-disable-next-line no-fallthrough
111
+ case 'http': {
112
+ // Use HTTP/SSE transport
113
+ const expressServer = new ExpressServer(serverManager);
114
+ expressServer.start(argv.port, argv.host);
115
+ break;
116
+ }
117
+ default:
118
+ logger.error(`Invalid transport: ${argv.transport}`);
119
+ process.exit(1);
109
120
  }
110
121
  }
111
122
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,MAAM,EAAE,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,mBAAmB,MAAM,mCAAmC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE5C,+BAA+B;AAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACtC,KAAK,CAAC,qBAAqB,CAAC;KAC5B,GAAG,CAAC,SAAS,CAAC,CAAC,0DAA0D;KACzE,OAAO,CAAC;IACP,SAAS,EAAE;QACT,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,uCAAuC;QACjD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;QACjC,OAAO,EAAE,MAAM;KAChB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,2DAA2D;QACrE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;KACd;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,2DAA2D;QACrE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;KACd;IACD,MAAM,EAAE;QACN,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,yBAAyB;QACnC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,0CAA0C;QACpD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;CACF,CAAC;KACD,IAAI,EAAE;KACN,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;KAClB,SAAS,EAAE,CAAC;AAEf;;GAEG;AACH,SAAS,qBAAqB,CAAC,aAA4B;IACzD,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEvC,wCAAwC;QACxC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAE3B,uBAAuB;QACvB,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,aAAa,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7E,IAAI,CAAC;gBACH,SAAS,EAAE,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,+CAA+C;IAC/C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QAED,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvC,+EAA+E;QAC/E,MAAM,aAAa,GAAG,MAAM,WAAW,EAAE,CAAC;QAE1C,oCAAoC;QACpC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAErC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,sBAAsB;gBACtB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;gBAC7C,+CAA+C;gBAC/C,IAAI,IAA0B,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;wBAC/D,IAAI,GAAG,SAAS,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACnD,MAAM;YACR,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;YAC/D,CAAC;YACD,0CAA0C;YAC1C,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,yBAAyB;gBACzB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;gBACvD,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD;gBACE,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loggingMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA8InE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA2B7D"}
1
+ {"version":3,"file":"loggingMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiJnE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiC7D"}
@@ -60,8 +60,18 @@ function wrapRequestHandler(originalHandler, method) {
60
60
  // Log request
61
61
  logRequest(requestId, method, request.params);
62
62
  try {
63
- // Execute original handler
64
- const result = await originalHandler(request, extra);
63
+ // Execute original handler with the original extra object
64
+ const result = await originalHandler(request, {
65
+ ...extra,
66
+ sendNotification: async (notification) => {
67
+ logger.info('Sending notification', { requestId, notification });
68
+ return extra.sendNotification(notification);
69
+ },
70
+ sendRequest: async (request, resultSchema, options) => {
71
+ logger.info('Sending request', { requestId, request });
72
+ return extra.sendRequest(request, resultSchema, options);
73
+ },
74
+ });
65
75
  // Log response
66
76
  const duration = Date.now() - startTime;
67
77
  logResponse(requestId, result, duration);
@@ -109,6 +119,12 @@ export function enhanceServerWithLogging(server) {
109
119
  // Override notification sending
110
120
  server.notification = (notification) => {
111
121
  logNotification(notification.method, notification.params);
122
+ // Check for SSE connection before sending
123
+ const transport = server.transport;
124
+ if (transport && typeof transport.send === 'function' && '_sseResponse' in transport && !transport._sseResponse) {
125
+ logger.warn('Attempted to send notification on disconnected SSE transport');
126
+ return Promise.resolve();
127
+ }
112
128
  return originalNotification(notification);
113
129
  };
114
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ export default function errorHandler(err: Error, req: Request, res: Response, _next: NextFunction): void;
3
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI1D,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,QAQhG"}
@@ -0,0 +1,12 @@
1
+ import logger from '../logger/logger.js';
2
+ import { ERROR_CODES } from '../constants.js';
3
+ export default function errorHandler(err, req, res, _next) {
4
+ logger.error('Express error:', err);
5
+ res.status(500).json({
6
+ error: {
7
+ code: ERROR_CODES.INTERNAL_SERVER_ERROR,
8
+ message: 'Internal server error',
9
+ },
10
+ });
11
+ }
12
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,GAAU,EAAE,GAAY,EAAE,GAAa,EAAE,KAAmB;IAC/F,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE;YACL,IAAI,EAAE,WAAW,CAAC,qBAAqB;YACvC,OAAO,EAAE,uBAAuB;SACjC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -4,7 +4,8 @@ export declare class ExpressServer {
4
4
  private serverManager;
5
5
  constructor(serverManager: ServerManager);
6
6
  private setupMiddleware;
7
- private setupRoutes;
7
+ private setupStreamableHttpRoutes;
8
+ private setupSseRoutes;
8
9
  start(port: number, host: string): void;
9
10
  }
10
11
  //# sourceMappingURL=expressServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expressServer.d.ts","sourceRoot":"","sources":["../../src/server/expressServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAOxC,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAwEZ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAK/C"}
1
+ {"version":3,"file":"expressServer.d.ts","sourceRoot":"","sources":["../../src/server/expressServer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAQxC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,yBAAyB;IAsFjC,OAAO,CAAC,cAAc;IA2Df,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAK/C"}
@@ -1,7 +1,12 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import express from 'express';
3
+ import bodyParser from 'body-parser';
4
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
2
5
  import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
3
6
  import logger from '../logger/logger.js';
4
- import { SSE_ENDPOINT, MESSAGES_ENDPOINT, ERROR_CODES } from '../constants.js';
7
+ import { SSE_ENDPOINT, MESSAGES_ENDPOINT, ERROR_CODES, STREAMABLE_HTTP_ENDPOINT } from '../constants.js';
8
+ import tagsExtractor from './tagsExtractor.js';
9
+ import errorHandler from './errorHandler.js';
5
10
  export class ExpressServer {
6
11
  app;
7
12
  serverManager;
@@ -9,40 +14,105 @@ export class ExpressServer {
9
14
  this.app = express();
10
15
  this.serverManager = serverManager;
11
16
  this.setupMiddleware();
12
- this.setupRoutes();
17
+ this.setupStreamableHttpRoutes();
18
+ this.setupSseRoutes();
13
19
  }
14
20
  setupMiddleware() {
21
+ this.app.use(bodyParser.json());
15
22
  // Add error handling middleware
16
- this.app.use((err, req, res, _next) => {
17
- logger.error('Express error:', err);
18
- res.status(500).json({
19
- error: {
20
- code: ERROR_CODES.INTERNAL_SERVER_ERROR,
21
- message: 'Internal server error',
22
- },
23
- });
24
- });
23
+ this.app.use(errorHandler);
25
24
  }
26
- setupRoutes() {
27
- this.app.get(SSE_ENDPOINT, async (req, res) => {
25
+ setupStreamableHttpRoutes() {
26
+ this.app.post(STREAMABLE_HTTP_ENDPOINT, tagsExtractor, async (req, res) => {
28
27
  try {
29
- logger.info('sse', { query: req.query, headers: req.headers });
30
- const transport = new SSEServerTransport(MESSAGES_ENDPOINT, res);
31
- // Extract and validate tags from query parameters
32
- let tags;
33
- if (req.query.tags) {
34
- const tagsStr = req.query.tags;
35
- if (typeof tagsStr !== 'string') {
28
+ logger.info('[POST] streamable-http', { query: req.query, body: req.body, headers: req.headers });
29
+ let transport;
30
+ const sessionId = req.headers['mcp-session-id'];
31
+ if (!sessionId) {
32
+ const id = randomUUID();
33
+ transport = new StreamableHTTPServerTransport({
34
+ sessionIdGenerator: () => id,
35
+ });
36
+ // Use tags from middleware
37
+ const tags = res.locals.tags;
38
+ await this.serverManager.connectTransport(transport, id, tags);
39
+ transport.onclose = () => {
40
+ this.serverManager.disconnectTransport(id);
41
+ logger.info('transport closed', transport.sessionId);
42
+ };
43
+ }
44
+ else {
45
+ const existingTransport = this.serverManager.getTransport(sessionId);
46
+ if (existingTransport instanceof StreamableHTTPServerTransport) {
47
+ transport = existingTransport;
48
+ }
49
+ else {
36
50
  res.status(400).json({
37
51
  error: {
38
52
  code: ERROR_CODES.INVALID_PARAMS,
39
- message: 'Invalid params: tags must be a string',
53
+ message: 'Session already exists but uses a different transport protocol',
40
54
  },
41
55
  });
42
56
  return;
43
57
  }
44
- tags = tagsStr.split(',').filter((tag) => tag.trim().length > 0);
45
58
  }
59
+ await transport.handleRequest(req, res, req.body);
60
+ }
61
+ catch (error) {
62
+ logger.error('Streamable HTTP error:', error);
63
+ res.status(500).end();
64
+ }
65
+ });
66
+ this.app.get(STREAMABLE_HTTP_ENDPOINT, async (req, res) => {
67
+ try {
68
+ logger.info('[GET] streamable-http', { query: req.query, headers: req.headers });
69
+ const sessionId = req.headers['mcp-session-id'];
70
+ if (!sessionId) {
71
+ res.status(400).json({
72
+ error: {
73
+ code: ERROR_CODES.INVALID_PARAMS,
74
+ message: 'Invalid params: sessionId is required',
75
+ },
76
+ });
77
+ return;
78
+ }
79
+ const transport = this.serverManager.getTransport(sessionId);
80
+ await transport.handleRequest(req, res, req.body);
81
+ }
82
+ catch (error) {
83
+ logger.error('Streamable HTTP error:', error);
84
+ res.status(500).end();
85
+ }
86
+ });
87
+ this.app.delete(STREAMABLE_HTTP_ENDPOINT, async (req, res) => {
88
+ try {
89
+ logger.info('[DELETE] streamable-http', { query: req.query, headers: req.headers });
90
+ const sessionId = req.headers['mcp-session-id'];
91
+ if (!sessionId) {
92
+ res.status(400).json({
93
+ error: {
94
+ code: ERROR_CODES.INVALID_PARAMS,
95
+ message: 'Invalid params: sessionId is required',
96
+ },
97
+ });
98
+ return;
99
+ }
100
+ const transport = this.serverManager.getTransport(sessionId);
101
+ await transport.handleRequest(req, res);
102
+ }
103
+ catch (error) {
104
+ logger.error('Streamable HTTP error:', error);
105
+ res.status(500).end();
106
+ }
107
+ });
108
+ }
109
+ setupSseRoutes() {
110
+ this.app.get(SSE_ENDPOINT, tagsExtractor, async (req, res) => {
111
+ try {
112
+ logger.info('[GET] sse', { query: req.query, headers: req.headers });
113
+ const transport = new SSEServerTransport(MESSAGES_ENDPOINT, res);
114
+ // Use tags from middleware
115
+ const tags = res.locals.tags;
46
116
  // Connect the transport using the server manager
47
117
  await this.serverManager.connectTransport(transport, transport.sessionId, tags);
48
118
  transport.onclose = () => {
@@ -70,7 +140,7 @@ export class ExpressServer {
70
140
  logger.info('message', { body: req.body, sessionId });
71
141
  const transport = this.serverManager.getTransport(sessionId);
72
142
  if (transport instanceof SSEServerTransport) {
73
- await transport.handlePostMessage(req, res);
143
+ await transport.handlePostMessage(req, res, req.body);
74
144
  return;
75
145
  }
76
146
  res.status(404).json({
@@ -93,7 +163,7 @@ export class ExpressServer {
93
163
  }
94
164
  start(port, host) {
95
165
  this.app.listen(port, host, () => {
96
- logger.info(`Server is running on port ${port} with HTTP/SSE transport`);
166
+ logger.info(`Server is running on port ${port} with HTTP/SSE and Streamable HTTP transport`);
97
167
  });
98
168
  }
99
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"expressServer.js","sourceRoot":"","sources":["../../src/server/expressServer.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,OAAO,aAAa;IAChB,GAAG,CAAsB;IACzB,aAAa,CAAgB;IAErC,YAAY,aAA4B;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,eAAe;QACrB,gCAAgC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAU,EAAE,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;YACpG,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE;oBACL,IAAI,EAAE,WAAW,CAAC,qBAAqB;oBACvC,OAAO,EAAE,uBAAuB;iBACjC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;YAC/E,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBAEjE,kDAAkD;gBAClD,IAAI,IAA0B,CAAC;gBAC/B,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;oBACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACnB,KAAK,EAAE;gCACL,IAAI,EAAE,WAAW,CAAC,cAAc;gCAChC,OAAO,EAAE,uCAAuC;6BACjD;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBACD,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAED,iDAAiD;gBACjD,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAEhF,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;oBACvB,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;gBACvD,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;YACrF,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;gBAChD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE;4BACL,IAAI,EAAE,WAAW,CAAC,cAAc;4BAChC,OAAO,EAAE,uCAAuC;yBACjD;qBACF,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC7D,IAAI,SAAS,YAAY,kBAAkB,EAAE,CAAC;oBAC5C,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE;wBACL,IAAI,EAAE,WAAW,CAAC,mBAAmB;wBACrC,OAAO,EAAE,qBAAqB;qBAC/B;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE;wBACL,IAAI,EAAE,WAAW,CAAC,qBAAqB;wBACvC,OAAO,EAAE,uBAAuB;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAY,EAAE,IAAY;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,0BAA0B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"expressServer.js","sourceRoot":"","sources":["../../src/server/expressServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ /**
3
+ * Middleware to extract and validate 'tags' from query parameters.
4
+ * Attaches tags as res.locals.tags (string[] | undefined).
5
+ */
6
+ export default function tagsExtractor(req: Request, res: Response, next: NextFunction): void;
7
+ //# sourceMappingURL=tagsExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagsExtractor.d.ts","sourceRoot":"","sources":["../../src/server/tagsExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAkBpF"}
@@ -0,0 +1,25 @@
1
+ import { ERROR_CODES } from '../constants.js';
2
+ /**
3
+ * Middleware to extract and validate 'tags' from query parameters.
4
+ * Attaches tags as res.locals.tags (string[] | undefined).
5
+ */
6
+ export default function tagsExtractor(req, res, next) {
7
+ let tags;
8
+ if (req.query.tags) {
9
+ const tagsStr = req.query.tags;
10
+ if (typeof tagsStr !== 'string') {
11
+ res.status(400).json({
12
+ error: {
13
+ code: ERROR_CODES.INVALID_PARAMS,
14
+ message: 'Invalid params: tags must be a string',
15
+ },
16
+ });
17
+ return;
18
+ }
19
+ tags = tagsStr.split(',').filter((tag) => tag.trim().length > 0);
20
+ }
21
+ // Attach tags to res.locals for downstream handlers
22
+ res.locals.tags = tags;
23
+ next();
24
+ }
25
+ //# sourceMappingURL=tagsExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagsExtractor.js","sourceRoot":"","sources":["../../src/server/tagsExtractor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACnF,IAAI,IAA0B,CAAC;IAC/B,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;QACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE;oBACL,IAAI,EAAE,WAAW,CAAC,cAAc;oBAChC,OAAO,EAAE,uCAAuC;iBACjD;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,oDAAoD;IACpD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC;AACT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1mcp/agent",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "One MCP server to aggregate them all - A unified Model Context Protocol server implementation",
5
5
  "keywords": [
6
6
  "mcp",
@@ -48,7 +48,8 @@
48
48
  ]
49
49
  },
50
50
  "dependencies": {
51
- "@modelcontextprotocol/sdk": "^1.7.0",
51
+ "@modelcontextprotocol/sdk": "^1.10.1",
52
+ "body-parser": "^2.2.0",
52
53
  "express": "^5.1.0",
53
54
  "uuid": "^11.1.0",
54
55
  "winston": "^3.17.0",
@@ -60,6 +61,7 @@
60
61
  "devDependencies": {
61
62
  "@eslint/js": "^9.22.0",
62
63
  "@testing-library/jest-dom": "^6.6.3",
64
+ "@types/body-parser": "^1.19.5",
63
65
  "@types/express": "^5.0.0",
64
66
  "@types/node": "^22.13.10",
65
67
  "@types/uuid": "^10.0.0",