MCP片段
- MCP服务器,用于使用语义搜索和传统关键字匹配来存储、搜索和管理代码片段。
- 只需告诉您的编码代理(claude代码、游标、cline、opencode等)保存某个代码段。就这样
- 需要时,只需告诉它搜索与以下内容相关的代码片段:
your query.
特性
- 使用AI嵌入进行语义搜索,根据含义而不仅仅是关键字查找片段
- 结合语义相似性和关键字匹配的混合搜索
- 自动编程语言检测
- 基于标签的组织和过滤
- 日期范围过滤
- 不需要数据库。基于JSON的存储。
- 缓存矢量嵌入以实现快速检索
安装
npm install @freakynit/snippets-mcp可用工具
添加代码段
将新代码段添加到数据库中。
参数:
code(string,必填)-代码内容tags(array,可选)-标记字符串数组language(字符串,可选)-编程语言(如果未提供,则自动检测)description(字符串,可选)-用于更好的语义搜索的文本描述
搜索片段
使用混合语义和关键字匹配搜索片段。
参数:
query(字符串,可选)-自然语言搜索查询tags(数组,可选)-按特定标签过滤(AND逻辑)language(字符串,可选)-按编程语言筛选dateStart(ISO日期字符串,可选)-按创建日期开始筛选dateEnd(ISO日期字符串,可选)-按创建日期结束筛选limit(数字,可选)-返回的最大结果数(默认值:10)
更新代码段
更新现有代码段。如果代码、标签或描述发生变化,则重新生成嵌入。
参数:
id(字符串,必填)-代码段IDupdates(object)-包含要更新的字段的对象(代码、标签、语言、描述)
删除代码段
从数据库中删除代码段。
参数:
id(字符串,必填)-代码段ID
获取代码片段
按ID检索单个代码段。
参数:
id(字符串,必填)-代码段ID
环境变量
SNIPPETS_FILE_PATH:可选,用于保存代码段和嵌入的文件的完整路径。默认为~/.snippets-mcp-db.json.
运作原理
图书馆使用混合搜索方法:
- 语义搜索(70%权重) -使用
all-MiniLM-L6-v2该模型用于对非代码、描述、标签和语言生成的嵌入进行向量搜索。 - 关键字匹配(30%权重) -基于代码和标签的精确术语匹配的传统文本匹配。
- 硬过滤器 -首先应用于按标签、语言和日期范围缩小结果范围。
在添加/更新代码段时生成一次嵌入,并缓存以进行快速检索。
存储
代码段存储在由环境变量指定的JSON文件中 SNIPPETS_FILE_PATH,或位于默认路径: ~/.snippets-mcp-db.json 具有以下结构:
{
"id": "uuid",
"code": "string",
"language": "string",
"tags": ["array"],
"description": "string",
"embedding": [/* vector array */],
"createdAt": "ISO date",
"updatedAt": "ISO date"
}使用mcpServers json进行配置
适用于Mac和Linux
{
"mcpServers": {
"snippets-mcp": {
"command": "npx",
"args": ["-y", "@freakynit/snippets-mcp@latest"],
"env": {
"SNIPPETS_FILE_PATH": "Optional... path to save snippets and embeddings in.. should have .json extension"
}
}
}
}对于Windows
{
"mcpServers": {
"snippets-mcp": {
"command": "cmd",
"args": ["/k", "npx", "-y", "@freakynit/snippets-mcp@latest"],
"env": {
"SNIPPETS_FILE_PATH": "Optional... path to save snippets and embeddings in.. should have .json extension"
}
}
}
}