Skip to main content
Glama
tool-registry.ts1.81 kB
import type { ToolMetadata, ToolImplementation } from './types.js'; import { InputValidator } from './validation/input-validator.js'; import { ToolNotFoundError, ToolExecutionError } from './errors.js'; /** * ツールレジストリ * ツールの登録、一覧取得、実行を管理します */ export class ToolRegistry { private tools: Map<string, { metadata: ToolMetadata; implementation: ToolImplementation }>; constructor() { this.tools = new Map(); } /** * ツールを登録します */ register(metadata: ToolMetadata, implementation: ToolImplementation): void { this.tools.set(metadata.name, { metadata, implementation }); } /** * 登録されているツールの一覧を取得します */ list(): ToolMetadata[] { return Array.from(this.tools.values()).map(tool => tool.metadata); } /** * ツールを名前で検索します */ get(name: string): { metadata: ToolMetadata; implementation: ToolImplementation } | undefined { return this.tools.get(name); } /** * ツールを実行します */ async execute(name: string, parameters: Record<string, any>): Promise<any> { const tool = this.tools.get(name); if (!tool) { throw new ToolNotFoundError(`Tool not found: ${name}`, name); } // Validate parameters against schema if (tool.metadata.parameters && tool.metadata.parameters.length > 0) { InputValidator.validateOrThrow( tool.metadata.parameters, parameters, name ); } // Execute the tool try { return await tool.implementation(parameters); } catch (error) { throw new ToolExecutionError( `Failed to execute tool ${name}: ${error instanceof Error ? error.message : 'Unknown error'}`, 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/krtw00/search-mcp'

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