@servicialo/mcp-server 0.1.0 → 0.3.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 (59) hide show
  1. package/README.md +72 -18
  2. package/dist/client.d.ts +28 -4
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +95 -9
  5. package/dist/client.js.map +1 -1
  6. package/dist/index.js +80 -43
  7. package/dist/index.js.map +1 -1
  8. package/dist/mode.d.ts +9 -0
  9. package/dist/mode.d.ts.map +1 -0
  10. package/dist/mode.js +18 -0
  11. package/dist/mode.js.map +1 -0
  12. package/dist/tools/{clients.d.ts → authenticated/clients.d.ts} +15 -2
  13. package/dist/tools/authenticated/clients.d.ts.map +1 -0
  14. package/dist/tools/{clients.js → authenticated/clients.js} +15 -9
  15. package/dist/tools/authenticated/clients.js.map +1 -0
  16. package/dist/tools/authenticated/notifications.d.ts +31 -0
  17. package/dist/tools/authenticated/notifications.d.ts.map +1 -0
  18. package/dist/tools/authenticated/notifications.js +22 -0
  19. package/dist/tools/authenticated/notifications.js.map +1 -0
  20. package/dist/tools/{payments.d.ts → authenticated/payments.d.ts} +54 -23
  21. package/dist/tools/authenticated/payments.d.ts.map +1 -0
  22. package/dist/tools/authenticated/payments.js +70 -0
  23. package/dist/tools/authenticated/payments.js.map +1 -0
  24. package/dist/tools/authenticated/payroll.d.ts +106 -0
  25. package/dist/tools/authenticated/payroll.d.ts.map +1 -0
  26. package/dist/tools/authenticated/payroll.js +77 -0
  27. package/dist/tools/authenticated/payroll.js.map +1 -0
  28. package/dist/tools/authenticated/providers.d.ts +52 -0
  29. package/dist/tools/authenticated/providers.d.ts.map +1 -0
  30. package/dist/tools/authenticated/providers.js +37 -0
  31. package/dist/tools/authenticated/providers.js.map +1 -0
  32. package/dist/tools/{scheduling.d.ts → authenticated/scheduling.d.ts} +32 -34
  33. package/dist/tools/authenticated/scheduling.d.ts.map +1 -0
  34. package/dist/tools/{scheduling.js → authenticated/scheduling.js} +20 -19
  35. package/dist/tools/authenticated/scheduling.js.map +1 -0
  36. package/dist/tools/public/availability.d.ts +34 -0
  37. package/dist/tools/public/availability.d.ts.map +1 -0
  38. package/dist/tools/public/availability.js +22 -0
  39. package/dist/tools/public/availability.js.map +1 -0
  40. package/dist/tools/public/registry.d.ts +39 -0
  41. package/dist/tools/public/registry.d.ts.map +1 -0
  42. package/dist/tools/public/registry.js +28 -0
  43. package/dist/tools/public/registry.js.map +1 -0
  44. package/dist/tools/public/services.d.ts +18 -0
  45. package/dist/tools/public/services.d.ts.map +1 -0
  46. package/dist/tools/public/services.js +13 -0
  47. package/dist/tools/public/services.js.map +1 -0
  48. package/package.json +1 -1
  49. package/dist/tools/clients.d.ts.map +0 -1
  50. package/dist/tools/clients.js.map +0 -1
  51. package/dist/tools/notifications.d.ts +0 -34
  52. package/dist/tools/notifications.d.ts.map +0 -1
  53. package/dist/tools/notifications.js +0 -24
  54. package/dist/tools/notifications.js.map +0 -1
  55. package/dist/tools/payments.d.ts.map +0 -1
  56. package/dist/tools/payments.js +0 -59
  57. package/dist/tools/payments.js.map +0 -1
  58. package/dist/tools/scheduling.d.ts.map +0 -1
  59. package/dist/tools/scheduling.js.map +0 -1
package/README.md CHANGED
@@ -1,16 +1,30 @@
1
1
  # @servicialo/mcp-server
2
2
 
3
- MCP server for the [Servicialo](https://servicialo.com) protocol. Connects AI agents to professional services via the [Coordinalo](https://coordinalo.com) REST API.
3
+ MCP server for the [Servicialo](https://servicialo.com) protocol. Connects AI agents to professional services via any Servicialo-compatible platform.
4
4
 
5
- ## Quick Start
5
+ ## Two Modes of Operation
6
+
7
+ ### Discovery Mode (no configuration)
6
8
 
7
9
  ```bash
8
10
  npx -y @servicialo/mcp-server
9
11
  ```
10
12
 
11
- ### Claude Desktop Configuration
13
+ No credentials needed. The server exposes 4 public tools for discovering organizations, services, and availability across any Servicialo-compatible platform.
14
+
15
+ Useful for: agents that help users find and evaluate professional services.
16
+
17
+ ### Authenticated Mode
18
+
19
+ ```bash
20
+ SERVICIALO_API_KEY=your_key SERVICIALO_ORG_ID=your_org npx -y @servicialo/mcp-server
21
+ ```
12
22
 
13
- Add to your `claude_desktop_config.json`:
23
+ Requires `SERVICIALO_API_KEY` and `SERVICIALO_ORG_ID` obtained from the Servicialo-compatible platform your organization uses (e.g., [Coordinalo](https://coordinalo.com)).
24
+
25
+ Enables: scheduling, client management, payments, providers, payroll, and notifications — all 23 tools.
26
+
27
+ ### Claude Desktop Configuration
14
28
 
15
29
  ```json
16
30
  {
@@ -27,46 +41,86 @@ Add to your `claude_desktop_config.json`:
27
41
  }
28
42
  ```
29
43
 
44
+ Omit the `env` block entirely for discovery-only mode.
45
+
30
46
  ## Environment Variables
31
47
 
32
48
  | Variable | Required | Description |
33
49
  |---|---|---|
34
- | `SERVICIALO_API_KEY` | Yes | Bearer token for the Coordinalo API |
35
- | `SERVICIALO_ORG_ID` | Yes | Organization slug (e.g., `mamapro`) |
50
+ | `SERVICIALO_API_KEY` | No | Bearer token enables authenticated mode |
51
+ | `SERVICIALO_ORG_ID` | No | Organization slug enables authenticated mode |
36
52
  | `SERVICIALO_BASE_URL` | No | API base URL (default: `https://coordinalo.com`) |
37
53
 
38
- ## Available Tools (11)
54
+ ## Public Tools (4) — Always Available
55
+
56
+ | Tool | Description |
57
+ |---|---|
58
+ | `registry.search` | Search Servicialo-compatible organizations by vertical and location |
59
+ | `registry.get_organization` | Get public details of an organization (services, providers, booking) |
60
+ | `scheduling.check_availability` | Check available slots without authentication |
61
+ | `services.list` | List the public service catalog of an organization |
62
+
63
+ ## Authenticated Tools (19) — Require Credentials
39
64
 
40
65
  ### Scheduling (4)
41
66
 
42
67
  | Tool | Description |
43
68
  |---|---|
44
- | `scheduling.check_availability` | Check available slots for a provider/service in a date range |
45
- | `scheduling.book` | Book a new session |
46
- | `scheduling.reschedule` | Reschedule an existing session |
69
+ | `scheduling.list_sessions` | List sessions filtered by date, provider, client, or status |
70
+ | `scheduling.book` | Book a new session for a client with a provider |
71
+ | `scheduling.reschedule` | Reschedule an existing session to a new datetime |
47
72
  | `scheduling.cancel` | Cancel a session |
48
73
 
49
- ### Clients (3)
74
+ ### Clients (4)
50
75
 
51
76
  | Tool | Description |
52
77
  |---|---|
53
78
  | `clients.list` | List clients with search and pagination |
54
- | `clients.get` | Get client details with stats |
79
+ | `clients.get` | Get client details including history and pending payments |
55
80
  | `clients.create` | Create a new client |
81
+ | `clients.history` | Get client activity history: past sessions, payments |
56
82
 
57
- ### Payments (3)
83
+ ### Payments (4)
58
84
 
59
85
  | Tool | Description |
60
86
  |---|---|
61
- | `payments.get_balance` | Get client balance (available sessions, pending amount) |
62
- | `payments.charge` | Create a sale/charge for a service |
63
- | `payments.record` | Record a payment received against a sale |
87
+ | `payments.list_sales` | List sales filtered by client, provider, service, or status |
88
+ | `payments.create_sale` | Create a sale/charge for a client |
89
+ | `payments.record_payment` | Record a payment received against a sale |
90
+ | `payments.client_balance` | Get client account balance and session availability |
64
91
 
65
- ### Notifications (1)
92
+ ### Providers (3)
66
93
 
67
94
  | Tool | Description |
68
95
  |---|---|
69
- | `notifications.send` | Send a notification to a client (reminder, confirmation, etc.) |
96
+ | `providers.list` | List organization providers/professionals |
97
+ | `providers.get` | Get provider details including services and commissions |
98
+ | `providers.get_commission` | Get provider commission configuration |
99
+
100
+ ### Payroll (5)
101
+
102
+ | Tool | Description |
103
+ |---|---|
104
+ | `payroll.calculate` | Calculate salary settlement for a provider in a period |
105
+ | `payroll.history` | Query payroll settlement history |
106
+ | `payroll.settlement_detail` | Get monthly settlement breakdown (earnings and deductions) |
107
+ | `payroll.vacations` | Query vacation requests |
108
+ | `payroll.request_vacation` | Create a vacation request for a provider |
109
+
110
+ ### Notifications (2)
111
+
112
+ | Tool | Description |
113
+ |---|---|
114
+ | `notifications.send_session_reminder` | Send a reminder notification for a session |
115
+ | `notifications.send_payment_reminder` | Send a payment reminder for a pending sale |
116
+
117
+ ## API Modules
118
+
119
+ The server connects to three platform modules:
120
+
121
+ - **Coordinalo** — Scheduling and session management
122
+ - **Relacionalo** — Client CRM and relationship management
123
+ - **Planificalo** — Finance, payments, payroll, and provider management
70
124
 
71
125
  ## Development
72
126
 
package/dist/client.d.ts CHANGED
@@ -1,20 +1,44 @@
1
1
  /**
2
2
  * HTTP client for Coordinalo REST API.
3
- * Wraps native fetch with auth headers and base URL.
3
+ *
4
+ * Supports two modes:
5
+ * - Public: calls to /api/v1/public/* without Authorization header
6
+ * - Authenticated: calls to /api/organizations/{orgSlug}/* with Bearer token
4
7
  */
5
8
  export interface ClientConfig {
6
9
  baseUrl: string;
7
- apiKey: string;
8
- orgId: string;
10
+ apiKey?: string;
11
+ orgId?: string;
9
12
  }
10
13
  export declare class CoordinaloClient {
11
14
  private baseUrl;
12
15
  private apiKey;
13
16
  private orgId;
14
17
  constructor(config: ClientConfig);
15
- private headers;
18
+ /** Whether the client has credentials for authenticated operations */
19
+ get isAuthenticated(): boolean;
20
+ /** Base path for all org-scoped endpoints */
21
+ private orgPath;
22
+ private authHeaders;
23
+ private publicHeaders;
24
+ /**
25
+ * Build full URL for authenticated (org-scoped) requests.
26
+ * If path starts with `/api/` it's used as-is (absolute).
27
+ * Otherwise it's appended to the org-scoped base path.
28
+ */
29
+ private buildUrl;
30
+ /**
31
+ * Build full URL for public requests.
32
+ * Path must be absolute (e.g., /api/v1/public/registry).
33
+ */
34
+ private buildPublicUrl;
35
+ readonly pub: {
36
+ get: (path: string, params?: Record<string, string | number | undefined>) => Promise<unknown>;
37
+ };
16
38
  get(path: string, params?: Record<string, string | number | undefined>): Promise<unknown>;
17
39
  post(path: string, body?: unknown): Promise<unknown>;
18
40
  put(path: string, body?: unknown): Promise<unknown>;
41
+ patch(path: string, body?: unknown): Promise<unknown>;
42
+ delete(path: string): Promise<unknown>;
19
43
  }
20
44
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,YAAY;IAMhC,OAAO,CAAC,OAAO;IAQT,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAc1D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,MAAM,EAAE,YAAY;IAMhC,sEAAsE;IACtE,IAAI,eAAe,IAAI,OAAO,CAE7B;IAID,6CAA6C;IAC7C,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB,QAAQ,CAAC,GAAG;oBACQ,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAG,OAAO,CAAC,OAAO,CAAC;MAsBjG;IAII,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAenD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAerD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAa7C"}
package/dist/client.js CHANGED
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * HTTP client for Coordinalo REST API.
3
- * Wraps native fetch with auth headers and base URL.
3
+ *
4
+ * Supports two modes:
5
+ * - Public: calls to /api/v1/public/* without Authorization header
6
+ * - Authenticated: calls to /api/organizations/{orgSlug}/* with Bearer token
4
7
  */
5
8
  export class CoordinaloClient {
6
9
  baseUrl;
@@ -11,15 +14,75 @@ export class CoordinaloClient {
11
14
  this.apiKey = config.apiKey;
12
15
  this.orgId = config.orgId;
13
16
  }
14
- headers() {
17
+ /** Whether the client has credentials for authenticated operations */
18
+ get isAuthenticated() {
19
+ return !!this.apiKey && !!this.orgId;
20
+ }
21
+ // --- Private helpers ---
22
+ /** Base path for all org-scoped endpoints */
23
+ orgPath() {
24
+ if (!this.orgId) {
25
+ throw new Error('No SERVICIALO_ORG_ID configured — cannot call org-scoped endpoints.');
26
+ }
27
+ return `/api/organizations/${this.orgId}`;
28
+ }
29
+ authHeaders() {
30
+ if (!this.apiKey) {
31
+ throw new Error('No SERVICIALO_API_KEY configured — cannot call authenticated endpoints.');
32
+ }
15
33
  return {
16
34
  'Authorization': `Bearer ${this.apiKey}`,
17
35
  'Content-Type': 'application/json',
18
- 'X-Org-Id': this.orgId,
19
36
  };
20
37
  }
38
+ publicHeaders() {
39
+ return {
40
+ 'Content-Type': 'application/json',
41
+ };
42
+ }
43
+ /**
44
+ * Build full URL for authenticated (org-scoped) requests.
45
+ * If path starts with `/api/` it's used as-is (absolute).
46
+ * Otherwise it's appended to the org-scoped base path.
47
+ */
48
+ buildUrl(path) {
49
+ if (path.startsWith('/api/')) {
50
+ return `${this.baseUrl}${path}`;
51
+ }
52
+ return `${this.baseUrl}${this.orgPath()}${path}`;
53
+ }
54
+ /**
55
+ * Build full URL for public requests.
56
+ * Path must be absolute (e.g., /api/v1/public/registry).
57
+ */
58
+ buildPublicUrl(path) {
59
+ return `${this.baseUrl}${path}`;
60
+ }
61
+ // --- Public API (no auth required) ---
62
+ pub = {
63
+ get: async (path, params) => {
64
+ const url = new URL(this.buildPublicUrl(path));
65
+ if (params) {
66
+ for (const [key, value] of Object.entries(params)) {
67
+ if (value !== undefined) {
68
+ url.searchParams.set(key, String(value));
69
+ }
70
+ }
71
+ }
72
+ const res = await fetch(url.toString(), {
73
+ method: 'GET',
74
+ headers: this.publicHeaders(),
75
+ });
76
+ if (!res.ok) {
77
+ const body = await res.text();
78
+ throw new Error(`GET ${path} failed (${res.status}): ${body}`);
79
+ }
80
+ return res.json();
81
+ },
82
+ };
83
+ // --- Authenticated API ---
21
84
  async get(path, params) {
22
- const url = new URL(`${this.baseUrl}${path}`);
85
+ const url = new URL(this.buildUrl(path));
23
86
  if (params) {
24
87
  for (const [key, value] of Object.entries(params)) {
25
88
  if (value !== undefined) {
@@ -29,7 +92,7 @@ export class CoordinaloClient {
29
92
  }
30
93
  const res = await fetch(url.toString(), {
31
94
  method: 'GET',
32
- headers: this.headers(),
95
+ headers: this.authHeaders(),
33
96
  });
34
97
  if (!res.ok) {
35
98
  const body = await res.text();
@@ -38,9 +101,9 @@ export class CoordinaloClient {
38
101
  return res.json();
39
102
  }
40
103
  async post(path, body) {
41
- const res = await fetch(`${this.baseUrl}${path}`, {
104
+ const res = await fetch(this.buildUrl(path), {
42
105
  method: 'POST',
43
- headers: this.headers(),
106
+ headers: this.authHeaders(),
44
107
  body: body !== undefined ? JSON.stringify(body) : undefined,
45
108
  });
46
109
  if (!res.ok) {
@@ -50,9 +113,9 @@ export class CoordinaloClient {
50
113
  return res.json();
51
114
  }
52
115
  async put(path, body) {
53
- const res = await fetch(`${this.baseUrl}${path}`, {
116
+ const res = await fetch(this.buildUrl(path), {
54
117
  method: 'PUT',
55
- headers: this.headers(),
118
+ headers: this.authHeaders(),
56
119
  body: body !== undefined ? JSON.stringify(body) : undefined,
57
120
  });
58
121
  if (!res.ok) {
@@ -61,5 +124,28 @@ export class CoordinaloClient {
61
124
  }
62
125
  return res.json();
63
126
  }
127
+ async patch(path, body) {
128
+ const res = await fetch(this.buildUrl(path), {
129
+ method: 'PATCH',
130
+ headers: this.authHeaders(),
131
+ body: body !== undefined ? JSON.stringify(body) : undefined,
132
+ });
133
+ if (!res.ok) {
134
+ const text = await res.text();
135
+ throw new Error(`PATCH ${path} failed (${res.status}): ${text}`);
136
+ }
137
+ return res.json();
138
+ }
139
+ async delete(path) {
140
+ const res = await fetch(this.buildUrl(path), {
141
+ method: 'DELETE',
142
+ headers: this.authHeaders(),
143
+ });
144
+ if (!res.ok) {
145
+ const text = await res.text();
146
+ throw new Error(`DELETE ${path} failed (${res.status}): ${text}`);
147
+ }
148
+ return res.json();
149
+ }
64
150
  }
65
151
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,65 +2,102 @@
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { CoordinaloClient } from './client.js';
5
- import { schedulingTools } from './tools/scheduling.js';
6
- import { clientsTools } from './tools/clients.js';
7
- import { paymentsTools } from './tools/payments.js';
8
- import { notificationsTools } from './tools/notifications.js';
9
- // --- Validate env vars ---
10
- const API_KEY = process.env.SERVICIALO_API_KEY;
11
- const ORG_ID = process.env.SERVICIALO_ORG_ID;
5
+ import { detectMode } from './mode.js';
6
+ // --- Public tools ---
7
+ import { registryTools } from './tools/public/registry.js';
8
+ import { publicAvailabilityTools } from './tools/public/availability.js';
9
+ import { publicServicesTools } from './tools/public/services.js';
10
+ // --- Authenticated tools ---
11
+ import { schedulingTools } from './tools/authenticated/scheduling.js';
12
+ import { clientsTools } from './tools/authenticated/clients.js';
13
+ import { paymentsTools } from './tools/authenticated/payments.js';
14
+ import { notificationsTools } from './tools/authenticated/notifications.js';
15
+ import { providersTools } from './tools/authenticated/providers.js';
16
+ import { payrollTools } from './tools/authenticated/payroll.js';
17
+ // --- Detect mode ---
18
+ const mode = detectMode();
12
19
  const BASE_URL = process.env.SERVICIALO_BASE_URL || 'https://coordinalo.com';
13
- if (!API_KEY) {
14
- console.error('Error: SERVICIALO_API_KEY is required. Set it as an environment variable.');
15
- process.exit(1);
20
+ if (mode === 'authenticated') {
21
+ console.error(`Servicialo MCP modo autenticado [org: ${process.env.SERVICIALO_ORG_ID}]`);
16
22
  }
17
- if (!ORG_ID) {
18
- console.error('Error: SERVICIALO_ORG_ID is required. Set it as an environment variable.');
19
- process.exit(1);
23
+ else {
24
+ console.error('Servicialo MCP modo discovery (sin credenciales)');
20
25
  }
21
26
  // --- Init client ---
22
27
  const apiClient = new CoordinaloClient({
23
28
  baseUrl: BASE_URL,
24
- apiKey: API_KEY,
25
- orgId: ORG_ID,
29
+ apiKey: process.env.SERVICIALO_API_KEY,
30
+ orgId: process.env.SERVICIALO_ORG_ID,
26
31
  });
27
32
  // --- Init MCP server ---
28
33
  const server = new McpServer({
29
34
  name: 'servicialo',
30
- version: '0.1.0',
35
+ version: '0.3.0',
31
36
  });
32
- const allTools = {
37
+ // --- Public tools (always registered) ---
38
+ const publicTools = {
39
+ ...registryTools,
40
+ ...publicAvailabilityTools,
41
+ ...publicServicesTools,
42
+ };
43
+ // --- Authenticated tools (only in authenticated mode) ---
44
+ const authenticatedTools = {
33
45
  ...schedulingTools,
34
46
  ...clientsTools,
35
47
  ...paymentsTools,
36
48
  ...notificationsTools,
49
+ ...providersTools,
50
+ ...payrollTools,
37
51
  };
38
- for (const [name, tool] of Object.entries(allTools)) {
39
- server.tool(name, tool.description, tool.schema.shape, async (args) => {
40
- try {
41
- const result = await tool.handler(apiClient, args);
42
- return {
43
- content: [
44
- {
45
- type: 'text',
46
- text: JSON.stringify(result, null, 2),
47
- },
48
- ],
49
- };
50
- }
51
- catch (error) {
52
- const message = error instanceof Error ? error.message : String(error);
53
- return {
54
- content: [
55
- {
56
- type: 'text',
57
- text: `Error: ${message}`,
58
- },
59
- ],
60
- isError: true,
61
- };
62
- }
63
- });
52
+ // --- Register tools ---
53
+ function registerTools(tools) {
54
+ for (const [name, tool] of Object.entries(tools)) {
55
+ server.tool(name, tool.description, tool.schema.shape, async (args) => {
56
+ try {
57
+ const result = await tool.handler(apiClient, args);
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: JSON.stringify(result, null, 2),
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : String(error);
69
+ return {
70
+ content: [
71
+ {
72
+ type: 'text',
73
+ text: `Error: ${message}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ });
80
+ }
81
+ }
82
+ // Always register public tools
83
+ registerTools(publicTools);
84
+ if (mode === 'authenticated') {
85
+ // Register authenticated tools
86
+ registerTools(authenticatedTools);
87
+ }
88
+ else {
89
+ // Register stubs for authenticated tools that return a descriptive error
90
+ for (const [name, tool] of Object.entries(authenticatedTools)) {
91
+ server.tool(name, tool.description, tool.schema.shape, async () => ({
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: 'Esta operación requiere autenticación. Configura SERVICIALO_API_KEY y SERVICIALO_ORG_ID para operar en nombre de una organización.',
96
+ },
97
+ ],
98
+ isError: true,
99
+ }));
100
+ }
64
101
  }
65
102
  // --- Connect via stdio ---
66
103
  async function main() {
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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"}
package/dist/mode.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Detects the operating mode based on environment variables.
3
+ *
4
+ * - discovery: no credentials, only public tools available
5
+ * - authenticated: full credentials, all tools available
6
+ */
7
+ export type Mode = 'discovery' | 'authenticated';
8
+ export declare function detectMode(): Mode;
9
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,eAAe,CAAC;AAEjD,wBAAgB,UAAU,IAAI,IAAI,CAajC"}
package/dist/mode.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Detects the operating mode based on environment variables.
3
+ *
4
+ * - discovery: no credentials, only public tools available
5
+ * - authenticated: full credentials, all tools available
6
+ */
7
+ export function detectMode() {
8
+ const hasKey = !!process.env.SERVICIALO_API_KEY;
9
+ const hasOrg = !!process.env.SERVICIALO_ORG_ID;
10
+ if (hasKey && hasOrg)
11
+ return 'authenticated';
12
+ if (!hasKey && !hasOrg)
13
+ return 'discovery';
14
+ // Only one of the two is set — warn and fall back to discovery
15
+ console.error('WARN: Se requieren ambas variables (SERVICIALO_API_KEY y SERVICIALO_ORG_ID) para modo autenticado. Operando en modo discovery.');
16
+ return 'discovery';
17
+ }
18
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE/C,IAAI,MAAM,IAAI,MAAM;QAAE,OAAO,eAAe,CAAC;IAE7C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC;IAE3C,+DAA+D;IAC/D,OAAO,CAAC,KAAK,CACX,gIAAgI,CACjI,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import type { CoordinaloClient } from '../client.js';
2
+ import type { CoordinaloClient } from '../../client.js';
3
3
  declare const ActorSchema: z.ZodObject<{
4
4
  type: z.ZodEnum<["client", "provider", "organization", "agent"]>;
5
5
  id: z.ZodString;
@@ -40,9 +40,9 @@ export declare const clientsTools: {
40
40
  page: number;
41
41
  search?: string | undefined;
42
42
  }, {
43
- search?: string | undefined;
44
43
  limit?: number | undefined;
45
44
  page?: number | undefined;
45
+ search?: string | undefined;
46
46
  }>;
47
47
  handler: (client: CoordinaloClient, args: {
48
48
  search?: string;
@@ -133,6 +133,19 @@ export declare const clientsTools: {
133
133
  actor: z.infer<typeof ActorSchema>;
134
134
  }) => Promise<unknown>;
135
135
  };
136
+ 'clients.history': {
137
+ description: string;
138
+ schema: z.ZodObject<{
139
+ client_id: z.ZodString;
140
+ }, "strip", z.ZodTypeAny, {
141
+ client_id: string;
142
+ }, {
143
+ client_id: string;
144
+ }>;
145
+ handler: (client: CoordinaloClient, args: {
146
+ client_id: string;
147
+ }) => Promise<unknown>;
148
+ };
136
149
  };
137
150
  export {};
138
151
  //# sourceMappingURL=clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../../src/tools/authenticated/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOf,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;0BAQG,gBAAgB,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;0BAc1E,gBAAgB,QAAQ;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAc7C,gBAAgB,QAAQ;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;SAAE;;;;;;;;;;;0BAgB/H,gBAAgB,QAAQ;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE;;CAIxE,CAAC"}