TypeScript LSP MCP 服务器
这个项目提供了一个模型上下文协议(Model Context Protocol, MCP)服务器,允许模型调用由原生(或本地)支持的TypeScript语言服务 tsgo 工具链。服务器启动 tsgo其基于标准I/O(stdio)的Language Server Protocol (LSP) 实现,并通过MCP工具提供了一套经过精选的分析工具(悬停提示、定义、引用、符号、诊断信息)。目标是通过构建在基于Go的TypeScript原生预览之上,保持对TypeScript的智能辅助轻量且快速。
特点/功能
- 使用
tsgo原生TypeScript编译器和语言服务器协议(LSP)以提升响应速度。 - 用于悬停、定义、引用、文档符号和诊断的MCP工具。
- 基于配置工作区中的磁盘文件,自动同步文档(打开/更改)。
- 带有可配置选项的CLI封装工具
tsgo二进制路径和额外参数。
要求
- Node.js ≥ 20.10(与……匹配)
engines在……中的限制/约束package.json)。 - “tsgo binary”可以翻译为“TSGO二进制文件”或“TSGO二进制程序”,具体取决于上下文和使用场景。这里,“tsgo”可能是一个特定的程序、软件或游戏的名称,而“binary”则指的是该程序或文件的二进制格式,即机器可直接执行的代码形式 来自 TypeScript 原生预览包:
npm install -g @typescript/native-preview(或者bun add -g @typescript/native-preview) 提供所需tsgo可执行文件。 tsgo必须支持通过标准输入输出(stdio)运行语言服务器协议(LSP)tsgo --lsp --stdio)。
安装
选项1:一键安装脚本
curl -fsSL https://raw.githubusercontent.com/CryogenicPlanet/ts-lsp-mcp/master/scripts/install.sh | bash该脚本下载最新的夜间构建版本,并将其安装到 ~/.ts-lsp-mcp/ts-lsp-mcp,并打印出一个短片段,你可以将其添加到你的shell配置文件中,以在你的(系统/环境中)暴露该二进制文件 PATH如果你尚未安装TypeScript原生预览版,请运行 npm install -g @typescript/native-preview (或Bun的等价物)在脚本完成后。
选项2:使用Bun从源代码构建
bun install
bun run src/cli.ts --workspace /absolute/path/to/your/project # development
# build a standalone binary
bun build src/cli.ts --compile --outfile dist/ts-lsp-mcpCLI 默认值 --workspace 到当前目录。当您想要检查不同的项目时,请传递一个明确的路径。
安装完成后,您可以直接运行服务器:
ts-lsp-mcp --workspace "$(pwd)"这个(或“该”) --workspace 当省略时,flag 默认为当前工作目录,因此 ts-lsp-mcp 独自一人通常就足够了。
MCP客户端集成
如果 ts-lsp-mcp 在你的(身上/上) PATH,使用 "command": ["ts-lsp-mcp", …] 在下面的代码片段中。否则,请将其替换为安装程序打印出的绝对路径。
Cursor
创建或更新 ~/.cursor/mcp.json:
{
"ts-lsp-mcp": {
"command": [
"ts-lsp-mcp",
"--workspace",
"$(pwd)"
]
}
}Claude Code (Claude Desktop)
创建 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) 或 %APPDATA%/Claude/claude_desktop_config.json (Windows/WSL) 配备:
{
"mcpServers": {
"ts-lsp-mcp": {
"command": "ts-lsp-mcp",
"args": [
"--workspace",
"$(pwd)"
]
}
}
}OpenAI Codex CLI
通过添加服务器条目 /mcp:
{
"ts": {
"command": "ts-lsp-mcp",
"args": [
"--workspace",
"$(pwd)"
]
}
}Google Gemini CLI
编辑 ~/.config/gemini/mcp.json (或同等学历):
{
"servers": {
"ts-lsp-mcp": {
"command": "ts-lsp-mcp",
"args": [
"--workspace",
"$(pwd)"
]
}
}
}Continue (VS Code / JetBrains)
添加到 ~/.continue/config.json:
{
"mcpServers": {
"ts-lsp-mcp": {
"command": "ts-lsp-mcp",
"args": [
"--workspace",
"$(pwd)"
]
}
}
}VS Code (Model Context Protocol Extension)
添加到你的 VS Code 设置中(settings.json):
{
"modelContextProtocol.servers": {
"ts-lsp-mcp": {
"command": "ts-lsp-mcp",
"args": [
"--workspace",
"$(pwd)"
]
}
}
}Zed
添加到 ~/.config/zed/mcp.toml:
[servers.ts-lsp-mcp]
command = "ts-lsp-mcp"
args = ["--workspace", "$(pwd)"]每个客户都替换为 ${workspaceFolder} (或其等效设置)与您打开的项目相关联,因此相同的配置可以在多个存储库中通用。
CLI 选项
- `--workspace
`LSP 应分析的文件的根目录(默认为当前目录)。
- `--tsgo
路径到 tsgo 可执行文件(默认为 tsgo on PATH`)。
--tsgo-arg传递给的额外参数tsgo lsp --stdio(可重复的)。--log-level最小日志详细程度(默认为info)。
服务器将热切地初始化TypeScript语言服务器协议(LSP),然后开始在标准输入输出(stdio)上监听MCP请求。
MCP 工具概述
| 工具名称 | 描述 |
|---|---|
typescript-hover | 返回零索引位置的悬停文本和Markdown内容。 |
typescript-definition 列出符号的定义位置。 | |
typescript-references | 查找引用(可选地包括声明)。 |
typescript-document-symbols | 输出层次结构文档符号。 |
typescript-diagnostics | 获取LSP为文件发布的最新诊断信息。 |
GitHub上的工作流程 .github/workflows/release.yml 每晚发布二进制文件(latest 为 macOS(arm64/x64)和 Linux(x64/arm64)发布的版本标签(release tag)。上述安装脚本默认从该发布版本中拉取内容。
所有文件路径必须位于配置的工作区内。行和字符采用零索引,以符合LSP(语言服务器协议)的要求。
示例MCP客户端配置
一个从服务器读取定义的客户端的示例JSON片段 ~/.config/mcp/servers:
{
"name": "ts-lsp-mcp",
"command": [
"node",
"/Users/you/path/to/ts-lsp-mcp/dist/cli.js",
"--workspace",
"/Users/you/path/to/workspace"
],
"env": {
"PATH": "/Users/you/.npm-global/bin:" // ensure tsgo is discoverable
}
}根据您的环境调整路径。如果 tsgo 不是你的(责任/义务/等,根据上下文具体确定) PATH,任一点 --tsgo 在可执行文件或设置中 PATH 因此。
发展
npm run dev增量式TypeScript构建(tsc --watch)。npm run build一次性TypeScript构建。
局限性
原住民 tsgo 工具链仍为预览版:几个TypeScript CLI标志(例如。, --build(声明发出)以及一些编辑器功能尚未实现。与基于JavaScript的稳定版本编译器相比可能存在差异,请根据预览版本的更新进行相应调整。
stdio传输的工作原理
服务器使用MCP(多协议控制器) StdioServerTransport因此,它通过标准输入/输出进行通信。MCP客户端(如Anthropics的Cursor或Claude Code集成)通常会启动该可执行文件,将其标准输出/输入与IDE会话连接起来,并发送包含服务器需要查看的工作区路径的协议消息。这意味着每个IDE会话或模型调用都会启动自己的进程,其工作目录以所需项目的根目录为基础,从而无需额外配置即可实现“当前文件夹”行为。
