swift_package_stop
Terminate a running Swift Package executable by specifying its process ID (PID) using this tool. Integrates with XcodeBuildMCP for efficient process management.
Instructions
Stops a running Swift Package executable started with swift_package_run
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | Process ID (PID) of the running executable |
Implementation Reference
- Defines the Zod schema for input parameters (pid) of the swift_package_stop tool.const swiftPackageStopSchema = z.object({ pid: z.number().describe('Process ID (PID) of the running executable'), });
- Core handler function that stops the Swift Package process by PID: retrieves process info, sends SIGTERM/SIGKILL, removes from active list, and returns response.export async function swift_package_stopLogic( params: SwiftPackageStopParams, processManager: ProcessManager = getDefaultProcessManager(), timeout: number = 5000, ): Promise<ToolResponse> { const processInfo = processManager.getProcess(params.pid); if (!processInfo) { return createTextResponse( `⚠️ No running process found with PID ${params.pid}. Use swift_package_run to check active processes.`, true, ); } try { processInfo.process.kill('SIGTERM'); // Give it time to terminate gracefully (configurable for testing) await new Promise((resolve) => { let terminated = false; processInfo.process.on('exit', () => { terminated = true; resolve(true); }); setTimeout(() => { if (!terminated) { processInfo.process.kill('SIGKILL'); } resolve(true); }, timeout); }); processManager.removeProcess(params.pid); return { content: [ { type: 'text', text: `✅ Stopped executable (was running since ${processInfo.startedAt.toISOString()})`, }, { type: 'text', text: `💡 Process terminated. You can now run swift_package_run again if needed.`, }, ], }; } catch (error) { const message = error instanceof Error ? error.message : String(error); return createErrorResponse('Failed to stop process', message); } }
- src/mcp/tools/swift-package/swift_package_stop.ts:104-120 (registration)Default export registering the tool with name, description, schema, and a thin handler that validates inputs and delegates to the core logic.export default { name: 'swift_package_stop', description: 'Stops a running Swift Package executable started with swift_package_run', schema: swiftPackageStopSchema.shape, // MCP SDK compatibility async handler(args: Record<string, unknown>): Promise<ToolResponse> { // Validate parameters using Zod const parseResult = swiftPackageStopSchema.safeParse(args); if (!parseResult.success) { return createErrorResponse( 'Parameter validation failed', parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', '), ); } return swift_package_stopLogic(parseResult.data); }, };