UNPKG

@larksuiteoapi/lark-mcp

Version:
96 lines (95 loc) 3.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LarkMcpTool = void 0; const node_sdk_1 = require("@larksuiteoapi/node-sdk"); const types_1 = require("./types"); const tools_1 = require("./tools"); const filter_tools_1 = require("./utils/filter-tools"); const constants_1 = require("./constants"); const handler_1 = require("./utils/handler"); const case_transf_1 = require("./utils/case-transf"); const get_should_use_uat_1 = require("./utils/get-should-use-uat"); /** * Feishu/Lark MCP */ class LarkMcpTool { /** * Feishu/Lark MCP * @param options Feishu/Lark Client Options */ constructor(options) { var _a; // Lark Client this.client = null; // Token Mode this.tokenMode = types_1.TokenMode.AUTO; // All Tools this.allTools = []; if (options.client) { this.client = options.client; } else if (options.appId && options.appSecret) { this.client = new node_sdk_1.Client({ appId: options.appId, appSecret: options.appSecret, ...options, }); } this.tokenMode = options.tokenMode || types_1.TokenMode.AUTO; const isZH = ((_a = options.toolsOptions) === null || _a === void 0 ? void 0 : _a.language) === 'zh'; const filterOptions = { allowTools: constants_1.defaultToolNames, tokenMode: this.tokenMode, ...options.toolsOptions, }; this.allTools = (0, filter_tools_1.filterTools)(isZH ? tools_1.AllToolsZh : tools_1.AllTools, filterOptions); } /** * Update User Access Token * @param userAccessToken User Access Token */ updateUserAccessToken(userAccessToken) { this.userAccessToken = userAccessToken; } /** * Get MCP Tools * @returns MCP Tool Definition Array */ getTools() { return this.allTools; } /** * Register Tools to MCP Server * @param server MCP Server Instance */ registerMcpServer(server, options) { for (const tool of this.allTools) { server.tool((0, case_transf_1.caseTransf)(tool.name, options === null || options === void 0 ? void 0 : options.toolNameCase), tool.description, tool.schema, (params) => { try { if (!this.client) { return { isError: true, content: [{ type: 'text', text: 'Client not initialized' }], }; } const handler = tool.customHandler || handler_1.larkOapiHandler; if (this.tokenMode == types_1.TokenMode.USER_ACCESS_TOKEN && !this.userAccessToken) { return { isError: true, content: [{ type: 'text', text: 'Invalid UserAccessToken' }], }; } const shouldUseUAT = (0, get_should_use_uat_1.getShouldUseUAT)(this.tokenMode, this.userAccessToken, params === null || params === void 0 ? void 0 : params.useUAT); return handler(this.client, { ...params, useUAT: shouldUseUAT }, { userAccessToken: this.userAccessToken, tool }); } catch (error) { return { isError: true, content: [{ type: 'text', text: `Error: ${JSON.stringify(error === null || error === void 0 ? void 0 : error.message)}` }], }; } }); } } } exports.LarkMcpTool = LarkMcpTool;