
Security News
GitHub Actions Checkout Now Blocks Risky pull_request_target Checkouts
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.
tree-hugger-js-mcp
Advanced tools
MCP server for JavaScript/TypeScript code analysis using tree-hugger-js
An MCP (Model Context Protocol) server that provides AI agents with powerful JavaScript/TypeScript code analysis and transformation capabilities using the tree-hugger-js library.
function, class[name="MyClass"])Try immediately with npx - no installation required:
# Use with Claude Code or any MCP client
npx tree-hugger-js-mcp
# Install globally for repeated use
npm install -g tree-hugger-js-mcp
# Then run anywhere
tree-hugger-js-mcp
# Clone and build from source
git clone https://github.com/qckfx/tree-hugger-js-mcp.git
cd tree-hugger-js-mcp
npm install
npm run build
npm start
Add to your MCP client configuration:
{
"mcpServers": {
"tree-hugger-js": {
"command": "npx",
"args": ["tree-hugger-js-mcp"]
}
}
}
{
"mcpServers": {
"tree-hugger-js": {
// If installed globally
"command": "tree-hugger-js-mcp"
// Or if built from source
"command": "node",
"args": ["/path/to/tree-hugger-js-mcp/build/index.js"]
}
}
}
parse_codeParse JavaScript/TypeScript code from file or string.
Parameters:
source (string): File path or code string to parseisFilePath (boolean, optional): Whether source is a file path (auto-detected if not provided)language (string, optional): Language to use (javascript, typescript, jsx, tsx)Example:
// Parse a file
await callTool("parse_code", {
source: "./src/app.js",
isFilePath: true
});
// Parse code string
await callTool("parse_code", {
source: "function hello() { console.log('world'); }"
});
find_patternFind first node matching a pattern.
Parameters:
pattern (string): Pattern to match using tree-hugger-js syntaxExamples:
// Find any function
await callTool("find_pattern", { pattern: "function" });
// Find async functions
await callTool("find_pattern", { pattern: "function[async]" });
// Find class by name
await callTool("find_pattern", { pattern: "class[name='MyClass']" });
find_all_patternFind all nodes matching a pattern.
Parameters:
pattern (string): Pattern to matchlimit (number, optional): Maximum matches to returnget_functionsGet all functions with details.
Parameters:
includeAnonymous (boolean, optional): Include anonymous functions (default: true)asyncOnly (boolean, optional): Only return async functions (default: false)get_classesGet all classes with methods and properties.
Parameters:
includeProperties (boolean, optional): Include class properties (default: true)includeMethods (boolean, optional): Include class methods (default: true)get_importsGet all import statements.
Parameters:
includeTypeImports (boolean, optional): Include TypeScript type-only imports (default: true)rename_identifierRename all occurrences of an identifier.
Parameters:
oldName (string): Current identifier namenewName (string): New identifier namepreview (boolean, optional): Return preview only (default: false)Example:
await callTool("rename_identifier", {
oldName: "fetchData",
newName: "fetchUserData",
preview: true
});
remove_unused_importsRemove unused import statements.
Parameters:
preview (boolean, optional): Return preview only (default: false)transform_codeApply multiple transformations in sequence.
Parameters:
operations (array): Array of transformation operationspreview (boolean, optional): Return preview only (default: false)Example:
await callTool("transform_code", {
operations: [
{ type: "rename", parameters: { oldName: "oldFunc", newName: "newFunc" } },
{ type: "removeUnusedImports" },
{ type: "replaceIn", parameters: { nodeType: "string", pattern: /localhost/g, replacement: "api.example.com" } }
],
preview: true
});
insert_codeInsert code before or after nodes matching a pattern.
Parameters:
pattern (string): Pattern to match for insertion pointscode (string): Code to insertposition (string): "before" or "after"preview (boolean, optional): Return preview only (default: false)get_node_at_positionGet AST node at specific line and column.
Parameters:
line (number): Line number (1-based)column (number): Column number (0-based)analyze_scopesAnalyze variable scopes and bindings.
Parameters:
includeBuiltins (boolean, optional): Include built-in identifiers (default: false)The server provides three resources for accessing internal state:
ast://currentCurrent parsed AST state with metadata and statistics.
ast://analysisResults from the most recent code analysis (functions, classes, imports).
ast://transformsHistory of code transformations and available operations.
Tree-hugger-js uses intuitive patterns instead of verbose tree-sitter node types:
function - Any function (declaration, expression, arrow, method)class - Class declarations and expressionsstring - String and template literalsimport/export - Import/export statementscall - Function callsloop - For, while, do-while loops[name="foo"] - Nodes with specific name[async] - Async functions[text*="test"] - Nodes containing textclass method - Methods inside classesfunction > return - Return statements directly in functions:has() and :not() pseudo-selectors// Parse and analyze a React component
await callTool("parse_code", { source: "./components/UserProfile.jsx" });
// Get all functions
const functions = await callTool("get_functions", { asyncOnly: true });
// Find JSX elements
const jsxElements = await callTool("find_all_pattern", { pattern: "jsx" });
// Rename a function and remove unused imports
await callTool("transform_code", {
operations: [
{ type: "rename", parameters: { oldName: "getUserData", newName: "fetchUserProfile" } },
{ type: "removeUnusedImports" }
]
});
// Find all async functions that call console.log
await callTool("find_all_pattern", {
pattern: "function[async]:has(call[text*='console.log'])"
});
// Find classes with constructor methods
await callTool("find_all_pattern", {
pattern: "class:has(method[name='constructor'])"
});
# Install dependencies
npm install
# Build the project
npm run build
# Watch mode for development
npm run dev
# Test with MCP inspector
npm run inspector
The server provides detailed error messages and suggestions:
MIT
FAQs
MCP server for JavaScript/TypeScript code analysis using tree-hugger-js
The npm package tree-hugger-js-mcp receives a total of 19 weekly downloads. As such, tree-hugger-js-mcp popularity was classified as not popular.
We found that tree-hugger-js-mcp demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.