Skip to main content
Glama
handlers.ts3.12 kB
/** * User tool handlers. * @module tools/users/handlers */ import type { z } from 'zod'; import * as users from '../../jira/endpoints/users.js'; import { simplifyUser } from '../../formatters/toon.js'; import { createSuccessResult, createListResult, createErrorResult, } from '../../formatters/response.js'; import { formatErrorForMcp } from '../../utils/errors.js'; import { createLogger } from '../../utils/logger.js'; import type { ToolResult } from '../../types/mcp.js'; import type { getCurrentUserSchema, getUserSchema, searchUsersSchema, getAssignableUsersSchema, } from './schemas.js'; const logger = createLogger('user-handlers'); /** * Handles getting current user. */ export async function handleGetCurrentUser( _args: z.infer<typeof getCurrentUserSchema> ): Promise<ToolResult> { try { logger.debug('Getting current user'); const user = await users.getCurrentUser(); const simplified = simplifyUser(user); return createSuccessResult(simplified); } catch (error) { logger.error('Failed to get current user', error as Error); return formatErrorForMcp(error); } } /** * Handles getting a user. */ export async function handleGetUser( args: z.infer<typeof getUserSchema> ): Promise<ToolResult> { try { logger.debug('Getting user', { accountId: args.accountId }); const user = await users.getUser(args.accountId); const simplified = simplifyUser(user); return createSuccessResult(simplified); } catch (error) { logger.error('Failed to get user', error as Error); return formatErrorForMcp(error); } } /** * Handles searching users. */ export async function handleSearchUsers( args: z.infer<typeof searchUsersSchema> ): Promise<ToolResult> { try { logger.debug('Searching users', { query: args.query }); const userList = await users.searchUsers(args.query, args.maxResults); const simplified = userList.map(simplifyUser); return createListResult(simplified, 'users'); } catch (error) { logger.error('Failed to search users', error as Error); return formatErrorForMcp(error); } } /** * Handles getting assignable users. */ export async function handleGetAssignableUsers( args: z.infer<typeof getAssignableUsersSchema> ): Promise<ToolResult> { try { logger.debug('Getting assignable users', { issueKey: args.issueKey, projectKey: args.projectKey, }); if (!args.issueKey && !args.projectKey) { return createErrorResult( 'Either issueKey or projectKey must be provided' ); } let userList; if (args.issueKey) { userList = await users.getAssignableUsers( args.issueKey, args.query, args.maxResults ); } else { userList = await users.getProjectAssignableUsers( args.projectKey!, args.query, args.maxResults ); } const simplified = userList.map(simplifyUser); return createListResult(simplified, 'users'); } catch (error) { logger.error('Failed to get assignable users', error as Error); return formatErrorForMcp(error); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/icy-r/jira-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server