Skip to main content
Glama

MCP Atlassian Server

by phuc-nt
dashboards.ts6.01 kB
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js'; import { getDashboards, getMyDashboards, getDashboardById, getDashboardGadgets } from '../../utils/jira-resource-api.js'; import { Logger } from '../../utils/logger.js'; import { dashboardSchema, dashboardListSchema, gadgetListSchema } from '../../schemas/jira.js'; import { Config, Resources } from '../../utils/mcp-helpers.js'; const logger = Logger.getLogger('JiraDashboardResources'); // (Có thể bổ sung schema dashboardSchema, gadgetsSchema nếu cần) export function registerDashboardResources(server: McpServer) { logger.info('Registering Jira dashboard resources...'); // List all dashboards server.resource( 'jira-dashboards', new ResourceTemplate('jira://dashboards', { list: async (_extra) => { return { resources: [ { uri: 'jira://dashboards', name: 'Jira Dashboards', description: 'List and search all Jira dashboards', mimeType: 'application/json' } ] }; } }), async (uri: string | URL, params: Record<string, any>, extra: any) => { try { // Get config from context or environment const config = Config.getAtlassianConfigFromEnv(); const uriStr = typeof uri === 'string' ? uri : uri.href; const { limit, offset } = Resources.extractPagingParams(params); const data = await getDashboards(config, offset, limit); return Resources.createStandardResource( uriStr, data.dashboards || [], 'dashboards', dashboardListSchema, data.total || (data.dashboards ? data.dashboards.length : 0), limit, offset, `${config.baseUrl}/jira/dashboards` // UI URL ); } catch (error) { logger.error(`Error handling resource request for jira-dashboards:`, error); throw error; } } ); // List my dashboards server.resource( 'jira-my-dashboards', new ResourceTemplate('jira://dashboards/my', { list: async (_extra) => ({ resources: [ { uri: 'jira://dashboards/my', name: 'Jira My Dashboards', description: 'List dashboards owned by or shared with the current user.', mimeType: 'application/json' } ] }) }), async (uri: string | URL, params: Record<string, any>, extra: any) => { try { // Get config from context or environment const config = Config.getAtlassianConfigFromEnv(); const uriStr = typeof uri === 'string' ? uri : uri.href; const { limit, offset } = Resources.extractPagingParams(params); const data = await getMyDashboards(config, offset, limit); return Resources.createStandardResource( uriStr, data.dashboards || [], 'dashboards', dashboardListSchema, data.total || (data.dashboards ? data.dashboards.length : 0), limit, offset, `${config.baseUrl}/jira/dashboards?filter=my` ); } catch (error) { logger.error(`Error handling resource request for jira-my-dashboards:`, error); throw error; } } ); // Dashboard details server.resource( 'jira-dashboard-details', new ResourceTemplate('jira://dashboards/{dashboardId}', { list: async (_extra) => ({ resources: [ { uri: 'jira://dashboards/{dashboardId}', name: 'Jira Dashboard Details', description: 'Get details of a specific Jira dashboard.', mimeType: 'application/json' } ] }) }), async (uri: string | URL, params: Record<string, any>, extra: any) => { try { // Get config from context or environment const config = Config.getAtlassianConfigFromEnv(); const uriStr = typeof uri === 'string' ? uri : uri.href; const dashboardId = params.dashboardId || (uriStr.split('/').pop()); const dashboard = await getDashboardById(config, dashboardId); return Resources.createStandardResource( uriStr, [dashboard], 'dashboard', dashboardSchema, 1, 1, 0, `${config.baseUrl}/jira/dashboards/${dashboardId}` ); } catch (error) { logger.error(`Error handling resource request for jira-dashboard-details:`, error); throw error; } } ); // Dashboard gadgets server.resource( 'jira-dashboard-gadgets', new ResourceTemplate('jira://dashboards/{dashboardId}/gadgets', { list: async (_extra) => ({ resources: [ { uri: 'jira://dashboards/{dashboardId}/gadgets', name: 'Jira Dashboard Gadgets', description: 'List gadgets of a specific Jira dashboard.', mimeType: 'application/json' } ] }) }), async (uri: string | URL, params: Record<string, any>, extra: any) => { try { // Get config from context or environment const config = Config.getAtlassianConfigFromEnv(); const uriStr = typeof uri === 'string' ? uri : uri.href; const dashboardId = params.dashboardId || (uriStr.split('/')[uriStr.split('/').length - 2]); const gadgets = await getDashboardGadgets(config, dashboardId); return Resources.createStandardResource( uriStr, gadgets, 'gadgets', gadgetListSchema, gadgets.length, gadgets.length, 0, `${config.baseUrl}/jira/dashboards/${dashboardId}` ); } catch (error) { logger.error(`Error handling resource request for jira-dashboard-gadgets:`, error); throw error; } } ); logger.info('Jira dashboard resources registered successfully'); }

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/phuc-nt/mcp-atlassian-server'

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