airmcp 1.6.1 → 1.9.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 (72) hide show
  1. package/README.md +4 -4
  2. package/dist/apps/tools.d.ts +5 -0
  3. package/dist/apps/tools.js +167 -0
  4. package/dist/apps/tools.js.map +1 -0
  5. package/dist/index.js +10 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/keynote/scripts.d.ts +9 -0
  8. package/dist/keynote/scripts.js +77 -0
  9. package/dist/keynote/scripts.js.map +1 -0
  10. package/dist/keynote/tools.d.ts +3 -0
  11. package/dist/keynote/tools.js +144 -0
  12. package/dist/keynote/tools.js.map +1 -0
  13. package/dist/maps/api.d.ts +17 -0
  14. package/dist/maps/api.js +50 -0
  15. package/dist/maps/api.js.map +1 -0
  16. package/dist/maps/tools.js +32 -0
  17. package/dist/maps/tools.js.map +1 -1
  18. package/dist/music/scripts.d.ts +4 -0
  19. package/dist/music/scripts.js +45 -1
  20. package/dist/music/scripts.js.map +1 -1
  21. package/dist/music/tools.js +64 -1
  22. package/dist/music/tools.js.map +1 -1
  23. package/dist/numbers/scripts.d.ts +9 -0
  24. package/dist/numbers/scripts.js +80 -0
  25. package/dist/numbers/scripts.js.map +1 -0
  26. package/dist/numbers/tools.d.ts +3 -0
  27. package/dist/numbers/tools.js +151 -0
  28. package/dist/numbers/tools.js.map +1 -0
  29. package/dist/pages/scripts.d.ts +7 -0
  30. package/dist/pages/scripts.js +39 -0
  31. package/dist/pages/scripts.js.map +1 -0
  32. package/dist/pages/tools.d.ts +3 -0
  33. package/dist/pages/tools.js +111 -0
  34. package/dist/pages/tools.js.map +1 -0
  35. package/dist/shared/config.d.ts +1 -1
  36. package/dist/shared/config.js +4 -0
  37. package/dist/shared/config.js.map +1 -1
  38. package/dist/shared/iwork.d.ts +10 -0
  39. package/dist/shared/iwork.js +48 -0
  40. package/dist/shared/iwork.js.map +1 -0
  41. package/dist/shared/modules.js +8 -0
  42. package/dist/shared/modules.js.map +1 -1
  43. package/dist/skills/builtins/inbox-triage.yaml +15 -0
  44. package/dist/skills/builtins/meeting-action-items.yaml +18 -0
  45. package/dist/skills/builtins/morning-briefing.yaml +15 -0
  46. package/dist/skills/executor.d.ts +22 -0
  47. package/dist/skills/executor.js +251 -0
  48. package/dist/skills/executor.js.map +1 -0
  49. package/dist/skills/index.d.ts +2 -0
  50. package/dist/skills/index.js +21 -0
  51. package/dist/skills/index.js.map +1 -0
  52. package/dist/skills/loader.d.ts +9 -0
  53. package/dist/skills/loader.js +74 -0
  54. package/dist/skills/loader.js.map +1 -0
  55. package/dist/skills/register.d.ts +6 -0
  56. package/dist/skills/register.js +62 -0
  57. package/dist/skills/register.js.map +1 -0
  58. package/dist/skills/types.d.ts +82 -0
  59. package/dist/skills/types.js +16 -0
  60. package/dist/skills/types.js.map +1 -0
  61. package/dist/system/scripts.d.ts +10 -0
  62. package/dist/system/scripts.js +117 -0
  63. package/dist/system/scripts.js.map +1 -1
  64. package/dist/system/tools.js +193 -1
  65. package/dist/system/tools.js.map +1 -1
  66. package/dist/weather/api.d.ts +18 -0
  67. package/dist/weather/api.js +100 -0
  68. package/dist/weather/api.js.map +1 -0
  69. package/dist/weather/tools.d.ts +3 -0
  70. package/dist/weather/tools.js +56 -0
  71. package/dist/weather/tools.js.map +1 -0
  72. package/package.json +4 -2
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # AirMCP
2
2
 
