ponlo-ai 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.
package/README.md ADDED
@@ -0,0 +1,418 @@
1
+ # Ponlo.ai MCP Server
2
+
3
+ Model Context Protocol (MCP) server that exposes Ponlo.ai's functionality (tasks, calendar, notes) as tools for Claude Code and other MCP clients.
4
+
5
+ ## 🚀 Quick Start
6
+
7
+ ### 1. Generate an API Key
8
+
9
+ 1. Log into your Ponlo.ai instance
10
+ 2. Go to **Admin → API Keys**
11
+ 3. Click **"Generate API Key"**
12
+ 4. Give it a name (e.g., "Claude Code - MacBook")
13
+ 5. **Copy the key immediately** - it won't be shown again!
14
+
15
+ Your key will look like: `ponlo_godoy_family_abc123_xyz789...`
16
+
17
+ ### 2. Configure Claude Code
18
+
19
+ Add to your `~/.claude/config.json`:
20
+
21
+ ```json
22
+ {
23
+ "mcpServers": {
24
+ "ponlo": {
25
+ "command": "npx",
26
+ "args": ["tsx", "/full/path/to/ponlo-ai/mcp-server/index.ts"],
27
+ "env": {
28
+ "PONLO_API_KEY": "ponlo_godoy_family_abc123_xyz789...",
29
+ "PONLO_API_URL": "http://localhost:3000"
30
+ }
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ **Important:** Replace:
37
+ - `/full/path/to/ponlo-ai` with the actual path to your Ponlo.ai repository
38
+ - `ponlo_godoy_family_abc123_xyz789...` with your actual API key
39
+ - `http://localhost:3000` with your Ponlo.ai URL (use `https://` in production)
40
+
41
+ ### 3. Restart Claude Code
42
+
43
+ Restart Claude Code to load the new MCP server configuration.
44
+
45
+ ### 4. Test It!
46
+
47
+ Try these commands in Claude Code:
48
+ - "List my ponlo tasks"
49
+ - "Add a task: Buy groceries"
50
+ - "What's on my ponlo calendar tomorrow?"
51
+ - "Create a ponlo note: Call dentist"
52
+
53
+ ---
54
+
55
+ ## 📚 Available Tools
56
+
57
+ ### Task Management (7 tools)
58
+
59
+ #### `ponlo_tasks_list`
60
+ List all tasks in your workspace.
61
+
62
+ **Example:**
63
+ ```
64
+ List my tasks
65
+ ```
66
+
67
+ #### `ponlo_tasks_create`
68
+ Create a new task or chore.
69
+
70
+ **Parameters:**
71
+ - `title` (required): Task title
72
+ - `description` (optional): Detailed description
73
+ - `deadline` (optional): ISO 8601 date (e.g., "2024-12-25T10:00:00Z")
74
+ - `resetMode` (optional): "once", "daily", "weekly", "monthly", "manual"
75
+ - `resetDay` (optional): For weekly (0-6), for monthly (1-31)
76
+ - `assignedTo` (optional): Person's name
77
+
78
+ **Example:**
79
+ ```
80
+ Create a task: Take out trash, recurring daily
81
+ ```
82
+
83
+ #### `ponlo_tasks_update`
84
+ Update task details without changing completion status.
85
+
86
+ **Parameters:**
87
+ - `id` (required): Task ID
88
+ - `title`, `description`, `deadline`, `resetMode`, `resetDay`, `assignedTo` (all optional)
89
+
90
+ **Example:**
91
+ ```
92
+ Update task abc123 to be due on Friday
93
+ ```
94
+
95
+ #### `ponlo_tasks_complete`
96
+ Mark a task as completed.
97
+
98
+ **Parameters:**
99
+ - `id` (required): Task ID
100
+
101
+ **Example:**
102
+ ```
103
+ Mark task abc123 as complete
104
+ ```
105
+
106
+ #### `ponlo_tasks_uncomplete`
107
+ Mark a completed task as incomplete.
108
+
109
+ **Parameters:**
110
+ - `id` (required): Task ID
111
+
112
+ #### `ponlo_tasks_delete`
113
+ Permanently delete a task.
114
+
115
+ **Parameters:**
116
+ - `id` (required): Task ID
117
+
118
+ **Example:**
119
+ ```
120
+ Delete task abc123
121
+ ```
122
+
123
+ #### `ponlo_tasks_reorder`
124
+ Change the display order of tasks.
125
+
126
+ **Parameters:**
127
+ - `tasks` (required): Array of `{id, order}` objects
128
+
129
+ ---
130
+
131
+ ### Calendar Management (5 tools)
132
+
133
+ #### `ponlo_calendar_list_events`
134
+ List calendar events in a date range.
135
+
136
+ **Parameters:**
137
+ - `start` (optional): ISO 8601 date (defaults to today)
138
+ - `end` (optional): ISO 8601 date (defaults to 7 days from now)
139
+
140
+ **Example:**
141
+ ```
142
+ What's on my calendar this week?
143
+ ```
144
+
145
+ #### `ponlo_calendar_create_event`
146
+ Create a new calendar event.
147
+
148
+ **Parameters:**
149
+ - `title` (required): Event title
150
+ - `startTime` (required): ISO 8601 date/time
151
+ - `endTime` (optional): ISO 8601 date/time
152
+ - `allDay` (optional): Boolean
153
+ - `location` (optional): Location string
154
+ - `description` (optional): Event description
155
+
156
+ **Example:**
157
+ ```
158
+ Add a calendar event: Team meeting tomorrow at 2pm
159
+ ```
160
+
161
+ #### `ponlo_calendar_update_event`
162
+ Update an existing event.
163
+
164
+ **Parameters:**
165
+ - `id` (required): Event ID
166
+ - `title`, `startTime`, `endTime`, `location`, `description` (all optional)
167
+
168
+ #### `ponlo_calendar_delete_event`
169
+ Delete a calendar event.
170
+
171
+ **Parameters:**
172
+ - `id` (required): Event ID
173
+
174
+ #### `ponlo_calendar_sync`
175
+ Manually sync with Google Calendar.
176
+
177
+ **Example:**
178
+ ```
179
+ Sync my ponlo calendar
180
+ ```
181
+
182
+ ---
183
+
184
+ ### Notes Management (3 tools)
185
+
186
+ #### `ponlo_notes_get`
187
+ Get the current sticky note.
188
+
189
+ **Example:**
190
+ ```
191
+ What's my current ponlo note?
192
+ ```
193
+
194
+ #### `ponlo_notes_create`
195
+ Create a new sticky note.
196
+
197
+ **Parameters:**
198
+ - `content` (required): Note text
199
+ - `color` (optional): "yellow", "pink", "blue", "green"
200
+
201
+ **Example:**
202
+ ```
203
+ Create a ponlo note: Remember to call mom
204
+ ```
205
+
206
+ #### `ponlo_notes_delete`
207
+ Delete a sticky note.
208
+
209
+ **Parameters:**
210
+ - `id` (required): Note ID
211
+
212
+ ---
213
+
214
+ ## 🔧 Development Setup
215
+
216
+ ### Build the MCP Server
217
+
218
+ ```bash
219
+ # Install dependencies (if not already done)
220
+ npm install
221
+
222
+ # Build TypeScript to JavaScript
223
+ npm run mcp:build
224
+ ```
225
+
226
+ ### Run in Development Mode
227
+
228
+ ```bash
229
+ # Run with tsx (no build needed)
230
+ npm run mcp:dev
231
+ ```
232
+
233
+ ### Run in Production
234
+
235
+ ```bash
236
+ # After building
237
+ npm run mcp:start
238
+ ```
239
+
240
+ ---
241
+
242
+ ## 🔐 Security
243
+
244
+ ### API Key Security
245
+
246
+ - API keys are hashed with SHA-256 before storage
247
+ - Keys are shown only once at generation
248
+ - Use HTTPS in production (not HTTP)
249
+ - Each workspace member can generate their own keys
250
+ - Keys can be revoked at any time
251
+
252
+ ### Audit Trails
253
+
254
+ All actions via MCP are tracked:
255
+ - `createdBy` - Who created the resource
256
+ - `updatedBy` - Who last updated it
257
+ - `completedBy` - Who marked a task complete
258
+
259
+ Check the database to see audit trails:
260
+ ```sql
261
+ SELECT title, created_by, completed_by FROM tasks;
262
+ ```
263
+
264
+ ---
265
+
266
+ ## 🐛 Troubleshooting
267
+
268
+ ### "Configuration error: PONLO_API_KEY is required"
269
+
270
+ **Solution:** Make sure you've set the `PONLO_API_KEY` environment variable in your Claude Code config.
271
+
272
+ ### "API request failed: 401 Unauthorized"
273
+
274
+ **Solution:** Your API key is invalid or has been revoked. Generate a new key in Ponlo.ai settings.
275
+
276
+ ### "API request failed: 500"
277
+
278
+ **Solution:** Check that:
279
+ 1. Your Ponlo.ai instance is running
280
+ 2. The `PONLO_API_URL` is correct
281
+ 3. The database is accessible
282
+
283
+ ### "Module not found" errors
284
+
285
+ **Solution:**
286
+ ```bash
287
+ # Make sure all dependencies are installed
288
+ npm install
289
+
290
+ # Make sure you're using the right paths
291
+ # In Claude Code config, use absolute paths
292
+ ```
293
+
294
+ ### MCP server not showing up in Claude Code
295
+
296
+ **Solution:**
297
+ 1. Check your `~/.claude/config.json` syntax is valid JSON
298
+ 2. Restart Claude Code completely
299
+ 3. Check Claude Code logs for errors
300
+ 4. Make sure the file paths are absolute (not relative)
301
+
302
+ ---
303
+
304
+ ## 📊 Usage Examples
305
+
306
+ ### Morning Routine
307
+ ```
308
+ User: What do I need to do today on ponlo?
309
+ Claude: [Lists today's tasks and calendar events]
310
+
311
+ User: Add a task: Water plants, recurring daily
312
+ Claude: [Creates the task with daily reset]
313
+
314
+ User: What's on my calendar for the rest of the week?
315
+ Claude: [Shows upcoming events]
316
+ ```
317
+
318
+ ### Task Management
319
+ ```
320
+ User: Show my ponlo tasks
321
+ Claude: [Lists all tasks with completion status]
322
+
323
+ User: Mark task abc123 as done
324
+ Claude: [Marks complete and tracks who completed it]
325
+
326
+ User: Delete the task about buying milk
327
+ Claude: [Finds and deletes the task]
328
+ ```
329
+
330
+ ### Quick Notes
331
+ ```
332
+ User: Create a ponlo note: Don't forget to submit timesheet
333
+ Claude: [Creates the note]
334
+
335
+ User: What's my current ponlo note?
336
+ Claude: [Shows the note]
337
+ ```
338
+
339
+ ---
340
+
341
+ ## 🚢 Publishing to NPM (Future)
342
+
343
+ To make installation easier, you can publish this as an NPM package:
344
+
345
+ 1. Update `package.json`:
346
+ ```json
347
+ {
348
+ "name": "ponlo-ai",
349
+ "version": "1.0.0",
350
+ "bin": {
351
+ "ponlo-ai": "./dist/mcp-server/index.js"
352
+ },
353
+ "files": [
354
+ "dist/mcp-server"
355
+ ]
356
+ }
357
+ ```
358
+
359
+ 2. Build and publish:
360
+ ```bash
361
+ npm run mcp:build
362
+ npm publish
363
+ ```
364
+
365
+ 3. Users can then install with:
366
+ ```bash
367
+ npm install -g ponlo-ai
368
+ ```
369
+
370
+ 4. And configure Claude Code with:
371
+ ```json
372
+ {
373
+ "mcpServers": {
374
+ "ponlo": {
375
+ "command": "ponlo-ai",
376
+ "env": {
377
+ "PONLO_API_KEY": "...",
378
+ "PONLO_API_URL": "..."
379
+ }
380
+ }
381
+ }
382
+ }
383
+ ```
384
+
385
+ ---
386
+
387
+ ## 🤝 Contributing
388
+
389
+ This MCP server is part of the Ponlo.ai project. To add new tools:
390
+
391
+ 1. Add tool definitions in `mcp-server/tools/*.ts`
392
+ 2. Implement the handler function
393
+ 3. Register the tool in `mcp-server/index.ts`
394
+ 4. Update this README with the new tool documentation
395
+ 5. Add corresponding API endpoints if needed
396
+
397
+ ---
398
+
399
+ ## 📝 License
400
+
401
+ Same as Ponlo.ai main project.
402
+
403
+ ---
404
+
405
+ ## 💡 Tips
406
+
407
+ - **Use natural language** - Claude Code will map your requests to the right tools
408
+ - **Be specific with dates** - Use "tomorrow", "next Friday", etc. and Claude will convert to ISO format
409
+ - **Task IDs** - You don't need to remember them, just describe the task
410
+ - **Audit trails** - Check the database to see who did what and when
411
+
412
+ ---
413
+
414
+ ## 🔗 Links
415
+
416
+ - [Ponlo.ai Main Project](../)
417
+ - [Model Context Protocol Documentation](https://modelcontextprotocol.io)
418
+ - [Claude Code Documentation](https://docs.anthropic.com/claude/docs/claude-code)
@@ -0,0 +1,64 @@
1
+ /**
2
+ * HTTP Client for Ponlo.ai API
3
+ * Handles all API requests with API key authentication
4
+ */
5
+ import type { Task, CalendarEvent, StickyNote } from './types.js';
6
+ export declare class PonloClient {
7
+ private baseUrl;
8
+ private apiKey;
9
+ constructor(baseUrl: string, apiKey: string);
10
+ /**
11
+ * Make an authenticated API request
12
+ */
13
+ private request;
14
+ listTasks(): Promise<Task[]>;
15
+ createTask(data: {
16
+ title: string;
17
+ description?: string;
18
+ deadline?: string;
19
+ resetMode?: 'once' | 'daily' | 'weekly' | 'monthly' | 'manual';
20
+ resetDay?: number;
21
+ assignedTo?: string;
22
+ }): Promise<Task>;
23
+ updateTask(data: {
24
+ id: string;
25
+ title?: string;
26
+ description?: string;
27
+ deadline?: string;
28
+ resetMode?: string;
29
+ resetDay?: number;
30
+ assignedTo?: string;
31
+ completed?: boolean;
32
+ order?: number;
33
+ }): Promise<Task>;
34
+ deleteTask(id: string): Promise<void>;
35
+ reorderTasks(tasks: {
36
+ id: string;
37
+ order: number;
38
+ }[]): Promise<void>;
39
+ listEvents(start?: string, end?: string): Promise<CalendarEvent[]>;
40
+ createEvent(data: {
41
+ title: string;
42
+ startTime: string;
43
+ endTime?: string;
44
+ allDay?: boolean;
45
+ location?: string;
46
+ description?: string;
47
+ }): Promise<CalendarEvent>;
48
+ updateEvent(id: string, data: {
49
+ title?: string;
50
+ startTime?: string;
51
+ endTime?: string;
52
+ location?: string;
53
+ description?: string;
54
+ }): Promise<void>;
55
+ deleteEvent(id: string): Promise<void>;
56
+ syncCalendars(): Promise<void>;
57
+ getCurrentNote(): Promise<StickyNote | null>;
58
+ createNote(data: {
59
+ content: string;
60
+ color?: string;
61
+ }): Promise<StickyNote>;
62
+ deleteNote(id: string): Promise<void>;
63
+ }
64
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAIV,IAAI,EACJ,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK3C;;OAEG;YACW,OAAO;IAmCf,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK5B,UAAU,CAAC,IAAI,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;QAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKX,UAAU,CAAC,IAAI,EAAE;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKX,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,YAAY,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAelE,WAAW,CAAC,IAAI,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,CAAC;IASpB,WAAW,CACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;IAIV,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK5C,UAAU,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAK1E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5C"}
package/dist/client.js ADDED
@@ -0,0 +1,94 @@
1
+ /**
2
+ * HTTP Client for Ponlo.ai API
3
+ * Handles all API requests with API key authentication
4
+ */
5
+ export class PonloClient {
6
+ baseUrl;
7
+ apiKey;
8
+ constructor(baseUrl, apiKey) {
9
+ this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
10
+ this.apiKey = apiKey;
11
+ }
12
+ /**
13
+ * Make an authenticated API request
14
+ */
15
+ async request(method, path, body) {
16
+ const url = `${this.baseUrl}${path}`;
17
+ const headers = {
18
+ 'Authorization': `Bearer ${this.apiKey}`,
19
+ 'Content-Type': 'application/json',
20
+ };
21
+ const options = {
22
+ method,
23
+ headers,
24
+ };
25
+ if (body) {
26
+ options.body = JSON.stringify(body);
27
+ }
28
+ const response = await fetch(url, options);
29
+ if (!response.ok) {
30
+ const errorText = await response.text();
31
+ throw new Error(`API request failed: ${response.status} ${response.statusText}\n${errorText}`);
32
+ }
33
+ return response.json();
34
+ }
35
+ // ===== Task Methods =====
36
+ async listTasks() {
37
+ const response = await this.request('GET', '/api/tasks');
38
+ return response.tasks;
39
+ }
40
+ async createTask(data) {
41
+ const response = await this.request('POST', '/api/tasks', data);
42
+ return response.task;
43
+ }
44
+ async updateTask(data) {
45
+ const response = await this.request('PATCH', '/api/tasks', data);
46
+ return response.task;
47
+ }
48
+ async deleteTask(id) {
49
+ await this.request('DELETE', '/api/tasks', { id });
50
+ }
51
+ async reorderTasks(tasks) {
52
+ await this.request('POST', '/api/tasks/reorder', { tasks });
53
+ }
54
+ // ===== Calendar Methods =====
55
+ async listEvents(start, end) {
56
+ let path = '/api/calendar/events';
57
+ const params = new URLSearchParams();
58
+ if (start)
59
+ params.append('start', start);
60
+ if (end)
61
+ params.append('end', end);
62
+ if (params.toString()) {
63
+ path += `?${params.toString()}`;
64
+ }
65
+ const response = await this.request('GET', path);
66
+ return response.events;
67
+ }
68
+ async createEvent(data) {
69
+ const response = await this.request('POST', '/api/calendar/events', data);
70
+ return response.event;
71
+ }
72
+ async updateEvent(id, data) {
73
+ await this.request('PATCH', `/api/calendar/events/${id}`, data);
74
+ }
75
+ async deleteEvent(id) {
76
+ await this.request('DELETE', `/api/calendar/events/${id}`);
77
+ }
78
+ async syncCalendars() {
79
+ await this.request('POST', '/api/calendar/sync');
80
+ }
81
+ // ===== Notes Methods =====
82
+ async getCurrentNote() {
83
+ const response = await this.request('GET', '/api/notes');
84
+ return response.note;
85
+ }
86
+ async createNote(data) {
87
+ const response = await this.request('POST', '/api/notes', data);
88
+ return response.note;
89
+ }
90
+ async deleteNote(id) {
91
+ await this.request('DELETE', '/api/notes', { id });
92
+ }
93
+ }
94
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MCP Server Configuration
3
+ * Loads configuration from environment variables
4
+ */
5
+ export interface MCPConfig {
6
+ apiUrl: string;
7
+ apiKey: string;
8
+ }
9
+ /**
10
+ * Load configuration from environment variables
11
+ */
12
+ export declare function loadConfig(): MCPConfig;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAgBtC"}
package/dist/config.js ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * MCP Server Configuration
3
+ * Loads configuration from environment variables
4
+ */
5
+ /**
6
+ * Load configuration from environment variables
7
+ */
8
+ export function loadConfig() {
9
+ const apiUrl = process.env.PONLO_API_URL;
10
+ const apiKey = process.env.PONLO_API_KEY;
11
+ if (!apiUrl) {
12
+ throw new Error('PONLO_API_URL environment variable is required');
13
+ }
14
+ if (!apiKey) {
15
+ throw new Error('PONLO_API_KEY environment variable is required');
16
+ }
17
+ return {
18
+ apiUrl: apiUrl.trim(),
19
+ apiKey: apiKey.trim(),
20
+ };
21
+ }
22
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Ponlo.ai MCP Server
4
+ * Exposes Ponlo.ai functionality (tasks, calendar, notes) as MCP tools
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}