TypeScript定义查找工具

一个帮助AI代码编辑器在代码库中查找TypeScript符号定义的Model Context Protocol (MCP)服务器,特别适用于定位导入符号、类、接口或函数的原始定义。

  • by runninghare
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 runninghare/typescript-definition-finder-mcp

使用说明

TypeScript定义查找器MCP服务器

一个模型上下文协议(MCP)服务器,帮助AI代码编辑器在代码库中找到TypeScript符号定义。当您需要在TypeScript项目中定位导入的符号、类、接口或函数的原始定义时,此工具特别有用。

特性

  • 查找TypeScript符号的原始定义
  • 使用从外部包导入的符号
  • 返回定义位置和代码段
  • 支持stdio接口,可与AI代码编辑器无缝集成

先决条件

  • TypeScript项目 typescript 已安装依赖项
  • Node.js用于运行服务器

安装与使用

这是一个模型上下文协议(MCP)stdio服务器,需要访问本地文件系统才能找到TypeScript定义。

运行MCP服务器

要使用MCP服务器,请执行以下操作:

  1. 确保你的项目安装了TypeScript作为依赖项
  2. 在项目目录中运行以下命令:
npx -y ts-def-mcp@latest

您可以将此命令与支持MCP的各种AI代码编辑器集成:

  • 克劳德桌面版
  • 克劳德代码
  • 法典
  • 光标
  • 帆板运动
  • Roo Cline编辑

重要提示:由于本地文件系统访问要求,Docker+WebSocket解决方案将无法工作。

在Claude代码中安装

使用Claude Code CLI添加服务器:

claude mcp add ts-def -- npx -y ts-def-mcp@latest

或者,为所有项目添加它(用户范围):

claude mcp add --scope user ts-def -- npx -y ts-def-mcp@latest

在Codex中安装

将服务器添加到Codex MCP配置中(~/.codex/config.toml):

[mcp_servers.ts-def]
command = "npx"
args = ["-y", "ts-def-mcp@latest"]

工具说明

服务器提供 find_typescript_definition 具有以下功能的工具:

  • 工具名称: find_typescript_definition
  • 触发命令: /ts-def (如果你想强制AI编辑器找到引用的符号定义,在“光标”中很有用)
  • 目的:在代码库中查找TypeScript符号的原始定义

输入参数

该工具需要三个参数:

  1. file_path (字符串):

    • 当前TypeScript文件的绝对路径
    • 例子: /path/to/your/project/src/index.ts
  2. symbol (字符串):

    • 您要查找的TypeScript符号(变量、类名、接口、类型等)的定义
    • 必须存在于line_content中
    • 例子: StdioServerTransport, MyClass, interface1
  3. line_content (字符串):

    • 包含要查找的符号定义的整行
    • 用于定位文件中的行号和符号的确切位置
    • 必须包含与指定完全一致的符号

例子

  1. 查找导入的符号定义

鉴于此进口声明:

import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

找到以下定义 StdioServerTransport,您将使用:

{
  "file_path": "~/my-mcp-project/src/index.ts",
  "symbol": "StdioServerTransport",
  "line_content": "import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";"
}
  1. 查找本地符号定义

对于本地类用法:

class MyService {
  private transport: StdioServerTransport;
}

找到以下定义 StdioServerTransport,使用:

{
  "file_path": "/path/to/project/src/service.ts",
  "symbol": "StdioServerTransport",
  "line_content": "  private transport: StdioServerTransport;"
}

响应格式

该工具返回一个JSON响应,其中包含:

  • 找到定义的文件路径
  • 定义的行号
  • 定义的实际代码片段

游标调用示例

MCP输入:

{
  "file_path": "/Users/rossz/workspace/ai-tools/mcp/ts-def-mcp/src/index.ts",
  "symbol": "SSEServerTransport",
  "line_content": "import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';"
}

MCP输出:

[
  {
    "file": "/Users/rossz/workspace/ai-tools/mcp/ts-def-mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sse.d.ts",
    "type": "Definition",
    "location": "Line 9, Column 22",
    "codeSnippet": "   8    */\n   9 > export declare class SSEServerTransport implements Transport {\n  10 +     private _endpoint;\n  11 +     private res;\n  12 +     private _sseResponse?;\n  13 +     private _sessionId;\n  14 +     onclose?: () => void;\n  15 +     onerror?: (error: Error) => void;\n  16 +     onmessage?: (message: JSONRPCMessage) => void;\n  17 +     /**\n  18 +      * Creates a new SSE server transport, which will direct the client to POST messages to the relative or absolute URL identified by `_endpoint`.\n  19 +      */\n  20 +     constructor(_endpoint: string, res: ServerResponse);\n  21 +     /**\n  22 +      * Handles the initial SSE connection request.\n  23 +      *\n  24 +      * This should be called when a GET request is made to establish the SSE stream.\n  25 +      */\n  26 +     start(): Promise<void>;\n  27 +     /**\n  28 +      * Handles incoming POST messages.\n  29 +      *\n  30 +      * This should be called when a POST request is made to send a message to the server.\n  31 +      */\n  32 +     handlePostMessage(req: IncomingMessage, res: ServerResponse, parsedBody?: unknown): Promise<void>;\n  33 +     /**\n  34 +      * Handle a client message, regardless of how it arrived. This can be used to inform the server of messages that arrive via a means different than HTTP POST.\n  35 +      */\n  36 +     handleMessage(message: unknown): Promise<void>;\n  37 +     close(): Promise<void>;\n  38 +     send(message: JSONRPCMessage): Promise<void>;\n  39 +     /**\n  40 +      * Returns the session ID for this transport.\n  41 +      *\n  42 +      * This can be used to route incoming POST requests.\n  43 +      */\n  44 +     get sessionId(): string;\n  45   }\n"
  }
]

发展

此项目是使用创建的 bun init 在bun v1.2.2中。 包子 是一个快速的一体化JavaScript运行时。

以开发模式运行

对于开发,您可以直接使用Bun运行服务器:

bun run src/index.ts

许可证

[在此处添加您的许可证信息]

贡献

[在此处添加贡献指南]