项目介绍

目录
privateGPT MCP Server
这是一个模型上下文协议(MCP)服务器实现,允许您将privateGPT作为首选MCP客户端的代理。这使得privateGPT的强大功能可以无缝地集成到任何MCP兼容的应用程序中。
什么是MCP?
MCP是一个开放协议,标准化了应用程序向LLMs提供上下文的方式。可以将MCP想象成AI应用中的USB-C端口。就像USB-C提供了一种标准化的方法来连接设备到各种外围设备和配件一样,MCP提供了一种标准化的方法来连接AI模型到不同的数据源和工具。
为什么是MCP?
MCP帮助您在LLMs之上构建代理和复杂的工作流程。LLMs经常需要与数据和工具进行集成,而MCP提供了:
- 一个不断增长的预构建集成列表,您的LLM可以直接插入
- 在不同LLM提供商和供应商之间切换的灵活性
- 在您的基础设施内保护数据的最佳实践
如何工作
在核心层面,MCP遵循客户端-服务器架构,主机应用程序可以连接到多个服务器:

- MCP主机:想要通过MCP访问数据的应用程序,如Claude桌面、IDE或AI工具
- MCP客户端:维护与服务器一对一连接的协议客户端
- MCP服务器:每个都通过标准化的模型上下文协议暴露特定能力的轻量级程序
- 本地数据源:MCP服务器可以安全访问的计算机文件、数据库和服务
- 远程服务:可以通过互联网访问的外部系统(例如,通过API),MCP服务器可以连接到这些系统
概述
此服务器充当MCP客户端和privateGPT API之间的桥梁,使您可以:
- 使用公共和私有知识库与privateGPT聊天
- 创建和管理知识来源
- 将来源组织成组
- 通过基于组的权限控制访问
为什么是代理
在大型语言模型(LLMs)和MCP服务器中,代理是一种专门的软件组件,作为语言模型和应用程序之间的中介。它处理诸如请求处理、通过MCP与LLM交互、管理工作流、确保整个系统内的安全性和效率等任务。通过利用代理,复杂的AI应用程序可以设计得更有效、更安全且可扩展。
本仓库中的代理代码可用于将其集成到自己的解决方案/应用程序中。
代理、LLMs和MCP服务器之间的交互
这些组件之间的交互使开发强大、可扩展且安全的AI应用程序成为可能。以下是简化的情景,说明这种交互:
- 用户输入:用户通过托管在MCP服务器上的用户界面发送请求。
- 代理处理:MCP服务器上的代理接收请求,对其进行验证并准备发送给LLM。
- LLM交互:代理将请求转发给LLM,LLM生成响应。
- 响应处理:代理从LLM接收响应,如果需要进一步处理(例如,格式化、与其他数据源集成),然后将响应返回给用户。
- 安全性和日志记录:在此过程中,代理监控交互,确保遵守安全策略,并记录相关信息以供后续分析。
在此上下文中使用代理的优势
- 模块化:代理允许职责的清晰分离,使系统更容易维护和扩展。
- 安全性:集中管理访问和活动监控有助于最小化安全风险。
- 效率:自动化代理可以比手动过程更快、更一致地执行任务。
- 灵活性:代理可以轻松适应或扩展以支持新功能或业务需求的变化。
加密密码的重要性
在处理敏感数据的任何应用程序中,安全性至关重要。此服务器管理两组关键凭证:
- 代理头:用于HAProxy等认证和管理流量。
- LLM访问密码:用于保护对大型语言模型的访问。
以明文形式存储这些密码会带来重大安全风险,包括未经授权的访问和潜在的数据泄露。
为了缓解这些风险,必须加密这些密码,并仅在系统中处理其密文。
仅使用密文的好处
- 增强的安全性:即使攻击者获得了配置文件或环境变量的访问权限,没有相应解密密钥的加密密码仍然是不可读的。
- 合规性:加密有助于遵守规定保护敏感信息的安全标准和法规。
- 完整性:确保密码不会被篡改,维持身份验证机制的完整性。
安全性
以下安全功能已实施,以确保数据保护和客户端应用程序与服务器之间的安全通信。这些功能涵盖加密、解密、密钥管理和传输安全。
1. 传输层安全(TLS)
- 为了确保客户端和服务器之间的通信安全,可以启用TLS。客户端和服务器之间传输的所有数据均使用TLS(最低版本1.2)加密。
为什么应该在客户端和服务器之间启用TLS?
a. 通信加密
- TLS(传输层安全)确保客户端和服务器之间传输的所有数据都是加密的。这保护了敏感信息,如密码、信用卡详情和个人数据免受窃听攻击(中间人攻击)。
b. 数据完整性
- TLS保证传输的数据保持不变且未被篡改。完整性检查确保接收到的数据与发送时完全相同。
c. 认证
- TLS通过数字证书实现服务器(以及可选的客户端)的安全认证。这防止用户因假网站的网络钓鱼攻击而受害。
d. 防范中间人攻击
- TLS加密连接,几乎不可能让攻击者拦截或操纵流量。如果没有TLS,攻击者可以捕获和修改数据包。
e. 符合安全标准和法规
- 许多监管要求(例如GDPR、PCI-DSS)规定了安全数据传输的要求。TLS是这些安全要求的基本组成部分。
f. 防止降级和重放攻击
- TLS保护攻击者尝试将连接降级到不安全版本(降级攻击)或重放先前有效的请求(重放攻击)。
结论
在客户端和服务器之间启用TLS对于确保数据隐私、安全性和通信完整性至关重要。它不仅保护敏感信息,还帮助满足合规要求并增加用户信任。
2. 密码加密
密码可以使用RSA(Rivest–Shamir–Adleman)公钥加密。这确保了敏感数据,如用户密码,永远不会以明文形式传输。
方法
- 公钥加密,密钥长度为2048位。
- 填充:
RSA_PKCS1_PADDING以增强安全性并防止已知的填充攻击。
过程
- 服务器管理员使用服务器的公钥(
id_rsa_public.pem)加密客户端的密码,执行node security/generate_encrypted_password.js ~/.ssh/id_rsa_public.pem并分发加密密码给客户端。
- 或者:客户端使用服务器的公钥(
id_rsa_public.pem)加密密码,使用keygen函数。因此,该函数必须在服务器配置中启用(privateGPT.env.json)。重要的是:使用此功能也意味着通过网络传输数据。因此,请确保数据流量是安全的并且无法被拦截。
- 最后,加密密码被发送到服务器,在那里使用服务器的私钥进行解密。
优点
- 非对称加密确保只有服务器可以解密密码。
- 即使通信通道被破坏,加密数据仍然安全。
3. 密钥管理
为了确保数据通信和加密过程的安全,遵循以下密钥管理原则:
公钥
- 存储在服务器上(
id_rsa.pub)。
- 仅用于加密,如果公开则不会构成安全风险。
PEM密钥
- 存储在服务器上(
id_rsa_public.pem)。
- 必须使用公证书创建(参见:服务器配置)。
私钥
- 存储在服务器上(
id_rsa)。
- 使用适当的文件权限(
chmod 600)限制访问。
- 仅用于解密操作。
密钥轮换
- 密钥可以定期轮换或在检测到安全事件时轮换。重要的是:如果这些密钥重新发行,客户端或AI代理将立即失去对MCP服务器的访问,并需要新的RSA密钥(加密密码)!
- 旧密钥被安全地失效。
4. 服务器上的解密
解密仅在服务器上使用私钥进行:
过程
- 服务器从客户端接收加密密码。
- 私钥解密密码以获取原始明文。
- 解密后的密码在内部使用(例如,身份验证),并且永远不会以明文形式存储。
安全处理
- 解密后的密码仅在处理期间存在于内存中。
- 安全的内存管理实践确保敏感数据在使用后立即清除。
证书验证
- 证书在双方进行验证,以确保服务器和客户端的真实性。
- 可选地,可以启用双向TLS以增强安全性。
5. 授权令牌
令牌用于认证请求,确保只有授权用户才能访问系统:
令牌管理
- 成功登录后生成令牌。
- 令牌有效期短,并在预定义时间后自动过期。
- 令牌使用HMAC或RSA签名,使其防篡改。
6. 限制密钥生成(Keygen)
为了防止滥用系统,限制密钥生成(keygen):
配置
- 服务器有一个配置选项(
ALLOW_KEYGEN)来启用或禁用密钥生成。
- 当禁用时调用密钥生成函数会导致错误消息。
审计日志
- 所有密钥生成操作都会记录下来,用于审计和监控目的。
7. 基于证书的访问控制(CBAC)
- 当激活证书认证并且代理使用密钥登录到服务器时,它会自动锁定到该服务器。如果它想登录到另一个MCP privateGPT服务器,登录尝试将被拒绝,因为密钥会被检查是否与服务器的私有证书匹配。
功能
- 函数如
keygen、store_user和edit_source仅对授权角色可用。
- 对未经授权的访问尝试会拒绝并提供详细的错误消息。
配置
- 可以在服务器配置(
Functions对象)中指定启用或禁用的功能。
8. 安全配置
服务器配置包含几个与安全相关的选项:
SSL_VALIDATE
- 验证SSL/TLS证书以确保安全通信。
- 根据环境要求(例如测试与生产)启用或禁用。
PW_ENCRYPTION
- 启用或禁用密码加密。
- 确保在无法进行加密的环境中兼容。
9. 日志记录和监控
所有与安全相关事件都被记录下来,用于监控和故障排除:
记录的事件
- 登录失败尝试。
- 密钥生成请求。
- 未经授权的访问尝试。
- 加密和解密错误。
总结
已实施的安全功能确保:
- 通过加密和安全传输确保敏感数据的机密性。
- 使用强大的密钥管理和令牌验证确保操作的完整性。
- 基于角色和可配置的访问控制系统功能。
- 全面的监控,以便主动检测和应对安全威胁。
这些措施共同提供了一个安全的客户端-服务器通信和数据处理环境。
privateGPT服务器功能概述
privateGPT服务器提供了一系列强大的功能,旨在提供高效、灵活且安全的Model Context Protocol (MCP)通信。以下是服务器的关键特性和功能概述。
关键功能
1. 身份验证和授权
- 登录功能:使用电子邮件和密码进行用户身份验证,生成访问令牌。
- 注销功能:安全地使用户令牌无效,结束会话。
2. 聊天管理
- 开始聊天:使用公共知识库或特定组上下文与服务器发起对话。
- 继续聊天:通过提供聊天ID和后续消息来恢复正在进行的对话。
- 检索聊天信息:通过ID获取特定聊天的元数据和消息。
- 删除所有聊天:删除执行用户的先前聊天历史(聊天历史)。
- 删除聊天:删除执行用户的当前聊天。
3. 组管理
- 列出组:查看用户可用的个人和可分配组。
- 创建组:添加具有名称和描述的新组,用于组织目的。
- 删除组:移除现有组(如果在配置中启用)。
4. 源管理
- 创建源:添加具有内容的新源,并将其分配给特定组。
- 编辑源:更新现有