@pikku/bun-server 0.12.1 → 0.12.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/CHANGELOG.md +27 -0
- package/dist/pikku-bun-server.d.ts +10 -0
- package/dist/pikku-bun-server.js +42 -2
- package/dist/pikku-bun-server.js.map +1 -1
- package/package.json +10 -3
- package/src/pikku-bun-server.ts +58 -2
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @pikku/bun-server
|
|
2
2
|
|
|
3
|
+
## 0.12.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6f6abfe: Mount MCP on the bun runtime. `@pikku/bun-server` now accepts `mcpJson`/`mcpPath`
|
|
8
|
+
options and serves the MCP endpoint (default `/mcp`) via a new fetch-native
|
|
9
|
+
handler on `PikkuMCPServer.createFetchHandler()`, which uses the MCP SDK's
|
|
10
|
+
Web-Standard (`Request`→`Response`) streamable-HTTP transport — no `node:http`
|
|
11
|
+
req/res. The standalone `--runtime bun` entry now wires the same `mcpImport` +
|
|
12
|
+
`mcpJson` option the node entry already used, so a bun standalone build serves
|
|
13
|
+
`/mcp` with the project's tools/resources/prompts instead of silently dropping
|
|
14
|
+
them. `@pikku/modelcontextprotocol` is an optional peer dep of `@pikku/bun-server`
|
|
15
|
+
(only imported when `mcpJson` is non-empty).
|
|
16
|
+
- Updated dependencies [6f6abfe]
|
|
17
|
+
- @pikku/modelcontextprotocol@0.12.6
|
|
18
|
+
|
|
19
|
+
## 0.12.2
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 41ce2cb: Upgrade to TypeScript 6 and raise the minimum Node.js version to 22.
|
|
24
|
+
|
|
25
|
+
All packages now build against `typescript@^6.0.3` and declare `engines.node >= 22`. Internal tooling (`ts-json-schema-generator`, `zod-to-ts`) was bumped to TypeScript 6-compatible releases.
|
|
26
|
+
|
|
27
|
+
- Updated dependencies [41ce2cb]
|
|
28
|
+
- @pikku/core@0.12.44
|
|
29
|
+
|
|
3
30
|
## 0.12.1
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
|
@@ -9,6 +9,12 @@ export type BunServerConfig = CoreConfig & {
|
|
|
9
9
|
};
|
|
10
10
|
export type PikkuBunServerOptions = RunHTTPWiringOptions & {
|
|
11
11
|
eventHub?: BunEventHubService;
|
|
12
|
+
mcpJson?: {
|
|
13
|
+
tools?: unknown[];
|
|
14
|
+
resources?: unknown[];
|
|
15
|
+
prompts?: unknown[];
|
|
16
|
+
};
|
|
17
|
+
mcpPath?: string;
|
|
12
18
|
};
|
|
13
19
|
export declare class PikkuBunServer {
|
|
14
20
|
private readonly config;
|
|
@@ -16,8 +22,12 @@ export declare class PikkuBunServer {
|
|
|
16
22
|
private server;
|
|
17
23
|
private readonly eventHub;
|
|
18
24
|
private readonly options;
|
|
25
|
+
private readonly mcpJson?;
|
|
26
|
+
private readonly mcpPath;
|
|
27
|
+
private mcpHandler?;
|
|
19
28
|
constructor(config: BunServerConfig, logger: Logger, options?: PikkuBunServerOptions);
|
|
20
29
|
init(): Promise<void>;
|
|
30
|
+
private initMCP;
|
|
21
31
|
start(): Promise<void>;
|
|
22
32
|
stop(): Promise<void>;
|
|
23
33
|
enableExitOnSignals(): void;
|
package/dist/pikku-bun-server.js
CHANGED
|
@@ -20,20 +20,54 @@ export class PikkuBunServer {
|
|
|
20
20
|
server = null;
|
|
21
21
|
eventHub;
|
|
22
22
|
options;
|
|
23
|
+
mcpJson;
|
|
24
|
+
mcpPath;
|
|
25
|
+
mcpHandler;
|
|
23
26
|
constructor(config, logger, options = {}) {
|
|
24
27
|
this.config = config;
|
|
25
28
|
this.logger = logger;
|
|
26
|
-
const { eventHub, ...httpOptions } = options;
|
|
29
|
+
const { eventHub, mcpJson, mcpPath, ...httpOptions } = options;
|
|
27
30
|
this.eventHub = eventHub ?? new BunEventHubService();
|
|
31
|
+
this.mcpJson = mcpJson;
|
|
32
|
+
this.mcpPath = mcpPath ?? '/mcp';
|
|
28
33
|
this.options = httpOptions;
|
|
29
34
|
}
|
|
30
35
|
async init() {
|
|
31
36
|
compileAllSchemas(this.logger);
|
|
32
37
|
logRegisterRoutes(this.logger);
|
|
33
38
|
logChannels(this.logger);
|
|
39
|
+
await this.initMCP();
|
|
40
|
+
}
|
|
41
|
+
async initMCP() {
|
|
42
|
+
const mcpJson = this.mcpJson;
|
|
43
|
+
if (!mcpJson)
|
|
44
|
+
return;
|
|
45
|
+
const { tools = [], resources = [], prompts = [] } = mcpJson;
|
|
46
|
+
if (tools.length + resources.length + prompts.length === 0)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const { PikkuMCPServer } = await import('@pikku/modelcontextprotocol');
|
|
50
|
+
const mcpServer = new PikkuMCPServer({
|
|
51
|
+
name: 'pikku',
|
|
52
|
+
version: '1.0.0',
|
|
53
|
+
mcpJSON: mcpJson,
|
|
54
|
+
capabilities: {
|
|
55
|
+
...(tools.length > 0 && { tools: {} }),
|
|
56
|
+
...(resources.length > 0 && { resources: {} }),
|
|
57
|
+
...(prompts.length > 0 && { prompts: {} }),
|
|
58
|
+
},
|
|
59
|
+
}, this.logger);
|
|
60
|
+
await mcpServer.init();
|
|
61
|
+
const { handler } = mcpServer.createFetchHandler({ path: this.mcpPath });
|
|
62
|
+
this.mcpHandler = handler;
|
|
63
|
+
this.logger.info(`pikku-bun-server: MCP mounted at ${this.mcpPath}`);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
this.logger.warn(`pikku-bun-server: MCP could not be mounted — ${err instanceof Error ? err.message : String(err)}`);
|
|
67
|
+
}
|
|
34
68
|
}
|
|
35
69
|
async start() {
|
|
36
|
-
const { config, logger, options, eventHub } = this;
|
|
70
|
+
const { config, logger, options, eventHub, mcpHandler, mcpPath } = this;
|
|
37
71
|
this.server = Bun.serve({
|
|
38
72
|
port: config.port,
|
|
39
73
|
hostname: config.hostname,
|
|
@@ -61,6 +95,12 @@ export class PikkuBunServer {
|
|
|
61
95
|
headers: { 'content-type': 'application/json' },
|
|
62
96
|
});
|
|
63
97
|
}
|
|
98
|
+
if (mcpHandler) {
|
|
99
|
+
const pathname = new URL(req.url).pathname;
|
|
100
|
+
if (pathname === mcpPath || pathname.startsWith(`${mcpPath}/`)) {
|
|
101
|
+
return await mcpHandler(req);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
64
104
|
const pikkuReq = new PikkuFetchHTTPRequest(req);
|
|
65
105
|
const pikkuRes = new PikkuFetchHTTPResponse();
|
|
66
106
|
await fetchData(pikkuReq, pikkuRes, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pikku-bun-server.js","sourceRoot":"","sources":["../src/pikku-bun-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,IAAI,iBAAiB,GAE/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"pikku-bun-server.js","sourceRoot":"","sources":["../src/pikku-bun-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/bun-server",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"description": "Pikku server adapter for Bun (Bun.serve)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "yasser.fadl@gmail.com",
|
|
@@ -16,11 +16,18 @@
|
|
|
16
16
|
"prepublishOnly": "bun run build"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@pikku/core": "^0.12.
|
|
19
|
+
"@pikku/core": "^0.12.44",
|
|
20
|
+
"@pikku/modelcontextprotocol": "^0.12.6"
|
|
21
|
+
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"@pikku/modelcontextprotocol": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
20
26
|
},
|
|
21
27
|
"devDependencies": {
|
|
28
|
+
"@pikku/modelcontextprotocol": "^0.12.6",
|
|
22
29
|
"@types/bun": "latest",
|
|
23
|
-
"typescript": "^
|
|
30
|
+
"typescript": "^6.0.3"
|
|
24
31
|
},
|
|
25
32
|
"engines": {
|
|
26
33
|
"bun": ">=1.0.0"
|
package/src/pikku-bun-server.ts
CHANGED
|
@@ -32,6 +32,18 @@ export type PikkuBunServerOptions = RunHTTPWiringOptions & {
|
|
|
32
32
|
* connected clients. Defaults to a fresh `BunEventHubService`.
|
|
33
33
|
*/
|
|
34
34
|
eventHub?: BunEventHubService
|
|
35
|
+
/**
|
|
36
|
+
* Parsed content of `.pikku/mcp/mcp.gen.json`. When provided and non-empty,
|
|
37
|
+
* `@pikku/modelcontextprotocol` is dynamically imported and the MCP server is
|
|
38
|
+
* mounted at `mcpPath` via the SDK's fetch-native (Web Standard) transport.
|
|
39
|
+
* Import the JSON statically so bundlers (esbuild) inline it — no file read.
|
|
40
|
+
* Mirrors `PikkuNodeHTTPServerOptions.mcpJson`.
|
|
41
|
+
*/
|
|
42
|
+
mcpJson?: { tools?: unknown[]; resources?: unknown[]; prompts?: unknown[] }
|
|
43
|
+
/**
|
|
44
|
+
* Path the MCP server is mounted at when `mcpJson` is provided. Default `/mcp`.
|
|
45
|
+
*/
|
|
46
|
+
mcpPath?: string
|
|
35
47
|
}
|
|
36
48
|
|
|
37
49
|
type WsData = { channelHandler: PikkuLocalChannelHandler }
|
|
@@ -60,14 +72,19 @@ export class PikkuBunServer {
|
|
|
60
72
|
private server: BunServer<WsData> | null = null
|
|
61
73
|
private readonly eventHub: BunEventHubService
|
|
62
74
|
private readonly options: RunHTTPWiringOptions
|
|
75
|
+
private readonly mcpJson?: PikkuBunServerOptions['mcpJson']
|
|
76
|
+
private readonly mcpPath: string
|
|
77
|
+
private mcpHandler?: (request: Request) => Promise<Response>
|
|
63
78
|
|
|
64
79
|
constructor(
|
|
65
80
|
private readonly config: BunServerConfig,
|
|
66
81
|
private readonly logger: Logger,
|
|
67
82
|
options: PikkuBunServerOptions = {}
|
|
68
83
|
) {
|
|
69
|
-
const { eventHub, ...httpOptions } = options
|
|
84
|
+
const { eventHub, mcpJson, mcpPath, ...httpOptions } = options
|
|
70
85
|
this.eventHub = eventHub ?? new BunEventHubService()
|
|
86
|
+
this.mcpJson = mcpJson
|
|
87
|
+
this.mcpPath = mcpPath ?? '/mcp'
|
|
71
88
|
this.options = httpOptions
|
|
72
89
|
}
|
|
73
90
|
|
|
@@ -75,10 +92,42 @@ export class PikkuBunServer {
|
|
|
75
92
|
compileAllSchemas(this.logger)
|
|
76
93
|
logRegisterRoutes(this.logger)
|
|
77
94
|
logChannels(this.logger)
|
|
95
|
+
await this.initMCP()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private async initMCP(): Promise<void> {
|
|
99
|
+
const mcpJson = this.mcpJson
|
|
100
|
+
if (!mcpJson) return
|
|
101
|
+
const { tools = [], resources = [], prompts = [] } = mcpJson
|
|
102
|
+
if (tools.length + resources.length + prompts.length === 0) return
|
|
103
|
+
try {
|
|
104
|
+
const { PikkuMCPServer } = await import('@pikku/modelcontextprotocol')
|
|
105
|
+
const mcpServer = new PikkuMCPServer(
|
|
106
|
+
{
|
|
107
|
+
name: 'pikku',
|
|
108
|
+
version: '1.0.0',
|
|
109
|
+
mcpJSON: mcpJson,
|
|
110
|
+
capabilities: {
|
|
111
|
+
...(tools.length > 0 && { tools: {} }),
|
|
112
|
+
...(resources.length > 0 && { resources: {} }),
|
|
113
|
+
...(prompts.length > 0 && { prompts: {} }),
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
this.logger
|
|
117
|
+
)
|
|
118
|
+
await mcpServer.init()
|
|
119
|
+
const { handler } = mcpServer.createFetchHandler({ path: this.mcpPath })
|
|
120
|
+
this.mcpHandler = handler
|
|
121
|
+
this.logger.info(`pikku-bun-server: MCP mounted at ${this.mcpPath}`)
|
|
122
|
+
} catch (err) {
|
|
123
|
+
this.logger.warn(
|
|
124
|
+
`pikku-bun-server: MCP could not be mounted — ${err instanceof Error ? err.message : String(err)}`
|
|
125
|
+
)
|
|
126
|
+
}
|
|
78
127
|
}
|
|
79
128
|
|
|
80
129
|
public async start(): Promise<void> {
|
|
81
|
-
const { config, logger, options, eventHub } = this
|
|
130
|
+
const { config, logger, options, eventHub, mcpHandler, mcpPath } = this
|
|
82
131
|
|
|
83
132
|
this.server = Bun.serve<WsData>({
|
|
84
133
|
port: config.port,
|
|
@@ -111,6 +160,13 @@ export class PikkuBunServer {
|
|
|
111
160
|
})
|
|
112
161
|
}
|
|
113
162
|
|
|
163
|
+
if (mcpHandler) {
|
|
164
|
+
const pathname = new URL(req.url).pathname
|
|
165
|
+
if (pathname === mcpPath || pathname.startsWith(`${mcpPath}/`)) {
|
|
166
|
+
return await mcpHandler(req)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
114
170
|
const pikkuReq = new PikkuFetchHTTPRequest(req)
|
|
115
171
|
const pikkuRes = new PikkuFetchHTTPResponse()
|
|
116
172
|
await fetchData(pikkuReq, pikkuRes, {
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/bun-event-hub-service.ts","./src/index.ts","./src/pikku-bun-server.ts"],"version":"
|
|
1
|
+
{"root":["./src/bun-event-hub-service.ts","./src/index.ts","./src/pikku-bun-server.ts"],"version":"6.0.3"}
|