语言服务器协议桥接器

Delphi LSP MCP Server 是一款连接模型上下文协议(MCP)和语言服务器协议(LSP)的桥接服务,支持Delphi和Free Pascal,为AI助手和其他MCP客户端提供语义代码智能功能。

  • by SkybuckFlying
  • Pascal
  • 本地部署
  • 25 星标
  • 更新于
在 GitHub 查看 SkybuckFlying/Delphi-LSP-MCP-Server

使用说明

Delphi LSP MCP服务器

一种模型上下文协议(MCP)服务器,向AI助手和其他MCP客户端公开语言服务器协议(LSP)功能。

同时支持:

  • 德尔福Embarcadero(DelphiLSP.exe)
  • 免费Pascal(pasls.exe)

目标规格

  • MCP规范: 2025-11-25
  • LSP规范: 3.17

特性

  • 主控程序↔ 使用JSON-RPC 2.0的LSP网桥
  • 基于stdio的传输
  • 动态工作空间发现
  • 人工智能代理的语义代码智能
  • Delphi和免费Pascal支持
  • 调试器同步支持(--wait)
  • 自动项目发现(.dpr / .lpr)
  • LSP重试逻辑和自动打开文档
  • 兼容:
    • 克劳德桌面版
    • Gemini CLI
    • 反重力
    • 其他MCP兼容客户端

支持的操作

  • 转到定义
  • 查找引用
  • 悬停信息
  • 代码补全
  • 工作空间符号搜索

项目信息

项目 详细信息
作者 Skybuck飞行
联系人 skybuck2000@hotmail.com
版本 0.08
存储库 https://github.com/SkybuckFlying/Delphi-LSP-MCP-Server

规格

  • MCP规范(2025-11-25)
    https://modelcontextprotocol.io/specification/2025-11-25

  • 语言服务器协议规范3.17
    https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/


需求

  • Windows操作系统
  • Delphi 13(RAD Studio 13.0+)或免费Pascal
  • DelphiLSP.exe 或 pasls.exe

建筑

Delphi集成开发环境

  1. 打开 DelphiLSPMCPServer.dpr
  2. 选择 项目→ Build

命令行

dcc64 DelphiLSPMCPServer.dpr

用法

命令行选项

DelphiLSPMCPServer [options]

Options:
  --lsp-path <path>      Path to LSP executable
  --workspace <path>     Workspace root or file:// URI
  --log-level <level>    debug, info, warning, error
  --debug                Enable verbose diagnostics
  --wait                 Wait for debugger before startup
  --help                 Show help

动态工作区发现

从v0.05开始,服务器可以自动确定活动工作区。

检测策略

  1. 主控程序 initialize 请求

    • 读取 rootUri 或 rootPath
  2. 当前工作目录回退

  3. 自动 .dpr / .lpr 项目检测

这允许AI代理动态切换项目,而无需重新启动服务器配置。


AI优化

存储库包括:

  • DelphiLSP.md

此文件指示AI代理优先考虑语义工具,例如:

  • hover
  • goto_definition

而不是依赖于基于文本的搜索。

GEMINI.md推荐设置

# Project Context

Refer to DelphiLSP.md for semantic code analysis instructions.
Use LSP semantic tools instead of grep/text searching whenever possible.

配置示例

Gemini CLI/反重力

{
  "mcpServers": {
    "delphi-lsp": {
      "command": "C:\\Tools\\DelphiLSPMCPServer.exe",
      "args": [
        "--log-level",
        "info",
        "--lsp-path",
        "G:\\Tools\\PascalLanguageServer\\pasls.exe"
      ]
    }
  }
}

克劳德桌面版

{
  "mcpServers": {
    "delphi-lsp": {
      "command": "C:\\Tools\\DelphiLSPMCPServer.exe",
      "args": [
        "--workspace",
        "C:\\MyProject",
        "--log-level",
        "info"
      ]
    }
  }
}

可用工具

delphi_goto_definition

在特定位置找到符号的定义。

参数

参数 类型 说明
uri string 文件URI
line integer 从零开始的行号
character integer 从零开始的字符偏移量

示例URI:

file:///C:/Projects/MyProject/MainUnit.pas

delphi_find_references

查找对符号的所有引用。

参数

参数 类型 说明
uri string 文件URI
line integer 从零开始的行号
character integer 从零开始的字符偏移量
includeDeclaration boolean 在结果中包含声明

delphi_hover

检索悬停信息,例如:

  • 类型信息
  • 符号文件
  • 申报明细

参数

参数 类型
uri 字符串
line 整数
character 整数

delphi_completion

检索代码完成建议。

参数

参数 类型
uri 字符串
line 整数
character 整数

delphi_workspace_symbols

在整个工作空间中搜索符号。

参数

参数 类型 说明
query string 符号搜索查询

调试支持

版本0.08引入了调试器同步支持。

特性

  • --wait 启动模式
  • 使用Windows事件进行跨进程同步
  • 自动调试器附加工作流
  • 无阻塞 ReadLn
  • 等待状态下的心跳记录
  • 一线调试支持

典型工作流程

  1. 使用以下命令启动测试运行器 --wait
  2. 将调试器附加到服务器进程
  3. 设置断点
  4. 继续执行
  5. 测试自动开始

