Skip to content

Repository files navigation

open-devtools

npm version License: MIT

All-in-one MCP server providing LSP diagnostics, linting, and code formatting for AI coding assistants.

What is this?

open-devtools is a comprehensive Model Context Protocol (MCP) server that brings professional developer tooling to AI assistants like Claude Desktop, Cline, and other MCP-compatible applications. It combines:

  • LSP Diagnostics - Real-time errors, warnings, and hints from language servers
  • Linting - Code quality checks via ESLint, Biome, and other linters
  • Formatting - Auto-format code with industry-standard tools

Features

  • 🔍 9 LSP Servers - ESLint, Biome, TypeScript, Python, Go, Ruby, Rust, C#, Java
  • 🎨 11 Formatters - Prettier, Biome, gofmt, ruff, rubocop, clang-format, and more
  • 40+ File Extensions - Support for all major programming languages
  • 🚀 Zero Configuration - Works out of the box with auto-detection
  • ⚙️ Fully Configurable - Customize servers, formatters, and file extensions
  • 🔧 3 MCP Tools - get_diagnostics, format_file, lint_file

Supported Languages

LSP Servers (Diagnostics & Linting)

Language Server Extensions Features
JavaScript/TypeScript ESLint .js, .jsx, .ts, .tsx, .vue, .mjs, .cjs Linting, code quality
JavaScript/TypeScript/JSON Biome .js, .jsx, .ts, .tsx, .json, .jsonc Fast linting & formatting
TypeScript/JavaScript TypeScript .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts Type checking, intellisense
Python Pyright .py, .pyi Type checking, imports
Go gopls .go Go tooling
Ruby ruby-lsp .rb, .rake Ruby analysis
Rust rust-analyzer .rs Rust diagnostics
C# OmniSharp .cs C# analysis
Java JDTLS .java Java diagnostics

Formatters

Formatter Languages Extensions
Prettier JS/TS, HTML, CSS, Markdown, JSON, YAML 20+ extensions
Biome JS/TS, JSON Same as Prettier
gofmt Go .go
ruff Python .py, .pyi
rubocop Ruby .rb, .rake, .gemspec, .ru
standardrb Ruby .rb, .rake, .gemspec, .ru
clang-format C/C++ .c, .cpp, .h, etc.
ktlint Kotlin .kt, .kts
zig fmt Zig .zig, .zon
mix format Elixir .ex, .exs, etc.
htmlbeautifier ERB/HTML .erb, .html.erb

Installation

Prerequisites

Important: The MCP server does not auto-install dependencies. You must manually install the language servers and formatters you need.

Auto-installed (via bunx): The following tools download automatically on first use:

  • ESLint language server (requires ESLint installed in your project)
  • TypeScript language server
  • Biome language server and formatter (formatter requires biome.json config)
  • Prettier formatter (requires Prettier in your project's package.json)

Install other tools you'll use:

# JavaScript/TypeScript - install in your project for ESLint/Prettier to work
npm install --save-dev eslint prettier

# Python  
pip install pyright ruff

# Go
go install golang.org/x/tools/gopls@latest

# Ruby
gem install ruby-lsp rubocop standardrb

# Rust
rustup component add rust-analyzer

# C/C++, Kotlin, Zig, Elixir (install as needed)
# See language-specific documentation

Using with Claude Desktop

Add to your Claude Desktop configuration:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "open-devtools": {
      "command": "npx",
      "args": ["-y", "open-devtools"]
    }
  }
}

Using with Cline (VS Code)

{
  "mcpServers": {
    "open-devtools": {
      "command": "npx",
      "args": ["-y", "open-devtools"]
    }
  }
}

Using with Amp

{
  "amp.mcpServers": {
    "open-devtools": {
      "command": "npx",
      "args": ["-y", "open-devtools"]
    }
  }
}

Available Tools

get_diagnostics

Get LSP diagnostics (errors, warnings, hints) for a file. Automatically starts the appropriate language server if needed.

Parameters:

  • filePath (string, required) - Absolute path to the file

Example:

Diagnostics for /path/to/file.ts:

ERROR [10:5] Cannot find name 'foo'
WARN [15:12] 'bar' is declared but never used
INFO [20:1] File is a CommonJS module

format_file

Format a file using the appropriate formatter. Automatically detects the formatter based on file extension and project configuration.

Parameters:

  • filePath (string, required) - Absolute path to the file

Example:

Successfully formatted /path/to/file.ts using prettier

lint_file

Get linting information for a file.

Note: Most linting is handled by LSP servers through get_diagnostics (ESLint, Biome, etc.). Use get_diagnostics for comprehensive linting diagnostics.

Configuration

Configure LSP servers and formatters using environment variables:

{
  "mcpServers": {
    "open-devtools": {
      "command": "npx",
      "args": ["-y", "open-devtools"],
      "env": {
        "OPEN_DEVTOOLS_LSP_CONFIG": "{\"eslint\":{\"disabled\":false}}",
        "OPEN_DEVTOOLS_FORMATTER_CONFIG": "{\"prettier\":{\"disabled\":false}}"
      }
    }
  }
}

LSP Configuration Structure

