@sonisoft/now-sdk-ext-mcp 4.3.0 → 4.4.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 +2 -1
- package/dist/common/connection.d.ts +10 -0
- package/dist/common/connection.d.ts.map +1 -1
- package/dist/common/connection.js +11 -0
- package/dist/common/connection.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/servicenow.d.ts +32 -0
- package/dist/resources/servicenow.d.ts.map +1 -0
- package/dist/resources/servicenow.js +165 -0
- package/dist/resources/servicenow.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -207,7 +207,8 @@ test/
|
|
|
207
207
|
|
|
208
208
|
### Adding a New Tool
|
|
209
209
|
|
|
210
|
-
1. Create a new file in `src/
|
|
210
|
+
1. Create a new file in `src/resources/ # servicenow:// read-only resources
|
|
211
|
+
src/tools/` (e.g., `src/tools/query-table.ts`).
|
|
211
212
|
2. Export a registration function:
|
|
212
213
|
|
|
213
214
|
```typescript
|
|
@@ -17,6 +17,16 @@ export declare function getServiceNowInstance(authAlias?: string): Promise<Servi
|
|
|
17
17
|
* creates a fresh connection.
|
|
18
18
|
*/
|
|
19
19
|
export declare function clearInstance(authAlias?: string): void;
|
|
20
|
+
/** Patterns that indicate a connection/session problem worth retrying. */
|
|
21
|
+
/** Set by sn-credstore's shim once it has taken over credential storage. */
|
|
22
|
+
export declare const CRED_STORE_PATCHED_ENV = "NOW_SDK_KEYCHAIN_PATCHED";
|
|
23
|
+
/**
|
|
24
|
+
* True when credentials come from sn-credstore rather than the OS keyring.
|
|
25
|
+
*
|
|
26
|
+
* Exported so callers do not re-spell the variable name and the "=== 1"
|
|
27
|
+
* convention; both were already duplicated once.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isCredStoreActive(): boolean;
|
|
20
30
|
/**
|
|
21
31
|
* Returns true if an HTTP response indicates a stale or dead session.
|
|
22
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AA4BpC;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAkD7B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAKtD;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AA4BpC;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAkD7B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAKtD;AAED,0EAA0E;AAC1E,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAeD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACpE,OAAO,CAIT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC,CAAC,CAeZ"}
|
|
@@ -81,6 +81,17 @@ export function clearInstance(authAlias) {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
/** Patterns that indicate a connection/session problem worth retrying. */
|
|
84
|
+
/** Set by sn-credstore's shim once it has taken over credential storage. */
|
|
85
|
+
export const CRED_STORE_PATCHED_ENV = "NOW_SDK_KEYCHAIN_PATCHED";
|
|
86
|
+
/**
|
|
87
|
+
* True when credentials come from sn-credstore rather than the OS keyring.
|
|
88
|
+
*
|
|
89
|
+
* Exported so callers do not re-spell the variable name and the "=== 1"
|
|
90
|
+
* convention; both were already duplicated once.
|
|
91
|
+
*/
|
|
92
|
+
export function isCredStoreActive() {
|
|
93
|
+
return process.env[CRED_STORE_PATCHED_ENV] === "1";
|
|
94
|
+
}
|
|
84
95
|
const RETRYABLE_PATTERNS = /ECONNREFUSED|ECONNRESET|ETIMEDOUT|EPIPE|socket hang up|fetch failed|No response|Body not XML/i;
|
|
85
96
|
/**
|
|
86
97
|
* Returns true if the error looks like a transient connection or stale-session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAQpC,oFAAoF;AACpF,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;AAEpD;;;GAGG;AACH,SAAS,YAAY,CAAC,SAAkB;IACtC,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,uDAAuD;YACrD,oFAAoF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAkB;IAElB,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1C,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QACD,uCAAuC;QACvC,OAAO,CAAC,KAAK,CACX,uCAAuC,aAAa,uBAAuB,CAC5E,CAAC;QACF,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,sEAAsE;QACtE,wEAAwE;QACxE,2BAA2B;QAC3B,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,sEAAsE;QACtE,0EAA0E;QAC1E,yDAAyD;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,wCAAwC,aAAa,KAAK;YACxD,CAAC,UAAU;gBACT,CAAC,CAAC,gDAAgD;oBAChD,+CAA+C;gBACjD,CAAC,CAAC,qEAAqE;oBACrE,+DAA+D;oBAC/D,6DAA6D,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAA+B;QAC7C,KAAK,EAAE,aAAa;QACpB,UAAU;KACX,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACpD,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE;QAC/B,QAAQ;QACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACxD,IAAI,QAAQ,EAAE,CAAC;QACb,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,kBAAkB,GACtB,+FAA+F,CAAC;AAElG;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAqE;IAErE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;IAC5E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA6B,EAC7B,SAAuD;IAEvD,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CACX,2EAA2E,KAAK,EAAE,CACnF,CAAC;YACF,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// non-interactive child process, where the keyring cannot be unlocked.
|
|
5
5
|
import "./common/credstore-boot.js";
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
|
+
import { registerServiceNowResources } from "./resources/servicenow.js";
|
|
7
8
|
import { readServerVersion } from "./common/version.js";
|
|
8
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
10
|
import { registerExecuteScriptTool } from "./tools/execute-script.js";
|
|
@@ -44,8 +45,10 @@ const server = new McpServer({
|
|
|
44
45
|
// to advertise for it; the server just has to honour the token when it is sent.
|
|
45
46
|
capabilities: {
|
|
46
47
|
tools: {},
|
|
48
|
+
resources: {},
|
|
47
49
|
},
|
|
48
50
|
});
|
|
51
|
+
registerServiceNowResources(server);
|
|
49
52
|
// Register tools
|
|
50
53
|
registerExecuteScriptTool(server);
|
|
51
54
|
registerRunAtfTestTool(server);
|
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,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only MCP resources over `servicenow://` URIs.
|
|
3
|
+
*
|
|
4
|
+
* Resources are for stable, addressable reference data a client may want to
|
|
5
|
+
* attach directly — table schemas, the current scope, the alias list. Tools stay
|
|
6
|
+
* for actions. Before this, every one of those required a tool call, which costs
|
|
7
|
+
* a round trip and puts transient reference data into the conversation as tool
|
|
8
|
+
* output.
|
|
9
|
+
*
|
|
10
|
+
* TWO RULES SHAPE EVERYTHING HERE:
|
|
11
|
+
*
|
|
12
|
+
* 1. Each resource is backed by the SAME core manager as its equivalent tool,
|
|
13
|
+
* and goes through `withConnectionRetry` exactly as tools do. A parallel
|
|
14
|
+
* fetch path is how you end up with a resource that returns nothing for
|
|
15
|
+
* users of the recommended credential setup while the tool beside it works.
|
|
16
|
+
*
|
|
17
|
+
* 2. Errors PROPAGATE rather than being returned as content. Tools return
|
|
18
|
+
* `{isError: true}` so a failure is visible in-band to a model that is
|
|
19
|
+
* reasoning about the result; a resource is attached, not reasoned over, so a
|
|
20
|
+
* failed read is a protocol error and the client decides how to surface it.
|
|
21
|
+
* Returning a JSON body describing a failure would look like successfully
|
|
22
|
+
* attached content that happens to say "failed".
|
|
23
|
+
*
|
|
24
|
+
* 3. The alias is part of the URI, not an implicit default. Tools take an
|
|
25
|
+
* optional `instance` argument; a resource has only its URI, so the instance
|
|
26
|
+
* has to be addressable — `servicenow://dev/schema/incident` is a different
|
|
27
|
+
* resource from `servicenow://prod/schema/incident`, and conflating them
|
|
28
|
+
* would be the cross-instance confusion the core guard exists to prevent.
|
|
29
|
+
*/
|
|
30
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
31
|
+
export declare function registerServiceNowResources(server: McpServer): void;
|
|
32
|
+
//# sourceMappingURL=servicenow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicenow.d.ts","sourceRoot":"","sources":["../../src/resources/servicenow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAqJtF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+CnE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only MCP resources over `servicenow://` URIs.
|
|
3
|
+
*
|
|
4
|
+
* Resources are for stable, addressable reference data a client may want to
|
|
5
|
+
* attach directly — table schemas, the current scope, the alias list. Tools stay
|
|
6
|
+
* for actions. Before this, every one of those required a tool call, which costs
|
|
7
|
+
* a round trip and puts transient reference data into the conversation as tool
|
|
8
|
+
* output.
|
|
9
|
+
*
|
|
10
|
+
* TWO RULES SHAPE EVERYTHING HERE:
|
|
11
|
+
*
|
|
12
|
+
* 1. Each resource is backed by the SAME core manager as its equivalent tool,
|
|
13
|
+
* and goes through `withConnectionRetry` exactly as tools do. A parallel
|
|
14
|
+
* fetch path is how you end up with a resource that returns nothing for
|
|
15
|
+
* users of the recommended credential setup while the tool beside it works.
|
|
16
|
+
*
|
|
17
|
+
* 2. Errors PROPAGATE rather than being returned as content. Tools return
|
|
18
|
+
* `{isError: true}` so a failure is visible in-band to a model that is
|
|
19
|
+
* reasoning about the result; a resource is attached, not reasoned over, so a
|
|
20
|
+
* failed read is a protocol error and the client decides how to surface it.
|
|
21
|
+
* Returning a JSON body describing a failure would look like successfully
|
|
22
|
+
* attached content that happens to say "failed".
|
|
23
|
+
*
|
|
24
|
+
* 3. The alias is part of the URI, not an implicit default. Tools take an
|
|
25
|
+
* optional `instance` argument; a resource has only its URI, so the instance
|
|
26
|
+
* has to be addressable — `servicenow://dev/schema/incident` is a different
|
|
27
|
+
* resource from `servicenow://prod/schema/incident`, and conflating them
|
|
28
|
+
* would be the cross-instance confusion the core guard exists to prevent.
|
|
29
|
+
*/
|
|
30
|
+
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
31
|
+
import { ScopeManager, UpdateSetManager, SchemaDiscovery } from "@sonisoft/now-sdk-ext-core";
|
|
32
|
+
import { listAliases } from "@sonisoft/sn-credstore";
|
|
33
|
+
import { withConnectionRetry, isCredStoreActive } from "../common/connection.js";
|
|
34
|
+
/**
|
|
35
|
+
* Projects an alias onto exactly the fields intended for publication.
|
|
36
|
+
*
|
|
37
|
+
* `listAliases` is documented as returning metadata only, and today it does.
|
|
38
|
+
* This does not rely on that. It is a positive allowlist rather than a filter,
|
|
39
|
+
* so a field added upstream is omitted by default instead of published by
|
|
40
|
+
* default — and this is the single most attachable resource in the server, the
|
|
41
|
+
* one most likely to be pasted wholesale into a conversation.
|
|
42
|
+
*/
|
|
43
|
+
function publicAliasFields(alias) {
|
|
44
|
+
return {
|
|
45
|
+
alias: alias.alias,
|
|
46
|
+
isDefault: alias.isDefault,
|
|
47
|
+
type: alias.type,
|
|
48
|
+
instanceUrl: alias.instanceUrl,
|
|
49
|
+
...(alias.username === undefined ? {} : { username: alias.username }),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function json(uri, body) {
|
|
53
|
+
return {
|
|
54
|
+
contents: [
|
|
55
|
+
{
|
|
56
|
+
uri,
|
|
57
|
+
mimeType: "application/json",
|
|
58
|
+
text: JSON.stringify(body, null, 2),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* `servicenow://instances` — which instances this server can serve.
|
|
65
|
+
*
|
|
66
|
+
* Deliberately reports WHICH STORE it read. When the sn-credstore shim is not
|
|
67
|
+
* active the SDK's OS keyring is authoritative, and that cannot be enumerated —
|
|
68
|
+
* so the alias list is reported as unavailable rather than as empty. An empty
|
|
69
|
+
* list would read as "no credentials configured", which is precisely the
|
|
70
|
+
* ambiguity sn-credstore exists to remove.
|
|
71
|
+
*
|
|
72
|
+
* Contains no secret material: `listAliases` returns metadata only.
|
|
73
|
+
*/
|
|
74
|
+
function registerInstancesResource(server) {
|
|
75
|
+
server.registerResource("instances", "servicenow://instances", {
|
|
76
|
+
title: "Configured ServiceNow instances",
|
|
77
|
+
description: "Aliases this server can connect to, the alias used when a tool omits one, " +
|
|
78
|
+
"and which credential store those aliases were read from. Contains no secrets.",
|
|
79
|
+
mimeType: "application/json",
|
|
80
|
+
}, async (uri) => {
|
|
81
|
+
const shimActive = isCredStoreActive();
|
|
82
|
+
const defaultAlias = process.env.SN_AUTH_ALIAS ?? null;
|
|
83
|
+
if (!shimActive) {
|
|
84
|
+
return json(uri.href, {
|
|
85
|
+
defaultAlias,
|
|
86
|
+
credentialStore: "os-keyring",
|
|
87
|
+
aliases: null,
|
|
88
|
+
note: "The sn-credstore shim is not active, so credentials come from the OS " +
|
|
89
|
+
"keyring, which cannot be enumerated. This is not the same as having no " +
|
|
90
|
+
"credentials. Set SN_CRED_STORE_ENABLE=1 to read from sn-credstore instead.",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const summary = await listAliases();
|
|
95
|
+
return json(uri.href, {
|
|
96
|
+
defaultAlias,
|
|
97
|
+
credentialStore: "sn-credstore",
|
|
98
|
+
aliases: summary.aliases.map(publicAliasFields),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// A store that cannot be read is a finding to report, not an
|
|
103
|
+
// empty list to hand back.
|
|
104
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
105
|
+
return json(uri.href, {
|
|
106
|
+
defaultAlias,
|
|
107
|
+
credentialStore: "sn-credstore",
|
|
108
|
+
aliases: null,
|
|
109
|
+
error: message,
|
|
110
|
+
remediation: error?.remediation,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Registers one alias-scoped resource template.
|
|
117
|
+
*
|
|
118
|
+
* `list` is explicitly `undefined` rather than omitted: the SDK requires the key
|
|
119
|
+
* so that forgetting to enumerate is a decision rather than an oversight. These
|
|
120
|
+
* cannot be enumerated anyway — listing every table on an instance would be a
|
|
121
|
+
* very expensive `resources/list`.
|
|
122
|
+
*/
|
|
123
|
+
function registerAliasScopedResource(server, name, uriTemplate, title, description, read) {
|
|
124
|
+
server.registerResource(name, new ResourceTemplate(uriTemplate, { list: undefined }), { title, description, mimeType: "application/json" }, async (uri, vars) => {
|
|
125
|
+
// UriTemplate yields string | string[] per variable; these templates
|
|
126
|
+
// only ever declare single-valued segments.
|
|
127
|
+
const flat = {};
|
|
128
|
+
for (const [k, v] of Object.entries(vars)) {
|
|
129
|
+
flat[k] = Array.isArray(v) ? v[0] : v;
|
|
130
|
+
}
|
|
131
|
+
const alias = flat.alias;
|
|
132
|
+
// The URI owning the alias is the headline guarantee of this module,
|
|
133
|
+
// and without this it would rest on an SDK implementation detail:
|
|
134
|
+
// resolveAlias() in connection.ts falls back on a FALSY alias
|
|
135
|
+
// (`authAlias || process.env.SN_AUTH_ALIAS`), so an empty capture
|
|
136
|
+
// would silently resolve against the ambient default — the exact
|
|
137
|
+
// cross-instance confusion this design prevents.
|
|
138
|
+
//
|
|
139
|
+
// Verified that the current SDK matcher returns null rather than an
|
|
140
|
+
// empty capture for `servicenow:///scope/current`, so this is not
|
|
141
|
+
// reachable today. It is here so the guarantee is local rather than
|
|
142
|
+
// dependent on that staying true.
|
|
143
|
+
if (!alias) {
|
|
144
|
+
throw new Error(`Resource URI ${uri.href} has no instance alias. ` +
|
|
145
|
+
`Use servicenow://<alias>/... — the alias is never inferred from the environment.`);
|
|
146
|
+
}
|
|
147
|
+
return json(uri.href, await read(alias, flat));
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
export function registerServiceNowResources(server) {
|
|
151
|
+
registerInstancesResource(server);
|
|
152
|
+
registerAliasScopedResource(server, "current-scope", "servicenow://{alias}/scope/current", "Current application scope", "The application scope currently selected on the instance, as get_current_scope reports it.", async (alias) => withConnectionRetry(alias, async (snInstance) => new ScopeManager(snInstance).getCurrentApplication()));
|
|
153
|
+
registerAliasScopedResource(server, "current-update-set", "servicenow://{alias}/update-set/current", "Current update set", "The update set currently capturing changes, as get_current_update_set reports it.", async (alias) => withConnectionRetry(alias, async (snInstance) => new UpdateSetManager(snInstance).getCurrentUpdateSet()));
|
|
154
|
+
registerAliasScopedResource(server, "table-schema", "servicenow://{alias}/schema/{table}", "Table schema", "Fields, types and references for a table. Mirrors discover_table_schema with its " +
|
|
155
|
+
"optional sections off, so this stays cheap enough to attach as context.", async (alias, vars) => withConnectionRetry(alias, async (snInstance) => new SchemaDiscovery(snInstance).discoverTableSchema(vars.table, {
|
|
156
|
+
// The expensive sections are opt-in on the tool for good reason;
|
|
157
|
+
// a resource is attached rather than deliberately invoked, so it
|
|
158
|
+
// should not silently pull choices and business rules too.
|
|
159
|
+
includeChoiceTables: false,
|
|
160
|
+
includeRelationships: false,
|
|
161
|
+
includeUIPolicies: false,
|
|
162
|
+
includeBusinessRules: false,
|
|
163
|
+
})));
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=servicenow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicenow.js","sourceRoot":"","sources":["../../src/resources/servicenow.ts"],"names":[],"mappings":"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"}
|