forked from getsentry/XcodeBuildMCP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbootstrap.ts
More file actions
45 lines (39 loc) · 1.48 KB
/
bootstrap.ts
File metadata and controls
45 lines (39 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { SetLevelRequestSchema } from '@modelcontextprotocol/sdk/types.js';
import process from 'node:process';
import { registerResources } from '../core/resources.ts';
import { log, setLogLevel, type LogLevel } from '../utils/logger.ts';
import { registerWorkflows } from '../utils/tool-registry.ts';
export interface BootstrapOptions {
enabledWorkflows?: string[];
}
function parseEnabledWorkflows(value: string): string[] {
return value
.split(',')
.map((name) => name.trim())
.filter(Boolean);
}
export async function bootstrapServer(
server: McpServer,
options: BootstrapOptions = {},
): Promise<void> {
server.server.setRequestHandler(SetLevelRequestSchema, async (request) => {
const { level } = request.params;
setLogLevel(level as LogLevel);
log('info', `Client requested log level: ${level}`);
return {};
});
const enabledWorkflows = options.enabledWorkflows?.length
? options.enabledWorkflows
: process.env.XCODEBUILDMCP_ENABLED_WORKFLOWS
? parseEnabledWorkflows(process.env.XCODEBUILDMCP_ENABLED_WORKFLOWS)
: [];
if (enabledWorkflows.length > 0) {
log('info', `🚀 Initializing server with selected workflows: ${enabledWorkflows.join(', ')}`);
await registerWorkflows(server, enabledWorkflows);
} else {
log('info', '🚀 Initializing server with all tools...');
await registerWorkflows(server);
}
await registerResources(server);
}