{
  "server-name": {
    "disabled": false,           // Set to true to disable
    "command": ["cmd", "args"],  // Override command
    "extensions": [".ext"],      // Override file extensions
    "env": {                     // Environment variables
      "VAR": "value"
    },
    "initialization": {}         // LSP initialization options
  }
}

Formatter Configuration Structure

{
  "formatter-name": {
    "disabled": false,              // Set to true to disable
    "command": ["cmd", "$FILE"],    // Override command ($FILE placeholder)
    "extensions": [".ext"],         // Override file extensions
    "environment": {                // Environment variables
      "VAR": "value"
    }
  }
}

Available Server and Formatter Names

LSP Servers:

  • eslint - JavaScript/TypeScript linting
  • biome - Fast JS/TS/JSON linting & formatting
  • typescript - TypeScript type checking
  • pyright - Python type checking
  • gopls - Go language server
  • ruby-lsp - Ruby language server
  • rust-analyzer - Rust language server
  • omnisharp - C# language server
  • jdtls - Java language server

Formatters:

  • prettier - Multi-language formatter
  • biome - Fast JS/TS/JSON formatter
  • gofmt - Go formatter
  • ruff - Python formatter
  • rubocop - Ruby formatter with auto-correct
  • standardrb - Ruby standard style formatter
  • clang-format - C/C++ formatter
  • ktlint - Kotlin formatter
  • zig - Zig formatter
  • mix - Elixir formatter
  • htmlbeautifier - ERB/HTML formatter

Configuration Examples

Disable Built-in Servers/Formatters

{
  "mcpServers": {
    "open-devtools": {
      "command": "npx",
      "args": ["-y", "open-devtools"],
      "env": {
        "OPEN_DEVTOOLS_LSP_CONFIG": "{\"typescript\":{\"disabled\":true}}",
        "OPEN_DEVTOOLS_FORMATTER_CONFIG": "{\"prettier\":{\"disabled\":true}}"
      }
    }
  }
}

Override File Extensions

{
  "env": {
    "OPEN_DEVTOOLS_LSP_CONFIG": "{\"biome\":{\"extensions\":[\".ts\",\".tsx\",\".js\"]}}",
    "OPEN_DEVTOOLS_FORMATTER_CONFIG": "{\"prettier\":{\"extensions\":[\".js\",\".ts\"]}}"
  }
}

Add Custom LSP Server

{
  "env": {
    "OPEN_DEVTOOLS_LSP_CONFIG": "{\"lua-lsp\":{\"command\":[\"lua-language-server\",\"--stdio\"],\"extensions\":[\".lua\"]}}"
  }
}

Add Custom Formatter

{
  "env": {
    "OPEN_DEVTOOLS_FORMATTER_CONFIG": "{\"stylua\":{\"command\":[\"stylua\",\"$FILE\"],\"extensions\":[\".lua\"]}}"
  }
}

Configure with Environment Variables

{
  "env": {
    "OPEN_DEVTOOLS_LSP_CONFIG": "{\"eslint\":{\"env\":{\"NODE_ENV\":\"development\"}}}"
  }
}

Multiple Configurations

{
  "env": {
    "OPEN_DEVTOOLS_LSP_CONFIG": "{\"typescript\":{\"disabled\":true},\"pyright\":{\"disabled\":true},\"eslint\":{\"env\":{\"DEBUG\":\"true\"}}}"
  }
}

How It Works

  1. Auto-Detection: Detects language servers and formatters based on file extension and project configuration
  2. Smart Caching: Reuses language server instances across multiple requests to the same project
  3. Project-Aware: Finds project roots (e.g., package.json, tsconfig.json, go.mod) automatically
  4. Config-Driven: Respects your project's formatter configs (.prettierrc, biome.json, etc.)

Troubleshooting

No diagnostics/linting

  • Ensure the language server is installed (which typescript-language-server, etc.)
  • Check that your file is part of a valid project
  • Some servers require config files (e.g., tsconfig.json for TypeScript)

Formatter not found

Install the formatter for your language. See Installation.

ESLint not working

  • Install ESLint language server: npm install -g vscode-eslint-language-server
  • Ensure ESLint is configured in your project (.eslintrc.* or eslint.config.js)
  • Make sure ESLint is installed in your project: npm install --save-dev eslint

Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository: https://github.com/thenamankumar/open-devtools
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Make your changes and add tests
  4. Run tests: bun test
  5. Run typecheck: bun run typecheck
  6. Commit your changes: git commit -am 'Add some feature'
  7. Push to the branch: git push origin feature/your-feature
  8. Submit a pull request

Development Setup

# Clone the repository
git clone https://github.com/thenamankumar/open-devtools.git
cd open-devtools

# Install dependencies
bun install

# Run tests
bun test

# Run typecheck
bun run typecheck

# Run in development mode
bun run dev

Adding New LSP Servers or Formatters

Use the configuration system to test custom servers/formatters before submitting a PR. See the Configuration section for examples.

Issues & Support

License

MIT License - see LICENSE file for details

Copyright (c) 2025 Naman Kumar

Related Projects

Acknowledgments

This project combines functionality from various language servers and formatters. Thanks to all the maintainers of:

  • TypeScript, ESLint, Biome, Prettier
  • Pyright, gopls, rust-analyzer, ruby-lsp
  • And all other tools integrated into this server

Star ⭐ this repo if you find it useful!

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages