@sassoftware/sas-score-mcp-serverjs 1.0.1-8 → 1.1.1
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/.skills/.claude-plugin/plugin.json +59 -0
- package/.skills/agents/sas-score-mcp-serverjs-agent.md +26 -0
- package/.skills/copilot-instructions.md +62 -0
- package/.skills/skills/README.md +204 -0
- package/.skills/skills/detail-strategy/SKILL.md +316 -0
- package/.skills/skills/find-library-server/SKILL.md +62 -0
- package/.skills/skills/find-resources/SKILL.md +66 -0
- package/.skills/skills/list-library/SKILL.md +30 -0
- package/.skills/skills/list-mas-job-jobdef/SKILL.md +31 -0
- package/.skills/skills/list-tables/SKILL.md +30 -0
- package/.skills/skills/read-strategy/SKILL.md +87 -0
- package/.skills/skills/request-routing/SKILL.md +112 -0
- package/.skills/skills/score-cas/SKILL.md +95 -0
- package/.skills/skills/score-job-jobdef/SKILL.md +58 -0
- package/.skills/skills/score-mas-scr/SKILL.md +58 -0
- package/.skills/skills/score-program/SKILL.md +59 -0
- package/.skills/skills/score-strategy/SKILL.md +39 -0
- package/README.md +96 -54
- package/cli.js +29 -38
- package/openApi.yaml +121 -121
- package/package.json +15 -13
- package/scripts/docs/SCORE_SKILL_REFERENCE.md +17 -16
- package/scripts/docs/TOOL_DESCRIPTION_TEMPLATE.md +3 -3
- package/scripts/docs/TOOL_UPDATES_SUMMARY.md +65 -63
- package/scripts/docs/oauth-http-transport.md +2 -2
- package/scripts/docs/sas-mcp-tools-reference.md +43 -32
- package/scripts/plot_msrp_usa.py +49 -0
- package/scripts/refreshtoken.js +58 -0
- package/scripts/runListScr.mjs +16 -0
- package/src/createMcpServer.js +4 -1
- package/src/expressMcpServer.js +47 -49
- package/src/oauthHandlers/authorize.js +4 -1
- package/src/oauthHandlers/baseUrl.js +4 -0
- package/src/oauthHandlers/callback.js +4 -0
- package/src/oauthHandlers/getMetadata.js +4 -0
- package/src/oauthHandlers/index.js +4 -0
- package/src/oauthHandlers/token.js +4 -0
- package/src/openApi.yaml +121 -121
- package/src/processHeaders.js +10 -7
- package/src/setupSkills.js +6 -9
- package/src/toolHelpers/_casScore.js +32 -0
- package/src/toolHelpers/_desc.js +14 -0
- package/src/toolHelpers/_findJob.js +12 -0
- package/src/toolHelpers/_findJobdef.js +10 -0
- package/src/toolHelpers/_findLibrary.js +11 -0
- package/src/toolHelpers/_findMas.js +13 -0
- package/src/toolHelpers/_findScr.js +36 -0
- package/src/toolHelpers/_findTable.js +11 -0
- package/src/toolHelpers/_listJobdefs.js +12 -2
- package/src/toolHelpers/_listJobs.js +19 -8
- package/src/toolHelpers/{_listModels.js → _listMas.js} +4 -4
- package/src/toolHelpers/_listScr.js +13 -0
- package/src/toolHelpers/{_scrInfo.js → _scrDescribe.js} +4 -4
- package/src/toolHelpers/_scrScore.js +2 -2
- package/src/toolHelpers/_submitCasl.js +19 -17
- package/src/toolHelpers/{_tableInfo.js → _tableDescribe.js} +2 -2
- package/src/toolHelpers/getLogonPayload.js +2 -2
- package/src/toolSet/casModelScore.js +93 -0
- package/src/toolSet/casProgramScore.js +105 -0
- package/src/toolSet/devaScore.js +11 -6
- package/src/toolSet/findJob.js +74 -59
- package/src/toolSet/findJobdef.js +67 -64
- package/src/toolSet/findLibrary.js +28 -23
- package/src/toolSet/findMas.js +72 -0
- package/src/toolSet/findScr.js +69 -0
- package/src/toolSet/findTable.js +34 -27
- package/src/toolSet/getEnv.js +57 -57
- package/src/toolSet/jobDescribe.js +65 -0
- package/src/toolSet/jobScore.js +90 -0
- package/src/toolSet/jobdefDescribe.js +67 -0
- package/src/toolSet/jobdefScore.js +85 -0
- package/src/toolSet/listJobdefs.js +17 -8
- package/src/toolSet/listJobs.js +15 -8
- package/src/toolSet/listLibraries.js +16 -10
- package/src/toolSet/listMas.js +71 -0
- package/src/toolSet/listScr.js +62 -0
- package/src/toolSet/listTables.js +78 -66
- package/src/toolSet/{runMacro.js → macroScore.js} +86 -82
- package/src/toolSet/makeTools.js +39 -25
- package/src/toolSet/masDescribe.js +67 -0
- package/src/toolSet/masScore.js +95 -0
- package/src/toolSet/{runProgram.js → programScore.js} +96 -93
- package/src/toolSet/readTable.js +43 -26
- package/src/toolSet/sasQuery.js +24 -18
- package/src/toolSet/scrDescribe.js +55 -0
- package/src/toolSet/scrScore.js +63 -70
- package/src/toolSet/searchAssets.js +1 -1
- package/src/toolSet/setContext.js +8 -3
- package/src/toolSet/superstat.js +61 -61
- package/src/toolSet/tableDescribe.js +65 -0
- package/.skills/sas-find-library-smart/SKILL.md +0 -155
- package/.skills/sas-find-resource-strategy/SKILL.md +0 -105
- package/.skills/sas-list-resource-strategy/SKILL.md +0 -124
- package/.skills/sas-list-tables-smart/SKILL.md +0 -128
- package/.skills/sas-read-and-score-strategy/SKILL.md +0 -113
- package/.skills/sas-read-strategy/SKILL.md +0 -154
- package/.skills/sas-request-classifier/SKILL.md +0 -74
- package/.skills/sas-score-workflow-strategy/SKILL.md +0 -314
- package/.skills_claude/CLAUDE.md +0 -201
- package/.skills_claude/agents/sas-score-mcp-serverjs-agent.md +0 -58
- package/.skills_claude/enforce-find-resource-strategy.md +0 -35
- package/.skills_github/agents/sas-score-mcp-serverjs-agent.md +0 -58
- package/.skills_github/copilot-instructions.md +0 -201
- package/.skills_github/enforce-find-resource-strategy.md +0 -35
- package/scripts/optimize_final.py +0 -140
- package/scripts/optimize_tools.py +0 -99
- package/scripts/setup-skills.js +0 -34
- package/scripts/update_descriptions.py +0 -46
- package/src/authpkce.js +0 -219
- package/src/handleGetDelete.js +0 -34
- package/src/handleRequest.js +0 -112
- package/src/hapiMcpServer.js +0 -241
- package/src/toolSet/findModel.js +0 -60
- package/src/toolSet/listModels.js +0 -56
- package/src/toolSet/modelInfo.js +0 -55
- package/src/toolSet/modelScore.js +0 -89
- package/src/toolSet/runCasProgram.js +0 -98
- package/src/toolSet/runJob.js +0 -81
- package/src/toolSet/runJobdef.js +0 -82
- package/src/toolSet/scrInfo.js +0 -52
- package/src/toolSet/tableInfo.js +0 -58
package/src/toolSet/runJobdef.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © 2025, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
3
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import _jobSubmit from '../toolHelpers/_jobSubmit.js';
|
|
8
|
-
|
|
9
|
-
function runJobdef(_appContext) {
|
|
10
|
-
// JSON object for LLM/tooling
|
|
11
|
-
|
|
12
|
-
let description = `
|
|
13
|
-
run-jobdef — score with a deployed SAS Viya job definition.
|
|
14
|
-
|
|
15
|
-
USE when: score with jobdef, run jobdef, execute jobdef
|
|
16
|
-
DO NOT USE for: arbitrary SAS code (use run-sas-program), macros (use run-macro), list/find jobdefs
|
|
17
|
-
|
|
18
|
-
PARAMETERS
|
|
19
|
-
- name: string — jobdef name (required)
|
|
20
|
-
- scenario: string | object — input parameters. Accepts: "x=1, y=2" or {x:1, y:2}
|
|
21
|
-
|
|
22
|
-
ROUTING RULES
|
|
23
|
-
- "run jobdef xyz" → { name: "xyz" }
|
|
24
|
-
- "run jobdef xyz with param1=10, param2=val2" → { name: "xyz", scenario: {param1:10, param2:"val2"} }
|
|
25
|
-
|
|
26
|
-
EXAMPLES
|
|
27
|
-
- "run jobdef xyz" → { name: "xyz" }
|
|
28
|
-
- "run jobdef monthly_report with month=10, year=2025" → { name: "monthly_report", scenario: {month:10, year:2025} }
|
|
29
|
-
|
|
30
|
-
NEGATIVE EXAMPLES (do not route here)
|
|
31
|
-
- "run SAS code" (use run-sas-program)
|
|
32
|
-
- "run macro X" (use run-macro)
|
|
33
|
-
- "list jobdefs" (use list-jobdefs)
|
|
34
|
-
- "find jobdef X" (use find-jobdef)
|
|
35
|
-
|
|
36
|
-
ERRORS
|
|
37
|
-
Returns log output, listings, tables from jobdef. Error if jobdef not found.
|
|
38
|
-
`;
|
|
39
|
-
|
|
40
|
-
let spec = {
|
|
41
|
-
name: 'run-jobdef',
|
|
42
|
-
description: description,
|
|
43
|
-
inputSchema: z.object({
|
|
44
|
-
name: z.string(),
|
|
45
|
-
scenario: z.string().optional()
|
|
46
|
-
}),
|
|
47
|
-
handler: async (params) => {
|
|
48
|
-
let scenario = params.scenario;
|
|
49
|
-
let scenarioObj = {};
|
|
50
|
-
let count = 0;
|
|
51
|
-
//
|
|
52
|
-
if (scenario == null) {
|
|
53
|
-
scenarioObj = {};
|
|
54
|
-
} else if (typeof scenario === 'object') {
|
|
55
|
-
scenarioObj = scenario;
|
|
56
|
-
} else if (Array.isArray(scenario)) {
|
|
57
|
-
scenarioObj = scenario[0];
|
|
58
|
-
} else if (typeof scenario === 'string') {
|
|
59
|
-
if (scenario.trim() === '') {
|
|
60
|
-
scenarioObj = {};
|
|
61
|
-
} else {
|
|
62
|
-
// console.error('Incoming scenario', scenario);
|
|
63
|
-
scenarioObj = scenario.split(',').reduce((acc, pair) => {
|
|
64
|
-
let [key, value] = pair.split('=');
|
|
65
|
-
acc[key.trim()] = value;
|
|
66
|
-
count++;
|
|
67
|
-
return acc;
|
|
68
|
-
}, {});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
params.type = 'def';
|
|
72
|
-
params.scenario = scenarioObj;
|
|
73
|
-
// Provide runtime context for auth and server settings
|
|
74
|
-
let r = await _jobSubmit(params);
|
|
75
|
-
return r;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
return spec;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export default runJobdef;
|
|
82
|
-
|
package/src/toolSet/scrInfo.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © 2025, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
3
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import _scrInfo from '../toolHelpers/_scrInfo.js';
|
|
8
|
-
|
|
9
|
-
function scrInfo(_appContext) {
|
|
10
|
-
|
|
11
|
-
let description = `
|
|
12
|
-
## scr-info
|
|
13
|
-
|
|
14
|
-
Purpose
|
|
15
|
-
Return the input/output schema and metadata for an SCR (Score Code Runtime) model.
|
|
16
|
-
|
|
17
|
-
Inputs
|
|
18
|
-
- url (string): The SCR model identifier.
|
|
19
|
-
What it returns
|
|
20
|
-
- A JSON object describing the model's interface, typically including:
|
|
21
|
-
- Input variables (names, types, required/optional)
|
|
22
|
-
- Output variables (predictions, probabilities, scores)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Usage notes
|
|
26
|
-
- Ensure network connectivity and credentials for the remote SCR service when needed.
|
|
27
|
-
- Use scr-score to score data after inspecting the schema.
|
|
28
|
-
|
|
29
|
-
Examples
|
|
30
|
-
- describe scr model "https://scr-host/models/loan"
|
|
31
|
-
- info for scr model "https://scr-host/models/loan"
|
|
32
|
-
`;
|
|
33
|
-
|
|
34
|
-
let spec = {
|
|
35
|
-
name: 'scr-info',
|
|
36
|
-
description: description,
|
|
37
|
-
inputSchema: z.object({
|
|
38
|
-
url: z.string()
|
|
39
|
-
}),
|
|
40
|
-
handler: async (params) => {
|
|
41
|
-
let {url, _appContext} = params;
|
|
42
|
-
if (url === null) {
|
|
43
|
-
return { status: { statusCode: 2, msg: `SCR model ${url} not found` }, results: {} };
|
|
44
|
-
}
|
|
45
|
-
let r = await _scrInfo({url, _appContext});
|
|
46
|
-
return r;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return spec;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default scrInfo;
|
package/src/toolSet/tableInfo.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © 2025, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
3
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
import debug from 'debug';
|
|
7
|
-
|
|
8
|
-
import _tableInfo from '../toolHelpers/_tableInfo.js';
|
|
9
|
-
import { type } from 'node:os';
|
|
10
|
-
function tableInfo(_appContext) {
|
|
11
|
-
|
|
12
|
-
let describe = `
|
|
13
|
-
table-info — retrieve metadata about a table in a CAS or SAS library.
|
|
14
|
-
|
|
15
|
-
USE when: what columns, describe structure, show schema, table statistics, column info
|
|
16
|
-
DO NOT USE for: read data (use read-table), list tables (use list-tables), find table (use find-table), queries (use sas-query)
|
|
17
|
-
|
|
18
|
-
PARAMETERS
|
|
19
|
-
- table: string — table name (required)
|
|
20
|
-
- lib: string — caslib or libref (required)
|
|
21
|
-
- server: string (default: 'cas') — 'cas' or 'sas'
|
|
22
|
-
|
|
23
|
-
ROUTING RULES
|
|
24
|
-
- "what columns are in cars" → { table: "cars", lib: "<lib>", server: "cas" }
|
|
25
|
-
- "describe table sales in Public" → { table: "sales", lib: "Public", server: "cas" }
|
|
26
|
-
- "show schema for mylib.iris on sas" → { table: "iris", lib: "mylib", server: "sas" }
|
|
27
|
-
|
|
28
|
-
EXAMPLES
|
|
29
|
-
- "what columns in cars" → { table: "cars", lib: "<lib>", server: "cas" }
|
|
30
|
-
- "describe structure of customers in Public" → { table: "customers", lib: "Public", server: "cas" }
|
|
31
|
-
|
|
32
|
-
NEGATIVE EXAMPLES (do not route here)
|
|
33
|
-
- "read table cars" (use read-table)
|
|
34
|
-
- "list tables in Public" (use list-tables)
|
|
35
|
-
- "does table exist" (use find-table)
|
|
36
|
-
- "query table" (use sas-query)
|
|
37
|
-
|
|
38
|
-
ERRORS
|
|
39
|
-
Returns columns array (name, type, label, format, length) and tableInfo (rowCount, fileSize, created, modified).
|
|
40
|
-
`;
|
|
41
|
-
|
|
42
|
-
let specs = {
|
|
43
|
-
name: 'table-info',
|
|
44
|
-
description: describe,
|
|
45
|
-
inputSchema: z.object({
|
|
46
|
-
table: z.string(),
|
|
47
|
-
lib: z.string().optional(),
|
|
48
|
-
server: z.string().optional()
|
|
49
|
-
}),
|
|
50
|
-
handler: async (params) => {
|
|
51
|
-
params.describe = true;
|
|
52
|
-
let r = await _tableInfo(params);
|
|
53
|
-
return r;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return specs;
|
|
57
|
-
}
|
|
58
|
-
export default tableInfo;
|