@jupiterone/jupiterone-mcp
Version:
Model Context Protocol server for JupiterOne account rules and rule details
65 lines • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.accountTools = void 0;
const zod_1 = require("zod");
const package_json_1 = require("../../../package.json");
const load_description_js_1 = require("../../utils/load-description.js");
const errors_js_1 = require("./errors.js");
const result_js_1 = require("./result.js");
const types_js_1 = require("./types.js");
const testConnectionOutput = {
connected: zod_1.z.boolean(),
account: zod_1.z.record(zod_1.z.any()).nullable().optional(),
reason: zod_1.z.string().optional(),
version: zod_1.z.string().optional(),
};
// `.nullish()`: one account with a null displayName must not fail validation for the whole list.
const accountSummary = zod_1.z.object({
accountId: zod_1.z.string().nullish(),
displayName: zod_1.z.string().nullish(),
});
const listAccountsOutput = {
accounts: zod_1.z.array(accountSummary),
};
exports.accountTools = [
(0, types_js_1.defineTool)({
name: 'test-connection',
title: 'Test Connection',
description: (0, load_description_js_1.loadDescription)('test-connection.md'),
inputSchema: {},
outputSchema: testConnectionOutput,
annotations: types_js_1.READ_ONLY,
errorContext: 'Connection test failed',
handler: async (_params, client, _validator, context) => {
try {
const account = await client.getAccountInfo();
return (0, result_js_1.structuredResult)({ connected: true, account, version: package_json_1.version });
}
catch (error) {
const deniedStatus = (0, errors_js_1.accessDeniedStatus)(error);
const reason = deniedStatus !== null
? (0, errors_js_1.accessDeniedMessage)(deniedStatus, !!context.resolveAccounts)
: error instanceof Error
? error.message
: 'Unknown error';
return (0, result_js_1.structuredResult)({ connected: false, reason, version: package_json_1.version });
}
},
}),
(0, types_js_1.defineTool)({
name: 'list-accounts',
title: 'List Accounts',
description: (0, load_description_js_1.loadDescription)('list-accounts.md'),
inputSchema: {},
outputSchema: listAccountsOutput,
annotations: types_js_1.READ_ONLY,
accountAgnostic: true,
requiresAccountResolver: true,
errorContext: 'Failed to list accounts',
handler: async (_params, _client, _validator, context) => {
const accounts = (await context.resolveAccounts?.()) ?? [];
return (0, result_js_1.structuredResult)({ accounts });
},
}),
];
//# sourceMappingURL=account.js.map