reset_printing_system
reset_printing_system
DESTRUCTIVE — removes ALL configured printers and resets the entire printing system to factory defaults. All printer configurations will be permanently deleted. Use only as a last resort after all other repair steps have failed.
Metadata
Name
reset_printing_system
Updated
2 months ago
Source
Risk
High
Requires consent
true
Affected scope
system
Code
/**
* mcp/skills/resetPrintingSystem.ts — reset_printing_system skill
*
* DESTRUCTIVE — removes ALL configured printers and resets the entire printing
* system to factory defaults. All printer configurations will be permanently
* deleted. Use only as a last resort after all other repair steps have failed.
*
* Platform strategy
* -----------------
* darwin Lists printers with `lpstat -p`, stops CUPS, deletes printers.conf
* and all PPDs from /etc/cups/, restarts CUPS
* win32 PowerShell — stops Spooler, removes printer registry entries,
* restarts Spooler
*
* Smoke test
* npx tsx -r dotenv/config mcp/skills/resetPrintingSystem.ts
*/
import * as os from "os";
import { exec } from "child_process";
import { promisify } from "util";
import { z } from "zod";
const execAsync = promisify(exec);
// -- Meta ---------------------------------------------------------------------
export const meta = {
name: "reset_printing_system",
description:
"DESTRUCTIVE — removes ALL configured printers and resets the entire " +
"printing system to factory defaults. All printer configurations will be " +
"permanently deleted. " +
"Use only as a last resort after all other repair steps have failed.",
riskLevel: "high",
destructive: true,
requiresConsent: true,
supportsDryRun: true,
affectedScope: ["system"],
auditRequired: true,
schema: {
dryRun: z
.boolean()
.optional()
.describe(
"If true, list what would be removed without removing. STRONGLY RECOMMENDED. Default: true",
),
},
} as const;
// -- Types --------------------------------------------------------------------
interface ResetPrintingSystemResult {
printers: string[];
resetDone: boolean;
dryRun: boolean;
warning: string;
message: string;
}
// -- PowerShell helper --------------------------------------------------------
async function runPS(script: string): Promise<string> {
const encoded = Buffer.from(script, "utf16le").toString("base64");
const { stdout } = await execAsync(
`powershell.exe -NoProfile -NonInteractive -EncodedCommand ${encoded}`,
{ maxBuffer: 10 * 1024 * 1024 },
);
return stdout.trim();
}
// -- darwin implementation ----------------------------------------------------
async function resetPrintingSystemDarwin(dryRun: boolean): Promise<ResetPrintingSystemResult> {
const WARNING = "All printers must be manually re-added after reset.";
// List all configured printers
let printers: string[] = [];
try {
const { stdout } = await execAsync("lpstat -p");
const lines = stdout.trim().split("\n").filter(Boolean);
printers = lines.map((line) => {
const parts = line.trim().split(/\s+/);
return parts[1] ?? "";
}).filter(Boolean);
} catch {
printers = [];
}
if (dryRun) {
return {
printers,
resetDone: false,
dryRun,
warning: WARNING,
message: `Found ${printers.length} printer(s). Run with dryRun=false to permanently remove all printers and reset the printing system.`,
};
}
let resetDone = false;
try {
// Stop CUPS
await execAsync("sudo launchctl stop org.cups.cupsd").catch(() => {});
await new Promise((resolve) => setTimeout(resolve, 1500));
// Delete printers.conf
await execAsync("sudo rm -f /etc/cups/printers.conf").catch(() => {});
// Delete all PPD files
await execAsync("sudo rm -f /etc/cups/ppd/*.ppd").catch(() => {});
// Restart CUPS
await execAsync("sudo launchctl start org.cups.cupsd").catch(() => {});
resetDone = true;
} catch {
resetDone = false;
}
return {
printers,
resetDone,
dryRun,
warning: WARNING,
message: resetDone
? `Printing system reset. Removed ${printers.length} printer(s). All printers must be manually re-added.`
: "Reset partially failed. Some cleanup may require manual steps or administrator privileges.",
};
}
// -- win32 implementation -----------------------------------------------------
async function resetPrintingSystemWin32(dryRun: boolean): Promise<ResetPrintingSystemResult> {
const WARNING = "All printers must be manually re-added after reset.";
// List all configured printers
let printers: string[] = [];
try {
const raw = await runPS(
`$ErrorActionPreference='SilentlyContinue'
Get-Printer | Select-Object -ExpandProperty Name | ConvertTo-Json -Compress`,
);
if (raw) {
const parsed = JSON.parse(raw) as string | string[];
printers = Array.isArray(parsed) ? parsed : [parsed];
}
} catch {
printers = [];
}
let resetDone = false;
try {
const ps = `
$ErrorActionPreference = 'SilentlyContinue'
# Stop Spooler
Stop-Service -Name Spooler -Force
Start-Sleep -Seconds 2
# Remove all printer registry entries
$regPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers'
if (Test-Path $regPath) {
Get-ChildItem -Path $regPath | Remove-Item -Recurse -Force
}
# Restart Spooler
Start-Service -Name Spooler
'success'`.trim();
const result = await runPS(ps);
resetDone = result.toLowerCase().includes("success");
} catch {
resetDone = false;
}
return {
printers,
resetDone,
dryRun,
warning: WARNING,
message: resetDone
? `Printing system reset. Removed registry entries for ${printers.length} printer(s). All printers must be manually re-added.`
: "Reset failed. Ensure you have administrator privileges and the Spooler service is accessible.",
};
}
// -- Exported run function ----------------------------------------------------
export async function run({
dryRun = true,
}: {
dryRun?: boolean;
} = {}) {
const platform = os.platform();
return platform === "win32"
? resetPrintingSystemWin32(dryRun)
: resetPrintingSystemDarwin(dryRun);
}
// -- Smoke test ---------------------------------------------------------------
if (false) {
run({})
.then(r => console.log(JSON.stringify(r, null, 2)))
.catch((err: Error) => { console.error(err.message); process.exit(1); });
}