Skip to content

Commit b4859c1

Browse files
committed
Bumps node modules
1 parent 9431e76 commit b4859c1

8 files changed

Lines changed: 137 additions & 193 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,8 @@ jobs:
3131
args: [--no-frozen-lockfile]
3232
- args: [--global, esbuild]
3333
34-
- name: build (common)
35-
run: |
36-
pnpm pnpm --filter @llm-ts-example/common-core build && \
37-
pnpm pnpm --filter @llm-ts-example/common-backend build
38-
3934
- name: build
40-
run: |
41-
pnpm install -r
42-
pnpm build
35+
run: pnpm -r build
4336

4437
- name: lint
4538
run: pnpm lint

agents/agent-mastra/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"type": "module",
1616
"dependencies": {
1717
"@ai-sdk/amazon-bedrock": "^3.0.43",
18-
"@ai-sdk/azure": "^2.0.53",
18+
"@ai-sdk/azure": "^2.0.54",
1919
"@mastra/core": "^0.20.2",
2020
"@mastra/libsql": "^0.15.2",
2121
"@mastra/loggers": "^0.10.16",

mcp/servers/postgresql-http/package.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@
2222
"@eslint/js": "^9.38.0",
2323
"@stylistic/eslint-plugin": "^5.5.0",
2424
"@types/aws-lambda": "^8.10.156",
25-
"@types/csurf": "^1.11.5",
2625
"@types/node": "^22.18.11",
2726
"@types/pg": "^8.15.5",
2827
"@types/source-map-support": "^0.5.10",
29-
"@types/uuid": "^10.0.0",
3028
"@vitest/eslint-plugin": "^1.3.23",
31-
"dotenv": "^16.6.1",
29+
"dotenv": "^17.2.3",
3230
"eslint": "^9.38.0",
3331
"eslint-import-resolver-typescript": "^3.10.1",
3432
"eslint-plugin-import": "^2.32.0",
@@ -37,17 +35,18 @@
3735
"tsx": "^4.20.6",
3836
"typescript": "^5.9.3",
3937
"typescript-eslint": "^8.46.1",
40-
"vite": "^6.4.1",
38+
"vite": "^7.1.11",
4139
"vite-tsconfig-paths": "^5.1.4",
4240
"vitest": "^3.2.4"
4341
},
4442
"dependencies": {
4543
"@aws-lambda-powertools/logger": "^2.27.0",
44+
"@hono/mcp": "^0.1.4",
4645
"@hono/node-server": "^1.19.5",
4746
"@modelcontextprotocol/sdk": "^1.20.1",
48-
"@vercel/mcp-adapter": "^1.0.0",
4947
"hono": "^4.10.1",
5048
"pg": "^8.16.3",
49+
"uuid": "^13.0.0",
5150
"zod": "^3.25.76"
5251
}
5352
}

mcp/servers/postgresql-http/src/app.ts

Lines changed: 78 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,94 @@
11
import { Logger } from '@aws-lambda-powertools/logger';
2-
import { handler } from './route';
3-
import { Hono } from 'hono';
2+
import { StreamableHTTPTransport } from '@hono/mcp';
3+
import { createMcpServer } from './route';
4+
import { Context, Hono } from 'hono';
5+
import { BlankEnv, BlankInput } from 'hono/types';
6+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
47

58
const logger = new Logger();
69

710
export const app = new Hono();
811

