@teamnetwork/vsa-mcp-server 0.1.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 (53) hide show
  1. package/dist/client.d.ts +19 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +81 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/config.d.ts +7 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +21 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +43 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/tools/agents.d.ts +3 -0
  14. package/dist/tools/agents.d.ts.map +1 -0
  15. package/dist/tools/agents.js +66 -0
  16. package/dist/tools/agents.js.map +1 -0
  17. package/dist/tools/assets.d.ts +3 -0
  18. package/dist/tools/assets.d.ts.map +1 -0
  19. package/dist/tools/assets.js +76 -0
  20. package/dist/tools/assets.js.map +1 -0
  21. package/dist/tools/audit.d.ts +3 -0
  22. package/dist/tools/audit.d.ts.map +1 -0
  23. package/dist/tools/audit.js +100 -0
  24. package/dist/tools/audit.js.map +1 -0
  25. package/dist/tools/auth.d.ts +3 -0
  26. package/dist/tools/auth.d.ts.map +1 -0
  27. package/dist/tools/auth.js +13 -0
  28. package/dist/tools/auth.js.map +1 -0
  29. package/dist/tools/index.d.ts +3 -0
  30. package/dist/tools/index.d.ts.map +1 -0
  31. package/dist/tools/index.js +19 -0
  32. package/dist/tools/index.js.map +1 -0
  33. package/dist/tools/orgs.d.ts +3 -0
  34. package/dist/tools/orgs.d.ts.map +1 -0
  35. package/dist/tools/orgs.js +83 -0
  36. package/dist/tools/orgs.js.map +1 -0
  37. package/dist/tools/procedures.d.ts +3 -0
  38. package/dist/tools/procedures.d.ts.map +1 -0
  39. package/dist/tools/procedures.js +80 -0
  40. package/dist/tools/procedures.js.map +1 -0
  41. package/dist/tools/system.d.ts +3 -0
  42. package/dist/tools/system.d.ts.map +1 -0
  43. package/dist/tools/system.js +73 -0
  44. package/dist/tools/system.js.map +1 -0
  45. package/dist/tools/variables.d.ts +3 -0
  46. package/dist/tools/variables.d.ts.map +1 -0
  47. package/dist/tools/variables.js +21 -0
  48. package/dist/tools/variables.js.map +1 -0
  49. package/dist/types.d.ts +189 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +40 -0