3
- MCP server for the entire Apple ecosystem — Notes, Reminders, Calendar, Contacts, Mail, Messages, Music, Finder, Safari, System, Photos, Shortcuts, Apple Intelligence, TV, Screen Capture, Maps, and Podcasts. Connect any AI to your Mac.
3
+ MCP server for the entire Apple ecosystem — Notes, Reminders, Calendar, Contacts, Mail, Messages, Music, Finder, Safari, System, Photos, Shortcuts, Apple Intelligence, TV, Screen Capture, Maps, Podcasts, Weather, Pages, Numbers, and Keynote. Connect any AI to your Mac.
4
4
 
5
5
  > Available in multiple languages at the [project landing page](https://heznpc.github.io/AirMCP/).
6
6
 
7
7
  ## Features
8
8
 
9
- - **173 tools** (18 modules) — Apple app CRUD + system control + Apple Intelligence + UI Automation + Screen Capture + Maps + Podcasts + dynamic shortcuts
10
- - **29 prompts** — per-app workflows (notes, calendar, reminders, shortcuts) + cross-module + developer workflows
9
+ - **220 tools** (22 modules) — Apple app CRUD + system control + Apple Intelligence + UI Automation + Screen Capture + Maps + Podcasts + Weather + iWork (Pages/Numbers/Keynote) + dynamic shortcuts
10
+ - **30 prompts** — per-app workflows (notes, calendar, reminders, shortcuts) + cross-module + developer workflows
11
11
  - **11 MCP resources** — Notes, Calendar, Reminders live data URIs
12
12
  - **JXA + Swift bridge** — JXA for basic automation, EventKit/PhotoKit for advanced features
13
13
  - **Recurring events/reminders** — EventKit recurrence rules (macOS 26+ Swift bridge)
@@ -521,7 +521,7 @@ Or edit `~/.config/airmcp/config.json` directly:
521
521
  | `npx airmcp init` | Interactive setup wizard |
522
522
  | `npx airmcp doctor` | Diagnose installation issues |
523
523
  | `npx airmcp` | Start MCP server (stdio, default) |
524
- | `npx airmcp --full` | Start with all 18 modules enabled |
524
+ | `npx airmcp --full` | Start with all 22 modules enabled |
525
525
  | `npx airmcp --http` | Start as HTTP server (port 3847) |
526
526
 
527
527
  ## Configuration
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerApps(server: McpServer, opts: {
3
+ calendar: boolean;
4
+ music: boolean;
5
+ }): void;
@@ -0,0 +1,167 @@
1
+ // MCP Apps — interactive UI views for Calendar and Music.
2
+ import { z } from "zod";
3
+ import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server";
4
+ import { runJxa } from "../shared/jxa.js";
5
+ import { listEventsScript } from "../calendar/scripts.js";
6
+ import { nowPlayingScript } from "../music/scripts.js";
7
+ const CALENDAR_WEEK_HTML = `<!DOCTYPE html>
8
+ <html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
9
+ <style>
10
+ *{box-sizing:border-box;margin:0;padding:0}
11
+ body{font-family:var(--font-sans,system-ui,-apple-system,sans-serif);background:var(--color-background-primary,#fff);color:var(--color-text-primary,#111)}
12
+ .header{padding:16px;font-size:18px;font-weight:600;border-bottom:1px solid var(--color-border-primary,#e5e5e5)}
13
+ .grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--color-border-primary,#e5e5e5)}
14
+ .day{background:var(--color-background-primary,#fff);min-height:120px;padding:8px}
15
+ .day-hdr{font-size:11px;font-weight:600;color:var(--color-text-secondary,#888);text-transform:uppercase;letter-spacing:.5px}
16
+ .day-num{font-size:20px;font-weight:700;margin:2px 0 6px}
17
+ .ev{background:#007aff;color:#fff;border-radius:4px;padding:2px 6px;font-size:11px;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default}
18
+ .today{background:var(--color-background-secondary,#f5f5f5)}
19
+ .today .day-num{color:#007aff}
20
+ .loading{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-secondary,#999)}
21
+ </style></head><body>
22
+ <div class="header" id="hdr">Calendar</div>
23
+ <div id="content"><div class="loading">Loading events\u2026</div></div>
24
+ <script type="module">
25
+ import{App}from"https://esm.sh/@modelcontextprotocol/ext-apps@1.2.2";
26
+ const app=new App({name:"AirMCP Calendar",version:"1.0.0"});
27
+ app.onhostcontextchanged=ctx=>{
28
+ if(ctx.styles?.variables)Object.entries(ctx.styles.variables).forEach(([k,v])=>document.documentElement.style.setProperty(k,v));
29
+ };
30
+ app.ontoolresult=r=>{try{
31
+ const t=r.content?.find(c=>c.type==="text")?.text;
32
+ if(t)render(JSON.parse(t));
33
+ }catch(e){document.getElementById("content").innerHTML='<div class="loading">Error</div>'}};
34
+ function render(d){
35
+ const{weekStart,events}=d,s=new Date(weekStart),days=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
36
+ today=new Date().toISOString().slice(0,10);
37
+ document.getElementById("hdr").textContent="Week of "+s.toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"});
38
+ let h='<div class="grid">';
39
+ for(let i=0;i<7;i++){
40
+ const dd=new Date(s);dd.setDate(dd.getDate()+i);
41
+ const ds=dd.toISOString().slice(0,10),isT=ds===today;
42
+ const de=(events||[]).filter(e=>e.startDate&&e.startDate.startsWith(ds));
43
+ h+='<div class="day'+(isT?" today":"")+'"><div class="day-hdr">'+days[i]+'</div><div class="day-num">'+dd.getDate()+"</div>";
44
+ for(const e of de){const tm=e.allDay?"":e.startDate.slice(11,16)+" ";h+='<div class="ev" title="'+esc(e.summary)+'">'+tm+esc(e.summary)+"</div>"}
45
+ h+="</div>"}
46
+ h+="</div>";document.getElementById("content").innerHTML=h}
47
+ function esc(s){const d=document.createElement("div");d.textContent=s||"";return d.innerHTML}
48
+ await app.connect();
49
+ </script></body></html>`;
50
+ const MUSIC_PLAYER_HTML = `<!DOCTYPE html>
51
+ <html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
52
+ <style>
53
+ *{box-sizing:border-box;margin:0;padding:0}
54
+ body{font-family:var(--font-sans,system-ui,-apple-system,sans-serif);background:var(--color-background-primary,#1a1a1a);color:var(--color-text-primary,#fff);display:flex;align-items:center;justify-content:center;min-height:200px;padding:24px}
55
+ .player{text-align:center;width:100%;max-width:360px}
56
+ .art{width:180px;height:180px;border-radius:16px;background:var(--color-background-secondary,#333);margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:56px}
57
+ .name{font-size:18px;font-weight:700;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
58
+ .artist{font-size:14px;color:var(--color-text-secondary,#aaa);margin-bottom:2px}
59
+ .album{font-size:12px;color:var(--color-text-tertiary,#777);margin-bottom:12px}
60
+ .state{display:inline-block;font-size:11px;color:var(--color-text-secondary,#aaa);text-transform:capitalize;background:rgba(255,255,255,.1);padding:2px 10px;border-radius:10px;margin-bottom:12px}
61
+ .bar-wrap{width:100%;height:4px;background:rgba(255,255,255,.15);border-radius:2px;margin-bottom:6px;overflow:hidden}
62
+ .bar{height:100%;background:#007aff;border-radius:2px;transition:width .3s}
63
+ .time{display:flex;justify-content:space-between;font-size:11px;color:var(--color-text-secondary,#888)}
64
+ .stopped{color:var(--color-text-secondary,#888);font-size:15px}
65
+ </style></head><body>
66
+ <div class="player" id="p"><div class="stopped">No track playing</div></div>
67
+ <script type="module">
68
+ import{App}from"https://esm.sh/@modelcontextprotocol/ext-apps@1.2.2";
69
+ const app=new App({name:"AirMCP Music",version:"1.0.0"});
70
+ app.onhostcontextchanged=ctx=>{
71
+ if(ctx.styles?.variables)Object.entries(ctx.styles.variables).forEach(([k,v])=>document.documentElement.style.setProperty(k,v));
72
+ };
73
+ app.ontoolresult=r=>{try{
74
+ const t=r.content?.find(c=>c.type==="text")?.text;
75
+ if(t)render(JSON.parse(t));
76
+ }catch(e){}};
77
+ function fmt(s){const m=Math.floor(s/60),sec=Math.floor(s%60);return m+":"+String(sec).padStart(2,"0")}
78
+ function render(d){
79
+ const el=document.getElementById("p");
80
+ if(d.playerState==="stopped"||!d.track){el.innerHTML='<div class="stopped">No track playing</div>';return}
81
+ const t=d.track,pct=t.duration>0?(t.playerPosition/t.duration*100):0;
82
+ el.innerHTML=
83
+ '<div class="art">\\u266B</div>'+
84
+ '<div class="name">'+esc(t.name)+'</div>'+
85
+ '<div class="artist">'+esc(t.artist)+'</div>'+
86
+ '<div class="album">'+esc(t.album)+'</div>'+
87
+ '<div class="state">'+d.playerState+'</div>'+
88
+ '<div class="bar-wrap"><div class="bar" style="width:'+pct+'%"></div></div>'+
89
+ '<div class="time"><span>'+fmt(t.playerPosition||0)+'</span><span>'+fmt(t.duration||0)+'</span></div>'}
90
+ function esc(s){const d=document.createElement("div");d.textContent=s||"";return d.innerHTML}
91
+ await app.connect();
92
+ </script></body></html>`;
93
+ function getWeekMonday(dateStr) {
94
+ const d = dateStr ? new Date(dateStr + "T00:00:00") : new Date();
95
+ const day = d.getDay();
96
+ const diff = d.getDate() - day + (day === 0 ? -6 : 1);
97
+ d.setDate(diff);
98
+ // Use local date parts — toISOString() returns UTC which shifts dates in UTC+ timezones
99
+ const yyyy = d.getFullYear();
100
+ const mm = String(d.getMonth() + 1).padStart(2, "0");
101
+ const dd = String(d.getDate()).padStart(2, "0");
102
+ return `${yyyy}-${mm}-${dd}`;
103
+ }
104
+ export function registerApps(server, opts) {
105
+ if (!opts.calendar && !opts.music)
106
+ return;
107
+ if (opts.calendar) {
108
+ // Calendar Week View
109
+ registerAppTool(server, "calendar_week_view", {
110
+ title: "Calendar Week View",
111
+ description: "Display an interactive calendar week view showing events for a 7-day period.",
112
+ inputSchema: {
113
+ startDate: z.string().optional().describe("Start date (YYYY-MM-DD). Defaults to current week's Monday."),
114
+ },
115
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
116
+ _meta: { ui: { resourceUri: "ui://airmcp/calendar-week" } },
117
+ }, async ({ startDate }) => {
118
+ const weekStart = getWeekMonday(startDate);
119
+ const weekEnd = new Date(weekStart);
120
+ weekEnd.setDate(weekEnd.getDate() + 7);
121
+ const endStr = weekEnd.toISOString().slice(0, 10);
122
+ const raw = await runJxa(listEventsScript(weekStart, endStr, 50, 0));
123
+ const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
124
+ return {
125
+ content: [{
126
+ type: "text",
127
+ text: JSON.stringify({ weekStart, events: parsed.events ?? [] }),
128
+ }],
129
+ };
130
+ });
131
+ registerAppResource(server, "Calendar Week View", "ui://airmcp/calendar-week", { description: "Interactive calendar week grid" }, async () => ({
132
+ contents: [{
133
+ uri: "ui://airmcp/calendar-week",
134
+ mimeType: RESOURCE_MIME_TYPE,
135
+ text: CALENDAR_WEEK_HTML,
136
+ _meta: { ui: { csp: { resourceDomains: ["https://esm.sh"] } } },
137
+ }],
138
+ }));
139
+ } // calendar
140
+ if (opts.music) {
141
+ // Music Player
142
+ registerAppTool(server, "music_player", {
143
+ title: "Music Player",
144
+ description: "Display an interactive music player showing the currently playing track.",
145
+ inputSchema: {},
146
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
147
+ _meta: { ui: { resourceUri: "ui://airmcp/music-player" } },
148
+ }, async () => {
149
+ const data = await runJxa(nowPlayingScript());
150
+ return {
151
+ content: [{
152
+ type: "text",
153
+ text: typeof data === "string" ? data : JSON.stringify(data),
154
+ }],
155
+ };
156
+ });
157
+ registerAppResource(server, "Music Player", "ui://airmcp/music-player", { description: "Interactive music player view" }, async () => ({
158
+ contents: [{
159
+ uri: "ui://airmcp/music-player",
160
+ mimeType: RESOURCE_MIME_TYPE,
161
+ text: MUSIC_PLAYER_HTML,
162
+ _meta: { ui: { csp: { resourceDomains: ["https://esm.sh"] } } },
163
+ }],
164
+ }));
165
+ } // music
166
+ }
167
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/apps/tools.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ import { registerCrossTools } from "./cross/tools.js";
23
23
  import { registerSemanticTools } from "./semantic/tools.js";
24
24
  import { registerResources } from "./shared/resources.js";
25
25
  import { registerSetupTools } from "./shared/setup.js";
26
+ import { registerSkillEngine } from "./skills/index.js";
27
+ import { registerApps } from "./apps/tools.js";
26
28
  import { parseConfig, isModuleEnabled, getOsVersion, NPM_PACKAGE_NAME } from "./shared/config.js";
27
29
  import { MODULE_REGISTRY } from "./shared/modules.js";
28
30
  import { registerDynamicShortcutTools } from "./shortcuts/tools.js";
@@ -105,6 +107,13 @@ async function createServer() {
105
107
  registerResources(server, config);
106
108
  // Setup & diagnostics
107
109
  registerSetupTools(server, config);
110
+ // Personal Skills Engine (YAML-based workflows)
111
+ await registerSkillEngine(server);
112
+ // MCP Apps — interactive UI views (Calendar week, Music player)
113
+ registerApps(server, {
114
+ calendar: enabled.includes("calendar"),
115
+ music: enabled.includes("music"),
116
+ });
108
117
  // get_workflow: expose prompt handlers as a tool for autonomous agents (Cowork, etc.)
109
118
  server.registerTool("get_workflow", {
110
119
  title: "Get Workflow",
@@ -170,7 +179,7 @@ async function main() {
170
179
  res.json({
171
180
  name: NPM_PACKAGE_NAME,
172
181
  version: pkg.version,
173
- description: "MCP server for the entire Apple ecosystem — 173 tools, 29 prompts across 18 modules. macOS only.",
182
+ description: "MCP server for the entire Apple ecosystem — 220 tools, 30 prompts across 22 modules. macOS only.",
174
183
  transport: { type: "streamable-http", url: "/mcp" },
175
184
  capabilities: {
176
185
  tools: true,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function listDocumentsScript(): string;
2
+ export declare function createDocumentScript(): string;
3
+ export declare function listSlidesScript(documentName: string): string;
4
+ export declare function getSlideScript(documentName: string, slideNumber: number): string;
5
+ export declare function addSlideScript(documentName: string): string;
6
+ export declare function setPresenterNotesScript(documentName: string, slideNumber: number, notes: string): string;
7
+ export declare function exportPdfScript(documentName: string, outputPath: string): string;
8
+ export declare function startSlideshowScript(documentName: string, fromSlide: number): string;
9
+ export declare function closeDocumentScript(documentName: string, saving: boolean): string;
@@ -0,0 +1,77 @@
1
+ import { esc } from "../shared/esc.js";
2
+ import { iworkDocLookup, iworkListDocumentsScript, iworkCreateDocumentScript, iworkExportPdfScript, iworkCloseDocumentScript, } from "../shared/iwork.js";
3
+ export function listDocumentsScript() {
4
+ return iworkListDocumentsScript("Keynote");
5
+ }
6
+ export function createDocumentScript() {
7
+ return iworkCreateDocumentScript("Keynote");
8
+ }
9
+ export function listSlidesScript(documentName) {
10
+ return `
11
+ const Keynote = Application('Keynote');
12
+ ${iworkDocLookup("Keynote", documentName)}
13
+ const slides = docs[0].slides();
14
+ const result = slides.map((s, i) => ({
15
+ number: i + 1,
16
+ skipped: s.skipped(),
17
+ title: (function() { try { return s.defaultTitleItem().objectText(); } catch(e) { return null; } })(),
18
+ body: (function() { try { return s.defaultBodyItem().objectText(); } catch(e) { return null; } })(),
19
+ presenterNotes: s.presenterNotes()
20
+ }));
21
+ JSON.stringify({total: result.length, slides: result});
22
+ `;
23
+ }
24
+ export function getSlideScript(documentName, slideNumber) {
25
+ const idx = slideNumber - 1;
26
+ return `
27
+ const Keynote = Application('Keynote');
28
+ ${iworkDocLookup("Keynote", documentName)}
29
+ const slide = docs[0].slides[${idx}];
30
+ if (!slide) throw new Error('Slide ${slideNumber} not found');
31
+ const textItems = slide.textItems();
32
+ const texts = textItems.map(t => ({objectText: t.objectText()}));
33
+ JSON.stringify({
34
+ number: ${slideNumber},
35
+ skipped: slide.skipped(),
36
+ presenterNotes: slide.presenterNotes(),
37
+ textItems: texts
38
+ });
39
+ `;
40
+ }
41
+ export function addSlideScript(documentName) {
42
+ return `
43
+ const Keynote = Application('Keynote');
44
+ ${iworkDocLookup("Keynote", documentName)}
45
+ const slide = Keynote.Slide();
46
+ docs[0].slides.push(slide);
47
+ const total = docs[0].slides.length;
48
+ JSON.stringify({added: true, slideNumber: total});
49
+ `;
50
+ }
51
+ export function setPresenterNotesScript(documentName, slideNumber, notes) {
52
+ const idx = slideNumber - 1;
53
+ return `
54
+ const Keynote = Application('Keynote');
55
+ ${iworkDocLookup("Keynote", documentName)}
56
+ const slide = docs[0].slides[${idx}];
57
+ if (!slide) throw new Error('Slide ${slideNumber} not found');
58
+ slide.presenterNotes = '${esc(notes)}';
59
+ JSON.stringify({updated: true, slideNumber: ${slideNumber}});
60
+ `;
61
+ }
62
+ export function exportPdfScript(documentName, outputPath) {
63
+ return iworkExportPdfScript("Keynote", documentName, outputPath);
64
+ }
65
+ export function startSlideshowScript(documentName, fromSlide) {
66
+ const idx = fromSlide - 1;
67
+ return `
68
+ const Keynote = Application('Keynote');
69
+ ${iworkDocLookup("Keynote", documentName)}
70
+ Keynote.start(docs[0], {from: docs[0].slides[${idx}]});
71
+ JSON.stringify({started: true, fromSlide: ${fromSlide}});
72
+ `;
73
+ }
74
+ export function closeDocumentScript(documentName, saving) {
75
+ return iworkCloseDocumentScript("Keynote", documentName, saving);
76
+ }
77
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/keynote/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,mBAAmB;IACjC,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO;;MAEH,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;;;;;;;;;;GAU1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,WAAmB;IACtE,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;IAC5B,OAAO;;MAEH,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;mCACV,GAAG;yCACG,WAAW;;;;gBAIpC,WAAW;;;;;GAKxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,OAAO;;MAEH,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;;;;;GAK1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,WAAmB,EAAE,KAAa;IAC9F,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;IAC5B,OAAO;;MAEH,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;mCACV,GAAG;yCACG,WAAW;8BACtB,GAAG,CAAC,KAAK,CAAC;kDACU,WAAW;GAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,UAAkB;IACtE,OAAO,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,YAAoB,EAAE,SAAiB;IAC1E,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;IAC1B,OAAO;;MAEH,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;mDACM,GAAG;gDACN,SAAS;GACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,MAAe;IACvE,OAAO,wBAAwB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC"}
@@ -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 registerKeynoteTools(server: McpServer, _config: AirMcpConfig): void;
@@ -0,0 +1,144 @@
1
+ import { z } from "zod";
2
+ import { runJxa } from "../shared/jxa.js";
3
+ import { ok, toolError } from "../shared/result.js";
4
+ import { listDocumentsScript, createDocumentScript, listSlidesScript, getSlideScript, addSlideScript, setPresenterNotesScript, exportPdfScript, startSlideshowScript, closeDocumentScript, } from "./scripts.js";
5
+ export function registerKeynoteTools(server, _config) {
6
+ server.registerTool("keynote_list_documents", {
7
+ title: "List Keynote Documents",
8
+ description: "List all open Keynote presentations.",
9
+ inputSchema: {},
10
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
11
+ }, async () => {
12
+ try {
13
+ return ok(await runJxa(listDocumentsScript()));
14
+ }
15
+ catch (e) {
16
+ return toolError("list Keynote documents", e);
17
+ }
18
+ });
19
+ server.registerTool("keynote_create_document", {
20
+ title: "Create Keynote Presentation",
21
+ description: "Create a new blank Keynote presentation.",
22
+ inputSchema: {},
23
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
24
+ }, async () => {
25
+ try {
26
+ return ok(await runJxa(createDocumentScript()));
27
+ }
28
+ catch (e) {
29
+ return toolError("create Keynote presentation", e);
30
+ }
31
+ });
32
+ server.registerTool("keynote_list_slides", {
33
+ title: "List Keynote Slides",
34
+ description: "List all slides in a Keynote presentation with title, body preview, and presenter notes.",
35
+ inputSchema: {
36
+ document: z.string().describe("Document name"),
37
+ },
38
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
39
+ }, async ({ document }) => {
40
+ try {
41
+ return ok(await runJxa(listSlidesScript(document)));
42
+ }
43
+ catch (e) {
44
+ return toolError("list Keynote slides", e);
45
+ }
46
+ });
47
+ server.registerTool("keynote_get_slide", {
48
+ title: "Get Keynote Slide",
49
+ description: "Get detailed content of a specific slide including all text items and presenter notes.",
50
+ inputSchema: {
51
+ document: z.string().describe("Document name"),
52
+ slideNumber: z.number().int().min(1).describe("Slide number (1-based)"),
53
+ },
54
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
55
+ }, async ({ document, slideNumber }) => {
56
+ try {
57
+ return ok(await runJxa(getSlideScript(document, slideNumber)));
58
+ }
59
+ catch (e) {
60
+ return toolError("get Keynote slide", e);
61
+ }
62
+ });
63
+ server.registerTool("keynote_add_slide", {
64
+ title: "Add Keynote Slide",
65
+ description: "Add a new slide to a Keynote presentation.",
66
+ inputSchema: {
67
+ document: z.string().describe("Document name"),
68
+ },
69
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
70
+ }, async ({ document }) => {
71
+ try {
72
+ return ok(await runJxa(addSlideScript(document)));
73
+ }
74
+ catch (e) {
75
+ return toolError("add Keynote slide", e);
76
+ }
77
+ });
78
+ server.registerTool("keynote_set_presenter_notes", {
79
+ title: "Set Keynote Presenter Notes",
80
+ description: "Set presenter notes on a specific slide.",
81
+ inputSchema: {
82
+ document: z.string().describe("Document name"),
83
+ slideNumber: z.number().int().min(1).describe("Slide number (1-based)"),
84
+ notes: z.string().describe("Presenter notes text"),
85
+ },
86
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
87
+ }, async ({ document, slideNumber, notes }) => {
88
+ try {
89
+ return ok(await runJxa(setPresenterNotesScript(document, slideNumber, notes)));
90
+ }
91
+ catch (e) {
92
+ return toolError("set Keynote presenter notes", e);
93
+ }
94
+ });
95
+ server.registerTool("keynote_export_pdf", {
96
+ title: "Export Keynote to PDF",
97
+ description: "Export a Keynote presentation to PDF.",
98
+ inputSchema: {
99
+ document: z.string().describe("Document name"),
100
+ outputPath: z.string().describe("Absolute output path for the PDF file"),
101
+ },
102
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
103
+ }, async ({ document, outputPath }) => {
104
+ try {
105
+ return ok(await runJxa(exportPdfScript(document, outputPath)));
106
+ }
107
+ catch (e) {
108
+ return toolError("export Keynote to PDF", e);
109
+ }
110
+ });
111
+ server.registerTool("keynote_start_slideshow", {
112
+ title: "Start Keynote Slideshow",
113
+ description: "Start playing a Keynote slideshow from a specific slide.",
114
+ inputSchema: {
115
+ document: z.string().describe("Document name"),
116
+ fromSlide: z.number().int().min(1).optional().default(1).describe("Start from slide number (default: 1)"),
117
+ },
118
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
119
+ }, async ({ document, fromSlide }) => {
120
+ try {
121
+ return ok(await runJxa(startSlideshowScript(document, fromSlide)));
122
+ }
123
+ catch (e) {
124
+ return toolError("start Keynote slideshow", e);
125
+ }
126
+ });
127
+ server.registerTool("keynote_close_document", {
128
+ title: "Close Keynote Document",
129
+ description: "Close an open Keynote presentation, optionally saving changes.",
130
+ inputSchema: {
131
+ document: z.string().describe("Document name"),
132
+ saving: z.boolean().optional().default(true).describe("Save before closing (default: true)"),
133
+ },
134
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
135
+ }, async ({ document, saving }) => {
136
+ try {
137
+ return ok(await runJxa(closeDocumentScript(document, saving)));
138
+ }
139
+ catch (e) {
140
+ return toolError("close Keynote document", e);
141
+ }
142
+ });
143
+ }
144
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/keynote/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare function fetchGeocode(query: string, count?: number): Promise<{
2
+ total: any;
3
+ results: any;
4
+ }>;
5
+ export declare function fetchReverseGeocode(latitude: number, longitude: number): Promise<{
6
+ name: any;
7
+ displayName: any;
8
+ latitude: number;
9
+ longitude: number;
10
+ address: {
11
+ road: any;
12
+ city: any;
13
+ state: any;
14
+ country: any;
15
+ postcode: any;
16
+ };
17
+ }>;
@@ -0,0 +1,50 @@
1
+ // Geocoding API clients — Open-Meteo (forward) + Nominatim (reverse).
2
+ const GEOCODE_URL = "https://geocoding-api.open-meteo.com/v1/search";
3
+ const REVERSE_URL = "https://nominatim.openstreetmap.org/reverse";
4
+ export async function fetchGeocode(query, count = 5) {
5
+ const params = new URLSearchParams({ name: query, count: String(count), language: "en", format: "json" });
6
+ const res = await fetch(`${GEOCODE_URL}?${params}`);
7
+ if (!res.ok)
8
+ throw new Error(`Geocoding API error: ${res.status} ${res.statusText}`);
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ const data = await res.json();
11
+ const results = (data.results ?? []).map((r) => ({
12
+ name: r.name,
13
+ latitude: r.latitude,
14
+ longitude: r.longitude,
15
+ country: r.country,
16
+ countryCode: r.country_code,
17
+ admin1: r.admin1 ?? null,
18
+ elevation: r.elevation ?? null,
19
+ timezone: r.timezone ?? null,
20
+ population: r.population ?? null,
21
+ }));
22
+ return { total: results.length, results };
23
+ }
24
+ export async function fetchReverseGeocode(latitude, longitude) {
25
+ const params = new URLSearchParams({ lat: String(latitude), lon: String(longitude), format: "json" });
26
+ const res = await fetch(`${REVERSE_URL}?${params}`, {
27
+ headers: { "User-Agent": "AirMCP/1.9 (MCP Server)" },
28
+ });
29
+ if (!res.ok)
30
+ throw new Error(`Reverse geocoding error: ${res.status} ${res.statusText}`);
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ const data = await res.json();
33
+ if (data.error)
34
+ throw new Error(`Reverse geocoding: ${data.error}`);
35
+ const addr = data.address ?? {};
36
+ return {
37
+ name: data.name ?? null,
38
+ displayName: data.display_name ?? null,
39
+ latitude: parseFloat(data.lat),
40
+ longitude: parseFloat(data.lon),
41
+ address: {
42
+ road: addr.road ?? null,
43
+ city: addr.city ?? addr.town ?? addr.village ?? null,
44
+ state: addr.state ?? null,
45
+ country: addr.country ?? null,
46
+ postcode: addr.postcode ?? null,
47
+ },
48
+ };
49
+ }
50
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/maps/api.ts"],"names":[],"mappings":"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"}