12+
const handleError = (
13+
c: Context<BlankEnv, '/mcp', BlankInput>,
14+
reason: unknown,
15+
logMessage: string,
16+
) => {
17+
const errorDetails = reason instanceof Error
18+
? { message: reason.message, stack: reason.stack, name: reason.name }
19+
: { reason };
20+
logger.error(logMessage, errorDetails);
21+
return c.json(
22+
{
23+
jsonrpc: '2.0',
24+
error: {
25+
code: -32603,
26+
message: '内部サーバーエラー',
27+
},
28+
id: null,
29+
},
30+
{ status: 500 },
31+
);
32+
};
33+
34+
const closeResources = async (server: McpServer, transport: StreamableHTTPTransport) => {
35+
// 両方のクローズを確実に実行(片方が失敗してももう片方を実行)
36+
const closeResults = await Promise.allSettled([
37+
transport.close(),
38+
server.close(),
39+
]);
40+
41+
// クローズエラーをログ出力
42+
closeResults.forEach((result, index) => {
43+
if (result.status === 'rejected') {
44+
const resourceName = index === 0 ? 'transport' : 'server';
45+
const error = result.reason;
46+
const errorDetails = error instanceof Error
47+
? { message: error.message, stack: error.stack }
48+
: error;
49+
logger.error(`Error closing ${resourceName}:`, { error: errorDetails });
50+
}
51+
});
52+
};
53+
54+
955
app.post('/mcp', async (c) => {
1056
// In stateless mode, create a new instance of transport and server for each request
1157
// to ensure complete isolation. A single instance would cause request ID collisions
1258
// when multiple clients connect concurrently.
1359

60+
const server = createMcpServer();
61+
const transport = new StreamableHTTPTransport({
62+
sessionIdGenerator: undefined, // セッションIDを生成しない(ステートレスモード)
63+
enableJsonResponse: true,
64+
});
65+
transport.onclose = async () => {
66+
await server.close();
67+
logger.trace('MCP transport closed');
68+
};
1469
try {
15-
return await handler(c.req.raw);
70+
await server.connect(transport);
71+
72+
try {
73+
logger.trace('MCP リクエストを受信');
74+
return await transport.handleRequest(c);
75+
} catch (error) {
76+
return handleError(c, error, 'MCP リクエスト処理中のエラー:');
77+
} finally {
78+
await closeResources(server, transport);
79+
}
1680
} catch (error) {
17-
console.error('Error handling MCP request:', error);
18-
return c.json(
19-
{
20-
jsonrpc: '2.0',
21-
error: {
22-
code: -32603,
23-
message: 'Internal server error',
24-
},
25-
id: null,
26-
},
27-
500,
28-
);
81+
// サーバー接続に失敗した場合、transportのみクローズ(serverは未接続のため)
82+
// この時点でserver(サーバー)は未接続と考えられる。未接続のサーバーに対してクローズ処理を実行すると予期しないエラーが発生する可能性があるため
83+
try {
84+
await transport.close();
85+
} catch (closeError) {
86+
const errorDetails = closeError instanceof Error
87+
? { message: closeError.message, stack: closeError.stack }
88+
: closeError;
89+
logger.error('Transport close failed after connection error:', { closeError: errorDetails });
90+
}
91+
return handleError(c, error, 'MCP 接続中のエラー:');
2992
}
3093
});
3194

mcp/servers/postgresql-http/src/route.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import { createMcpHandler } from '@vercel/mcp-adapter';
1+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
22
import { pgMcp } from './pgMcp';
33

4-
export const handler = createMcpHandler((server) => {
4+
export const createMcpServer = () => {
5+
const server = new McpServer({
6+
name: 'postgresql',
7+
version: '1.0.0',
8+
});
59
const resouces = [pgMcp.resources.schema, pgMcp.resources.status];
610
resouces.forEach((resource) => {
711
server.resource(
@@ -73,9 +77,6 @@ export const handler = createMcpHandler((server) => {
7377
...resp,
7478
};
7579
});
76-
}, {
77-
serverInfo: {
78-
name: 'postgresql',
79-
version: '1.0.0',
80-
},
81-
});
80+
81+
return server;
82+
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "",
55
"type": "module",
66
"scripts": {
7-
"build": "pnpm -r --if-present --paralell build",
7+
"build": "pnpm -r --if-present build",
88
"clean": "pnpm -r --if-present --paralell clean",
99
"lint": "pnpm -r --if-present --paralell lint",
1010
"lint-fix": "pnpm -r --if-present --paralell lint-fix"

0 commit comments

Comments
 (0)