一个提供语言服务器协议(LSP)功能的模型上下文协议(MCP)服务器,使大型语言模型(LLMs)/AI代理能够从代码库中获取语言感知的上下文。
输入:
使用LSP给我以下TypeScript代码的见解:
let foo = "bar";
function x() {
let foo = 123;
console.log(foo);
}
x();
console.log(foo);
输出:
我将使用LSP(语言服务器协议)来分析您的TypeScript代码。让我分解一下发生了什么:
这是代码的作用以及LSP分析提供的见解:
1. 变量遮蔽:
有两个名为foo的变量:
全局foo(字符串类型),初始化值为"bar"
函数x()内的局部foo(数字类型),初始化值为123
2. 执行流程:
首先,声明并赋值全局foo为"bar"
当调用函数x()时,声明并赋值局部foo为123
函数内部的console.log(foo)输出123(局部变量)
函数执行完毕后,console.log(foo)输出"bar"(全局变量)
3. 作用域隔离:
LSP确认TypeScript正确识别了不同的类型:
全局foo是字符串类型
函数内的局部foo是数字类型
对局部foo的修改不会影响全局foo
这是一个典型的JavaScript/TypeScript变量遮蔽的例子,在其作用域内,同名的局部变量优先于全局变量。
此功能处于概念验证阶段。
修改claude_desktop_config.json(如MCP文档所述)如下:
{
"mcpServers": {
"lsp": {
"command": "docker",
"args": ["run", "-i", "--rm", "docker.io/jonrad/lsp-mcp:0.3.1"]
}
}
}
您可能希望通过传递docker -v /local_dir:/remote_dir共享一些文件。然后您可以询问Claude关于/remote_dir/<filename>中的文件。
注意:Claude Desktop似乎对npx很挑剔。有时它会说MCP失败,但工具仍然可以工作。我会稍后再研究这个问题...😊
{
"mcpServers": {
"lsp": {
"command": "npx",
"args": ["-y", "--silent", "git+https://github.com/jonrad/lsp-mcp", "--lsp", "npx -y --silent -p 'typescript@5.7.3' -p 'typescript-language-server@4.3.3' typescript-language-server --stdio"]
}
}
}
这将为Claude提供TypeScript语言服务器的LSP功能。您可以通过切换--lsp参数(然后重新启动Claude)来修改语言服务器。
同时支持多种LSP尚未实现。
遵循Cursor提供的说明。对于设置,选择Type = command和Command = docker run ...如上所述用于Claude(例如docker run -i --rm -v <LOCAL_DIR>:<REMOTE_DIR> jonrad/lsp-mcp:<version>)
遵循Claude的说明,但配置文件位于~/.llm/config.json
yarn
yarn mcp-cli # 交互式MCP工具,帮助开发
yarn dev --help # 获取CLI帮助
这只是我最终想要做的事情的列表。这些没有时间表或顺序。