Skip to main content
Glama
server.ts1.94 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { Tool } from './tools/tool'; import { Resource } from './resources/resource'; export function createServerWithTools(tools: Tool[], resources: Resource[]): Server { const server = new Server( { name: 'jira-mcp-server', version: '0.0.1' }, { capabilities: { tools: {}, resources: {}, }, } ); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: tools.map((tool) => tool.schema) }; }); server.setRequestHandler(ListResourcesRequestSchema, async () => { return { resources: resources.map((resource) => resource.schema) }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { const tool = tools.find((tool) => tool.schema.name === request.params.name); if (!tool) { return { content: [{ type: 'text', text: `Tool ${request.params.name} not found.` }], isError: true, }; } try { const toolResult = await tool.handle(request.params.arguments); if (!toolResult) { return { content: [{ type: 'text', text: `Tool ${request.params.name} did not return a result.` }], isError: true, }; } return toolResult; } catch (error) { return { content: [{ type: 'text', text: String(error) }], isError: true, }; } }); server.setRequestHandler(ReadResourceRequestSchema, async (request) => { const resource = resources.find((resource) => resource.schema.uri === request.params.uri); if (!resource) { return { contents: [] }; } const contents = await resource.read(request.params.uri); return { contents }; }); return server; }

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/brianstone/jira-mcp-server'

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