get_node_at_position
Retrieve detailed AST node information at a specific cursor position for debugging, code analysis, refactoring, and IDE integration.
Instructions
Get detailed AST node information at a specific cursor position. Perfect for debugging and precise analysis.
Examples: • Debug syntax errors: get_node_at_position(15, 23) to understand what's at error location • Understand code structure: get_node_at_position(line, col) to see AST node type at cursor • Refactoring assistance: get_node_at_position(line, col) to identify exact node before transformation • IDE integration: get_node_at_position(line, col) for hover information • Pattern development: get_node_at_position(line, col) to understand node structure for pattern writing
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Line number (1-based) - the line where cursor is positioned | |
| column | Yes | Column number (0-based) - the character position within the line |
Implementation Reference
- src/index.ts:961-1014 (handler)The primary handler function that executes the tool logic: checks for loaded AST, uses tree.nodeAt(line, column) to find the node, builds a detailed nodeInfo object, and returns formatted text response.private async getNodeAtPosition(args: { line: number; column: number }) { if (!this.currentAST) { return { content: [{ type: "text", text: "No AST loaded. Please use parse_code first.", }], isError: true, }; } try { const node = this.currentAST.tree.nodeAt(args.line, args.column); if (!node) { return { content: [{ type: "text", text: `No node found at position ${args.line}:${args.column}`, }], }; } const nodeInfo = { type: node.type, text: node.text.length > 200 ? node.text.slice(0, 200) + '...' : node.text, line: node.line, column: node.column, name: node.name, startPosition: node.startPosition, endPosition: node.endPosition, parent: node.parent ? { type: node.parent.type, name: node.parent.name, } : null, childrenCount: node.children.length, }; return { content: [{ type: "text", text: `Node at position ${args.line}:${args.column}:\n${JSON.stringify(nodeInfo, null, 2)}`, }], }; } catch (error) { return { content: [{ type: "text", text: `Error getting node at position: ${error instanceof Error ? error.message : String(error)}`, }], isError: true, }; } }
- src/index.ts:351-364 (schema)Input schema defining the required parameters: line (1-based number) and column (0-based number).inputSchema: { type: "object", properties: { line: { type: "number", description: "Line number (1-based) - the line where cursor is positioned" }, column: { type: "number", description: "Column number (0-based) - the character position within the line" } }, required: ["line", "column"], },
- src/index.ts:349-365 (registration)Tool registration entry in the MCP server's tools list, including name, description, and input schema.name: "get_node_at_position", description: "Get detailed AST node information at a specific cursor position. Perfect for debugging and precise analysis.\n\nExamples:\n• Debug syntax errors: get_node_at_position(15, 23) to understand what's at error location\n• Understand code structure: get_node_at_position(line, col) to see AST node type at cursor\n• Refactoring assistance: get_node_at_position(line, col) to identify exact node before transformation\n• IDE integration: get_node_at_position(line, col) for hover information\n• Pattern development: get_node_at_position(line, col) to understand node structure for pattern writing", inputSchema: { type: "object", properties: { line: { type: "number", description: "Line number (1-based) - the line where cursor is positioned" }, column: { type: "number", description: "Column number (0-based) - the character position within the line" } }, required: ["line", "column"], }, },
- src/index.ts:440-441 (registration)Dispatch case in the central request handler switch that routes tool calls to the getNodeAtPosition method.case "get_node_at_position": return await this.getNodeAtPosition(args as { line: number; column: number });