Skip to main content
Glama
index.ts1.87 kB
export const TOOL_NAME_TEMPLATE = '<resource>.<action>'; // verb-first pattern export interface ToolDescriptionTemplateOptions { capability: string; boundaries: string; constraints?: string; requiresApproval?: boolean; recoveryHint?: string; } export function formatToolDescription( options: ToolDescriptionTemplateOptions ): string { const sentences: string[] = []; // Primary capability - ensure it ends with a period const capability = options.capability.trim(); sentences.push(capability.endsWith('.') ? capability : `${capability}.`); // Safety/boundaries - what it does NOT do if (options.boundaries) { const boundaries = options.boundaries.trim(); sentences.push( boundaries.startsWith('Never ') || boundaries.startsWith('Does not ') ? boundaries.endsWith('.') ? boundaries : `${boundaries}.` : `Never ${boundaries.endsWith('.') ? boundaries : `${boundaries}.`}` ); } // Approval flag (if write operation) if (options.requiresApproval) { sentences.push('May require explicit user approval from the host.'); } // Constraints (limits/requirements) if (options.constraints) { const constraints = options.constraints.trim(); sentences.push(constraints.endsWith('.') ? constraints : `${constraints}.`); } // Recovery hint (fallback action) if (options.recoveryHint) { const hint = options.recoveryHint.trim(); sentences.push(hint.endsWith('.') ? hint : `${hint}.`); } return sentences.join(' '); } export interface ErrorTemplateOptions { code: number; message: string; recovery?: string; docs?: string; } export function buildErrorTemplate( options: ErrorTemplateOptions ): Record<string, unknown> { return { code: options.code, message: options.message, recovery: options.recovery, docs: options.docs, }; }

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/kesslerio/attio-mcp-server'

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