aws-lambda-mcp-server 0.0.1 → 0.0.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.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # aws-lambda-mcp-server
2
2
 
3
+ [![npm version](https://badge.fury.io/js/aws-lambda-mcp-server.svg)](https://badge.fury.io/js/aws-lambda-mcp-server)
4
+
3
5
  AWS Lambda上でMCP(Model Context Protocol)サーバー機能を提供するためのライブラリです。
4
6
  APIエンドポイントの実装や、各種AWSサービスとの連携を簡易化することを目的としています。
5
7
 
@@ -19,29 +21,33 @@ TypeScriptでの利用例です。
19
21
 
20
22
  ```typescript
21
23
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
22
- import { handler } from 'aws-lambda-mcp-server';
24
+ import { createHonoApp } from 'aws-lambda-mcp-server';
23
25
  import { handle } from 'hono/aws-lambda';
24
-
25
- // MCPサーバーのインスタンスを作成
26
- const server = new McpServer({
27
- name: 'my-mcp-server',
28
- version: '1.0.0',
29
- });
30
-
31
- // MCPサーバーのインスタンスにToolsやResourcesなどを設定する
32
- server.tool(
33
- "say_hello",
34
- { who: z.string() },
35
- async ({ who }) => ({
36
- content: [{
37
- type: "text",
38
- text: `${who} さん、こんにちは!`
39
- }]
40
- })
41
- );
26
+ import { z } from 'zod';
27
+
28
+ // MCPサーバーのファクトリ関数を用意
29
+ const createMcpServer = () => {
30
+ const server = new McpServer({
31
+ name: 'my-mcp-server',
32
+ version: '1.0.0',
33
+ });
34
+
35
+ // MCPサーバーのインスタンスにToolsやResourcesなどを設定する
36
+ server.tool(
37
+ 'say_hello',
38
+ { who: z.string() },
39
+ async ({ who }) => ({
40
+ content: [{
41
+ type: 'text',
42
+ text: `${who} さん、こんにちは!`
43
+ }]
44
+ })
45
+ );
46
+ return server;
47
+ };
42
48
 
43
49
  // Hono アプリケーションを作成
44
- const app = createHonoApp(server);
50
+ const app = createHonoApp(createMcpServer);
45
51
 
46
52
  // AWS Lambdaのエントリポイントとして利用
47
53
  export const handler = handle(app);
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Model Context Protocol (MCP) サーバーを Hono フレームワーク上で動作させるエントリーポイント。
3
+ *
4
+ * @remarks
5
+ * `createHonoApp` 関数を通じて、/mcp エンドポイントでMCPサーバーを提供します。
6
+ * - POST/GET /mcp: MCPリクエストの受信・処理
7
+ * - その他のHTTPメソッド: 405 Method Not Allowed
8
+ *
9
+ * 内部的にエラーハンドリングやリソースクローズ処理も行います。
10
+ */
11
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
+ import { Hono } from 'hono';
13
+ import { BlankEnv } from 'hono/types';
14
+ /**
15
+ * Honoアプリケーションを生成し、/mcpエンドポイントでMCPサーバーを提供します。
16
+ *
17
+ * @remarks
18
+ * POST/GET /mcp でMCPリクエストを受け付け、他のHTTPメソッドは405を返します。
19
+ *
20
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
21
+ * @returns Honoアプリケーションインスタンス
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * import { createHonoApp } from '...';
26
+ * import { createMcpServer } from './your-mcp-server';
27
+ * const app = createHonoApp(createMcpServer);
28
+ * ```
29
+ */
30
+ export declare const createHonoApp: (createMcpServer: () => McpServer) => Hono<BlankEnv, import("hono/types").BlankSchema, "/">;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AA0IlD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,GAAI,iBAAiB,MAAM,SAAS,0DAiB7D,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Model Context Protocol (MCP) サーバーを Hono フレームワーク上で動作させるエントリーポイント。
3
+ *
4
+ * @remarks
5
+ * `createHonoApp` 関数を通じて、/mcp エンドポイントでMCPサーバーを提供します。
6
+ * - POST/GET /mcp: MCPリクエストの受信・処理
7
+ * - その他のHTTPメソッド: 405 Method Not Allowed
8
+ *
9
+ * 内部的にエラーハンドリングやリソースクローズ処理も行います。
10
+ */
11
+ import { Logger } from '@aws-lambda-powertools/logger';
12
+ import { StreamableHTTPTransport } from '@hono/mcp';
13
+ import { Hono } from 'hono';
14
+ /**
15
+ * ロガーインスタンス(AWS Lambda Powertools)。
16
+ *
17
+ * @private
18
+ */
19
+ const logger = new Logger();
20
+ /**
21
+ * 許可されていないHTTPメソッドに対するハンドラーです。
22
+ *
23
+ * @remarks
24
+ * 405エラーのJSONレスポンスを返します。
25
+ *
26
+ * @param c Honoのコンテキスト
27
+ * @returns 405エラーのJSONレスポンス
28
+ * @private
29
+ */
30
+ const methodNotAllowedHandler = async (c) => {
31
+ return c.json({
32
+ jsonrpc: '2.0',
33
+ error: {
34
+ code: -32000,
35
+ message: 'メソッドは許可されていません。',
36
+ },
37
+ id: null,
38
+ }, { status: 405 });
39
+ };
40
+ /**
41
+ * サーバーエラー発生時の共通エラーハンドラーです。
42
+ *
43
+ * @remarks
44
+ * エラー内容をロギングし、500エラーのJSONレスポンスを返します。
45
+ *
46
+ * @param c Honoのコンテキスト
47
+ * @param reason エラー理由
48
+ * @param logMessage ログ出力用メッセージ
49
+ * @returns 500エラーのJSONレスポンス
50
+ * @private
51
+ */
52
+ const handleError = (c, reason, logMessage) => {
53
+ const errorDetails = reason instanceof Error
54
+ ? { message: reason.message, stack: reason.stack, name: reason.name }
55
+ : { reason };
56
+ logger.error(logMessage, errorDetails);
57
+ return c.json({
58
+ jsonrpc: '2.0',
59
+ error: {
60
+ code: -32603,
61
+ message: '内部サーバーエラー',
62
+ },
63
+ id: null,
64
+ }, { status: 500 });
65
+ };
66
+ /**
67
+ * MCPサーバーおよびトランスポートのリソースをクローズします。
68
+ *
69
+ * @remarks
70
+ * どちらか一方のクローズに失敗しても、もう一方は必ず実行されます。
71
+ *
72
+ * @param server MCPサーバーインスタンス
73
+ * @param transport トランスポートインスタンス
74
+ * @returns void
75
+ * @private
76
+ */
77
+ const closeResources = async (server, transport) => {
78
+ // 両方のクローズを確実に実行(片方が失敗してももう片方を実行)
79
+ const closeResults = await Promise.allSettled([
80
+ transport.close(),
81
+ server.close(),
82
+ ]);
83
+ // クローズエラーをログ出力
84
+ closeResults.forEach((result, index) => {
85
+ if (result.status === 'rejected') {
86
+ const resourceName = index === 0 ? 'transport' : 'server';
87
+ const error = result.reason;
88
+ const errorDetails = error instanceof Error
89
+ ? { message: error.message, stack: error.stack }
90
+ : error;
91
+ logger.error(`Error closing ${resourceName}:`, { error: errorDetails });
92
+ }
93
+ });
94
+ };
95
+ /**
96
+ * MCPリクエストを処理します。
97
+ *
98
+ * @remarks
99
+ * サーバーとトランスポートの接続・リクエスト処理・エラーハンドリングを行います。
100
+ *
101
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
102
+ * @param c Honoのコンテキスト
103
+ * @returns MCPレスポンス
104
+ * @private
105
+ */
106
+ const handleRequest = async (createMcpServer, c) => {
107
+ const transport = new StreamableHTTPTransport({
108
+ sessionIdGenerator: undefined, // セッションIDを生成しない(ステートレスモード)
109
+ enableJsonResponse: true,
110
+ });
111
+ const server = createMcpServer();
112
+ try {
113
+ await server.connect(transport);
114
+ logger.trace('MCP リクエストを受信');
115
+ return await transport.handleRequest(c);
116
+ }
117
+ catch (error) {
118
+ return handleError(c, error, 'MCP 接続中のエラー:');
119
+ }
120
+ finally {
121
+ // エラーの有無に関わらず必ずリソースをクローズ
122
+ try {
123
+ await closeResources(server, transport);
124
+ }
125
+ catch (closeError) {
126
+ // クローズエラーは既にcloseResources内でログ出力されているため、
127
+ // ここでは追加のエラーハンドリングは不要だが、エラーの詳細を記録
128
+ const errorDetails = closeError instanceof Error
129
+ ? { message: closeError.message, stack: closeError.stack }
130
+ : closeError;
131
+ logger.error('リソースクローズ中に追加エラーが発生しましたが、処理を継続します', { closeError: errorDetails });
132
+ }
133
+ }
134
+ };
135
+ /**
136
+ * Honoアプリケーションを生成し、/mcpエンドポイントでMCPサーバーを提供します。
137
+ *
138
+ * @remarks
139
+ * POST/GET /mcp でMCPリクエストを受け付け、他のHTTPメソッドは405を返します。
140
+ *
141
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
142
+ * @returns Honoアプリケーションインスタンス
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * import { createHonoApp } from '...';
147
+ * import { createMcpServer } from './your-mcp-server';
148
+ * const app = createHonoApp(createMcpServer);
149
+ * ```
150
+ */
151
+ export const createHonoApp = (createMcpServer) => {
152
+ const app = new Hono();
153
+ app.post('/mcp', async (c) => {
154
+ return await handleRequest(createMcpServer, c);
155
+ });
156
+ app.get('/mcp', async (c) => {
157
+ return await handleRequest(createMcpServer, c);
158
+ });
159
+ app.put('/mcp', methodNotAllowedHandler);
160
+ app.delete('/mcp', methodNotAllowedHandler);
161
+ app.patch('/mcp', methodNotAllowedHandler);
162
+ app.options('/mcp', methodNotAllowedHandler);
163
+ return app;
164
+ };
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxPQUFPLEVBQVcsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBRTVCOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxFQUNuQyxDQUF3QyxFQUN4QyxFQUFFO0lBQ0YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNYO1FBQ0UsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsQ0FBQyxLQUFLO1lBQ1osT0FBTyxFQUFFLGlCQUFpQjtTQUMzQjtRQUNELEVBQUUsRUFBRSxJQUFJO0tBQ1QsRUFDRCxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FDaEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsQ0FBd0MsRUFDeEMsTUFBZSxFQUNmLFVBQWtCLEVBQ2xCLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksS0FBSztRQUMxQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNyRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxD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QUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsZUFBZ0MsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFFdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzNCLE9BQU8sTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLE9BQU8sTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUU3QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWwgQ29udGV4dCBQcm90b2NvbCAoTUNQKSDjgrXjg7zjg5Djg7zjgpIgSG9ubyDjg5Xjg6zjg7zjg6Djg6/jg7zjgq/kuIrjgafli5XkvZzjgZXjgZvjgovjgqjjg7Pjg4jjg6rjg7zjg53jgqTjg7Pjg4jjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICogYGNyZWF0ZUhvbm9BcHBgIOmWouaVsOOCkumAmuOBmOOBpuOAgS9tY3Ag44Ko44Oz44OJ44Od44Kk44Oz44OI44GnTUNQ44K144O844OQ44O844KS5o+Q5L6b44GX44G+44GZ44CCXG4gKiAtIFBPU1QvR0VUIC9tY3A6IE1DUOODquOCr+OCqOOCueODiOOBruWPl+S/oeODu+WHpueQhlxuICogLSDjgZ3jga7ku5bjga5IVFRQ44Oh44K944OD44OJOiA0MDUgTWV0aG9kIE5vdCBBbGxvd2VkXG4gKlxuICog5YaF6YOo55qE44Gr44Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44KE44Oq44K944O844K544Kv44Ot44O844K65Yem55CG44KC6KGM44GE44G+44GZ44CCXG4gKi9cblxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9sb2dnZXInO1xuaW1wb3J0IHsgU3RyZWFtYWJsZUhUVFBUcmFuc3BvcnQgfSBmcm9tICdAaG9uby9tY3AnO1xuaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJztcbmltcG9ydCB7IENvbnRleHQsIEhvbm8gfSBmcm9tICdob25vJztcbmltcG9ydCB7IEJsYW5rRW52LCBCbGFua0lucHV0IH0gZnJvbSAnaG9uby90eXBlcyc7XG5cbi8qKlxuICog44Ot44Ks44O844Kk44Oz44K544K/44Oz44K577yIQVdTIExhbWJkYSBQb3dlcnRvb2xz77yJ44CCXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vKipcbiAqIOioseWPr+OBleOCjOOBpuOBhOOBquOBhEhUVFDjg6Hjgr3jg4Pjg4njgavlr77jgZnjgovjg4/jg7Pjg4njg6njg7zjgafjgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICogNDA144Ko44Op44O844GuSlNPTuODrOOCueODneODs+OCueOCkui/lOOBl+OBvuOBmeOAglxuICpcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEByZXR1cm5zIDQwNeOCqOODqeODvOOBrkpTT07jg6zjgrnjg53jg7PjgrlcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyID0gYXN5bmMgKFxuICBjOiBDb250ZXh0PEJsYW5rRW52LCAnL21jcCcsIEJsYW5rSW5wdXQ+LFxuKSA9PiB7XG4gIHJldHVybiBjLmpzb24oXG4gICAge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiAtMzIwMDAsXG4gICAgICAgIG1lc3NhZ2U6ICfjg6Hjgr3jg4Pjg4njga/oqLHlj6/jgZXjgozjgabjgYTjgb7jgZvjgpPjgIInLFxuICAgICAgfSxcbiAgICAgIGlkOiBudWxsLFxuICAgIH0sXG4gICAgeyBzdGF0dXM6IDQwNSB9LFxuICApO1xufTtcblxuLyoqXG4gKiDjgrXjg7zjg5Djg7zjgqjjg6njg7znmbrnlJ/mmYLjga7lhbHpgJrjgqjjg6njg7zjg4/jg7Pjg4njg6njg7zjgafjgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44Ko44Op44O85YaF5a6544KS44Ot44Ku44Oz44Kw44GX44CBNTAw44Ko44Op44O844GuSlNPTuODrOOCueODneODs+OCueOCkui/lOOBl+OBvuOBmeOAglxuICpcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEBwYXJhbSByZWFzb24g44Ko44Op44O855CG55SxXG4gKiBAcGFyYW0gbG9nTWVzc2FnZSDjg63jgrDlh7rlipvnlKjjg6Hjg4Pjgrvjg7zjgrhcbiAqIEByZXR1cm5zIDUwMOOCqOODqeODvOOBrkpTT07jg6zjgrnjg53jg7PjgrlcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGhhbmRsZUVycm9yID0gKFxuICBjOiBDb250ZXh0PEJsYW5rRW52LCAnL21jcCcsIEJsYW5rSW5wdXQ+LFxuICByZWFzb246IHVua25vd24sXG4gIGxvZ01lc3NhZ2U6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCBlcnJvckRldGFpbHMgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvclxuICAgID8geyBtZXNzYWdlOiByZWFzb24ubWVzc2FnZSwgc3RhY2s6IHJlYXNvbi5zdGFjaywgbmFtZTogcmVhc29uLm5hbWUgfVxuICAgIDogeyByZWFzb24gfTtcbiAgbG9nZ2VyLmVycm9yKGxvZ01lc3NhZ2UsIGVycm9yRGV0YWlscyk7XG4gIHJldHVybiBjLmpzb24oXG4gICAge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiAtMzI2MDMsXG4gICAgICAgIG1lc3NhZ2U6ICflhoXpg6jjgrXjg7zjg5Djg7zjgqjjg6njg7wnLFxuICAgICAgfSxcbiAgICAgIGlkOiBudWxsLFxuICAgIH0sXG4gICAgeyBzdGF0dXM6IDUwMCB9LFxuICApO1xufTtcblxuLyoqXG4gKiBNQ1DjgrXjg7zjg5Djg7zjgYrjgojjgbPjg4jjg6njg7Pjgrnjg53jg7zjg4jjga7jg6rjgr3jg7zjgrnjgpLjgq/jg63jg7zjgrrjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44Gp44Gh44KJ44GL5LiA5pa544Gu44Kv44Ot44O844K644Gr5aSx5pWX44GX44Gm44KC44CB44KC44GG5LiA5pa544Gv5b+F44Ga5a6f6KGM44GV44KM44G+44GZ44CCXG4gKlxuICogQHBhcmFtIHNlcnZlciBNQ1DjgrXjg7zjg5Djg7zjgqTjg7Pjgrnjgr/jg7PjgrlcbiAqIEBwYXJhbSB0cmFuc3BvcnQg44OI44Op44Oz44K544Od44O844OI44Kk44Oz44K544K/44Oz44K5XG4gKiBAcmV0dXJucyB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBjbG9zZVJlc291cmNlcyA9IGFzeW5jIChzZXJ2ZXI6IE1jcFNlcnZlciwgdHJhbnNwb3J0OiBTdHJlYW1hYmxlSFRUUFRyYW5zcG9ydCkgPT4ge1xuICAvLyDkuKHmlrnjga7jgq/jg63jg7zjgrrjgpLnorrlrp/jgavlrp/ooYzvvIjniYfmlrnjgYzlpLHmlZfjgZfjgabjgoLjgoLjgYbniYfmlrnjgpLlrp/ooYzvvIlcbiAgY29uc3QgY2xvc2VSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICB0cmFuc3BvcnQuY2xvc2UoKSxcbiAgICBzZXJ2ZXIuY2xvc2UoKSxcbiAgXSk7XG5cbiAgLy8g44Kv44Ot44O844K644Ko44Op44O844KS44Ot44Kw5Ye65YqbXG4gIGNsb3NlUmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGluZGV4ID09PSAwID8gJ3RyYW5zcG9ydCcgOiAnc2VydmVyJztcbiAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LnJlYXNvbjtcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9XG4gICAgICAgIDogZXJyb3I7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGNsb3NpbmcgJHtyZXNvdXJjZU5hbWV9OmAsIHsgZXJyb3I6IGVycm9yRGV0YWlscyB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBNQ1Djg6rjgq/jgqjjgrnjg4jjgpLlh6bnkIbjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44K144O844OQ44O844Go44OI44Op44Oz44K544Od44O844OI44Gu5o6l57aa44O744Oq44Kv44Ko44K544OI5Yem55CG44O744Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44KS6KGM44GE44G+44GZ44CCXG4gKlxuICogQHBhcmFtIGNyZWF0ZU1jcFNlcnZlciBNQ1DjgrXjg7zjg5Djg7zjgqTjg7Pjgrnjgr/jg7PjgrnjgpLnlJ/miJDjgZnjgovjg5XjgqHjgq/jg4jjg6rplqLmlbBcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEByZXR1cm5zIE1DUOODrOOCueODneODs+OCuVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGFzeW5jIChjcmVhdGVNY3BTZXJ2ZXI6ICgpID0+IE1jcFNlcnZlciwgYzogQ29udGV4dDxCbGFua0VudiwgJy9tY3AnLCBCbGFua0lucHV0PikgPT4ge1xuICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RyZWFtYWJsZUhUVFBUcmFuc3BvcnQoe1xuICAgIHNlc3Npb25JZEdlbmVyYXRvcjogdW5kZWZpbmVkLCAvLyDjgrvjg4Pjgrfjg6fjg7NJROOCkueUn+aIkOOBl+OBquOBhO+8iOOCueODhuODvOODiOODrOOCueODouODvOODie+8iVxuICAgIGVuYWJsZUpzb25SZXNwb25zZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHNlcnZlciA9IGNyZWF0ZU1jcFNlcnZlcigpO1xuICB0cnkge1xuICAgIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gICAgbG9nZ2VyLnRyYWNlKCdNQ1Ag44Oq44Kv44Ko44K544OI44KS5Y+X5L+hJyk7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zcG9ydC5oYW5kbGVSZXF1ZXN0KGMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBoYW5kbGVFcnJvcihjLCBlcnJvciwgJ01DUCDmjqXntprkuK3jga7jgqjjg6njg7w6Jyk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g44Ko44Op44O844Gu5pyJ54Sh44Gr6Zai44KP44KJ44Ga5b+F44Ga44Oq44K944O844K544KS44Kv44Ot44O844K6XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsb3NlUmVzb3VyY2VzKHNlcnZlciwgdHJhbnNwb3J0KTtcbiAgICB9IGNhdGNoIChjbG9zZUVycm9yKSB7XG4gICAgICAvLyDjgq/jg63jg7zjgrrjgqjjg6njg7zjga/ml6LjgatjbG9zZVJlc291cmNlc+WGheOBp+ODreOCsOWHuuWKm+OBleOCjOOBpuOBhOOCi+OBn+OCgeOAgVxuICAgICAgLy8g44GT44GT44Gn44Gv6L+95Yqg44Gu44Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44Gv5LiN6KaB44Gg44GM44CB44Ko44Op44O844Gu6Kmz57Sw44KS6KiY6YyyXG4gICAgICBjb25zdCBlcnJvckRldGFpbHMgPSBjbG9zZUVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyB7IG1lc3NhZ2U6IGNsb3NlRXJyb3IubWVzc2FnZSwgc3RhY2s6IGNsb3NlRXJyb3Iuc3RhY2sgfVxuICAgICAgICA6IGNsb3NlRXJyb3I7XG4gICAgICBsb2dnZXIuZXJyb3IoJ+ODquOCveODvOOCueOCr+ODreODvOOCuuS4reOBq+i/veWKoOOCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBn+OBjOOAgeWHpueQhuOCkue2mee2muOBl+OBvuOBmScsIHsgY2xvc2VFcnJvcjogZXJyb3JEZXRhaWxzIH0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIb25v44Ki44OX44Oq44Kx44O844K344On44Oz44KS55Sf5oiQ44GX44CBL21jcOOCqOODs+ODieODneOCpOODs+ODiOOBp01DUOOCteODvOODkOODvOOCkuaPkOS+m+OBl+OBvuOBmeOAglxuICpcbiAqIEByZW1hcmtzXG4gKiBQT1NUL0dFVCAvbWNwIOOBp01DUOODquOCr+OCqOOCueODiOOCkuWPl+OBkeS7mOOBkeOAgeS7luOBrkhUVFDjg6Hjgr3jg4Pjg4njga80MDXjgpLov5TjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcGFyYW0gY3JlYXRlTWNwU2VydmVyIE1DUOOCteODvOODkOODvOOCpOODs+OCueOCv+ODs+OCueOCkueUn+aIkOOBmeOCi+ODleOCoeOCr+ODiOODqumWouaVsFxuICogQHJldHVybnMgSG9ub+OCouODl+ODquOCseODvOOCt+ODp+ODs+OCpOODs+OCueOCv+ODs+OCuVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlSG9ub0FwcCB9IGZyb20gJy4uLic7XG4gKiBpbXBvcnQgeyBjcmVhdGVNY3BTZXJ2ZXIgfSBmcm9tICcuL3lvdXItbWNwLXNlcnZlcic7XG4gKiBjb25zdCBhcHAgPSBjcmVhdGVIb25vQXBwKGNyZWF0ZU1jcFNlcnZlcik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUhvbm9BcHAgPSAoY3JlYXRlTWNwU2VydmVyOiAoKSA9PiBNY3BTZXJ2ZXIpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEhvbm8oKTtcblxuICBhcHAucG9zdCgnL21jcCcsIGFzeW5jIChjKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZVJlcXVlc3QoY3JlYXRlTWNwU2VydmVyLCBjKTtcbiAgfSk7XG5cbiAgYXBwLmdldCgnL21jcCcsIGFzeW5jIChjKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZVJlcXVlc3QoY3JlYXRlTWNwU2VydmVyLCBjKTtcbiAgfSk7XG5cbiAgYXBwLnB1dCgnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcbiAgYXBwLmRlbGV0ZSgnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcbiAgYXBwLnBhdGNoKCcvbWNwJywgbWV0aG9kTm90QWxsb3dlZEhhbmRsZXIpO1xuICBhcHAub3B0aW9ucygnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcblxuICByZXR1cm4gYXBwO1xufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws-lambda-mcp-server",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A Hono wrapper for building an MCP (Model Context Protocol) Server that runs on AWS Lambda functions.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -11,6 +11,11 @@
11
11
  ],
12
12
  "private": false,
13
13
  "sideEffects": false,
14
+ "files": [
15
+ "dist",
16
+ "package.json",
17
+ "README.md"
18
+ ],
14
19
  "homepage": "https://github.com/poad/aws-lambda-mcp-server#readme",
15
20
  "repository": {
16
21
  "type": "git",
@@ -23,31 +28,31 @@
23
28
  }
24
29
  },
