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

MCP 主机:应用程序、Claude Desktop、IDE 或 AI 工具等需要通过 MCP 访问数据的程序
MCP 客户端:与服务器保持 1:1 连接的协议客户端
MCP 服务器:轻量级程序,每个程序都通过标准化模型上下文协议公开特定功能
本地数据源:MCP 服务器可以安全访问的您计算机上的文件、数据库和服务
远程服务:MCP 服务器可以通过互联网(例如通过 API)连接到的外部系统
概述
该服务器在 MCP 客户端和 privateGPT API 之间架起了一座桥梁,让您可以:
使用公共和私人知识库与 privateGPT 聊天
创建和管理知识源
将来源分组
通过基于组的权限控制访问
为何选择代理
与LLM (大型语言模型)和MCP 服务器相关的代理是一个专用的软件组件,充当语言模型和应用程序之间的中介。它负责处理请求、通过 MCP 与 LLM 交互、管理工作流、确保整个系统的安全性和效率等等。通过使用代理,可以设计出高效、安全且可扩展的复杂 AI 应用程序。此代码库中的代理代码可用于将其实现到您自己的解决方案/应用程序中。
代理、LLM 和 MCP 服务器之间的交互
这些组件的交互有助于开发强大、可扩展且安全的 AI 应用程序。以下是一个简化的场景,演示了这种交互:
**用户输入:**用户通过 MCP 服务器上托管的用户界面发送请求。
代理处理: MCP 服务器上的代理接收请求、验证请求并为 LLM 做好准备。
**LLM 交互:**代理将请求转发给 LLM,LLM 生成响应。
**响应处理:**代理从 LLM 接收响应,如有必要则进一步处理(例如,格式化、与其他数据源集成),然后将其发送回用户。
**安全和日志记录:**在此过程中,代理监控交互,确保遵守安全策略,并记录相关信息以供日后分析。
在此情况下使用代理的优势
**模块化:**代理允许明确分离职责,使系统更易于维护和扩展。
**安全性:**集中管理访问和监控活动有助于最大限度地降低安全风险。
**效率:**自动化代理可以比手动流程更快、更一致地执行任务。
**灵活性:**代理可以轻松调整或扩展以支持新功能或业务需求的变化。
加密密码的重要性
在任何处理敏感数据的应用程序中,安全性至关重要。此服务器管理两组关键凭据:
**代理标头:**例如由 HAProxy 使用来验证和管理流量。
**LLM 访问密码:**用于安全访问大型语言模型。
以明文形式存储这些密码会带来严重的安全风险,包括未经授权的访问和潜在的数据泄露。为了降低这些风险,必须对这些密码进行加密,并在系统内仅处理其密文。
仅使用密文的好处
**增强的安全性:**即使攻击者获得了配置文件或环境变量的访问权限,但如果没有相应的解密密钥,加密的密码仍然无法解读。
**合规性:**加密有助于遵守要求保护敏感信息的安全标准和法规。
**完整性:**确保密码不能被篡改,维护身份验证机制的完整性。
安全
实施以下安全功能是为了确保数据保护以及客户端应用程序与服务器之间的安全通信。这些功能涵盖加密、解密、密钥管理和传输安全。
1.传输层安全性(TLS)
为了确保客户端和服务器之间的通信安全,可以激活 TLS。客户端和服务器之间传输的所有数据均使用 TLS(最低版本 1.2)加密。
为什么要在客户端和服务器之间启用 TLS?
a.通信加密
TLS(传输层安全性)确保客户端和服务器之间传输的所有数据均经过加密。这可以保护密码、信用卡信息和个人数据等敏感信息免遭窃听攻击(中间人攻击)。
b.数据完整性
TLS 保证传输的数据保持不变且不会被更改。完整性检查可确保接收的数据与发送的数据完全一致。
身份验证
TLS 通过数字证书实现服务器(以及可选的客户端)的安全身份验证。这可以防止用户成为虚假网站钓鱼攻击的受害者。
d.防范中间人攻击
TLS 加密连接,使攻击者几乎不可能拦截或操纵流量。如果没有 TLS,攻击者就可以捕获并修改数据包。
e.遵守安全标准和法规
许多法规要求(例如 GDPR、PCI-DSS)都要求安全数据传输。TLS 是这些安全要求的基本组成部分。
f.预防降级和重放攻击
TLS 可防止试图将连接降级到不安全版本(降级攻击)或重放先前有效请求(重放攻击)的攻击。
结论
在客户端和服务器之间启用 TLS 对于确保数据隐私、安全和通信完整性至关重要。它不仅可以保护敏感信息,还有助于满足合规性要求并增强用户信任。
2.密码加密
密码可以使用 RSA(Rivest–Shamir–Adleman)公钥加密技术进行加密。这可以确保敏感数据(例如用户密码)永远不会以明文形式传输。
方法
密钥长度为 2048 位的 公钥加密。
填充:
RSA_PKCS1_PADDING增强安全性并防止已知的填充攻击。
过程
服务器管理员通过执行
node security/generate_encrypted_password.js ~/.ssh/id_rsa_public.pem使用服务器的公钥(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)来启用或禁用密钥生成。当禁用时尝试调用 keygen 函数会导致错误消息。
审计日志
所有密钥生成器操作均已记录,以用于审计和监控目的。
7.基于证书的访问控制(CBAC)
由于代理在激活证书身份验证并使用密钥登录服务器时无需密码,因此会自动锁定到该服务器。如果代理想要登录其他 MCP privateGPT 服务器,则会拒绝此登录尝试,因为系统会根据服务器的私有证书检查密钥。
特征
只有授权角色才能访问
keygen、store_user和edit_source等功能。未经授权的访问尝试将被拒绝,并显示详细的错误消息。
配置
可以在服务器的配置(
Functions对象)中指定启用或禁用的功能。
8.安全配置
服务器配置包含几个与安全相关的选项:
SSL_VALIDATE
验证 SSL/TLS 证书以确保安全通信。
可以根据环境要求(例如,测试与生产)启用或禁用。
密码加密
启用或禁用密码加密。
确保在无法加密的环境中兼容。
9. 日志记录和监控
所有与安全相关的事件都会被记录下来,以便监控和排除故障:
记录的事件
登录尝试失败。
密钥生成请求。
未经授权的访问尝试。
加密和解密错误。
概括
实施的安全功能可确保:
通过加密和安全传输来保证敏感数据的机密性。
使用强大的密钥管理和令牌验证来确保操作的完整性。
基于角色且可配置的系统功能访问控制。
全面监控,主动检测并应对安全威胁。
这些措施共同为客户端-服务器通信和数据处理提供了一个安全的环境。
privateGPT 服务器功能概述
privateGPT 服务器提供了一系列强大的功能,旨在与模型上下文协议 (MCP) 实现高效、灵活且安全的通信。以下是该服务器主要特性和功能的概述。
主要特点
1.身份验证和授权
登录功能:使用电子邮件和密码验证用户以生成访问令牌。
注销功能:安全地使用户令牌无效以结束会话。
2.聊天管理
开始聊天:与服务器发起对话,可选择使用公共知识库或特定群组环境。
继续聊天:通过提供聊天 ID 和后续消息来恢复正在进行的对话。
检索聊天信息:通过 ID 获取特定聊天的元数据和消息。
删除所有聊天记录:删除执行用户的之前的聊天记录(聊天记录)。
删除聊天:删除执行用户的当前聊天。
3.群组管理
列出组:查看用户可用的个人组和可分配组。
创建组:为组织目的添加具有名称和描述的新组。
删除组:删除现有组(如果在配置中启用)。
4.源管理
创建来源:添加具有内容的新来源并将其分配给特定组。
编辑来源:使用新内容或元数据更新现有来源。
删除源:删除不再需要的源。
检索来源:通过 ID 获取有关特定来源的信息。
列出来源:查看分配给特定组的所有来源。
5.用户管理
创建用户:注册具有可自定义角色、组和设置的新用户。
编辑用户:更新用户信息,包括姓名、电子邮件、密码和角色。
删除用户:从系统中删除用户(如果在配置中启用)。
重新激活用户:重新激活之前已停用的用户。
6.配置灵活性
功能激活/停用:通过
.env配置文件启用或禁用单个服务器功能。语言支持:将服务器的系统消息自定义为您的首选语言(例如英语或德语)。
SSL 验证:切换 SSL 验证以确保与服务器的安全连接。
7.错误处理和日志记录
详细的错误消息和日志记录:
无效请求
身份验证失败
API 通信问题
访问禁用功能时的可配置响应。
8.安全功能
基于令牌的身份验证:确保对服务器功能的安全且受控的访问。
限制组访问:限制对
assignableGroups访问以增强隐私的选项。
示例用例
客户支持:使用聊天功能构建智能对话代理。
知识管理:管理和检索具有来源和组的结构化数据。
多用户协作:创建、编辑并将用户分配到组以实现协作工作流程。
可定制的功能:仅激活您的应用程序所需的功能。
如何使用
将
privateGPT.env.json.example文件复制到privateGPT.env.json,例如使用cp .\privateGPT.env.json.example .\privateGPT.env.json通过编辑
privateGPT.env.json文件来配置服务器。使用提供的脚本启动服务器。
通过 API 调用与服务器交互以利用其功能。
有关每个端点的详细使用说明和示例,请参阅API 文档。
privateGPT 服务器是一款功能强大的工具,可在可自定义的环境中管理结构化通信和数据。您可以根据自身需求定制其功能,以实现最高的效率和控制力。
安装
克隆存储库:
现在您必须选择:手动还是自动。
Manually step-by-step Installation
安装
npm,例如:
安装依赖项
构建项目:
or Automatic Installation
使
InstallMPCServer.sh可执行(Linux):
运行脚本就大功告成了。留意错误信息,确保一切正常。
配置说明
代理配置
本节对系统中使用的Proxy_Config设置进行了详细的说明。
Use Proxy
如果使用代理,则必须在代理上定义用于身份验证的标头。
钥匙 | 描述 | 示例值 |
使用代理 | 确定应用程序是否应该路由 |
|
通过代理服务器发出请求。 |
HAProxy 后端配置示例。仅接受标头中包含1234567890ABCDEFHIJ请求:
Header Encryption
钥匙 | 描述 | 示例值 |
标头加密 | 指示自定义代理访问标头是否已加密。 |
|
"true":访问Header已加密,请使用服务端security文件夹中的加密工具对Header进行加密。"false":访问标头是纯文本。
Access Header
用于代理身份验证或访问控制的自定义标头值。如果HEADER_ENCRYPTED为"true" ,则必须先解密此值才能使用。
钥匙 | 描述 | 示例值 |
访问标头 | 用于代理身份验证或访问控制。 |
|
笔记
如果
HEADER_ENCRYPTED设置为"true",请确保ACCESS_HEADER得到适当的保护。仔细检查代理服务器设置以避免连接问题。
服务器配置
为了进行安全证书认证,请使用您的 privateGPT 凭据创建一个.env文件,例如 privateGPT.env.json 可以在.env文件中调整设置以自定义服务器及其功能。
生成证书(如果您还没有 ssh 证书,请使用ssh-keygen -t rsa ),需要 .pem 文件:
完成此过程后,您可以使用加密密码加密工具将密码创建密文,并使用加密密码解密工具测试该密码。您可以在本文档的Security部分找到其工作原理的描述。
接下来,您应该提供 SSL/TLS 证书server.crt和server.key ,以确保与客户端和代理的通信是加密的。如果您想使用自签名证书,可以通过执行以下命令来生成它们:
注意:客户端和代理可以检测到服务器使用自签名证书,因为与经过组织验证等的官方证书相比,这些证书可能存在安全隐患。但是,客户端和代理可以使用适当的参数接受使用这些证书的通信(请参阅相应客户端和代理参数的说明)。
以下是 privateGPT 服务器的.env配置文件示例,其中包含各项设置的说明。您可以根据自己的环境和需求自定义这些值。
Server Port
钥匙 | 描述 | 示例值 |
港口 | MCP 服务器运行的端口。 |
|
Language
系统开箱即用地支持以下语言: de , en , pt , es , nl , fr 。所有语言都可以通过修改privateGPT-messages.js轻松添加。修改后,此文件应存储在/src和/dist中。
钥匙 | 描述 | 示例值 |
语言 | 服务器系统消息的语言(
或
)。 |
|
SSL Validation
钥匙 | 描述 | 示例值 |
SSL_VALIDATE | 仅当服务器的证书无法被客户端验证时才使用
。 |
|
Encryption
钥匙 | 描述 | 示例值 |
密码加密 | 如果设置为
服务器只接受密文形式的密码。 |
|
公钥 | 指定用于 RSA 的服务器公共 PEM 文件的文件系统路径。 |
|
私钥 | 指定用于 RSA 的服务器私钥文件的文件系统路径。 |
|
SSL/TLS
钥匙 | 描述 | 示例值 |
启用TLS | 如果设置为
服务器仅提供与客户端和代理的 TLS 加密通信。 |
|
SSL_KEY_PATH | 指定用于 SSL/TLS 的服务器 SSL/TLS 密钥文件的文件系统路径。 |
|
SSL_CERT_PATH | 指定用于 SSL/TLS 的服务器证书的文件系统路径。 |
|
Restrictions
钥匙 | 描述 | 示例值 |
受限制组 | 设置
可阻止客户端访问
。 |
|
启用打开AICOMP API | 设置
允许 OpenAI API 的兼容模式。 |
|
Logging
钥匙 | 描述 | 示例值 |
写入日志文件 | 启用日志文件。如果设置为
,则不会写入日志文件
。如果此选项设置为 true ,则可以通过服务器的 `http://:3000' 检索日志。 |
|
LOG_IPs | 记录客户/代理的 IP 地址。如果设置为
,则此信息将被
替换,并且无法恢复。 |
|
匿名模式 | 停用所有与日志记录相关的功能。不会写入/保存或显示任何通信、错误或类似信息。 |
|
Feature Activation/Deactivation
控制各个服务器功能的可用性。将相应值设置为true以启用该功能,或设置为false以禁用该功能。禁用的功能将返回一条消息,指示它们不可用。
钥匙 | 描述 | 示例值 |
启用登录 | 启用或禁用登录功能。 |
|
启用注销 | 启用或禁用注销功能。 |
|
启用聊天 | 启用或禁用聊天功能。 |
|
启用_继续_聊天 | 启用或禁用继续聊天。 |
|
启用获取聊天信息 | 启用或禁用检索聊天信息。 |
|
启用删除所有聊天 | 启用或禁用检索聊天信息。 |
|
启用删除聊天 | 启用或禁用检索聊天信息。 |
|
启用列表组 | 启用或禁用列表组。 |
|
启用商店组 | 启用或禁用创建组。 |
|
启用删除组 | 启用或禁用删除组。 |
|
启用创建源 | 启用或禁用创建源。 |
|
启用编辑源 | 启用或禁用编辑源。 |
|
启用删除源 | 启用或禁用删除源。 |
|
启用获取源 | 启用或禁用检索源。 |
|
启用列表源 | 启用或禁用列表源。 |
|
启用存储用户 | 启用或禁用创建用户。 |
|
启用编辑用户 | 启用或禁用编辑用户。 |
|
启用删除用户 | 启用或禁用删除用户。 |
|
启用_重新激活_用户 | 启用或禁用重新激活用户。 |
|
用法
启用某个功能:将
.env文件中的对应值设置为true。禁用某个功能:将
.env文件中的相应值设置为false。服务器将回复一条消息,表明该功能已被禁用。
.env条目示例:
用法
启动服务器:
服务器将启动并在 stdio 上监听 MCP 命令。
错误处理
服务器处理各种错误情况:
身份验证失败
网络错误
无效请求
API 错误
速率限制
超时错误
错误映射到适当的 MCP 错误代码并包含用于调试的详细消息。
可用工具
生成加密密码
为客户端和/或服务器的 Proxy_Config->Password 条目生成密码:
检查生成的加密密码
要检查加密使用:
有关详细信息,请参阅下面的Encrypted Password Generation Tool和Encrypted Password Decryption Tool部分
加密密码生成工具
概述
加密密码生成工具是一个 Node.js 脚本,旨在使用 RSA 公钥加密技术安全地加密用户密码。该工具利用强大的加密机制,确保敏感密码数据在传输和存储过程中始终受到保护。对于需要在客户端和服务器之间安全处理和传输密码的系统而言,它是一个必不可少的组件。
特征
**安全加密:**利用 RSA(Rivest–Shamir–Adleman)公钥加密来加密敏感密码。
**用户友好界面:**提示用户通过命令行安全地输入密码。
**错误处理:**提供有关丢失密钥或加密问题的全面错误消息。
**灵活集成:**可以集成到需要安全密码处理和加密的大型系统中。
工作原理
**公钥加载:**脚本从作为命令行参数提供的指定文件路径加载 RSA 公钥。
**密码输入:**它提示用户通过命令行安全地输入密码。
**加密过程:**脚本使用加载的公钥和
RSA_PKCS1_PADDING对输入的密码进行加密。**输出:**加密后的密码以Base64格式显示,可供安全传输或存储。
先决条件
**Node.js:**确保你的系统上已安装 Node.js。你可以从Node.js 官方网站下载。
**RSA 公钥:**您必须有权访问用于加密密码的 RSA 公钥(
id_rsa_public.pem)。
安装
**安装依赖项:**该脚本使用内置的 Node.js 模块,因此不需要额外的依赖项。但是,请确保您的 Node.js 版本支持 ES6 模块。
rm -rf node_modules package-lock.json npm cache clean --force npm install
用法
**准备您的 RSA 公钥:**确保您的 RSA 公钥(
id_rsa_public.pem)安全地存储在您的 MCP 服务器上。**运行脚本,您将在 MCP 服务器的
security目录中找到它:**使用 Node.js 执行脚本,并将您的公钥路径作为命令行参数提供。node encrypt_password.js /path/to/your/id_rsa_public.pem例子:
node security/encrypt_password.js ~/.ssh/id_rsa_public.pem**输入您的密码:**出现提示时,请安全地输入您的密码。
Please enter your password: **********查看加密密码:**脚本将以Base64格式输出加密密码。
Encrypted Password: <Your_Encrypted_Password>
加密密码解密工具
概述
加密密码解密工具是一个 Node.js 脚本,旨在使用 RSA 私钥加密技术安全地解密加密密码。该工具利用强大的加密和解密机制,确保敏感密码数据在传输和存储过程中始终受到保护。要验证或解密加密密码,请使用私钥。这有助于确保加密操作正确执行。
特征
**安全解密:**利用 RSA(Rivest–Shamir–Adleman)私钥加密技术解密敏感密码数据。
**错误处理:**提供有关丢失密钥或解密问题的全面错误消息。
**用户友好界面:**提示用户通过命令行安全地输入加密密码。
**灵活集成:**可以集成到需要安全密码处理的大型系统中。
工作原理
**私钥加载:**脚本从作为命令行参数提供的指定文件路径加载 RSA 私钥。
**加密密码输入:**提示用户输入Base64格式的加密密码。
**解密过程:**脚本使用加载的私钥和RSA_PKCS1_PADDING对加密的密码进行解密。
**输出:**解密后的明文密码显示在控制台中。
先决条件
**Node.js:**确保你的系统上已安装 Node.js。你可以从Node.js 官方网站下载。
**RSA 私钥:**您必须有权访问 MCP 服务器上用于解密密码的 RSA 私钥(
id_rsa)。
安装
**安装依赖项:**该脚本使用内置的 Node.js 模块,因此不需要额外的依赖项。但是,请确保您的 Node.js 版本支持 ES6 模块。
用法
**准备您的 RSA 私钥:**确保您的 RSA 私钥(
id_rsa)安全地存储在您的机器上。运行脚本,您将在 MCP 服务器的 ** 使用 Node.js 执行脚本,并将您的私钥路径作为命令行参数提供。
node decrypt_password.js /path/to/your/id_rsa例子:
node decrypt_password.js ~/.ssh/id_rsa**输入加密密码:**出现提示时,输入 Base64 格式的加密密码。
Please enter the encrypted password: <Your_Encrypted_Password>**查看解密后的密码:**脚本将输出解密后的明文密码。
Decrypted Password: your_plaintext_password
这将解密加密的密码并显示原始值。
笔记
确保
~/.ssh/id_rsa_public.pem(公钥)和~/.ssh/id_rsa(私钥)文件存在并具有正确的权限。加密工具依赖于公钥,而解密工具则需要私钥。
项目结构
用于 MAS 开发的 MCP 服务器 – 完整项目概述
该存储库包含MCP 服务器和所有相关的客户端实现。
下面您将看到从项目根目录列出的完整目录结构,包括:
clients(C# .Net、C++、Go、Java、JavaScript、PHP、Python)dist,docs,logs,security,src,tests,ver以及所有子文件夹/文件。
笔记:
这是一个带有极少评论的直接目录列表。
项目结构(完整列表)
执照
该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。