{"id":31559677,"url":"https://github.com/thenamankumar/open-devtools","last_synced_at":"2025-10-07T15:54:43.469Z","repository":{"id":317459851,"uuid":"1067491164","full_name":"thenamankumar/open-devtools","owner":"thenamankumar","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-01T02:25:01.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-01T02:48:34.520Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thenamankumar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-30T23:58:24.000Z","updated_at":"2025-10-01T02:25:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"82731eab-45a2-470c-a1d8-e3a4095f333a","html_url":"https://github.com/thenamankumar/open-devtools","commit_stats":null,"previous_names":["thenamankumar/open-devtools"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/thenamankumar/open-devtools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenamankumar%2Fopen-devtools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenamankumar%2Fopen-devtools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenamankumar%2Fopen-devtools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenamankumar%2Fopen-devtools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thenamankumar","download_url":"https://codeload.github.com/thenamankumar/open-devtools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenamankumar%2Fopen-devtools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278802799,"owners_count":26048566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-05T01:55:21.527Z","updated_at":"2025-10-07T15:54:43.435Z","avatar_url":"https://github.com/thenamankumar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# open-devtools\n\n[![npm version](https://badge.fury.io/js/open-devtools.svg)](https://www.npmjs.com/package/open-devtools)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**All-in-one MCP server providing LSP diagnostics, linting, and code formatting for AI coding assistants.**\n\n## What is this?\n\n`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:\n\n- **LSP Diagnostics** - Real-time errors, warnings, and hints from language servers\n- **Linting** - Code quality checks via ESLint, Biome, and other linters  \n- **Formatting** - Auto-format code with industry-standard tools\n\n## Features\n\n- 🔍 **9 LSP Servers** - ESLint, Biome, TypeScript, Python, Go, Ruby, Rust, C#, Java\n- 🎨 **11 Formatters** - Prettier, Biome, gofmt, ruff, rubocop, clang-format, and more\n- ⚡ **40+ File Extensions** - Support for all major programming languages\n- 🚀 **Zero Configuration** - Works out of the box with auto-detection\n- ⚙️ **Fully Configurable** - Customize servers, formatters, and file extensions\n- 🔧 **3 MCP Tools** - `get_diagnostics`, `format_file`, `lint_file`\n\n## Supported Languages\n\n### LSP Servers (Diagnostics \u0026 Linting)\n\n| Language | Server | Extensions | Features |\n|----------|--------|------------|----------|\n| **JavaScript/TypeScript** | ESLint | `.js`, `.jsx`, `.ts`, `.tsx`, `.vue`, `.mjs`, `.cjs` | Linting, code quality |\n| **JavaScript/TypeScript/JSON** | Biome | `.js`, `.jsx`, `.ts`, `.tsx`, `.json`, `.jsonc` | Fast linting \u0026 formatting |\n| **TypeScript/JavaScript** | TypeScript | `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.mts`, `.cts` | Type checking, intellisense |\n| **Python** | Pyright | `.py`, `.pyi` | Type checking, imports |\n| **Go** | gopls | `.go` | Go tooling |\n| **Ruby** | ruby-lsp | `.rb`, `.rake` | Ruby analysis |\n| **Rust** | rust-analyzer | `.rs` | Rust diagnostics |\n| **C#** | OmniSharp | `.cs` | C# analysis |\n| **Java** | JDTLS | `.java` | Java diagnostics |\n\n### Formatters\n\n| Formatter | Languages | Extensions |\n|-----------|-----------|------------|\n| **Prettier** | JS/TS, HTML, CSS, Markdown, JSON, YAML | 20+ extensions |\n| **Biome** | JS/TS, JSON | Same as Prettier |\n| **gofmt** | Go | `.go` |\n| **ruff** | Python | `.py`, `.pyi` |\n| **rubocop** | Ruby | `.rb`, `.rake`, `.gemspec`, `.ru` |\n| **standardrb** | Ruby | `.rb`, `.rake`, `.gemspec`, `.ru` |\n| **clang-format** | C/C++ | `.c`, `.cpp`, `.h`, etc. |\n| **ktlint** | Kotlin | `.kt`, `.kts` |\n| **zig fmt** | Zig | `.zig`, `.zon` |\n| **mix format** | Elixir | `.ex`, `.exs`, etc. |\n| **htmlbeautifier** | ERB/HTML | `.erb`, `.html.erb` |\n\n## Installation\n\n### Prerequisites\n\n**Important:** The MCP server does not auto-install dependencies. You must manually install the language servers and formatters you need.\n\n**Auto-installed (via `bunx`):** The following tools download automatically on first use:\n- **ESLint** language server (requires ESLint installed in your project)\n- **TypeScript** language server\n- **Biome** language server and formatter (formatter requires `biome.json` config)\n- **Prettier** formatter (requires Prettier in your project's `package.json`)\n\nInstall other tools you'll use:\n\n```bash\n# JavaScript/TypeScript - install in your project for ESLint/Prettier to work\nnpm install --save-dev eslint prettier\n\n# Python  \npip install pyright ruff\n\n# Go\ngo install golang.org/x/tools/gopls@latest\n\n# Ruby\ngem install ruby-lsp rubocop standardrb\n\n# Rust\nrustup component add rust-analyzer\n\n# C/C++, Kotlin, Zig, Elixir (install as needed)\n# See language-specific documentation\n```\n\n### Using with Claude Desktop\n\nAdd to your Claude Desktop configuration:\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"open-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"open-devtools\"]\n    }\n  }\n}\n```\n\n### Using with Cline (VS Code)\n\n```json\n{\n  \"mcpServers\": {\n    \"open-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"open-devtools\"]\n    }\n  }\n}\n```\n\n### Using with Amp\n\n```json\n{\n  \"amp.mcpServers\": {\n    \"open-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"open-devtools\"]\n    }\n  }\n}\n```\n\n## Available Tools\n\n### `get_diagnostics`\n\nGet LSP diagnostics (errors, warnings, hints) for a file. Automatically starts the appropriate language server if needed.\n\n**Parameters:**\n- `filePath` (string, required) - Absolute path to the file\n\n**Example:**\n```\nDiagnostics for /path/to/file.ts:\n\nERROR [10:5] Cannot find name 'foo'\nWARN [15:12] 'bar' is declared but never used\nINFO [20:1] File is a CommonJS module\n```\n\n### `format_file`\n\nFormat a file using the appropriate formatter. Automatically detects the formatter based on file extension and project configuration.\n\n**Parameters:**\n- `filePath` (string, required) - Absolute path to the file\n\n**Example:**\n```\nSuccessfully formatted /path/to/file.ts using prettier\n```\n\n### `lint_file`\n\nGet linting information for a file.\n\n**Note:** Most linting is handled by LSP servers through `get_diagnostics` (ESLint, Biome, etc.). Use `get_diagnostics` for comprehensive linting diagnostics.\n\n## Configuration\n\nConfigure LSP servers and formatters using environment variables:\n\n```json\n{\n  \"mcpServers\": {\n    \"open-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"open-devtools\"],\n      \"env\": {\n        \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"eslint\\\":{\\\"disabled\\\":false}}\",\n        \"OPEN_DEVTOOLS_FORMATTER_CONFIG\": \"{\\\"prettier\\\":{\\\"disabled\\\":false}}\"\n      }\n    }\n  }\n}\n```\n\n### LSP Configuration Structure\n\n```typescript\n{\n  \"server-name\": {\n    \"disabled\": false,           // Set to true to disable\n    \"command\": [\"cmd\", \"args\"],  // Override command\n    \"extensions\": [\".ext\"],      // Override file extensions\n    \"env\": {                     // Environment variables\n      \"VAR\": \"value\"\n    },\n    \"initialization\": {}         // LSP initialization options\n  }\n}\n```\n\n### Formatter Configuration Structure\n\n```typescript\n{\n  \"formatter-name\": {\n    \"disabled\": false,              // Set to true to disable\n    \"command\": [\"cmd\", \"$FILE\"],    // Override command ($FILE placeholder)\n    \"extensions\": [\".ext\"],         // Override file extensions\n    \"environment\": {                // Environment variables\n      \"VAR\": \"value\"\n    }\n  }\n}\n```\n\n### Available Server and Formatter Names\n\n**LSP Servers:**\n- `eslint` - JavaScript/TypeScript linting\n- `biome` - Fast JS/TS/JSON linting \u0026 formatting  \n- `typescript` - TypeScript type checking\n- `pyright` - Python type checking\n- `gopls` - Go language server\n- `ruby-lsp` - Ruby language server\n- `rust-analyzer` - Rust language server\n- `omnisharp` - C# language server\n- `jdtls` - Java language server\n\n**Formatters:**\n- `prettier` - Multi-language formatter\n- `biome` - Fast JS/TS/JSON formatter\n- `gofmt` - Go formatter\n- `ruff` - Python formatter\n- `rubocop` - Ruby formatter with auto-correct\n- `standardrb` - Ruby standard style formatter\n- `clang-format` - C/C++ formatter\n- `ktlint` - Kotlin formatter\n- `zig` - Zig formatter\n- `mix` - Elixir formatter\n- `htmlbeautifier` - ERB/HTML formatter\n\n### Configuration Examples\n\n#### Disable Built-in Servers/Formatters\n\n```json\n{\n  \"mcpServers\": {\n    \"open-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"open-devtools\"],\n      \"env\": {\n        \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"typescript\\\":{\\\"disabled\\\":true}}\",\n        \"OPEN_DEVTOOLS_FORMATTER_CONFIG\": \"{\\\"prettier\\\":{\\\"disabled\\\":true}}\"\n      }\n    }\n  }\n}\n```\n\n#### Override File Extensions\n\n```json\n{\n  \"env\": {\n    \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"biome\\\":{\\\"extensions\\\":[\\\".ts\\\",\\\".tsx\\\",\\\".js\\\"]}}\",\n    \"OPEN_DEVTOOLS_FORMATTER_CONFIG\": \"{\\\"prettier\\\":{\\\"extensions\\\":[\\\".js\\\",\\\".ts\\\"]}}\"\n  }\n}\n```\n\n#### Add Custom LSP Server\n\n```json\n{\n  \"env\": {\n    \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"lua-lsp\\\":{\\\"command\\\":[\\\"lua-language-server\\\",\\\"--stdio\\\"],\\\"extensions\\\":[\\\".lua\\\"]}}\"\n  }\n}\n```\n\n#### Add Custom Formatter\n\n```json\n{\n  \"env\": {\n    \"OPEN_DEVTOOLS_FORMATTER_CONFIG\": \"{\\\"stylua\\\":{\\\"command\\\":[\\\"stylua\\\",\\\"$FILE\\\"],\\\"extensions\\\":[\\\".lua\\\"]}}\"\n  }\n}\n```\n\n#### Configure with Environment Variables\n\n```json\n{\n  \"env\": {\n    \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"eslint\\\":{\\\"env\\\":{\\\"NODE_ENV\\\":\\\"development\\\"}}}\"\n  }\n}\n```\n\n#### Multiple Configurations\n\n```json\n{\n  \"env\": {\n    \"OPEN_DEVTOOLS_LSP_CONFIG\": \"{\\\"typescript\\\":{\\\"disabled\\\":true},\\\"pyright\\\":{\\\"disabled\\\":true},\\\"eslint\\\":{\\\"env\\\":{\\\"DEBUG\\\":\\\"true\\\"}}}\"\n  }\n}\n```\n\n## How It Works\n\n1. **Auto-Detection**: Detects language servers and formatters based on file extension and project configuration\n2. **Smart Caching**: Reuses language server instances across multiple requests to the same project\n3. **Project-Aware**: Finds project roots (e.g., `package.json`, `tsconfig.json`, `go.mod`) automatically\n4. **Config-Driven**: Respects your project's formatter configs (`.prettierrc`, `biome.json`, etc.)\n\n## Troubleshooting\n\n### No diagnostics/linting\n\n- Ensure the language server is installed (`which typescript-language-server`, etc.)\n- Check that your file is part of a valid project\n- Some servers require config files (e.g., `tsconfig.json` for TypeScript)\n\n### Formatter not found\n\nInstall the formatter for your language. See [Installation](#installation).\n\n### ESLint not working\n\n- Install ESLint language server: `npm install -g vscode-eslint-language-server`\n- Ensure ESLint is configured in your project (`.eslintrc.*` or `eslint.config.js`)\n- Make sure ESLint is installed in your project: `npm install --save-dev eslint`\n\n## Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. Fork the repository: https://github.com/thenamankumar/open-devtools\n2. Create a feature branch: `git checkout -b feature/your-feature`\n3. Make your changes and add tests\n4. Run tests: `bun test`\n5. Run typecheck: `bun run typecheck`\n6. Commit your changes: `git commit -am 'Add some feature'`\n7. Push to the branch: `git push origin feature/your-feature`\n8. Submit a pull request\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/thenamankumar/open-devtools.git\ncd open-devtools\n\n# Install dependencies\nbun install\n\n# Run tests\nbun test\n\n# Run typecheck\nbun run typecheck\n\n# Run in development mode\nbun run dev\n```\n\n### Adding New LSP Servers or Formatters\n\nUse the configuration system to test custom servers/formatters before submitting a PR. See the [Configuration](#configuration) section for examples.\n\n## Issues \u0026 Support\n\n- **Bug Reports**: [GitHub Issues](https://github.com/thenamankumar/open-devtools/issues)\n- **Feature Requests**: [GitHub Issues](https://github.com/thenamankumar/open-devtools/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/thenamankumar/open-devtools/discussions)\n\n## License\n\nMIT License - see [LICENSE](./LICENSE) file for details\n\nCopyright (c) 2025 Naman Kumar\n\n## Related Projects\n\n- [Model Context Protocol](https://modelcontextprotocol.io) - Protocol specification\n- [MCP Servers](https://github.com/modelcontextprotocol/servers) - Official MCP servers collection\n\n## Acknowledgments\n\nThis project combines functionality from various language servers and formatters. Thanks to all the maintainers of:\n- TypeScript, ESLint, Biome, Prettier\n- Pyright, gopls, rust-analyzer, ruby-lsp\n- And all other tools integrated into this server\n\n---\n\n**Star ⭐ this repo if you find it useful!**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenamankumar%2Fopen-devtools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthenamankumar%2Fopen-devtools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenamankumar%2Fopen-devtools/lists"}