sipgate-mcp 0.5.2 → 0.6.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.
@@ -1,4 +1,11 @@
1
+ import { requestJournal } from "../request-journal.js";
1
2
  const DEFAULT_BASE_URL = "https://api.sipgate.com/v2";
3
+ const DEFAULT_TIMEOUT_MS = 30_000;
4
+ const DEFAULT_RETRY_DELAY_MS = 1_000;
5
+ /** A longer server-requested wait is reported instead of blocking the tool call. */
6
+ const MAX_RETRY_DELAY_MS = 5_000;
7
+ /** Enough for any recognised denial sentence; the rest of an error body is never read. */
8
+ const MAX_ERROR_BODY_BYTES = 4_096;
2
9
  export class SipgateApiError extends Error {
3
10
  status;
4
11
  constructor(message, status) {
@@ -9,64 +16,171 @@ export class SipgateApiError extends Error {
9
16
  }
10
17
  /**
11
18
  * sipgate explains some denials in a short plain-text body, for example
12
- * "This endpoint requires a sipgate Classic PBX Account". That sentence is far
13
- * more useful than any guess, so it is passed through when it is plainly a
14
- * static message and cannot be echoed request data.
19
+ * "This endpoint requires a sipgate Classic PBX Account". Only sentences known
20
+ * to be sipgate's own static text are shown, and they are shown from this list
21
+ * rather than from the response: any other body is dropped, because text from
22
+ * the network must not reach an agent's context as if it were guidance.
15
23
  */
16
- const SAFE_API_MESSAGE = /^[A-Za-z0-9 ,.'()\-]{1,200}$/;
17
- function apiMessage(body) {
18
- const trimmed = body.trim();
19
- return SAFE_API_MESSAGE.test(trimmed) ? ` sipgate says: ${trimmed}` : "";
24
+ const KNOWN_DENIALS = [
25
+ "This endpoint requires a sipgate Classic PBX Account",
26
+ ];
27
+ function knownDenial(body) {
28
+ const sentence = body.trim().replace(/\.$/, "");
29
+ const known = KNOWN_DENIALS.find((denial) => denial === sentence);
30
+ return known ? ` sipgate says: "${known}"` : "";
20
31
  }
21
- function errorForStatus(status, retryAfter, path, body) {
32
+ /** Parses Retry-After (delta seconds or an HTTP date) without ever echoing it. */
33
+ function retryAfterSeconds(header, now) {
34
+ const value = header?.trim();
35
+ if (!value)
36
+ return undefined;
37
+ if (/^\d+$/.test(value))
38
+ return Number(value);
39
+ const date = Date.parse(value);
40
+ return Number.isNaN(date) ? undefined : Math.max(0, Math.ceil((date - now) / 1000));
41
+ }
42
+ const WRITE_OUTCOME_UNKNOWN = " The change or chargeable action may still have been applied, so check the current state before retrying.";
43
+ function errorForStatus(status, method, retryAfter, path, detail) {
22
44
  switch (status) {
23
45
  case 401:
24
46
  return new SipgateApiError("sipgate authentication failed (HTTP 401). Check SIPGATE_TOKEN_ID and SIPGATE_TOKEN.", status);
25
47
  case 403:
26
- return new SipgateApiError(`sipgate denied ${path} (HTTP 403).${apiMessage(body)} The Personal Access Token may be missing a required PAT scope for it, or the account may not include this feature. Other endpoints can still work, so check the token's scopes for this one specifically.`, status);
48
+ return new SipgateApiError(`sipgate denied ${path} (HTTP 403).${detail} The Personal Access Token may be missing a required PAT scope for it, or the account may not include this feature. Other endpoints can still work, so check the token's scopes for this one specifically.`, status);
27
49
  case 404:
28
50
  return new SipgateApiError("The requested sipgate resource was not found (HTTP 404). Check the supplied user, device, phoneline, number, or extension ID.", status);
29
51
  case 429: {
30
- const suffix = retryAfter ? ` Retry after ${retryAfter} seconds.` : " Retry later.";
52
+ const suffix = retryAfter === undefined ? " Retry later." : ` Retry after ${retryAfter} seconds.`;
31
53
  return new SipgateApiError(`sipgate rate limit exceeded (HTTP 429).${suffix}`, status);
32
54
  }
33
- default:
34
- return new SipgateApiError(`sipgate rejected the request (HTTP ${status}).`, status);
55
+ default: {
56
+ // A server error on a write says nothing about whether sipgate acted on it.
57
+ const outcome = status >= 500 && method !== "GET" ? WRITE_OUTCOME_UNKNOWN : "";
58
+ const reason = status === 502 || status === 503 || status === 504
59
+ ? `sipgate is temporarily unavailable (HTTP ${status}).`
60
+ : `sipgate rejected the request (HTTP ${status}).`;
61
+ return new SipgateApiError(`${reason}${outcome || (status >= 500 ? " Try again later." : "")}`, status);
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Only a read can be repeated safely: a write that sipgate throttled may still
67
+ * be retried by the caller, but never behind its back.
68
+ */
69
+ function retryDelay(method, status, retryAfter) {
70
+ if (method !== "GET" || (status !== 429 && status !== 503))
71
+ return undefined;
72
+ if (retryAfter === undefined)
73
+ return DEFAULT_RETRY_DELAY_MS;
74
+ const delay = retryAfter * 1000;
75
+ return delay > MAX_RETRY_DELAY_MS ? undefined : delay;
76
+ }
77
+ /** Only plain identifiers of a confirmation body are kept, never its content. */
78
+ const IDENTIFIER_KEYS = ["sessionId", "callId", "faxId", "id"];
79
+ const PLAIN_IDENTIFIER = /^[\w.:-]{1,128}$/;
80
+ function confirmationIdentifiers(text, containsSecret) {
81
+ let body;
82
+ try {
83
+ body = JSON.parse(text);
84
+ }
85
+ catch {
86
+ return undefined;
87
+ }
88
+ if (!body || typeof body !== "object" || Array.isArray(body))
89
+ return undefined;
90
+ const found = Object.fromEntries(IDENTIFIER_KEYS.flatMap((key) => {
91
+ const value = body[key];
92
+ // Checked after decoding: a JSON escape must not smuggle a credential past it.
93
+ if (typeof value === "number")
94
+ return containsSecret(String(value)) ? [] : [[key, value]];
95
+ return typeof value === "string" && PLAIN_IDENTIFIER.test(value) && !containsSecret(value)
96
+ ? [[key, value]]
97
+ : [];
98
+ }));
99
+ return Object.keys(found).length > 0 ? found : undefined;
100
+ }
101
+ async function readBounded(response, maxBytes) {
102
+ if (!response.body)
103
+ return "";
104
+ const reader = response.body.getReader();
105
+ const chunks = [];
106
+ let size = 0;
107
+ try {
108
+ while (size < maxBytes) {
109
+ const { done, value } = await reader.read();
110
+ if (done)
111
+ break;
112
+ chunks.push(value);
113
+ size += value.byteLength;
114
+ }
115
+ }
116
+ finally {
117
+ reader.cancel().catch(() => { });
35
118
  }
119
+ return Buffer.concat(chunks).subarray(0, maxBytes).toString("utf8");
36
120
  }
37
121
  export class SipgateClient {
38
122
  #baseUrl;
39
123
  #authorization;
124
+ #secrets;
40
125
  #fetch;
126
+ #timeoutMs;
127
+ #sleep;
41
128
  constructor(options) {
42
129
  if (!options.tokenId || !options.token) {
43
130
  throw new SipgateApiError("Both SIPGATE_TOKEN_ID and SIPGATE_TOKEN must be set in the server environment.");
44
131
  }
132
+ const credential = Buffer.from(`${options.tokenId}:${options.token}`, "utf8").toString("base64");
45
133
  this.#baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
46
- this.#authorization = `Basic ${Buffer.from(`${options.tokenId}:${options.token}`, "utf8").toString("base64")}`;
134
+ this.#authorization = `Basic ${credential}`;
135
+ // Longest first, so a secret that contains another is replaced whole.
136
+ this.#secrets = [credential, options.token, options.tokenId]
137
+ .sort((left, right) => right.length - left.length);
47
138
  this.#fetch = options.fetch ?? globalThis.fetch;
139
+ this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
140
+ this.#sleep = options.sleep
141
+ ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
48
142
  }
49
143
  async request(path, options = {}) {
50
- const response = await this.fetch(path, options);
51
- if (response.status === 204)
52
- return undefined;
53
- const text = await response.text();
144
+ const { status, text } = await this.send(path, options);
54
145
  if (!text)
55
146
  return undefined;
56
147
  try {
57
148
  return JSON.parse(text);
58
149
  }
59
150
  catch {
60
- throw new SipgateApiError("sipgate returned an unexpected non-JSON response.", response.status);
151
+ // sipgate accepted the write; an unreadable confirmation body must not
152
+ // read as a failure that invites a second SMS or call.
153
+ if ((options.method ?? "GET") !== "GET")
154
+ return undefined;
155
+ throw new SipgateApiError("sipgate returned an unexpected non-JSON response.", status);
61
156
  }
62
157
  }
63
158
  async requestText(path, options = {}) {
64
- const response = await this.fetch(path, options);
65
- if (response.status === 204)
66
- return "";
67
- return response.text();
159
+ return (await this.send(path, options)).text;
160
+ }
161
+ #redact(text) {
162
+ return this.#secrets.reduce((redacted, secret) => redacted.split(secret).join("[REDACTED]"), text);
163
+ }
164
+ #record(method, url, ok, text = "") {
165
+ const journal = requestJournal.getStore();
166
+ if (!journal)
167
+ return;
168
+ const identifiers = ok && method !== "GET"
169
+ ? confirmationIdentifiers(text, (value) => this.#redact(value) !== value)
170
+ : undefined;
171
+ journal.push({
172
+ method,
173
+ path: this.#redact(url.pathname),
174
+ ok,
175
+ ...(identifiers === undefined ? {} : { identifiers }),
176
+ });
68
177
  }
69
- async fetch(path, options) {
178
+ /** Every error leaves the client scrubbed, including interpolated paths. */
179
+ #error(message, status) {
180
+ return new SipgateApiError(this.#redact(message), status);
181
+ }
182
+ async send(path, options) {
183
+ const method = options.method ?? "GET";
70
184
  const url = new URL(`${this.#baseUrl}${path.startsWith("/") ? path : `/${path}`}`);
71
185
  for (const [name, value] of Object.entries(options.query ?? {})) {
72
186
  if (value === undefined)
@@ -81,22 +195,63 @@ export class SipgateClient {
81
195
  };
82
196
  if (options.body !== undefined)
83
197
  headers["Content-Type"] = "application/json";
84
- let response;
85
- try {
86
- response = await this.#fetch(url, {
87
- method: options.method ?? "GET",
88
- headers,
89
- ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),
90
- });
91
- }
92
- catch {
93
- throw new SipgateApiError("Could not reach the sipgate API. Check the network connection and try again.");
94
- }
95
- if (!response.ok) {
96
- const body = await response.text().catch(() => "");
97
- throw errorForStatus(response.status, response.headers.get("retry-after"), url.pathname, body);
198
+ for (let attempt = 0;; attempt += 1) {
199
+ // One deadline per attempt bounds the headers and the body read together.
200
+ // AbortSignal.timeout() is not used: its timer is unref'd, so on Node 22
201
+ // it never fires while nothing else keeps the event loop alive.
202
+ const controller = new AbortController();
203
+ const { signal } = controller;
204
+ const deadline = setTimeout(() => controller.abort(new DOMException("The sipgate request timed out.", "TimeoutError")), this.#timeoutMs);
205
+ try {
206
+ const response = await this.#fetch(url, {
207
+ method,
208
+ headers,
209
+ signal,
210
+ ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),
211
+ });
212
+ if (response.ok) {
213
+ const text = response.status === 204 ? "" : await response.text();
214
+ this.#record(method, url, true, text);
215
+ return { status: response.status, text };
216
+ }
217
+ const retryAfter = retryAfterSeconds(response.headers.get("retry-after"), Date.now());
218
+ const delay = attempt === 0 ? retryDelay(method, response.status, retryAfter) : undefined;
219
+ if (delay !== undefined) {
220
+ await response.body?.cancel().catch(() => { });
221
+ await this.#sleep(delay);
222
+ continue;
223
+ }
224
+ let detail = "";
225
+ if (response.status === 403) {
226
+ // A stalled body still times out below; any other read failure
227
+ // leaves the status as the most precise information available.
228
+ detail = knownDenial(await readBounded(response, MAX_ERROR_BODY_BYTES).catch((error) => {
229
+ if (signal.aborted)
230
+ throw error;
231
+ return "";
232
+ }));
233
+ }
234
+ else {
235
+ await response.body?.cancel().catch(() => { });
236
+ }
237
+ const failure = errorForStatus(response.status, method, retryAfter, url.pathname, detail);
238
+ this.#record(method, url, false);
239
+ throw this.#error(failure.message, failure.status);
240
+ }
241
+ catch (error) {
242
+ if (error instanceof SipgateApiError)
243
+ throw error;
244
+ this.#record(method, url, false);
245
+ const outcome = method === "GET" ? "" : WRITE_OUTCOME_UNKNOWN;
246
+ if (signal.aborted) {
247
+ throw this.#error(`sipgate did not answer within ${Math.round(this.#timeoutMs / 1000)} seconds.${outcome || " Try again later."}`);
248
+ }
249
+ throw this.#error(`Could not reach the sipgate API.${outcome || " Check the network connection and try again."}`);
250
+ }
251
+ finally {
252
+ clearTimeout(deadline);
253
+ }
98
254
  }
99
- return response;
100
255
  }
101
256
  }
102
257
  //# sourceMappingURL=sipgate-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sipgate-client.js","sourceRoot":"","sources":["../../src/backend/sipgate-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sipgate-client.js","sourceRoot":"","sources":["../../src/backend/sipgate-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAeA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1C;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBlF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUvF;AAaD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7E,YAAY,EACV,WAAW,EACX,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAeA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ1C;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBlF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUvF;AAaD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7E,YAAY,EACV,WAAW,EACX,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -14,7 +14,8 @@ export async function main() {
14
14
  const client = new SipgateClient({ tokenId: config.tokenId, token: config.token });
15
15
  const sipgateBackend = new SipgateBackend(client);
16
16
  const backend = await createAccessControlledBackend(sipgateBackend, config.accessScope);
17
- const server = createServer(backend, config.readonly, config.accessScope);
17
+ const { userId } = await backend.getAuthenticatedUser();
18
+ const server = createServer(backend, config.readonly, config.accessScope, userId);
18
19
  await server.connect(new StdioServerTransport());
19
20
  }
20
21
  export async function runCli(args = process.argv.slice(2)) {
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,14 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ export interface JournalEntry {
3
+ method: string;
4
+ path: string;
5
+ ok: boolean;
6
+ /** Identifiers from a write's confirmation body, such as a call session ID. */
7
+ identifiers?: Record<string, string | number>;
8
+ }
9
+ /**
10
+ * Records the sipgate requests made during one tool call, so that a failure
11
+ * after sipgate accepted a write is reported as applied, not as retryable.
12
+ */
13
+ export declare const requestJournal: AsyncLocalStorage<JournalEntry[]>;
14
+ //# sourceMappingURL=request-journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-journal.d.ts","sourceRoot":"","sources":["../src/request-journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,mCAA0C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ /**
3
+ * Records the sipgate requests made during one tool call, so that a failure
4
+ * after sipgate accepted a write is reported as applied, not as retryable.
5
+ */
6
+ export const requestJournal = new AsyncLocalStorage();
7
+ //# sourceMappingURL=request-journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-journal.js","sourceRoot":"","sources":["../src/request-journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUrD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAkB,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import type { AccessScope, TelephonyBackend } from "./backend/telephony-backend.js";
3
- export declare function createServer(backend: TelephonyBackend, readonly?: boolean, accessScope?: AccessScope): Server;
3
+ export declare function createServer(backend: TelephonyBackend, readonly?: boolean, accessScope?: AccessScope, authenticatedUserId?: string): Server;
4
4
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAwBpF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,UAAQ,EAChB,WAAW,GAAE,WAAoB,GAChC,MAAM,CA4CR"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAyDpF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,UAAQ,EAChB,WAAW,GAAE,WAAoB,EACjC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,MAAM,CAgDR"}
package/dist/server.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
3
3
  import { z } from "zod";
4
+ import { requestJournal } from "./request-journal.js";
4
5
  import { createToolDefinitions } from "./tools/definitions.js";
5
6
  import { VERSION } from "./version.js";
6
7
  function publicError(error) {
@@ -16,18 +17,50 @@ function publicError(error) {
16
17
  }
17
18
  return "The sipgate operation failed unexpectedly.";
18
19
  }
20
+ /**
21
+ * A tool that failed after sipgate accepted one of its writes must not read
22
+ * as a clean failure: an agent would retry and send a second SMS or place a
23
+ * second call. The accepted requests are reported instead.
24
+ */
25
+ function failureAfterWrites(error, journal) {
26
+ const accepted = journal.filter((entry) => entry.ok && entry.method !== "GET");
27
+ if (accepted.length === 0)
28
+ return undefined;
29
+ const acceptedRequests = accepted.map((entry) => `${entry.method} ${entry.path}`);
30
+ if (journal.some((entry) => !entry.ok && entry.method !== "GET")) {
31
+ return {
32
+ isError: true,
33
+ content: [{
34
+ type: "text",
35
+ text: `${publicError(error)} sipgate had already accepted these requests of the same tool call: ${acceptedRequests.join(", ")}. Check the current state before retrying anything.`,
36
+ }],
37
+ };
38
+ }
39
+ const identifiers = Object.assign({}, ...accepted.map((entry) => entry.identifiers ?? {}));
40
+ const result = {
41
+ applied: true,
42
+ note: "sipgate accepted the change, but reading the resulting state back failed. Do not repeat the action; verify the current state with a read tool first.",
43
+ acceptedRequests,
44
+ ...(Object.keys(identifiers).length > 0 ? { identifiers } : {}),
45
+ // Retry advice in the underlying error concerns the read, not the write.
46
+ readbackError: publicError(error)
47
+ .replace(/ (Check the network connection and try again|Try again later|Retry later)\.$/, ""),
48
+ };
49
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
50
+ }
19
51
  function jsonSchemaFor(schema) {
20
- const generated = z.toJSONSchema(schema, { target: "draft-7" });
52
+ // Describe what a caller sends: fields with defaults are optional input.
53
+ const generated = z.toJSONSchema(schema, { target: "draft-7", io: "input" });
21
54
  const { $schema: _ignored, ...inputSchema } = generated;
22
55
  return inputSchema;
23
56
  }
24
- export function createServer(backend, readonly = false, accessScope = "user") {
25
- const definitions = createToolDefinitions(backend, readonly, accessScope);
57
+ export function createServer(backend, readonly = false, accessScope = "user", authenticatedUserId) {
58
+ const definitions = createToolDefinitions(backend, readonly, accessScope, authenticatedUserId);
26
59
  const byName = new Map(definitions.map((definition) => [definition.name, definition]));
27
60
  const server = new Server({ name: "sipgate-mcp", version: VERSION }, {
28
61
  capabilities: { tools: {} },
29
62
  instructions: accessScope === "user"
30
- ? `This sipgate MCP is restricted to the authenticated user's resources. ${readonly ? "It is read-only and cannot change the account." : "It may change that user's telephony settings or initiate chargeable actions when explicitly requested. Account-wide contact, blacklist, porting-cancellation, and sipgate.io writes require an explicit confirmation argument."} Never request or infer another user's ID.`
63
+ ? `This sipgate MCP is restricted to the authenticated user's resources. ${readonly ? "It is read-only and cannot change the account." : "It may change that user's telephony settings or initiate chargeable actions when explicitly requested. Account-wide contact, blacklist, porting-cancellation, and sipgate.io writes require an explicit confirmation argument."} Never request or infer another user's ID${authenticatedUserId === undefined ? "" : "; omit user_id to act as the authenticated user"}.`
31
64
  : `This sipgate MCP has account scope and the authenticated sipgate user was verified as an administrator. ${readonly ? "It is read-only and cannot change the account." : "It may change account-wide telephony settings or initiate chargeable actions when explicitly requested."}`,
32
65
  });
33
66
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
@@ -46,14 +79,15 @@ export function createServer(backend, readonly = false, accessScope = "user") {
46
79
  content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }],
47
80
  };
48
81
  }
82
+ const journal = [];
49
83
  try {
50
- const result = await definition.execute(request.params.arguments ?? {});
84
+ const result = await requestJournal.run(journal, () => definition.execute(request.params.arguments ?? {}));
51
85
  return {
52
86
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
53
87
  };
54
88
  }
55
89
  catch (error) {
56
- return {
90
+ return failureAfterWrites(error, journal) ?? {
57
91
  isError: true,
58
92
  content: [{ type: "text", text: publicError(error) }],
59
93
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,5 @@ export interface ToolDefinition {
13
13
  annotations: ToolAnnotations;
14
14
  execute(input: unknown): Promise<JsonValue>;
15
15
  }
16
- export declare function createToolDefinitions(backend: TelephonyBackend, readonly?: boolean, accessScope?: AccessScope): ToolDefinition[];
16
+ export declare function createToolDefinitions(backend: TelephonyBackend, readonly?: boolean, accessScope?: AccessScope, authenticatedUserId?: string): ToolDefinition[];
17
17
  //# sourceMappingURL=definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7C;AAyHD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,UAAQ,EAChB,WAAW,GAAE,WAAoB,GAChC,cAAc,EAAE,CA0jDlB"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7C;AA0HD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,UAAQ,EAChB,WAAW,GAAE,WAAoB,EACjC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,cAAc,EAAE,CAmkDlB"}