@@ -0,0 +1,19 @@
1
+ import { VsaConfig } from './config.js';
2
+ import { ODataParams } from './types.js';
3
+ export declare class VsaClient {
4
+ private http;
5
+ private sessionToken;
6
+ private config;
7
+ constructor(config: VsaConfig);
8
+ authenticate(): Promise<void>;
9
+ private authHeader;
10
+ private request;
11
+ get<T>(path: string, params?: ODataParams & Record<string, unknown>): Promise<T>;
12
+ post<T>(path: string, body: unknown): Promise<T>;
13
+ put<T>(path: string, body?: unknown): Promise<T>;
14
+ patch<T>(path: string, body: unknown): Promise<T>;
15
+ delete<T>(path: string): Promise<T>;
16
+ buildFilter(field: string, op: string, value: string): string;
17
+ buildPaging(skip: number, top: number): ODataParams;
18
+ }
19
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAe,WAAW,EAAc,MAAM,YAAY,CAAC;AAElE,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAQvB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC,OAAO,CAAC,UAAU;YAKJ,OAAO;IAkCf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKzC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW;CAGpD"}
package/dist/client.js ADDED
@@ -0,0 +1,81 @@
1
+ import axios from 'axios';
2
+ export class VsaClient {
3
+ http;
4
+ sessionToken = null;
5
+ config;
6
+ constructor(config) {
7
+ this.config = config;
8
+ this.http = axios.create({
9
+ baseURL: `${config.baseUrl}/api/v1.0`,
10
+ headers: { 'Content-Type': 'application/json' },
11
+ });
12
+ }
13
+ async authenticate() {
14
+ // VSA 9.5 PAT auth: Basic base64(username:personalAccessToken)
15
+ const encoded = Buffer.from(`${this.config.username}:${this.config.personalToken}`).toString('base64');
16
+ const resp = await this.http.get('/auth', {
17
+ headers: { Authorization: `Basic ${encoded}` },
18
+ });
19
+ const token = resp.data?.Result?.Token;
20
+ if (!token) {
21
+ throw new Error(`Authentication failed: ${resp.data?.Error ?? 'no token in Result.Token'}`);
22
+ }
23
+ this.sessionToken = token;
24
+ process.stderr.write(`[auth] authenticated as ${resp.data.Result.UserName}, session expires ${resp.data.Result.SessionExpiration}\n`);
25
+ }
26
+ authHeader() {
27
+ if (!this.sessionToken)
28
+ throw new Error('Not authenticated');
29
+ return { Authorization: `Bearer ${this.sessionToken}` };
30
+ }
31
+ async request(method, path, data, params, retry = true) {
32
+ if (!this.sessionToken)
33
+ await this.authenticate();
34
+ const cfg = {
35
+ method,
36
+ url: path,
37
+ headers: this.authHeader(),
38
+ params,
39
+ data,
40
+ };
41
+ try {
42
+ const resp = await this.http.request(cfg);
43
+ return resp.data.Result;
44
+ }
45
+ catch (err) {
46
+ if (axios.isAxiosError(err) && err.response?.status === 401 && retry) {
47
+ this.sessionToken = null;
48
+ await this.authenticate();
49
+ return this.request(method, path, data, params, false);
50
+ }
51
+ if (axios.isAxiosError(err)) {
52
+ const msg = err.response?.data?.Error ?? err.message;
53
+ throw new Error(`VSA API error [${err.response?.status}]: ${msg}`);
54
+ }
55
+ throw err;
56
+ }
57
+ }
58
+ async get(path, params) {
59
+ return this.request('GET', path, undefined, params);
60
+ }
61
+ async post(path, body) {
62
+ return this.request('POST', path, body);
63
+ }
64
+ async put(path, body) {
65
+ return this.request('PUT', path, body ?? {});
66
+ }
67
+ async patch(path, body) {
68
+ return this.request('PATCH', path, body);
69
+ }
70
+ async delete(path) {
71
+ return this.request('DELETE', path);
72
+ }
73
+ // OData helpers
74
+ buildFilter(field, op, value) {
75
+ return `${field} ${op} '${value}'`;
76
+ }
77
+ buildPaging(skip, top) {
78
+ return { $skip: skip, $top: Math.min(top, 100) };
79
+ }
80
+ }
81
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface VsaConfig {
2
+ baseUrl: string;
3
+ username: string;
4
+ personalToken: string;
5
+ }
6
+ export declare function loadConfig(): VsaConfig;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,UAAU,IAAI,SAAS,CAmBtC"}
package/dist/config.js ADDED
@@ -0,0 +1,21 @@
1
+ export function loadConfig() {
2
+ const baseUrl = process.env.VSA_BASE_URL;
3
+ const username = process.env.VSA_USERNAME;
4
+ const personalToken = process.env.VSA_PERSONAL_TOKEN;
5
+ const missing = [];
6
+ if (!baseUrl)
7
+ missing.push('VSA_BASE_URL');
8
+ if (!username)
9
+ missing.push('VSA_USERNAME');
10
+ if (!personalToken)
11
+ missing.push('VSA_PERSONAL_TOKEN');
12
+ if (missing.length > 0) {
13
+ throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
14
+ }
15
+ return {
16
+ baseUrl: baseUrl.replace(/\/$/, ''),
17
+ username: username,
18
+ personalToken: personalToken,
19
+ };
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAErD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACpC,QAAQ,EAAE,QAAS;QACnB,aAAa,EAAE,aAAc;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { zodToJsonSchema } from 'zod-to-json-schema';
6
+ import { loadConfig } from './config.js';
7
+ import { VsaClient } from './client.js';
8
+ import { allTools } from './tools/index.js';
9
+ const config = loadConfig();
10
+ const client = new VsaClient(config);
11
+ const server = new Server({ name: 'vsa-mcp-server', version: '0.1.0' }, { capabilities: { tools: {} } });
12
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
13
+ tools: allTools.map((t) => ({
14
+ name: t.name,
15
+ description: t.description,
16
+ inputSchema: zodToJsonSchema(t.inputSchema),
17
+ })),
18
+ }));
19
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
20
+ const tool = allTools.find((t) => t.name === request.params.name);
21
+ if (!tool) {
22
+ return {
23
+ isError: true,
24
+ content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
25
+ };
26
+ }
27
+ try {
28
+ const args = tool.inputSchema.parse(request.params.arguments ?? {});
29
+ const text = await tool.handler(client, args);
30
+ return { content: [{ type: 'text', text }] };
31
+ }
32
+ catch (err) {
33
+ const message = err instanceof Error ? err.message : String(err);
34
+ return {
35
+ isError: true,
36
+ content: [{ type: 'text', text: `Error in ${request.params.name}: ${message}` }],
37
+ };
38
+ }
39
+ });
40
+ const transport = new StdioServerTransport();
41
+ await server.connect(transport);
42
+ process.stderr.write(`VSA MCP server started — ${allTools.length} tools registered. Targeting: ${config.baseUrl}\n`);
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAErC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;KAC5C,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,iCAAiC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const agentTools: ToolDefinition[];
3
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAS,MAAM,aAAa,CAAC;AAWpD,eAAO,MAAM,UAAU,EAAE,cAAc,EAiCtC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { z } from 'zod';
2
+ const odataArgs = {
3
+ orgId: z.string().optional().describe('Filter by OrgId (numeric string, Edm.Decimal). Use vsa_list_orgs to find OrgId values. More reliable than orgName.'),
4
+ orgName: z.string().optional().describe('Filter by MachineGroup path (e.g. "root.acme-ltd"). Use vsa_list_orgs OrgRef prefixed with "root." to build this.'),
5
+ filter: z.string().optional().describe("Additional OData $filter expression, e.g. \"substringof('server', ComputerName)\""),
6
+ orderBy: z.string().optional().describe('OData $orderby expression, e.g. "ComputerName asc"'),
7
+ skip: z.number().int().min(0).optional().describe('Number of records to skip (pagination)'),
8
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
9
+ };
10
+ export const agentTools = [
11
+ {
12
+ name: 'vsa_list_agents',
13
+ description: 'List VSA managed agents/machines. Filter by orgName to scope to a specific organisation. Also supports OData filtering, sorting, and pagination.',
14
+ inputSchema: z.object(odataArgs).strict(),
15
+ handler: async (client, args) => {
16
+ const params = buildOData(args);
17
+ const result = await client.get('/assetmgmt/agents', params);
18
+ if (!result?.length)
19
+ return 'No agents found.';
20
+ const rows = result.map((a) => `| ${a.AgentId} | ${a.ComputerName ?? ''} | ${a.IPAddress ?? ''} | ${a.MachineGroup ?? ''} | ${a.Online === 1 ? '🟢 Online' : '🔴 Offline'} | ${a.LastCheckInTime ?? ''} |`);
21
+ return [
22
+ `**Agents (${result.length})**\n`,
23
+ '| Agent ID | Computer Name | IP Address | Org / Group | Status | Last Check-in |',
24
+ '|---|---|---|---|---|---|',
25
+ ...rows,
26
+ ].join('\n');
27
+ },
28
+ },
29
+ {
30
+ name: 'vsa_get_agent',
31
+ description: 'Get full details for a specific VSA agent by its agent ID.',
32
+ inputSchema: z
33
+ .object({ agentId: z.string().describe('The agent ID (AgentId from vsa_list_agents)') })
34
+ .strict(),
35
+ handler: async (client, args) => {
36
+ const result = await client.get(`/assetmgmt/agents/${args.agentId}`);
37
+ return formatObject('Agent', result);
38
+ },
39
+ },
40
+ ];
41
+ function buildOData(args) {
42
+ const p = {};
43
+ const filters = [];
44
+ if (args.orgId)
45
+ filters.push(`OrgId eq ${args.orgId}M`); // Edm.Decimal — OData v3 M suffix
46
+ if (args.orgName)
47
+ filters.push(`MachineGroup eq '${args.orgName}'`);
48
+ if (args.filter)
49
+ filters.push(args.filter);
50
+ if (filters.length)
51
+ p['$filter'] = filters.join(' and ');
52
+ if (args.orderBy)
53
+ p['$orderby'] = args.orderBy;
54
+ if (args.skip !== undefined)
55
+ p['$skip'] = args.skip;
56
+ if (args.top !== undefined)
57
+ p['$top'] = args.top;
58
+ return p;
59
+ }
60
+ function formatObject(label, obj) {
61
+ const lines = Object.entries(obj)
62
+ .filter(([, v]) => v !== null && v !== undefined && v !== '')
63
+ .map(([k, v]) => `- **${k}**: ${JSON.stringify(v)}`);
64
+ return `**${label}**\n\n${lines.join('\n')}`;
65
+ }
66
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oHAAoH,CAAC;IAC3J,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mHAAmH,CAAC;IAC5J,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;IAC3H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC7F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC3F,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAqB;IAC1C;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,kJAAkJ;QACpJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;QACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAU,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE,OAAO,kBAAkB,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,YAAY,IAAI,EAAE,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,eAAe,IAAI,EAAE,IAAI,CAC5K,CAAC;YACF,OAAO;gBACL,aAAa,MAAM,CAAC,MAAM,OAAO;gBACjC,kFAAkF;gBAClF,2BAA2B;gBAC3B,GAAG,IAAI;aACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;KACF;IAED;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,CAAC;aACX,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,CAAC;aACvF,MAAM,EAAE;QACX,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAQ,qBAAqB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,OAAO,YAAY,CAAC,OAAO,EAAE,MAAiC,CAAC,CAAC;QAClE,CAAC;KACF;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,IAOnB;IACC,MAAM,CAAC,GAA4B,EAAE,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAY,kCAAkC;IACtG,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACpE,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM;QAAE,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,OAAO;QAAE,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,GAA4B;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,KAAK,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const assetTools: ToolDefinition[];
3
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/tools/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AASjE,eAAO,MAAM,UAAU,EAAE,cAAc,EAsDtC,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ const odataArgs = {
3
+ filter: z.string().optional().describe('OData $filter expression'),
4
+ orderBy: z.string().optional().describe('OData $orderby expression'),
5
+ skip: z.number().int().min(0).optional().describe('Number of records to skip (pagination)'),
6
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
7
+ };
8
+ export const assetTools = [
9
+ {
10
+ name: 'vsa_list_assets',
11
+ description: 'List VSA asset records. Assets contain richer hardware/inventory data than the agent record. Supports OData filtering and pagination.',
12
+ inputSchema: z.object(odataArgs).strict(),
13
+ handler: async (client, args) => {
14
+ const params = buildOData(args);
15
+ const result = await client.get('/assetmgmt/assets', params);
16
+ if (!result?.length)
17
+ return 'No assets found.';
18
+ const rows = result.map((a) => `| ${a.AssetId} | ${a.DisplayName ?? a.AssetName ?? ''} | ${a.MachineGroup ?? ''} | ${a.OSName ?? ''} | ${a.IPAddresses ?? ''} | ${a.LastSeenDate ?? ''} |`);
19
+ return [
20
+ `**Assets (${result.length})**\n`,
21
+ '| Asset ID | Name | Org / Group | OS | IP | Last Seen |',
22
+ '|---|---|---|---|---|---|',
23
+ ...rows,
24
+ ].join('\n');
25
+ },
26
+ },
27
+ {
28
+ name: 'vsa_get_asset',
29
+ description: 'Get detailed asset record for a specific asset by its asset ID.',
30
+ inputSchema: z
31
+ .object({ assetId: z.string().describe('The asset ID (AssetId from vsa_list_assets)') })
32
+ .strict(),
33
+ handler: async (client, args) => {
34
+ const result = await client.get(`/assetmgmt/assets/${args.assetId}`);
35
+ return formatObject('Asset', result);
36
+ },
37
+ },
38
+ {
39
+ name: 'vsa_get_asset_custom_fields',
40
+ description: 'Get all custom field values attached to a specific asset (identified by agent ID).',
41
+ inputSchema: z
42
+ .object({ agentId: z.string().describe('The agent ID whose asset custom fields to retrieve') })
43
+ .strict(),
44
+ handler: async (client, args) => {
45
+ const result = await client.get(`/assetmgmt/assets/${args.agentId}/customfields`);
46
+ if (!result?.length)
47
+ return 'No custom fields found for this asset.';
48
+ const rows = result.map((f) => `| ${f.FieldId} | ${f.FieldName} | ${f.FieldValue ?? ''} |`);
49
+ return [
50
+ `**Asset Custom Fields for agent ${args.agentId} (${result.length})**\n`,
51
+ '| Field ID | Field Name | Value |',
52
+ '|---|---|---|',
53
+ ...rows,
54
+ ].join('\n');
55
+ },
56
+ },
57
+ ];
58
+ function buildOData(args) {
59
+ const p = {};
60
+ if (args.filter)
61
+ p['$filter'] = args.filter;
62
+ if (args.orderBy)
63
+ p['$orderby'] = args.orderBy;
64
+ if (args.skip !== undefined)
65
+ p['$skip'] = args.skip;
66
+ if (args.top !== undefined)
67
+ p['$top'] = args.top;
68
+ return p;
69
+ }
70
+ function formatObject(label, obj) {
71
+ const lines = Object.entries(obj)
72
+ .filter(([, v]) => v !== null && v !== undefined && v !== '')
73
+ .map(([k, v]) => `- **${k}**: ${JSON.stringify(v)}`);
74
+ return `**${label}**\n\n${lines.join('\n')}`;
75
+ }
76
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/tools/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const auditTools: ToolDefinition[];
3
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAWvE,eAAO,MAAM,UAAU,EAAE,cAAc,EAuEtC,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { z } from 'zod';
2
+ const odataArgs = {
3
+ orgName: z.string().optional().describe('Filter by organisation/group name. Use vsa_list_orgs to find valid names.'),
4
+ agentId: z.string().optional().describe('Filter to a specific agent by AgentGuid/AgentId.'),
5
+ filter: z.string().optional().describe('Additional OData $filter expression'),
6
+ orderBy: z.string().optional().describe('OData $orderby expression'),
7
+ skip: z.number().int().min(0).optional().describe('Number of records to skip'),
8
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
9
+ };
10
+ export const auditTools = [
11
+ {
12
+ name: 'vsa_get_audit_summary',
13
+ description: 'Get audit summary records showing hardware/OS/disk info for agents. Filter by orgName to scope to a specific organisation, or agentId for a single machine.',
14
+ inputSchema: z.object(odataArgs).strict(),
15
+ handler: async (client, args) => {
16
+ const params = buildOData(args);
17
+ const result = await client.get('/assetmgmt/audit', params);
18
+ if (!result?.length)
19
+ return 'No audit summary records found.';
20
+ const rows = result.map((a) => {
21
+ const disk = a.TotalSize
22
+ ? `${((a.FreeSpace ?? 0) / 1024).toFixed(0)}GB free / ${(a.TotalSize / 1024).toFixed(0)}GB`
23
+ : '';
24
+ return `| ${a.AgentGuid} | ${a.ComputerName ?? ''} | ${a.GroupName ?? ''} | ${a.OsInfo ?? ''} | ${a.RamMBytes ? Math.round(a.RamMBytes / 1024) + 'GB' : ''} | ${disk} | ${a.LastCheckinTime ?? ''} |`;
25
+ });
26
+ return [
27
+ `**Audit Summary (${result.length})**\n`,
28
+ '| Agent ID | Computer | Org | OS | RAM | Disk | Last Check-in |',
29
+ '|---|---|---|---|---|---|---|',
30
+ ...rows,
31
+ ].join('\n');
32
+ },
33
+ },
34
+ {
35
+ name: 'vsa_run_audit',
36
+ description: 'Trigger a latest audit to run immediately on a specific agent.',
37
+ inputSchema: z
38
+ .object({ agentId: z.string().describe('The agent ID to run the audit on') })
39
+ .strict(),
40
+ handler: async (client, args) => {
41
+ await client.put(`/assetmgmt/audit/latest/${args.agentId}/runnow`);
42
+ return `Audit triggered on agent ${args.agentId}.`;
43
+ },
44
+ },
45
+ {
46
+ name: 'vsa_get_disk_volumes',
47
+ description: 'Get disk volume information (size, free space, drive letter) across all managed agents.',
48
+ inputSchema: z.object({}).strict(),
49
+ handler: async (client) => {
50
+ const result = await client.get('/assetmgmt/audit/hardware/diskvolumes/all');
51
+ if (!result?.length)
52
+ return 'No disk volume data found.';
53
+ const rows = result.map((d) => {
54
+ const total = d['TotalSize'] ? `${(Number(d['TotalSize']) / 1024 / 1024 / 1024).toFixed(1)} GB` : '';
55
+ const free = d['FreeSpace'] ? `${(Number(d['FreeSpace']) / 1024 / 1024 / 1024).toFixed(1)} GB` : '';
56
+ return `| ${d['AgentId'] ?? ''} | ${d['ComputerName'] ?? ''} | ${d['DriveLetter'] ?? ''} | ${total} | ${free} |`;
57
+ });
58
+ return [
59
+ `**Disk Volumes (${result.length})**\n`,
60
+ '| Agent ID | Computer | Drive | Total | Free |',
61
+ '|---|---|---|---|---|',
62
+ ...rows,
63
+ ].join('\n');
64
+ },
65
+ },
66
+ {
67
+ name: 'vsa_get_local_groups',
68
+ description: 'Get the local user groups on a specific agent.',
69
+ inputSchema: z
70
+ .object({ agentId: z.string().describe('The agent ID to query local groups on') })
71
+ .strict(),
72
+ handler: async (client, args) => {
73
+ const result = await client.get(`/assetmgmt/audit/${args.agentId}/groups`);
74
+ if (!result?.length)
75
+ return `No local groups found on agent ${args.agentId}.`;
76
+ const rows = result.map((g) => `- **${g.GroupName}**`);
77
+ return `**Local Groups on agent ${args.agentId} (${result.length})**\n\n${rows.join('\n')}`;
78
+ },
79
+ },
80
+ ];
81
+ function buildOData(args) {
82
+ const p = {};
83
+ const filters = [];
84
+ if (args.orgName)
85
+ filters.push(`GroupName eq '${args.orgName}'`); // audit uses GroupName
86
+ if (args.agentId)
87
+ filters.push(`AgentGuid eq ${args.agentId}M`); // Edm.Decimal — OData v3 M suffix
88
+ if (args.filter)
89
+ filters.push(args.filter);
90
+ if (filters.length)
91
+ p['$filter'] = filters.join(' and ');
92
+ if (args.orderBy)
93
+ p['$orderby'] = args.orderBy;
94
+ if (args.skip !== undefined)
95
+ p['$skip'] = args.skip;
96
+ if (args.top !== undefined)
97
+ p['$top'] = args.top;
98
+ return p;
99
+ }
100
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const authTools: ToolDefinition[];
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,cAAc,EAUrC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export const authTools = [
3
+ {
4
+ name: 'vsa_test_connection',
5
+ description: 'Test the connection to the VSA server and verify credentials are working.',
6
+ inputSchema: z.object({}).strict(),
7
+ handler: async (client) => {
8
+ const result = await client.get('/echo');
9
+ return `VSA connection successful. Server response: ${JSON.stringify(result)}`;
10
+ },
11
+ },
12
+ ];
13
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,SAAS,GAAqB;IACzC;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAS,OAAO,CAAC,CAAC;YACjD,OAAO,+CAA+C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACjF,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const allTools: ToolDefinition[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,cAAc,EASpC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { authTools } from './auth.js';
2
+ import { systemTools } from './system.js';
3
+ import { orgTools } from './orgs.js';
4
+ import { agentTools } from './agents.js';
5
+ import { assetTools } from './assets.js';
6
+ import { auditTools } from './audit.js';
7
+ import { procedureTools } from './procedures.js';
8
+ import { variableTools } from './variables.js';
9
+ export const allTools = [
10
+ ...authTools,
11
+ ...systemTools,
12
+ ...orgTools,
13
+ ...agentTools,
14
+ ...assetTools,
15
+ ...auditTools,
16
+ ...procedureTools,
17
+ ...variableTools,
18
+ ];
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,CAAC,MAAM,QAAQ,GAAqB;IACxC,GAAG,SAAS;IACZ,GAAG,WAAW;IACd,GAAG,QAAQ;IACX,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,cAAc;IACjB,GAAG,aAAa;CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const orgTools: ToolDefinition[];
3
+ //# sourceMappingURL=orgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/tools/orgs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAO,MAAM,aAAa,CAAC;AASlD,eAAO,MAAM,QAAQ,EAAE,cAAc,EAgEpC,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod';
2
+ const odataArgs = {
3
+ filter: z.string().optional().describe("OData $filter expression, e.g. \"startswith(OrgName,'Acme')\""),
4
+ orderBy: z.string().optional().describe('OData $orderby expression, e.g. "OrgName asc"'),
5
+ skip: z.number().int().min(0).optional().describe('Number of records to skip (pagination)'),
6
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
7
+ };
8
+ export const orgTools = [
9
+ {
10
+ name: 'vsa_list_orgs',
11
+ description: 'List all organisations (clients) on this VSA instance. Returns OrgId, OrgName, OrgRef, type, country, and custom fields. ' +
12
+ 'The OrgRef (e.g. "acme-81234") is the suffix of the MachineGroup path used to filter agents. ' +
13
+ 'Supports OData filtering by OrgName.',
14
+ inputSchema: z.object(odataArgs).strict(),
15
+ handler: async (client, args) => {
16
+ const params = buildOData(args);
17
+ const result = await client.get('/system/orgs', params);
18
+ if (!result?.length)
19
+ return 'No organisations found.';
20
+ const rows = result.map((o) => {
21
+ const country = o.ContactInfo?.Country ?? '';
22
+ const email = o.ContactInfo?.PrimaryEmail ?? '';
23
+ return `| ${o.OrgId} | ${o.OrgName} | ${o.OrgRef ?? ''} | ${o.OrgType ?? ''} | ${country} | ${email} |`;
24
+ });
25
+ return [
26
+ `**Organisations (${result.length})**\n`,
27
+ '| Org ID | Name | Ref | Type | Country | Email |',
28
+ '|---|---|---|---|---|---|',
29
+ ...rows,
30
+ ].join('\n');
31
+ },
32
+ },
33
+ {
34
+ name: 'vsa_get_org',
35
+ description: 'Get full details for a specific organisation by OrgId, including contact info and custom fields.',
36
+ inputSchema: z
37
+ .object({ orgId: z.string().describe('The organisation ID (OrgId from vsa_list_orgs)') })
38
+ .strict(),
39
+ handler: async (client, args) => {
40
+ const o = await client.get(`/system/orgs/${args.orgId}`);
41
+ const lines = [
42
+ `## ${o.OrgName}`,
43
+ `- **OrgId**: ${o.OrgId}`,
44
+ `- **OrgRef**: ${o.OrgRef ?? 'N/A'} *(MachineGroup path: \`root.${o.OrgRef}\`)*`,
45
+ `- **Type**: ${o.OrgType ?? 'N/A'}`,
46
+ `- **Website**: ${o.Website ?? 'N/A'}`,
47
+ `- **Employees**: ${o.NoOfEmployees ?? 'N/A'}`,
48
+ ];
49
+ if (o.ContactInfo) {
50
+ const c = o.ContactInfo;
51
+ lines.push('\n**Contact Info**');
52
+ if (c.PrimaryPhone)
53
+ lines.push(`- Phone: ${c.PrimaryPhone}`);
54
+ if (c.PrimaryEmail)
55
+ lines.push(`- Email: ${c.PrimaryEmail}`);
56
+ if (c.Street || c.City || c.Country) {
57
+ lines.push(`- Address: ${[c.Street, c.City, c.State, c.ZipCode, c.Country].filter(Boolean).join(', ')}`);
58
+ }
59
+ }
60
+ if (o.CustomFields?.length) {
61
+ lines.push('\n**Custom Fields**');
62
+ for (const f of o.CustomFields) {
63
+ if (f.FieldValue)
64
+ lines.push(`- ${f.FieldName}: ${f.FieldValue}`);
65
+ }
66
+ }
67
+ return lines.join('\n');
68
+ },
69
+ },
70
+ ];
71
+ function buildOData(args) {
72
+ const p = {};
73
+ if (args.filter)
74
+ p['$filter'] = args.filter;
75
+ if (args.orderBy)
76
+ p['$orderby'] = args.orderBy;
77
+ if (args.skip !== undefined)
78
+ p['$skip'] = args.skip;
79
+ if (args.top !== undefined)
80
+ p['$top'] = args.top;
81
+ return p;
82
+ }
83
+ //# sourceMappingURL=orgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/tools/orgs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const procedureTools: ToolDefinition[];
3
+ //# sourceMappingURL=procedures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedures.d.ts","sourceRoot":"","sources":["../../src/tools/procedures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoC,MAAM,aAAa,CAAC;AAS/E,eAAO,MAAM,cAAc,EAAE,cAAc,EAoE1C,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { z } from 'zod';
2
+ const odataArgs = {
3
+ filter: z.string().optional().describe('OData $filter expression'),
4
+ orderBy: z.string().optional().describe('OData $orderby expression'),
5
+ skip: z.number().int().min(0).optional().describe('Number of records to skip'),
6
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
7
+ };
8
+ export const procedureTools = [
9
+ {
10
+ name: 'vsa_list_procedures',
11
+ description: 'List available agent procedures (automation scripts) in VSA. Supports OData filtering by AgentProcedureName, Path, etc.',
12
+ inputSchema: z.object(odataArgs).strict(),
13
+ handler: async (client, args) => {
14
+ const params = buildOData(args);
15
+ const result = await client.get('/automation/agentprocs', params);
16
+ if (!result?.length)
17
+ return 'No agent procedures found.';
18
+ const rows = result.map((p) => `| ${p.AgentProcedureId} | ${p.AgentProcedureName} | ${p.Path ?? ''} |`);
19
+ return [
20
+ `**Agent Procedures (${result.length})**\n`,
21
+ '| Procedure ID | Name | Path |',
22
+ '|---|---|---|',
23
+ ...rows,
24
+ ].join('\n');
25
+ },
26
+ },
27
+ {
28
+ name: 'vsa_run_procedure',
29
+ description: 'Execute an agent procedure immediately on a specific agent. The procedure runs asynchronously on the agent.',
30
+ inputSchema: z
31
+ .object({
32
+ procId: z.number().int().describe('The agent procedure ID (AgentProcedureId from vsa_list_procedures)'),
33
+ agentId: z.string().describe('The agent ID to run the procedure on'),
34
+ })
35
+ .strict(),
36
+ handler: async (client, args) => {
37
+ await client.post(`/automation/agentprocs/${args.procId}/run`, {
38
+ AgentId: args.agentId,
39
+ });
40
+ return `Procedure ${args.procId} dispatched to agent ${args.agentId}.`;
41
+ },
42
+ },
43
+ {
44
+ name: 'vsa_get_procedure_history',
45
+ description: 'Get the execution history for a specific agent procedure.',
46
+ inputSchema: z
47
+ .object({
48
+ procId: z.number().int().describe('The agent procedure ID'),
49
+ ...odataArgs,
50
+ })
51
+ .strict(),
52
+ handler: async (client, args) => {
53
+ const { procId, ...rest } = args;
54
+ const params = buildOData(rest);
55
+ const result = await client.get(`/automation/agentprocs/${procId}/history`, params);
56
+ if (!result?.length)
57
+ return `No execution history found for procedure ${procId}.`;
58
+ const rows = result.map((h) => `| ${h.AgentId ?? ''} | ${h.ExecutionTime ?? ''} | ${h.Status ?? ''} |`);
59
+ return [
60
+ `**Execution History for procedure ${procId} (${result.length})**\n`,
61
+ '| Agent ID | Execution Time | Status |',
62
+ '|---|---|---|',
63
+ ...rows,
64
+ ].join('\n');
65
+ },
66
+ },
67
+ ];
68
+ function buildOData(args) {
69
+ const p = {};
70
+ if (args.filter)
71
+ p['$filter'] = args.filter;
72
+ if (args.orderBy)
73
+ p['$orderby'] = args.orderBy;
74
+ if (args.skip !== undefined)
75
+ p['$skip'] = args.skip;
76
+ if (args.top !== undefined)
77
+ p['$top'] = args.top;
78
+ return p;
79
+ }
80
+ //# sourceMappingURL=procedures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../src/tools/procedures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const systemTools: ToolDefinition[];
3
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAUhE,eAAO,MAAM,WAAW,EAAE,cAAc,EAiDvC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ // Note: /tenantmanagement/tenants returns 403 on single-tenant on-prem VSA instances
3
+ const odataArgs = {
4
+ filter: z.string().optional().describe('OData $filter expression'),
5
+ orderBy: z.string().optional().describe('OData $orderby expression, e.g. "AdminName asc"'),
6
+ skip: z.number().int().min(0).optional().describe('Number of records to skip (pagination)'),
7
+ top: z.number().int().min(1).max(100).optional().describe('Max records to return (1–100)'),
8
+ };
9
+ export const systemTools = [
10
+ {
11
+ name: 'vsa_list_users',
12
+ description: 'List VSA admin users. Supports OData filtering and pagination.',
13
+ inputSchema: z.object(odataArgs).strict(),
14
+ handler: async (client, args) => {
15
+ const params = buildOData(args);
16
+ const result = await client.get('/system/users', params);
17
+ if (!result?.length)
18
+ return 'No users found.';
19
+ const rows = result.map((u) => `| ${u.UserId ?? ''} | ${u.AdminName ?? ''} | ${u.FirstName ?? ''} ${u.LastName ?? ''} | ${u.Email ?? ''} | ${u.Admintype ?? ''} |`);
20
+ return [
21
+ `**VSA Users (${result.length})**\n`,
22
+ '| ID | Username | Full Name | Email | Type |',
23
+ '|---|---|---|---|---|',
24
+ ...rows,
25
+ ].join('\n');
26
+ },
27
+ },
28
+ {
29
+ name: 'vsa_get_user',
30
+ description: 'Get details for a specific VSA user by their user ID.',
31
+ inputSchema: z.object({ userId: z.string().describe('The user ID') }).strict(),
32
+ handler: async (client, args) => {
33
+ const result = await client.get(`/system/users/${args.userId}`);
34
+ return formatObject('User', result);
35
+ },
36
+ },
37
+ {
38
+ name: 'vsa_list_role_types',
39
+ description: 'List all user role types defined in VSA.',
40
+ inputSchema: z.object({}).strict(),
41
+ handler: async (client) => {
42
+ const result = await client.get('/system/roletypes');
43
+ if (!result?.length)
44
+ return 'No role types found.';
45
+ const rows = result.map((r) => `| ${r.RoleTypeId ?? ''} | ${r.RoleTypeName ?? ''} | ${r.RoleTypeDescription ?? ''} |`);
46
+ return [
47
+ `**Role Types (${result.length})**\n`,
48
+ '| ID | Name | Description |',
49
+ '|---|---|---|',
50
+ ...rows,
51
+ ].join('\n');
52
+ },
53
+ },
54
+ ];
55
+ function buildOData(args) {
56
+ const p = {};
57
+ if (args.filter)
58
+ p['$filter'] = args.filter;
59
+ if (args.orderBy)
60
+ p['$orderby'] = args.orderBy;
61
+ if (args.skip !== undefined)
62
+ p['$skip'] = args.skip;
63
+ if (args.top !== undefined)
64
+ p['$top'] = args.top;
65
+ return p;
66
+ }
67
+ function formatObject(label, obj) {
68
+ const lines = Object.entries(obj)
69
+ .filter(([, v]) => v !== null && v !== undefined && v !== '')
70
+ .map(([k, v]) => `- **${k}**: ${JSON.stringify(v)}`);
71
+ return `**${label}**\n\n${lines.join('\n')}`;
72
+ }
73
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types.js';
2
+ export declare const variableTools: ToolDefinition[];
3
+ //# sourceMappingURL=variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/tools/variables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAE9D,eAAO,MAAM,aAAa,EAAE,cAAc,EAmBzC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export const variableTools = [
3
+ {
4
+ name: 'vsa_get_managed_variables',
5
+ description: 'Get all managed variables and their values from VSA. Variables are scoped to an org entity.',
6
+ inputSchema: z.object({}).strict(),
7
+ handler: async (client) => {
8
+ const result = await client.get('/automation/variables');
9
+ if (!result?.length)
10
+ return 'No managed variables found.';
11
+ const rows = result.map((v) => `| ${v.OrgEntityName ?? ''} | ${v.VarName} | ${v.Public ? 'Public' : 'Private'} | ${v.User ?? ''} |`);
12
+ return [
13
+ `**Managed Variables (${result.length})**\n`,
14
+ '| Org | Variable Name | Visibility | Owner |',
15
+ '|---|---|---|---|',
16
+ ...rows,
17
+ ].join('\n');
18
+ },
19
+ },
20
+ ];
21
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/tools/variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,6FAA6F;QAC1G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAoB,uBAAuB,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE,OAAO,6BAA6B,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,KAAK,CAAC,CAAC,aAAa,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CACrG,CAAC;YACF,OAAO;gBACL,wBAAwB,MAAM,CAAC,MAAM,OAAO;gBAC5C,8CAA8C;gBAC9C,mBAAmB;gBACnB,GAAG,IAAI;aACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,189 @@
1
+ export interface VsaResponse<T> {
2
+ Result: T;
3
+ TotalRecords?: number;
4
+ Error?: string;
5
+ ResponseCode: number;
6
+ }
7
+ export interface AuthResult {
8
+ Token: string;
9
+ ApiToken: string;
10
+ TenantId: string;
11
+ UserName: string;
12
+ RoleId: number;
13
+ ScopeId: string;
14
+ AdminId: number;
15
+ SessionExpiration: string;
16
+ [key: string]: unknown;
17
+ }
18
+ export interface Agent {
19
+ AgentId: string;
20
+ AgentName: string;
21
+ ComputerName: string;
22
+ IPAddress?: string;
23
+ IPv6Address?: string;
24
+ OSInfo?: string;
25
+ OperatingSystem?: string;
26
+ OSType?: string;
27
+ OrgId?: string;
28
+ MachineGroupId?: string;
29
+ MachineGroup?: string;
30
+ Online?: number;
31
+ LastCheckInTime?: string;
32
+ LastRebootTime?: string;
33
+ LastLoggedInUser?: string;
34
+ CurrentUser?: string;
35
+ RamMBytes?: number;
36
+ CpuCount?: number;
37
+ CpuSpeed?: number;
38
+ CpuType?: string;
39
+ DomainWorkgroup?: string;
40
+ MacAddr?: string;
41
+ DefaultGateway?: string;
42
+ DNSServer1?: string;
43
+ DNSServer2?: string;
44
+ Country?: string;
45
+ TimeZone?: string;
46
+ AgentVersion?: number;
47
+ [key: string]: unknown;
48
+ }
49
+ export interface Asset {
50
+ AssetId: string;
51
+ AssetName?: string;
52
+ DisplayName?: string;
53
+ AssetTypeId?: string;
54
+ AgentId?: string;
55
+ MachineGroup?: string;
56
+ OrgId?: string;
57
+ HostName?: string;
58
+ OSName?: string;
59
+ OSType?: string;
60
+ IPAddresses?: string;
61
+ MACAddresses?: string;
62
+ DeviceManufacturer?: string;
63
+ LastSeenDate?: string;
64
+ IsComputerAgent?: boolean;
65
+ IsMonitoring?: boolean;
66
+ IsPatching?: boolean;
67
+ [key: string]: unknown;
68
+ }
69
+ export interface CustomField {
70
+ FieldId: string;
71
+ FieldName: string;
72
+ FieldValue?: string;
73
+ [key: string]: unknown;
74
+ }
75
+ export interface AuditSummary {
76
+ AgentGuid: string;
77
+ DisplayName?: string;
78
+ ComputerName?: string;
79
+ GroupName?: string;
80
+ OsType?: string;
81
+ OsInfo?: string;
82
+ IpAddress?: string;
83
+ LastCheckinTime?: string;
84
+ RebootTime?: string;
85
+ CpuType?: string;
86
+ CpuSpeed?: number;
87
+ CpuCount?: number;
88
+ RamMBytes?: number;
89
+ FreeSpace?: number;
90
+ UsedSpace?: number;
91
+ TotalSize?: number;
92
+ NumberOfDrives?: number;
93
+ LastLoginName?: string;
94
+ [key: string]: unknown;
95
+ }
96
+ export interface DiskVolume {
97
+ AgentId?: string;
98
+ ComputerName?: string;
99
+ DriveLetter?: string;
100
+ TotalSize?: number;
101
+ FreeSpace?: number;
102
+ [key: string]: unknown;
103
+ }
104
+ export interface LocalGroup {
105
+ GroupName: string;
106
+ Members?: string[];
107
+ [key: string]: unknown;
108
+ }
109
+ export interface AgentProcedure {
110
+ AgentProcedureId: number;
111
+ AgentProcedureName: string;
112
+ Path?: string;
113
+ Description?: string;
114
+ [key: string]: unknown;
115
+ }
116
+ export interface ProcedureHistory {
117
+ AgentProcId?: string;
118
+ AgentId?: string;
119
+ ExecutionTime?: string;
120
+ Status?: string;
121
+ Output?: string;
122
+ [key: string]: unknown;
123
+ }
124
+ export interface ManagedVariable {
125
+ OrgEntityName?: string;
126
+ OrgEntityGuid?: string;
127
+ VarName: string;
128
+ VarValue?: string;
129
+ Public?: boolean;
130
+ User?: string;
131
+ [key: string]: unknown;
132
+ }
133
+ export interface OrgContactInfo {
134
+ PrimaryPhone?: string;
135
+ PrimaryEmail?: string;
136
+ Country?: string;
137
+ Street?: string;
138
+ City?: string;
139
+ State?: string;
140
+ ZipCode?: string;
141
+ [key: string]: unknown;
142
+ }
143
+ export interface OrgCustomField {
144
+ FieldName: string;
145
+ FieldValue?: string;
146
+ }
147
+ export interface Org {
148
+ OrgId: string;
149
+ OrgName: string;
150
+ OrgRef?: string;
151
+ OrgType?: string;
152
+ ParentOrgId?: string;
153
+ Website?: string;
154
+ NoOfEmployees?: number;
155
+ ContactInfo?: OrgContactInfo;
156
+ CustomFields?: OrgCustomField[];
157
+ Attributes?: Record<string, string>;
158
+ [key: string]: unknown;
159
+ }
160
+ export interface VsaUser {
161
+ UserId?: number;
162
+ AdminName?: string;
163
+ FirstName?: string;
164
+ LastName?: string;
165
+ Email?: string;
166
+ Admintype?: number;
167
+ AdminRoleIds?: number[];
168
+ AdminScopeIds?: string[];
169
+ DisableUntil?: string;
170
+ [key: string]: unknown;
171
+ }
172
+ export interface RoleType {
173
+ RoleTypeId?: string;
174
+ RoleTypeName?: string;
175
+ [key: string]: unknown;
176
+ }
177
+ export interface ODataParams {
178
+ $filter?: string;
179
+ $orderby?: string;
180
+ $skip?: number;
181
+ $top?: number;
182
+ }
183
+ export interface ToolDefinition {
184
+ name: string;
185
+ description: string;
186
+ inputSchema: any;
187
+ handler: (client: import('./client.js').VsaClient, args: any) => Promise<string>;
188
+ }
189
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@teamnetwork/vsa-mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Kaseya VSA 9.5 REST API",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "vsa-mcp-server": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/index.ts",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "keywords": [
19
+ "mcp",
20
+ "kaseya",
21
+ "vsa",
22
+ "rmm",
23
+ "model-context-protocol"
24
+ ],
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@modelcontextprotocol/sdk": "^1.10.0",
28
+ "axios": "^1.7.0",
29
+ "zod": "^3.23.0",
30
+ "zod-to-json-schema": "^3.25.2"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^20.0.0",
34
+ "tsx": "^4.15.0",
35
+ "typescript": "^5.5.0"
36
+ },
37
+ "engines": {
38
+ "node": ">=20.0.0"
39
+ }
40
+ }