返回市场
共享知识-mcp

共享知识-mcp

作者:j5ik2o4 星标更新:2025-03-19

项目介绍

共享知识MCP服务器

这是一个可以被各种AI助手(如CLINE, Cursor, Windsurf, Claude Desktop)共同使用的知识库MCP服务器。 通过利用检索增强生成(RAG),实现高效的信息检索和利用。 通过在多个AI助手工具之间共享知识库,提供一致的信息访问。

特征

  • 支持多个AI助手间使用共同的知识库
  • 通过RAG实现高精度的信息检索
  • 使用TypeScript进行类型安全的实现
  • 支持多种向量存储(HNSWLib, Chroma, Pinecone, Milvus)
  • 通过抽象接口实现扩展性

安装

git clone https://github.com/yourusername/shared-knowledge-mcp.git
cd shared-knowledge-mcp
npm install

配置

MCP服务器的配置需要添加到各个AI助手的配置文件中。

VSCode (适用于CLINE/Cursor)

~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json:

{
  "mcpServers": {
    "shared-knowledge-base": {
      "command": "node",
      "args": ["/path/to/shared-knowledge-mcp/dist/index.js"],
      "env": {
        "KNOWLEDGE_BASE_PATH": "/path/to/your/rules",
        "OPENAI_API_KEY": "your-openai-api-key",
        "SIMILARITY_THRESHOLD": "0.7",
        "CHUNK_SIZE": "1000",
        "CHUNK_OVERLAP": "200",
        "VECTOR_STORE_TYPE": "hnswlib"
      }
    }
  }
}

使用Pinecone的例子

{
  "mcpServers": {
    "shared-knowledge-base": {
      "command": "node",
      "args": ["/path/to/shared-knowledge-mcp/dist/index.js"],
      "env": {
        "KNOWLEDGE_BASE_PATH": "/path/to/your/rules",
        "OPENAI_API_KEY": "your-openai-api-key",
        "VECTOR_STORE_TYPE": "pinecone",
        "VECTOR_STORE_CONFIG": "{\"apiKey\":\"your-pinecone-api-key\",\"environment\":\"your-environment\",\"index\":\"your-index-name\"}"
      }
    }
  }
}

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json:

使用HNSWLib(默认)

