Skip to main content
Glama

Token Saver MCP

by jerry426
get-call-hierarchy.ts4.28 kB
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' import type { ToolMetadata } from '../types' import { z } from 'zod' import { getCallHierarchy } from '../lsp-implementations' import { normalizeParams } from './utils' /** * Tool metadata for documentation generation * This is parsed by generate-instructions.ts */ export const metadata: ToolMetadata = { name: 'get_call_hierarchy', title: 'Get Call Hierarchy', category: 'lsp' as const, description: 'Trace function calls - find who calls a function (incoming) or what a function calls (outgoing).', // Documentation sections docs: { brief: 'Trace function call relationships - who calls this function or what does it call', parameters: { uri: 'The file URI in encoded format (e.g., "file:///path/to/file.ts")', line: 'The line number (0-based)', character: 'The character position (0-based)', direction: 'Direction: "incoming" for callers, "outgoing" for callees (default: incoming)', }, examples: [ { title: 'Find who calls this function (incoming)', code: `get_call_hierarchy({ uri: "file:///src/api/users.ts", line: 25, character: 10, direction: "incoming" }) // Returns: all functions that call this function`, }, { title: 'Find what this function calls (outgoing)', code: `get_call_hierarchy({ uri: "file:///src/services/auth.ts", line: 15, character: 18, direction: "outgoing" }) // Returns: all functions called by this function`, }, { title: 'Analyze function dependencies', code: `// Check what a function depends on const outgoing = get_call_hierarchy({ uri: "file:///src/utils/validation.ts", line: 8, character: 12, direction: "outgoing" }) // Then check its impact const incoming = get_call_hierarchy({ uri: "file:///src/utils/validation.ts", line: 8, character: 12, direction: "incoming" })`, }, ], workflow: { usedWith: ['get_references', 'get_definition'], followedBy: ['get_hover', 'rename_symbol'], description: 'Essential for understanding function relationships and code flow', }, tips: [ 'Use "incoming" to find callers before modifying a function', 'Use "outgoing" to understand function dependencies', 'Perfect for impact analysis and refactoring planning', 'Shows call hierarchy tree with file locations', ], performance: { speed: '< 300ms for typical functions', tokenSavings: '90-95% vs manual code tracing', accuracy: '100% (semantic call graph analysis)', buffering: 'No buffering needed - typically moderate-sized responses', }, }, } // Tool handler - single source of truth for execution export async function handler(args: any): Promise<any> { const normalized = normalizeParams(args) const handlerImpl = async ({ uri, line, character, direction }: { uri: string, line: number, character: number, direction?: 'incoming' | 'outgoing' }) => { const result = await getCallHierarchy(uri, line, character, direction || 'incoming') if (!result || result.length === 0) { return { content: [{ type: 'text', text: `No call hierarchy found for the symbol at the specified position (direction: ${direction || 'incoming'}).`, }], } } return { content: [{ type: 'text', text: JSON.stringify(result, null, 2), }], } } return handlerImpl(normalized) } // Tool registration function export function register(server: McpServer) { server.registerTool( metadata.name, { title: metadata.title, description: metadata.description, inputSchema: { uri: z.string().describe(metadata.docs.parameters?.uri || 'The file URI in encoded format'), line: z.number().describe(metadata.docs.parameters?.line || 'The line number (0-based)'), character: z.number().describe(metadata.docs.parameters?.character || 'The character position (0-based)'), direction: z.enum(['incoming', 'outgoing']).optional().describe(metadata.docs.parameters?.direction || 'Direction: "incoming" for callers, "outgoing" for callees (default: incoming)'), }, }, handler, ) }

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/jerry426/token-saver-mcp'

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