airmcp 1.0.0

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.
Files changed (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +645 -0
  3. package/dist/calendar/prompts.d.ts +2 -0
  4. package/dist/calendar/prompts.js +43 -0
  5. package/dist/calendar/prompts.js.map +1 -0
  6. package/dist/calendar/scripts.d.ts +20 -0
  7. package/dist/calendar/scripts.js +286 -0
  8. package/dist/calendar/scripts.js.map +1 -0
  9. package/dist/calendar/tools.d.ts +3 -0
  10. package/dist/calendar/tools.js +252 -0
  11. package/dist/calendar/tools.js.map +1 -0
  12. package/dist/cli/doctor.d.ts +7 -0
  13. package/dist/cli/doctor.js +157 -0
  14. package/dist/cli/doctor.js.map +1 -0
  15. package/dist/cli/init.d.ts +8 -0
  16. package/dist/cli/init.js +179 -0
  17. package/dist/cli/init.js.map +1 -0
  18. package/dist/contacts/scripts.d.ts +22 -0
  19. package/dist/contacts/scripts.js +220 -0
  20. package/dist/contacts/scripts.js.map +1 -0
  21. package/dist/contacts/tools.d.ts +3 -0
  22. package/dist/contacts/tools.js +173 -0
  23. package/dist/contacts/tools.js.map +1 -0
  24. package/dist/cross/prompts.d.ts +2 -0
  25. package/dist/cross/prompts.js +802 -0
  26. package/dist/cross/prompts.js.map +1 -0
  27. package/dist/cross/tools.d.ts +7 -0
  28. package/dist/cross/tools.js +81 -0
  29. package/dist/cross/tools.js.map +1 -0
  30. package/dist/finder/scripts.d.ts +8 -0
  31. package/dist/finder/scripts.js +127 -0
  32. package/dist/finder/scripts.js.map +1 -0
  33. package/dist/finder/tools.d.ts +3 -0
  34. package/dist/finder/tools.js +134 -0
  35. package/dist/finder/tools.js.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +252 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/intelligence/tools.d.ts +3 -0
  40. package/dist/intelligence/tools.js +210 -0
  41. package/dist/intelligence/tools.js.map +1 -0
  42. package/dist/mail/scripts.d.ts +11 -0
  43. package/dist/mail/scripts.js +256 -0
  44. package/dist/mail/scripts.js.map +1 -0
  45. package/dist/mail/tools.d.ts +3 -0
  46. package/dist/mail/tools.js +188 -0
  47. package/dist/mail/tools.js.map +1 -0
  48. package/dist/maps/scripts.d.ts +6 -0
  49. package/dist/maps/scripts.js +61 -0
  50. package/dist/maps/scripts.js.map +1 -0
  51. package/dist/maps/tools.d.ts +3 -0
  52. package/dist/maps/tools.js +109 -0
  53. package/dist/maps/tools.js.map +1 -0
  54. package/dist/messages/scripts.d.ts +6 -0
  55. package/dist/messages/scripts.js +140 -0
  56. package/dist/messages/scripts.js.map +1 -0
  57. package/dist/messages/tools.d.ts +3 -0
  58. package/dist/messages/tools.js +105 -0
  59. package/dist/messages/tools.js.map +1 -0
  60. package/dist/music/scripts.d.ts +13 -0
  61. package/dist/music/scripts.js +218 -0
  62. package/dist/music/scripts.js.map +1 -0
  63. package/dist/music/tools.d.ts +3 -0
  64. package/dist/music/tools.js +205 -0
  65. package/dist/music/tools.js.map +1 -0
  66. package/dist/notes/prompts.d.ts +2 -0
  67. package/dist/notes/prompts.js +47 -0
  68. package/dist/notes/prompts.js.map +1 -0
  69. package/dist/notes/scripts.d.ts +15 -0
  70. package/dist/notes/scripts.js +348 -0
  71. package/dist/notes/scripts.js.map +1 -0
  72. package/dist/notes/tools.d.ts +3 -0
  73. package/dist/notes/tools.js +317 -0
  74. package/dist/notes/tools.js.map +1 -0
  75. package/dist/photos/scripts.d.ts +7 -0
  76. package/dist/photos/scripts.js +142 -0
  77. package/dist/photos/scripts.js.map +1 -0
  78. package/dist/photos/tools.d.ts +3 -0
  79. package/dist/photos/tools.js +158 -0
  80. package/dist/photos/tools.js.map +1 -0
  81. package/dist/podcasts/scripts.d.ts +6 -0
  82. package/dist/podcasts/scripts.js +116 -0
  83. package/dist/podcasts/scripts.js.map +1 -0
  84. package/dist/podcasts/tools.d.ts +3 -0
  85. package/dist/podcasts/tools.js +96 -0
  86. package/dist/podcasts/tools.js.map +1 -0
  87. package/dist/reminders/prompts.d.ts +2 -0
  88. package/dist/reminders/prompts.js +40 -0
  89. package/dist/reminders/prompts.js.map +1 -0
  90. package/dist/reminders/scripts.d.ts +21 -0
  91. package/dist/reminders/scripts.js +208 -0
  92. package/dist/reminders/scripts.js.map +1 -0
  93. package/dist/reminders/tools.d.ts +3 -0
  94. package/dist/reminders/tools.js +269 -0
  95. package/dist/reminders/tools.js.map +1 -0
  96. package/dist/safari/scripts.d.ts +12 -0
  97. package/dist/safari/scripts.js +203 -0
  98. package/dist/safari/scripts.js.map +1 -0
  99. package/dist/safari/tools.d.ts +3 -0
  100. package/dist/safari/tools.js +188 -0
  101. package/dist/safari/tools.js.map +1 -0
  102. package/dist/screen/scripts.d.ts +26 -0
  103. package/dist/screen/scripts.js +115 -0
  104. package/dist/screen/scripts.js.map +1 -0
  105. package/dist/screen/tools.d.ts +3 -0
  106. package/dist/screen/tools.js +168 -0
  107. package/dist/screen/tools.js.map +1 -0
  108. package/dist/semantic/embeddings.d.ts +12 -0
  109. package/dist/semantic/embeddings.js +101 -0
  110. package/dist/semantic/embeddings.js.map +1 -0
  111. package/dist/semantic/service.d.ts +68 -0
  112. package/dist/semantic/service.js +257 -0
  113. package/dist/semantic/service.js.map +1 -0
  114. package/dist/semantic/store.d.ts +56 -0
  115. package/dist/semantic/store.js +107 -0
  116. package/dist/semantic/store.js.map +1 -0
  117. package/dist/semantic/tools.d.ts +10 -0
  118. package/dist/semantic/tools.js +102 -0
  119. package/dist/semantic/tools.js.map +1 -0
  120. package/dist/shared/config.d.ts +41 -0
  121. package/dist/shared/config.js +152 -0
  122. package/dist/shared/config.js.map +1 -0
  123. package/dist/shared/esc.d.ts +10 -0
  124. package/dist/shared/esc.js +35 -0
  125. package/dist/shared/esc.js.map +1 -0
  126. package/dist/shared/hitl-guard.d.ts +8 -0
  127. package/dist/shared/hitl-guard.js +39 -0
  128. package/dist/shared/hitl-guard.js.map +1 -0
  129. package/dist/shared/hitl.d.ts +16 -0
  130. package/dist/shared/hitl.js +131 -0
  131. package/dist/shared/hitl.js.map +1 -0
  132. package/dist/shared/jxa.d.ts +1 -0
  133. package/dist/shared/jxa.js +52 -0
  134. package/dist/shared/jxa.js.map +1 -0
  135. package/dist/shared/modules.d.ts +2 -0
  136. package/dist/shared/modules.js +43 -0
  137. package/dist/shared/modules.js.map +1 -0
  138. package/dist/shared/prompt.d.ts +11 -0
  139. package/dist/shared/prompt.js +8 -0
  140. package/dist/shared/prompt.js.map +1 -0
  141. package/dist/shared/registry.d.ts +9 -0
  142. package/dist/shared/registry.js +2 -0
  143. package/dist/shared/registry.js.map +1 -0
  144. package/dist/shared/resources.d.ts +14 -0
  145. package/dist/shared/resources.js +222 -0
  146. package/dist/shared/resources.js.map +1 -0
  147. package/dist/shared/result.d.ts +23 -0
  148. package/dist/shared/result.js +19 -0
  149. package/dist/shared/result.js.map +1 -0
  150. package/dist/shared/setup.d.ts +3 -0
  151. package/dist/shared/setup.js +53 -0
  152. package/dist/shared/setup.js.map +1 -0
  153. package/dist/shared/share-guard.d.ts +30 -0
  154. package/dist/shared/share-guard.js +60 -0
  155. package/dist/shared/share-guard.js.map +1 -0
  156. package/dist/shared/swift.d.ts +2 -0
  157. package/dist/shared/swift.js +73 -0
  158. package/dist/shared/swift.js.map +1 -0
  159. package/dist/shortcuts/prompts.d.ts +2 -0
  160. package/dist/shortcuts/prompts.js +148 -0
  161. package/dist/shortcuts/prompts.js.map +1 -0
  162. package/dist/shortcuts/scripts.d.ts +10 -0
  163. package/dist/shortcuts/scripts.js +115 -0
  164. package/dist/shortcuts/scripts.js.map +1 -0
  165. package/dist/shortcuts/tools.d.ts +14 -0
  166. package/dist/shortcuts/tools.js +230 -0
  167. package/dist/shortcuts/tools.js.map +1 -0
  168. package/dist/system/scripts.d.ts +17 -0
  169. package/dist/system/scripts.js +257 -0
  170. package/dist/system/scripts.js.map +1 -0
  171. package/dist/system/tools.d.ts +3 -0
  172. package/dist/system/tools.js +333 -0
  173. package/dist/system/tools.js.map +1 -0
  174. package/dist/tv/scripts.d.ts +6 -0
  175. package/dist/tv/scripts.js +121 -0
  176. package/dist/tv/scripts.js.map +1 -0
  177. package/dist/tv/tools.d.ts +3 -0
  178. package/dist/tv/tools.js +95 -0
  179. package/dist/tv/tools.js.map +1 -0
  180. package/dist/ui/scripts.d.ts +24 -0
  181. package/dist/ui/scripts.js +345 -0
  182. package/dist/ui/scripts.js.map +1 -0
  183. package/dist/ui/tools.d.ts +3 -0
  184. package/dist/ui/tools.js +145 -0
  185. package/dist/ui/tools.js.map +1 -0
  186. package/package.json +101 -0
@@ -0,0 +1,257 @@
1
+ // JXA scripts for macOS system automation.
2
+ import { esc, escJxaShell } from "../shared/esc.js";
3
+ export function getClipboardScript() {
4
+ return `
5
+ const app = Application.currentApplication();
6
+ app.includeStandardAdditions = true;
7
+ let text;
8
+ try { text = app.theClipboard(); } catch(e) { text = ''; }
9
+ const content = (typeof text === 'object') ? JSON.stringify(text) : String(text);
10
+ JSON.stringify({content: content});
11
+ `;
12
+ }
13
+ export function setClipboardScript(text) {
14
+ return `
15
+ const app = Application.currentApplication();
16
+ app.includeStandardAdditions = true;
17
+ const text = '${esc(text)}';
18
+ app.setTheClipboardTo(text);
19
+ JSON.stringify({set: true, length: text.length});
20
+ `;
21
+ }
22
+ export function getVolumeScript() {
23
+ return `
24
+ const app = Application.currentApplication();
25
+ app.includeStandardAdditions = true;
26
+ const vol = app.getVolumeSettings();
27
+ JSON.stringify({
28
+ outputVolume: vol.outputVolume,
29
+ inputVolume: vol.inputVolume,
30
+ outputMuted: vol.outputMuted
31
+ });
32
+ `;
33
+ }
34
+ export function setVolumeScript(volume, muted) {
35
+ const parts = [];
36
+ if (volume !== undefined)
37
+ parts.push(`outputVolume: ${Math.max(0, Math.min(100, Math.round(volume)))}`);
38
+ if (muted !== undefined)
39
+ parts.push(`outputMuted: ${muted}`);
40
+ return `
41
+ const app = Application.currentApplication();
42
+ app.includeStandardAdditions = true;
43
+ app.setVolume(null, {${parts.join(", ")}});
44
+ const vol = app.getVolumeSettings();
45
+ JSON.stringify({
46
+ outputVolume: vol.outputVolume,
47
+ outputMuted: vol.outputMuted
48
+ });
49
+ `;
50
+ }
51
+ export function toggleDarkModeScript() {
52
+ return `
53
+ const se = Application('System Events');
54
+ const current = se.appearancePreferences.darkMode();
55
+ se.appearancePreferences.darkMode = !current;
56
+ JSON.stringify({darkMode: !current});
57
+ `;
58
+ }
59
+ export function getFrontmostAppScript() {
60
+ return `
61
+ const se = Application('System Events');
62
+ const procs = se.processes.whose({frontmost: true})();
63
+ if (procs.length === 0) throw new Error('No frontmost app found');
64
+ const proc = procs[0];
65
+ JSON.stringify({
66
+ name: proc.name(),
67
+ bundleIdentifier: proc.bundleIdentifier(),
68
+ pid: proc.unixId()
69
+ });
70
+ `;
71
+ }
72
+ export function listRunningAppsScript() {
73
+ return `
74
+ const se = Application('System Events');
75
+ const procs = se.applicationProcesses();
76
+ const result = [];
77
+ for (const p of procs) {
78
+ try {
79
+ result.push({
80
+ name: p.name(),
81
+ bundleIdentifier: p.bundleIdentifier(),
82
+ pid: p.unixId(),
83
+ visible: p.visible()
84
+ });
85
+ } catch(e) {}
86
+ }
87
+ JSON.stringify({total: result.length, apps: result});
88
+ `;
89
+ }
90
+ export function getScreenInfoScript() {
91
+ return `
92
+ const app = Application.currentApplication();
93
+ app.includeStandardAdditions = true;
94
+ const output = app.doShellScript('system_profiler SPDisplaysDataType -json');
95
+ const data = JSON.parse(output);
96
+ const displays = [];
97
+ for (const gpu of (data.SPDisplaysDataType || [])) {
98
+ for (const d of (gpu.spdisplays_ndrvs || [])) {
99
+ displays.push({
100
+ name: d._name,
101
+ resolution: d._spdisplays_resolution,
102
+ pixelWidth: d._spdisplays_pixels ? parseInt(d._spdisplays_pixels.split(' x ')[0]) : null,
103
+ pixelHeight: d._spdisplays_pixels ? parseInt(d._spdisplays_pixels.split(' x ')[1]) : null,
104
+ retina: d.spdisplays_retina === 'spdisplays_yes'
105
+ });
106
+ }
107
+ }
108
+ JSON.stringify({displays: displays});
109
+ `;
110
+ }
111
+ export function captureScreenshotScript(path, region) {
112
+ const regionFlag = region === "selection" ? " -i" : region === "window" ? " -w" : "";
113
+ const safePath = escJxaShell(path);
114
+ return `
115
+ const app = Application.currentApplication();
116
+ app.includeStandardAdditions = true;
117
+ app.doShellScript('screencapture -x${regionFlag} "${safePath}"');
118
+ const info = app.doShellScript('stat -f "%z" "${safePath}"');
119
+ JSON.stringify({captured: true, path: '${esc(path)}', sizeBytes: parseInt(info)});
120
+ `;
121
+ }
122
+ export function showNotificationScript(message, title, subtitle, sound) {
123
+ const opts = [];
124
+ if (title)
125
+ opts.push(`withTitle: '${esc(title)}'`);
126
+ if (subtitle)
127
+ opts.push(`subtitle: '${esc(subtitle)}'`);
128
+ if (sound)
129
+ opts.push(`soundName: '${esc(sound)}'`);
130
+ return `
131
+ const app = Application.currentApplication();
132
+ app.includeStandardAdditions = true;
133
+ app.displayNotification('${esc(message)}', {${opts.join(', ')}});
134
+ JSON.stringify({sent: true, message: '${esc(message)}'});
135
+ `;
136
+ }
137
+ export function getWifiStatusScript() {
138
+ return `
139
+ const app = Application.currentApplication();
140
+ app.includeStandardAdditions = true;
141
+ const output = app.doShellScript('/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I 2>/dev/null || echo "WiFi off"');
142
+ const lines = output.split('\\n');
143
+ const info = {};
144
+ for (const line of lines) {
145
+ const match = line.match(/^\\s*([^:]+):\\s*(.+)$/);
146
+ if (match) info[match[1].trim()] = match[2].trim();
147
+ }
148
+ JSON.stringify({
149
+ ssid: info['SSID'] || null,
150
+ bssid: info['BSSID'] || null,
151
+ signalStrength: info['agrCtlRSSI'] ? parseInt(info['agrCtlRSSI']) : null,
152
+ noiseLevel: info['agrCtlNoise'] ? parseInt(info['agrCtlNoise']) : null,
153
+ channel: info['channel'] || null,
154
+ connected: !!info['SSID'],
155
+ raw: output
156
+ });
157
+ `;
158
+ }
159
+ export function toggleWifiScript(enable) {
160
+ return `
161
+ const app = Application.currentApplication();
162
+ app.includeStandardAdditions = true;
163
+ app.doShellScript('networksetup -setairportpower en0 ${enable ? "on" : "off"}');
164
+ JSON.stringify({wifi: ${enable ? "'on'" : "'off'"}, success: true});
165
+ `;
166
+ }
167
+ export function listBluetoothDevicesScript() {
168
+ return `
169
+ const app = Application.currentApplication();
170
+ app.includeStandardAdditions = true;
171
+ const output = app.doShellScript('system_profiler SPBluetoothDataType -json 2>/dev/null');
172
+ const data = JSON.parse(output);
173
+ const devices = [];
174
+ const btData = data.SPBluetoothDataType || [];
175
+ for (const section of btData) {
176
+ const devicesMap = section.devices_list || section.device_connected || [];
177
+ for (const entry of (Array.isArray(devicesMap) ? devicesMap : [devicesMap])) {
178
+ if (typeof entry === 'object' && entry !== null) {
179
+ for (const name of Object.keys(entry)) {
180
+ const info = entry[name] || {};
181
+ devices.push({
182
+ name: name,
183
+ connected: info.device_connected === 'device_connected_yes' || info.device_connected === 'attrib_Yes' || false,
184
+ address: info.device_address || null,
185
+ type: info.device_minorType || null
186
+ });
187
+ }
188
+ }
189
+ }
190
+ }
191
+ JSON.stringify({total: devices.length, devices: devices});
192
+ `;
193
+ }
194
+ export function getBrightnessScript() {
195
+ return `
196
+ const app = Application.currentApplication();
197
+ app.includeStandardAdditions = true;
198
+ const output = app.doShellScript('ioreg -c AppleBacklightDisplay -d 1 | grep -i brightness | head -1 2>/dev/null || echo ""');
199
+ let brightness = null;
200
+ const match = output.match(/"brightness"\\s*=\\s*(\\d+)/);
201
+ if (match) {
202
+ brightness = parseInt(match[1]) / 1024;
203
+ }
204
+ JSON.stringify({brightness: brightness, raw: output});
205
+ `;
206
+ }
207
+ export function setBrightnessScript(level) {
208
+ const clamped = Math.max(0, Math.min(1, level));
209
+ return `
210
+ const app = Application.currentApplication();
211
+ app.includeStandardAdditions = true;
212
+ try {
213
+ app.doShellScript('brightness ${clamped}');
214
+ JSON.stringify({brightness: ${clamped}, success: true});
215
+ } catch(e) {
216
+ JSON.stringify({brightness: null, success: false, error: 'brightness CLI not found. Install via: brew install brightness'});
217
+ }
218
+ `;
219
+ }
220
+ export function getBatteryStatusScript() {
221
+ return `
222
+ const app = Application.currentApplication();
223
+ app.includeStandardAdditions = true;
224
+ const output = app.doShellScript('pmset -g batt');
225
+ const lines = output.split('\\n');
226
+ let percentage = null;
227
+ let charging = false;
228
+ let timeRemaining = null;
229
+ let source = null;
230
+ for (const line of lines) {
231
+ if (line.indexOf('AC Power') !== -1) source = 'AC Power';
232
+ if (line.indexOf('Battery Power') !== -1) source = 'Battery Power';
233
+ const pctMatch = line.match(/(\\d+)%/);
234
+ if (pctMatch) percentage = parseInt(pctMatch[1]);
235
+ if (line.indexOf('charging') !== -1 && line.indexOf('discharging') === -1 && line.indexOf('not charging') === -1) charging = true;
236
+ const timeMatch = line.match(/(\\d+:\\d+) remaining/);
237
+ if (timeMatch) timeRemaining = timeMatch[1];
238
+ }
239
+ JSON.stringify({
240
+ percentage: percentage,
241
+ charging: charging,
242
+ source: source,
243
+ timeRemaining: timeRemaining,
244
+ raw: output
245
+ });
246
+ `;
247
+ }
248
+ export function toggleFocusModeScript(enable) {
249
+ return `
250
+ const app = Application.currentApplication();
251
+ app.includeStandardAdditions = true;
252
+ app.doShellScript('defaults -currentHost write com.apple.notificationcenterui doNotDisturb -boolean ${enable ? "true" : "false"}');
253
+ app.doShellScript('killall NotificationCenter 2>/dev/null || true');
254
+ JSON.stringify({doNotDisturb: ${enable}, success: true});
255
+ `;
256
+ }
257
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/system/scripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AirMcpConfig } from "../shared/config.js";
3
+ export declare function registerSystemTools(server: McpServer, _config: AirMcpConfig): void;
@@ -0,0 +1,333 @@
1
+ import { z } from "zod";
2
+ import { runJxa } from "../shared/jxa.js";
3
+ import { ok, toolError } from "../shared/result.js";
4
+ import { getClipboardScript, setClipboardScript, getVolumeScript, setVolumeScript, toggleDarkModeScript, getFrontmostAppScript, listRunningAppsScript, getScreenInfoScript, showNotificationScript, captureScreenshotScript, getWifiStatusScript, toggleWifiScript, listBluetoothDevicesScript, getBatteryStatusScript, getBrightnessScript, setBrightnessScript, toggleFocusModeScript, } from "./scripts.js";
5
+ export function registerSystemTools(server, _config) {
6
+ server.registerTool("get_clipboard", {
7
+ title: "Get Clipboard",
8
+ description: "Read the current text content of the system clipboard.",
9
+ inputSchema: {},
10
+ annotations: {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: false,
15
+ },
16
+ }, async () => {
17
+ try {
18
+ return ok(await runJxa(getClipboardScript()));
19
+ }
20
+ catch (e) {
21
+ return toolError("get clipboard", e);
22
+ }
23
+ });
24
+ server.registerTool("set_clipboard", {
25
+ title: "Set Clipboard",
26
+ description: "Write text to the system clipboard, replacing its current content.",
27
+ inputSchema: {
28
+ text: z.string().describe("Text to copy to the clipboard"),
29
+ },
30
+ annotations: {
31
+ readOnlyHint: false,
32
+ destructiveHint: false,
33
+ idempotentHint: true,
34
+ openWorldHint: false,
35
+ },
36
+ }, async ({ text }) => {
37
+ try {
38
+ return ok(await runJxa(setClipboardScript(text)));
39
+ }
40
+ catch (e) {
41
+ return toolError("set clipboard", e);
42
+ }
43
+ });
44
+ server.registerTool("get_volume", {
45
+ title: "Get Volume",
46
+ description: "Get the current system output volume level and mute state.",
47
+ inputSchema: {},
48
+ annotations: {
49
+ readOnlyHint: true,
50
+ destructiveHint: false,
51
+ idempotentHint: true,
52
+ openWorldHint: false,
53
+ },
54
+ }, async () => {
55
+ try {
56
+ return ok(await runJxa(getVolumeScript()));
57
+ }
58
+ catch (e) {
59
+ return toolError("get volume", e);
60
+ }
61
+ });
62
+ server.registerTool("set_volume", {
63
+ title: "Set Volume",
64
+ description: "Set the system output volume (0-100) and/or mute state.",
65
+ inputSchema: {
66
+ volume: z.number().min(0).max(100).optional().describe("Output volume level (0-100)"),
67
+ muted: z.boolean().optional().describe("Whether to mute output audio"),
68
+ },
69
+ annotations: {
70
+ readOnlyHint: false,
71
+ destructiveHint: false,
72
+ idempotentHint: true,
73
+ openWorldHint: false,
74
+ },
75
+ }, async ({ volume, muted }) => {
76
+ try {
77
+ return ok(await runJxa(setVolumeScript(volume, muted)));
78
+ }
79
+ catch (e) {
80
+ return toolError("set volume", e);
81
+ }
82
+ });
83
+ server.registerTool("toggle_dark_mode", {
84
+ title: "Toggle Dark Mode",
85
+ description: "Toggle macOS appearance between dark mode and light mode.",
86
+ inputSchema: {},
87
+ annotations: {
88
+ readOnlyHint: false,
89
+ destructiveHint: false,
90
+ idempotentHint: true,
91
+ openWorldHint: false,
92
+ },
93
+ }, async () => {
94
+ try {
95
+ return ok(await runJxa(toggleDarkModeScript()));
96
+ }
97
+ catch (e) {
98
+ return toolError("toggle dark mode", e);
99
+ }
100
+ });
101
+ server.registerTool("get_frontmost_app", {
102
+ title: "Get Frontmost App",
103
+ description: "Get the name, bundle identifier, and PID of the currently active (frontmost) application.",
104
+ inputSchema: {},
105
+ annotations: {
106
+ readOnlyHint: true,
107
+ destructiveHint: false,
108
+ idempotentHint: true,
109
+ openWorldHint: false,
110
+ },
111
+ }, async () => {
112
+ try {
113
+ return ok(await runJxa(getFrontmostAppScript()));
114
+ }
115
+ catch (e) {
116
+ return toolError("get frontmost app", e);
117
+ }
118
+ });
119
+ server.registerTool("list_running_apps", {
120
+ title: "List Running Apps",
121
+ description: "List all running applications with name, bundle identifier, PID, and visibility.",
122
+ inputSchema: {},
123
+ annotations: {
124
+ readOnlyHint: true,
125
+ destructiveHint: false,
126
+ idempotentHint: true,
127
+ openWorldHint: false,
128
+ },
129
+ }, async () => {
130
+ try {
131
+ return ok(await runJxa(listRunningAppsScript()));
132
+ }
133
+ catch (e) {
134
+ return toolError("list running apps", e);
135
+ }
136
+ });
137
+ server.registerTool("get_screen_info", {
138
+ title: "Get Screen Info",
139
+ description: "Get display information including resolution, pixel dimensions, and Retina status.",
140
+ inputSchema: {},
141
+ annotations: {
142
+ readOnlyHint: true,
143
+ destructiveHint: false,
144
+ idempotentHint: true,
145
+ openWorldHint: false,
146
+ },
147
+ }, async () => {
148
+ try {
149
+ return ok(await runJxa(getScreenInfoScript()));
150
+ }
151
+ catch (e) {
152
+ return toolError("get screen info", e);
153
+ }
154
+ });
155
+ server.registerTool("show_notification", {
156
+ title: "Show Notification",
157
+ description: "Display a macOS system notification with optional title, subtitle, and sound.",
158
+ inputSchema: {
159
+ message: z.string().describe("Notification body text"),
160
+ title: z.string().optional().describe("Notification title"),
161
+ subtitle: z.string().optional().describe("Notification subtitle"),
162
+ sound: z.string().optional().describe("Sound name to play (e.g. 'Frog', 'Glass', 'Hero')"),
163
+ },
164
+ annotations: {
165
+ readOnlyHint: false,
166
+ destructiveHint: false,
167
+ idempotentHint: false,
168
+ openWorldHint: false,
169
+ },
170
+ }, async ({ message, title, subtitle, sound }) => {
171
+ try {
172
+ return ok(await runJxa(showNotificationScript(message, title, subtitle, sound)));
173
+ }
174
+ catch (e) {
175
+ return toolError("show notification", e);
176
+ }
177
+ });
178
+ server.registerTool("capture_screenshot", {
179
+ title: "Capture Screenshot",
180
+ description: "Take a screenshot and save to the specified path. Supports full screen, window, or selection capture.",
181
+ inputSchema: {
182
+ path: z.string().min(1).describe("Absolute file path to save the screenshot (e.g. '/tmp/screenshot.png')"),
183
+ region: z.enum(["fullscreen", "window", "selection"]).optional().default("fullscreen").describe("Capture region: fullscreen (default), window, or selection"),
184
+ },
185
+ annotations: {
186
+ readOnlyHint: true,
187
+ destructiveHint: false,
188
+ idempotentHint: false,
189
+ openWorldHint: false,
190
+ },
191
+ }, async ({ path, region }) => {
192
+ try {
193
+ return ok(await runJxa(captureScreenshotScript(path, region)));
194
+ }
195
+ catch (e) {
196
+ return toolError("capture screenshot", e);
197
+ }
198
+ });
199
+ // --- Network & Display Control Tools ---
200
+ server.registerTool("get_wifi_status", {
201
+ title: "Get WiFi Status",
202
+ description: "Get the current WiFi status including connected network name, signal strength, and channel.",
203
+ inputSchema: {},
204
+ annotations: {
205
+ readOnlyHint: true,
206
+ destructiveHint: false,
207
+ idempotentHint: true,
208
+ openWorldHint: false,
209
+ },
210
+ }, async () => {
211
+ try {
212
+ return ok(await runJxa(getWifiStatusScript()));
213
+ }
214
+ catch (e) {
215
+ return toolError("get wifi status", e);
216
+ }
217
+ });
218
+ server.registerTool("toggle_wifi", {
219
+ title: "Toggle WiFi",
220
+ description: "Turn WiFi on or off.",
221
+ inputSchema: {
222
+ enable: z.boolean().describe("True to enable WiFi, false to disable"),
223
+ },
224
+ annotations: {
225
+ readOnlyHint: false,
226
+ destructiveHint: false,
227
+ idempotentHint: true,
228
+ openWorldHint: false,
229
+ },
230
+ }, async ({ enable }) => {
231
+ try {
232
+ return ok(await runJxa(toggleWifiScript(enable)));
233
+ }
234
+ catch (e) {
235
+ return toolError("toggle wifi", e);
236
+ }
237
+ });
238
+ server.registerTool("list_bluetooth_devices", {
239
+ title: "List Bluetooth Devices",
240
+ description: "List paired Bluetooth devices with their connection status.",
241
+ inputSchema: {},
242
+ annotations: {
243
+ readOnlyHint: true,
244
+ destructiveHint: false,
245
+ idempotentHint: true,
246
+ openWorldHint: false,
247
+ },
248
+ }, async () => {
249
+ try {
250
+ return ok(await runJxa(listBluetoothDevicesScript()));
251
+ }
252
+ catch (e) {
253
+ return toolError("list bluetooth devices", e);
254
+ }
255
+ });
256
+ server.registerTool("get_battery_status", {
257
+ title: "Get Battery Status",
258
+ description: "Get battery percentage, charging state, power source, and estimated time remaining.",
259
+ inputSchema: {},
260
+ annotations: {
261
+ readOnlyHint: true,
262
+ destructiveHint: false,
263
+ idempotentHint: true,
264
+ openWorldHint: false,
265
+ },
266
+ }, async () => {
267
+ try {
268
+ return ok(await runJxa(getBatteryStatusScript()));
269
+ }
270
+ catch (e) {
271
+ return toolError("get battery status", e);
272
+ }
273
+ });
274
+ server.registerTool("get_brightness", {
275
+ title: "Get Brightness",
276
+ description: "Get the current display brightness level.",
277
+ inputSchema: {},
278
+ annotations: {
279
+ readOnlyHint: true,
280
+ destructiveHint: false,
281
+ idempotentHint: true,
282
+ openWorldHint: false,
283
+ },
284
+ }, async () => {
285
+ try {
286
+ return ok(await runJxa(getBrightnessScript()));
287
+ }
288
+ catch (e) {
289
+ return toolError("get brightness", e);
290
+ }
291
+ });
292
+ server.registerTool("set_brightness", {
293
+ title: "Set Brightness",
294
+ description: "Set the display brightness level. Requires the 'brightness' CLI tool (brew install brightness).",
295
+ inputSchema: {
296
+ level: z.number().min(0).max(1).describe("Brightness level from 0.0 (darkest) to 1.0 (brightest)"),
297
+ },
298
+ annotations: {
299
+ readOnlyHint: false,
300
+ destructiveHint: false,
301
+ idempotentHint: true,
302
+ openWorldHint: false,
303
+ },
304
+ }, async ({ level }) => {
305
+ try {
306
+ return ok(await runJxa(setBrightnessScript(level)));
307
+ }
308
+ catch (e) {
309
+ return toolError("set brightness", e);
310
+ }
311
+ });
312
+ server.registerTool("toggle_focus_mode", {
313
+ title: "Toggle Focus Mode",
314
+ description: "Toggle Do Not Disturb (Focus mode) on or off.",
315
+ inputSchema: {
316
+ enable: z.boolean().describe("True to enable Do Not Disturb, false to disable"),
317
+ },
318
+ annotations: {
319
+ readOnlyHint: false,
320
+ destructiveHint: false,
321
+ idempotentHint: true,
322
+ openWorldHint: false,
323
+ },
324
+ }, async ({ enable }) => {
325
+ try {
326
+ return ok(await runJxa(toggleFocusModeScript(enable)));
327
+ }
328
+ catch (e) {
329
+ return toolError("toggle focus mode", e);
330
+ }
331
+ });
332
+ }
333
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/system/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function listPlaylistsScript(): string;
2
+ export declare function listTracksScript(playlist: string, limit: number): string;
3
+ export declare function nowPlayingScript(): string;
4
+ export declare function playbackControlScript(action: string): string;
5
+ export declare function searchTracksScript(query: string, limit: number): string;
6
+ export declare function playTrackScript(trackName: string): string;