25
30
  "module": "./dist/index.js",
26
- "types": "dist/index.d.ts",
31
+ "types": "./dist/index.d.ts",
27
32
  "main": "./dist/index.js",
28
33
  "author": "poad",
29
34
  "license": "ISC",
30
35
  "devDependencies": {
31
36
  "@eslint/compat": "^1.4.1",
32
- "@eslint/js": "^9.39.0",
37
+ "@eslint/js": "^9.39.1",
33
38
  "@stylistic/eslint-plugin": "^5.5.0",
34
- "@types/node": "24.9.2",
35
- "eslint": "^9.39.0",
39
+ "@types/node": "24.10.0",
40
+ "eslint": "^9.39.1",
36
41
  "eslint-import-resolver-typescript": "^4.4.4",
37
42
  "eslint-plugin-import": "^2.32.0",
38
43
  "eslint-plugin-promise": "^7.2.1",
39
44
  "jiti": "^2.6.1",
40
45
  "tsx": "^4.20.6",
41
46
  "typescript": "^5.9.3",
42
- "typescript-eslint": "^8.46.2",
43
- "vitest": "^4.0.6"
47
+ "typescript-eslint": "^8.46.3",
48
+ "vitest": "^4.0.7"
44
49
  },
45
50
  "dependencies": {
46
51
  "@aws-lambda-powertools/logger": "^2.28.1",
47
52
  "@hono/mcp": "^0.1.5",
48
- "@modelcontextprotocol/sdk": "^1.20.2",
53
+ "@modelcontextprotocol/sdk": "^1.21.0",
49
54
  "hono": "^4.10.4",
50
- "zod": "^3.25.76"
55
+ "zod": "^4.1.12"
51
56
  },
