Skip to main content
Glama
tool-info.ts2.75 kB
import { z } from "zod"; import { BaseTool, type ToolCapabilityDescriptor, type ToolContext, } from "./base.js"; import { toolInfoOutputSchema } from "./tool-schemas.js"; const ToolInfoParamsShape = { tool: z.string().describe("Tool identifier or alias you want to inspect"), format: z .enum(["summary", "json"]) .default("json") .describe("Response style; use json for structured metadata"), include_metadata: z .boolean() .optional() .describe("Include metadata digest (aliases, token estimates, etc.)"), }; const ToolInfoParamsSchema = z.object(ToolInfoParamsShape); type ToolInfoParams = z.infer<typeof ToolInfoParamsSchema>; export class ToolInfoTool extends BaseTool { private describe: () => ToolCapabilityDescriptor[]; constructor( context: ToolContext, describe: () => ToolCapabilityDescriptor[], ) { super(context); this.describe = describe; } register(): void { this.registerTool( "entrez_tool_info", "Retrieve structured capability metadata for a specific tool.", ToolInfoParamsShape, async (params: ToolInfoParams) => { const descriptors = this.describe(); const query = params.tool.toLowerCase(); const match = descriptors.find((cap) => { const id = cap.tool.toLowerCase(); const aliasList = (cap.metadata as { aliases?: string[] } | undefined)?.aliases ?? []; return ( id === query || aliasList.map((alias) => alias.toLowerCase()).includes(query) ); }); if (!match) { return this.errorResult( `No tool metadata found for '${params.tool}'`, [ "Use 'entrez_capabilities' to list all tools", "Check tool name spelling or try an alias", ], ); } if (params.format === "json") { const payload = params.include_metadata ? match : { ...match, metadata: undefined }; return this.structuredResult( { tool: payload }, `Structured metadata for ${match.tool} (JSON)`, ); } const operations = (match.operations ?? []) .map((op) => op.name) .join(", "); const summary = [ `**${match.tool}**`, match.summary, operations ? `Operations: ${operations}` : "No documented operations.", ].join("\n"); const toolPayload = params.include_metadata ? match : { ...match, metadata: undefined }; return this.structuredResult({ tool: toolPayload }, summary); }, { title: "Tool Metadata Inspector", outputSchema: toolInfoOutputSchema, }, ); } override getCapabilities(): ToolCapabilityDescriptor { return { tool: "entrez_tool_info", summary: "Get per-tool metadata in structured JSON or human-readable form.", contexts: ["capability_discovery", "debugging"], metadata: {}, }; } }

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/QuentinCody/entrez-mcp-server'

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