建筑

┌─────────────────────┐
│  MCP Client         │
│  (AI Assistant)     │
└──────────┬──────────┘
           │ JSON-RPC over stdio
           ▼
┌─────────────────────┐
│  Delphi LSP MCP     │
│  Server             │
│                     │
│  ┌───────────────┐  │
│  │ MCP Server    │  │
│  └───────┬───────┘  │
│          │          │
│  ┌───────▼───────┐  │
│  │ LSP Client    │  │
│  └───────┬───────┘  │
└──────────┼──────────┘
           │ LSP JSON-RPC
           ▼
┌─────────────────────┐
│ DelphiLSP / pasls   │
└─────────────────────┘

核心单元

单位 职责
Common.JsonRpc JSON-RPC解析和消息类型
Common.Logging 线程安全单例记录器
Common.Utils URI/路径转换实用程序
MCP.Protocol.Types MCP协议类型定义
MCP.Server MCP路由和工作空间发现
MCP.Tools.LSP MCP→ LSP网桥实现
MCP.Transport.Stdio MCP标准传输
LSP.Client LSP请求处理和文档同步
LSP.Protocol.Types LSP协议定义
LSP.Transport.Process LSP子进程管理

测试

存储库包括:

  • TestAllTools.dpr

保险范围包括:

  • MCP初始化
  • 工具发现
  • 悬停请求
  • 定义查找
  • 参考文献查询
  • 完成
  • 工作区符号搜索
  • 错误处理
  • 停机处理

运行测试

TestAllTools.exe
TestAllTools.exe --wait
TestAllTools.exe --help

已知问题

pasls限制

  • 初始索引可能需要延迟 didOpen
  • 在非常大的项目上,悬停请求可能会超时
  • 必须正确配置FPC安装路径
  • 服务器/LSP位应匹配(建议,而非要求)

建议

  • 匹配服务器和LSP位
  • 在之后添加延迟 didOpen
  • 验证RTL/FPC配置
  • 对瞬态故障使用重试逻辑

版本历史记录

版本历史记录

v0.08——调试同步

日期:2026年5月27日(Git提交与此工作匹配)

  • 添加了命名的Windows事件同步
  • 添加了调试器等待支持(--wait)
  • 增加了一线调试工作流程
  • 在等待期间添加心跳状态记录
  • 移除封锁 ReadLn
  • 修复了双自由碰撞 HandleToolsList
  • 全部20项自动化测试通过

v0.07——调试基础设施准备

日期:2026年5月27日(文件系统)

  • 添加了初步调试器等待脚手架
  • 添加了早期心跳记录
  • 添加了初始命名事件常量
  • 改进了LSP启动竞争条件处理
  • 改进了丢失LSP可执行文件的错误消息
  • 为pasls悬停/定义失败添加了重试逻辑

v0.06--LSP稳定性和pasls兼容性

日期:2026年5月27日(文件系统)

  • 改进了同步和排队LSP请求处理
  • 添加了pasls特定的索引延迟处理
  • 提高了工作空间嗅探的可靠性
  • 添加了丢失或格式错误的回退 rootUri
  • 改进的 .dpr / .lpr 检测启发式
  • 修复了DelphiLSP的环境变量继承问题
  • 添加了内部LSP健康检查ping
  • 扩展的语义测试套件(泛型、接口、继承)

v0.05--动态工作空间和稳定性

日期:2026年4月27日(Git)

  • 从MCP初始化请求中动态发现工作区
  • 集中URI/路径处理 Common.Utils
  • 自动 .dpr / .lpr 项目发现
  • 被迫 -Mdelphi Free Pascal的解析模式
  • 添加 DelphiLSP.md AI 指导
  • 扩展语义分析测试覆盖范围

v0.04--体系结构改进

日期:2026年4月27日(Git)

  • 主要架构重构
  • 添加了LSP重试逻辑
  • 添加了自动文档打开功能
  • 改进了单元分离
  • 添加了对DelphiLSP和pasls的支持

v0.03--测试更多功能

日期:2026年4月27日(文件系统)
(此版本不存在Git提交)

  • 实验版
  • 用于测试附加功能
  • 这个版本不好,被跳过了。

v0.02——协议合规性

日期:2026年2月2日(Git)

  • 改进了PasLS集成
  • 修复了编码问题
  • 改进了JSON-RPC合规性
  • 稳定LSP功能(定义、悬停)

v0.01--初始版本

日期:2026年1月26日(Git)

  • 初始MCP↔ LSP网桥实施
  • 初始Delphi语义工具支持

路线图

短期

  • LSP健康检查
  • 更好的超时恢复
  • 增强的诊断
  • 自动LSP重启支持

中期

  • 增量文档同步
  • 项目配置支持
  • 编译器/搜索路径配置

长期

  • 异步操作
  • 响应缓存
  • 连接池
  • 附加LSP功能:
    • 重命名
    • 代码操作
    • 格式化

文档

附加文件:

  • DelphiLSP.md
  • /docs/architecture.md
  • /docs/testing.md
  • /docs/debugging.md
  • /docs/version-history.md

许可证

这是一个示范项目。

使用风险自负。