52
57
  "scripts": {
53
58
  "build": "tsc",
@@ -55,5 +60,6 @@
55
60
  "test": "vitest run --passWithNoTests",
56
61
  "lint": "eslint .",
57
62
  "lint-fix": "eslint . --fix"
58
- }
63
+ },
64
+ "typings": "./dist/index.d.ts"
59
65
  }
package/eslint.config.ts DELETED
@@ -1,72 +0,0 @@
1
- import { Config, defineConfig } from 'eslint/config';
2
- import eslint from '@eslint/js';
3
- import { configs, parser } from 'typescript-eslint';
4
- import stylistic from '@stylistic/eslint-plugin';
5
- import importPlugin from 'eslint-plugin-import';
6
- // @ts-expect-error ignore type errors
7
- import pluginPromise from 'eslint-plugin-promise';
8
-
9
- import { includeIgnoreFile } from '@eslint/compat';
10
- import path from 'node:path';
11
- import { fileURLToPath } from 'node:url';
12
-
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = path.dirname(__filename);
15
- const gitignorePath = path.resolve(__dirname, '.gitignore');
16
-
17
- const eslintConfig: Config[] = defineConfig(
18
- {
19
- ignores: [
20
- ...(includeIgnoreFile(gitignorePath).ignores || []),
21
- '**/*.d.ts',
22
- 'src/tsconfig.json',
23
- 'src/stories',
24
- '**/*.css',
25
- 'node_modules/**/*',
26
- 'out',
27
- 'cdk.out',
28
- 'dist',
29
- 'app',
30
- ],
31
- },
32
- eslint.configs.recommended,
33
- configs.strict,
34
- configs.stylistic,
35
- pluginPromise.configs['flat/recommended'],
36
- {
37
- files: ['**/*.ts'],
38
- plugins: {
39
- '@stylistic': stylistic,
40
- },
41
- languageOptions: {
42
- ecmaVersion: 'latest',
43
- sourceType: 'module',
44
- parser,
45
- parserOptions: {
46
- tsconfigRootDir: __dirname,
47
- project: ['./tsconfig-eslint.json'],
48
- },
49
- },
50
- extends: [
51
- importPlugin.flatConfigs.recommended,
52
- importPlugin.flatConfigs.typescript,
53
- ],
54
- settings: {
55
- 'import/resolver': {
56
- // You will also need to install and configure the TypeScript resolver
57
- // See also https://github.com/import-js/eslint-import-resolver-typescript#configuration
58
- 'typescript': true,
59
- 'node': true,
60
- },
61
- },
62
- rules: {
63
- '@stylistic/semi': ['error', 'always'],
64
- '@stylistic/indent': ['error', 2],
65
- '@stylistic/comma-dangle': ['error', 'always-multiline'],
66
- '@stylistic/arrow-parens': ['error', 'always'],
67
- '@stylistic/quotes': ['error', 'single'],
68
- },
69
- },
70
- );
71
-
72
- export default eslintConfig;
package/src/index.ts DELETED
@@ -1,107 +0,0 @@
1
- import { Logger } from '@aws-lambda-powertools/logger';
2
- import { StreamableHTTPTransport } from '@hono/mcp';
3
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
- import { Context, Hono } from 'hono';
5
- import { BlankEnv, BlankInput } from 'hono/types';
6
-
7
- const logger = new Logger();
8
-
9
- const methodNotAllowedHandler = async (
10
- c: Context<BlankEnv, '/mcp', BlankInput>,
11
- ) => {
12
- return c.json(
13
- {
14
- jsonrpc: '2.0',
15
- error: {
16
- code: -32000,
17
- message: 'メソッドは許可されていません。',
18
- },
19
- id: null,
20
- },
21
- { status: 405 },
22
- );
23
- };
24
-
25
- const handleError = (
26
- c: Context<BlankEnv, '/mcp', BlankInput>,
27
- reason: unknown,
28
- logMessage: string,
29
- ) => {
30
- const errorDetails = reason instanceof Error
31
- ? { message: reason.message, stack: reason.stack, name: reason.name }
32
- : { reason };
33
- logger.error(logMessage, errorDetails);
34
- return c.json(
35
- {
36
- jsonrpc: '2.0',
37
- error: {
38
- code: -32603,
39
- message: '内部サーバーエラー',
40
- },
41
- id: null,
42
- },
43
- { status: 500 },
44
- );
45
- };
46
-
47
- const closeResources = async (server: McpServer, transport: StreamableHTTPTransport) => {
48
- // 両方のクローズを確実に実行(片方が失敗してももう片方を実行)
49
- const closeResults = await Promise.allSettled([
50
- transport.close(),
51
- server.close(),
52
- ]);
53
-
54
- // クローズエラーをログ出力
55
- closeResults.forEach((result, index) => {
56
- if (result.status === 'rejected') {
57
- const resourceName = index === 0 ? 'transport' : 'server';
58
- const error = result.reason;
59
- const errorDetails = error instanceof Error
60
- ? { message: error.message, stack: error.stack }
61
- : error;
62
- logger.error(`Error closing ${resourceName}:`, { error: errorDetails });
63
- }
64
- });
65
- };
66
-
67
- const handleRequest = async (server: McpServer, c: Context<BlankEnv, '/mcp', BlankInput>) => {
68
- const transport = new StreamableHTTPTransport({
69
- sessionIdGenerator: undefined, // セッションIDを生成しない(ステートレスモード)
70
- enableJsonResponse: true,
71
- });
72
- try {
73
- await server.connect(transport);
74
- logger.trace('MCP リクエストを受信');
75
- return await transport.handleRequest(c);
76
- } catch (error) {
77
- try {
78
- await closeResources(server, transport);
79
- } catch (closeError) {
80
- const errorDetails = closeError instanceof Error
81
- ? { message: closeError.message, stack: closeError.stack }
82
- : closeError;
83
- logger.error('Transport close failed after connection error:', { closeError: errorDetails });
84
- }
85
- return handleError(c, error, 'MCP 接続中のエラー:');
86
- }
87
-
88
- };
89
-
90
- export const createHonoApp = (server: McpServer) => {
91
- const app = new Hono();
92
-
93
- app.post('/mcp', async (c) => {
94
- return await handleRequest(server, c);
95
- });
96
-
97
- app.get('/mcp', async (c) => {
98
- return await handleRequest(server, c);
99
- });
100
-
101
- app.put('/mcp', methodNotAllowedHandler);
102
- app.delete('/mcp', methodNotAllowedHandler);
103
- app.patch('/mcp', methodNotAllowedHandler);
104
- app.options('/mcp', methodNotAllowedHandler);
105
-
106
- return app;
107
- };
@@ -1,15 +0,0 @@
1
- {
2
- "extends": [
3
- "./tsconfig.json"
4
- ],
5
- "compilerOptions": {
6
- "noEmit": true
7
- },
8
- "include": [
9
- "src",
10
- "*.config.ts"
11
- ],
12
- "exclude": [
13
- "node_modules"
14
- ]
15
- }
package/tsconfig.json DELETED
@@ -1,38 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2024",
4
- "module": "NodeNext",
5
- "moduleResolution": "NodeNext",
6
- "lib": [
7
- "es2024"
8
- ],
9
- "declaration": true,
10
- "strict": true,
11
- "noImplicitAny": true,
12
- "strictNullChecks": true,
13
- "noImplicitThis": true,
14
- "alwaysStrict": true,
15
- "noUnusedLocals": false,
16
- "noUnusedParameters": false,
17
- "noImplicitReturns": true,
18
- "noFallthroughCasesInSwitch": false,
19
- "inlineSourceMap": true,
20
- "inlineSources": true,
21
- "experimentalDecorators": true,
22
- "strictPropertyInitialization": false,
23
- "skipLibCheck": true,
24
- "declarationMap": true,
25
- "outDir": "dist",
26
- "typeRoots": [
27
- "./node_modules/@types"
28
- ],
29
- "types": [
30
- "node"
31
- ]
32
- },
33
- "exclude": [
34
- "node_modules",
35
- "*.config.ts",
36
- "dist"
37
- ]
38
- }