{
  "mcpServers": {
    "shared-knowledge-base": {
      "command": "node",
      "args": ["/path/to/shared-knowledge-mcp/dist/index.js"],
      "env": {
        "KNOWLEDGE_BASE_PATH": "/path/to/your/docs",
        "OPENAI_API_KEY": "your-openai-api-key",
        "SIMILARITY_THRESHOLD": "0.7",
        "CHUNK_SIZE": "1000",
       _ "CHUNK_OVERLAP": "200",
        "VECTOR_STORE_TYPE": "hnswlib",
        "VECTOR_STORE_CONFIG": "{}"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

使用Weaviate的例子

{
  "mcpServers": {
    "shared-knowledge-base": {
      "command": "node",
      "args": ["/path/to/shared-knowledge-mcp/dist/index.js"],
      "env": {
        "KNOWLEDGE_BASE_PATH": "/path/to/your/docs",
        "OPENAI_API_KEY": "your-openai-api-key",
        "SIMILARITY_THRESHOLD": "0.7",
        "CHUNK_SIZE": "1000",
        "CHUNK_OVERLAP": "200",
        "VECTOR_STORE_TYPE": "weaviate",
        "VECTOR_STORE_CONFIG": "{\"url\":\"http://localhost:8080\",\"className\":\"Document\",\"textKey\":\"content\"}"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

注意: 如果使用Weaviate,需要提前启动Weaviate服务器。可以通过以下命令启动:

./start-weaviate.sh

开发

启动开发服务器

npm run dev

构建

npm run build

在生产环境中运行

npm start

可用工具

rag_search

从知识库中搜索信息。

搜索请求

interface SearchRequest {
  // 搜索查询(必需)
  query: string;
  
  // 返回结果的最大数量(默认: 5)
  limit?: number;
  
  // 搜索上下文(可选)
  context?: string;
  
  // 过滤选项(可选)
  filter?: {
    // 根据文档类型过滤(例如: ["markdown", "code"])
    documentTypes?: string[];
    
    // 根据源路径模式过滤(例如: "*.md")
    sourcePattern?: string;
  };
  
  // 包含在结果中的信息(可选)
  include?: {
    metadata?: boolean;   // 包含元数据
    summary?: boolean;    // 生成摘要
    keywords?: boolean;   // 提取关键词
    relevance?: boolean;  // 生成相关性解释
  };
}

使用示例

基本搜索:

const result = await callTool("rag_search", {
  query: "提交消息的格式",
  limit: 3
});

高级搜索:

const result = await callTool("rag_search", {
  query: "提交消息的格式",
  context: "正在调查如何使用Git",
  filter: {
    documentTypes: ["markdown"],
    sourcePattern: "git-*.md"
  },
  include: {
    summary: true,
    keywords: true,
    relevance: true
  }
});

搜索结果

interface SearchResult {
  // 与搜索查询相关的文档内容
  content: string;
  
  // 相似度得分(0-1)
  score: number;
  
  // 源文件路径
  source: string;
  
  // 位置信息
  startLine?: number;     // 开始行
  endLine?: number;       // 结束行
  startColumn?: number;   // 开始列
  endColumn?: number;     // 结束列
  
  // 文档类型(例如: "markdown", "code", "text")
  documentType?: string;
  
  // 额外信息(仅当include选项指定时存在)
  summary?: string;       // 内容摘要
  keywords?: string[];    // 关键词
  relevance?: string;     // 相关性解释
  metadata?: Record<string, unknown>; // 元数据
}

响应示例

{
  "results": [
    {
      "content": "# 提交消息的格式\n\n请按照以下格式编写提交消息:\n\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n...",
      "score": 0.92,
      "source": "/path/to/rules/git-conventions.md",
      "startLine": 1,
      "endLine": 10,
      "startColumn": 1,
      "endColumn": 35,
      "documentType": "markdown",
      "summary": "关于提交消息格式的说明文档",
      "keywords": ["commit", "message", "format", "type", "scope"],
      "relevance": "此文档包含与搜索查询“提交消息的格式”相关的信息。相似度得分: 0.92"
    }
  ]
}

这些扩展的搜索功能使LLM能够更准确且高效地处理信息。额外的位置信息、文档类型、摘要、关键词等信息有助于LLM更深入地理解和适当利用搜索结果。

工作原理

  1. 启动时读取指定目录内的Markdown文件(.md, .mdx)和文本文件(.txt)
  2. 将文档分割成片段,并使用OpenAI API进行向量化
  3. 使用选定的向量存储(默认: HNSWLib)创建向量索引
  4. 对于搜索查询,返回相似度高的文档

支持的向量存储

  • HNSWLib: 存储在本地文件系统上的快速向量存储(默认)
  • Chroma: 开源的向量数据库
  • Pinecone: 管理的向量数据库服务(需要API密钥)
  • Milvus: 大规模的向量搜索引擎
  • Weaviate: 面向模式的向量数据库(需要Docker)

每个向量存储都通过抽象接口使用,可以根据需要轻松切换。

操作向量存储环境的方法

HNSWLib(默认)

由于HNSWLib将向量存储保存在本地文件系统上,因此不需要特殊的环境设置。

重建向量存储:

./rebuild-vector-store-hnsw.sh

Weaviate

使用Weaviate需要Docker。

  1. 启动Weaviate环境:
./start-weaviate.sh
  1. 重建向量存储:
./rebuild-vector-store-weaviate.sh
  1. 检查Weaviate的状态:
curl http://localhost:8080/v1/.well-known/ready
  1. 停止Weaviate环境:
docker-compose down
  1. 完全删除Weaviate的数据(如有必要):
docker-compose down -v

Weaviate的配置由docker-compose.yml文件管理。默认情况下,应用以下设置:

  • 端口: 8080
  • 认证: 匿名访问启用
  • 向量化模块: 无(使用外部嵌入)
  • 数据保存: Docker卷(weaviate_data

配置选项

环境变量描述默认值
KNOWLEDGE_BASE_PATH知识库路径(必需)-
OPENAI_API_KEYOpenAI API 密钥(必需)-
SIMILARITY_THRESHOLD搜索时的相似度得分阈值(0-1)0.7
CHUNK_SIZE文本分割时的片段大小1000
CHUNK_OVERLAP片段的重叠大小200
VECTOR_STORE_TYPE使用的向量存储类型("hnswlib", "chroma", "pinecone", "milvus")"hnswlib"
VECTOR_STORE_CONFIG向量存储的配置(JSON字符串){}

许可证

ISC

贡献

  1. Fork项目
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建Pull Request