符号级代码编辑服务

MCP Symbol Edit 是一个基于树解析的符号级代码编辑服务,支持浏览、读取、编辑、添加和删除代码符号(如函数、类和变量),适用于代码维护和开发工具集成。

  • by runekaagaard
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 runekaagaard/mcp-symbol-edit

使用说明

MCP符号编辑

状态:开发中。

符号级代码编辑MCP服务器。使用Tree-sitter解析技术而非基于文本的字符串匹配,浏览、读取、编辑、添加和删除代码符号(函数、类、变量)。

为何存在这一现象

Claude Code及其他代理编码工具采用基于文本的编辑方式,要求你必须提供精确的文本以进行替换,包括所有的空格和缩进。这种方式既脆弱又低效。而MCP Symbol Edit则是基于解析后的符号进行操作,使得编辑更加可靠且上下文高效。

安装

确保已安装UV。

uv --version

如果你还没有安装uv,请进行安装。

  • Linux

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • macOS

    brew install uv
    
  • Windows

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    

添加到你的 mcp_config.json:

{
  "mcpServers": {
    "symbol-edit": {
      "command": "uvx",
      "args": ["mcp-symbol-edit"]
    }
  }
}

API

工具

  • 浏览符号

    • 列出文件中的所有顶级符号
    • 输入:
      • file_path (字符串):源文件路径
      • regex (字符串,可选):使用正则表达式模式过滤符号
      • substring (字符串,可选):通过子字符串匹配过滤符号
    • 返回格式化的字符串,列出符号签名:
    def calculate_total(items: list) -> float
    class UserManager(BaseManager)
    class Product
    def validate_email(email: str) -> bool
    API_VERSION = "2.1.0"
    MAX_RETRIES = 3
    
  • 读取符号

    • 读取一个或多个符号的完整代码
    • 输入:
      • file_path (字符串):源文件的路径
      • symbol_names (字符串):用逗号分隔的符号名称(例如,“calculate_total,validate_email”)
    • 返回每个符号的代码,各代码之间用空行分隔:
    def calculate_total(items: list) -> float:
        return sum(item.price for item in items)
    
    def validate_email(email: str) -> bool:
        return "@" in email and "." in email
    
  • 编辑符号

    • 替换一个符号的实现
    • 输入:
      • file_path (字符串):源文件路径
      • symbol_name (字符串):要编辑的符号的名称
      • updated_code (字符串):要替换的新代码
    • 返回值: OK 或者 ERROR: Symbol 'foo' not found
  • 添加符号

    • 向文件中添加一个新符号
    • 输入:
      • file_path (字符串):源文件的路径
      • code (字符串):要插入的代码
      • position (字符串):插入位置 - “之前”、“之后”、“顶部”、“底部”
      • symbol (字符串,可选):对于“之前”和“之后”位置是必需的
    • 返回值: OK 或者 ERROR: Symbol 'foo' not found
  • 删除符号

    • 从文件中移除一个符号
    • 输入:
      • file_path (字符串):源文件路径
      • symbol_name (字符串):要删除的符号的名称
    • 返回值: OK 或者 ERROR: Symbol 'foo' not found

示例

浏览并阅读符号

Show me all functions in app.py that contain "user" in the name.
Read the calculate_total and validate_email functions from app.py.

编辑一个函数

Update the calculate_total function in app.py to use a more efficient implementation:

def calculate_total(items: list) -> float:
    return sum(item.price * item.quantity for item in items)

添加一个新功能

Add this new function after calculate_total in app.py:

def calculate_discount(total: float, percent: float) -> float:
    return total * (1 - percent / 100)

删除一个符号

Delete the deprecated_method function from app.py.

支持的语言

目前支持Python。计划增加对其他语言(JavaScript、TypeScript、Go、Rust等)的支持。

开发中

克隆仓库并安装依赖项:

git clone git@github.com:username/mcp-symbol-edit.git
cd mcp-symbol-edit
uv sync

然后将这个设置为 mcp_config.json:

{
  "mcpServers": {
    "symbol-edit": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-symbol-edit", "-m", "mcp_symbol_edit.server"]
    }
  }
}

做出贡献

欢迎贡献。开放问题用于报告错误或功能需求。提交拉取请求以进行改进。

许可证

版权所有 © 2025 Rune Kaagaard。保留所有权利。

获得使用和派生此软件的许可。 未经明确许可,禁止发布修改后的版本(包括发布到PyPI或其他包仓库)。