language server mcp
TypeScript-based MCP server designed to enhance code editing experiences by providing features such as hover information, code completion, and diagnostics.
TypeScript-based MCP server designed to enhance code editing experiences by providing features such as hover information, code completion, and diagnostics.
A Model Context Protocol (MCP) server providing language support for code editing.
This is a TypeScript-based MCP server designed to enhance code editing experiences by providing features such as hover information, code completion, and diagnostics. It demonstrates core MCP concepts by providing:
get_hover
: Get hover information for a position in a documentget_completions
: Get completion suggestions for a position in a documentget_diagnostics
: Get diagnostic information for a documentInstall dependencies:
npm install
Build the server:
npm run build
For development with auto-rebuild:
npm run watch
To use with Claude Desktop, add the server config:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"language-server-mcp": {
"command": "/path/to/language-server-mcp/build/index.js"
}
}
}
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspector
The Inspector will provide a URL to access debugging tools in your browser.
[
{
"description": "Get hover information for a position in a document",
"inputSchema": {
"properties": {
"character": {
"description": "Zero-based character offset for hover position",
"type": "number"
},
"content": {
"description": "The current content of the file",
"type": "string"
},
"filePath": {
"description": "Absolute or relative path to the source file",
"type": "string"
},
"languageId": {
"description": "The language identifier (e.g., "typescript", "javascript")",
"type": "string"
},
"line": {
"description": "Zero-based line number for hover position",
"type": "number"
},
"projectRoot": {
"description": "Important: Root directory of the project for resolving imports and node_modules where the tsconfig.json or jsconfig.json is located",
"type": "string"
}
},
"required": [
"languageId",
"filePath",
"content",
"line",
"character",
"projectRoot"
],
"type": "object"
},
"name": "get_hover"
},
{
"description": "Get completion suggestions for a position in a document",
"inputSchema": {
"properties": {
"character": {
"description": "Zero-based character offset for completion position",
"type": "number"
},
"content": {
"description": "The current content of the file",
"type": "string"
},
"filePath": {
"description": "Absolute or relative path to the source file",
"type": "string"
},
"languageId": {
"description": "The language identifier (e.g., "typescript", "javascript")",
"type": "string"
},
"line": {
"description": "Zero-based line number for completion position",
"type": "number"
},
"projectRoot": {
"description": "Important: Root directory of the project for resolving imports and node_modules where the tsconfig.json or jsconfig.json is located",
"type": "string"
}
},
"required": [
"languageId",
"filePath",
"content",
"line",
"character",
"projectRoot"
],
"type": "object"
},
"name": "get_completions"
},
{
"description": "Get diagnostic information for a document",
"inputSchema": {
"properties": {
"content": {
"description": "The current content of the file",
"type": "string"
},
"filePath": {
"description": "Absolute or relative path to the source file",
"type": "string"
},
"languageId": {
"description": "The language identifier (e.g., "typescript", "javascript")",
"type": "string"
},
"projectRoot": {
"description": "Important: Root directory of the project for resolving imports and node_modules where the tsconfig.json or jsconfig.json is located",
"type": "string"
}
},
"required": [
"languageId",
"filePath",
"content",
"projectRoot"
],
"type": "object"
},
"name": "get_diagnostics"
}
]