Chatvolt MCP服务器:高级概述
本文档提供了Chatvolt模型上下文协议(MCP)服务器的高级概述,这是一个基于TypeScript的应用程序,旨在通过为AI代理提供一套与Chatvolt平台交互的工具来扩展其功能。
项目目标
该项目的主要目标是作为人工智能模型和Chatvolt API之间的桥梁。它公开了一组AI代理可以调用的工具,以执行管理代理、查询数据存储和处理CRM场景等操作。这允许复杂工作流程的自动化,并为Chatvolt平台提供自然语言界面。
关键技术
- Node.js:服务器的运行时环境。
- TypeScript:主要的编程语言,提供静态类型和现代JavaScript功能。
- @模型上下文协议/sdk:用于构建MCP服务器的核心SDK,简化了定义工具、资源和处理来自AI模型的请求的过程。
主要组件
1.MCP服务器(src/server.ts)
应用程序的核心是MCP服务器,它负责:
- 正在初始化服务器:设置服务器的名称、版本和功能。
- 处理请求:实现各种MCP请求类型的处理程序,包括
ListTools,CallTool,ListResources,以及GetPrompt. - 工具调度:接收
CallTool请求并将其分派给适当的工具处理程序。
2.工具(src/tools/)
这些工具是AI代理可以执行的操作。它们在 src/tools/ 目录,大致分为:
- 代理管理:用于创建、更新、删除和列出Chatvolt代理的工具。
- CRM管理:用于管理CRM场景和步骤的工具。
- 数据存储管理:用于与数据存储和数据源交互的工具。
3.资源和提示
服务器通过资源和提示为AI模型提供额外的上下文:
TOOL_DESCRIPTIONS.md:一个markdown文件,提供所有可用工具及其参数的详细描述。MODELS.md:可用于代理的AI模型列表。SYSTEM_PROMPTS.md:包含指导AI代理的系统级说明。
______________________________________________________________________
客户端配置
此MCP服务器是通过客户端的命令启动的。要连接,您需要配置客户端以启动 chatvolt-mcp 命令并传递必要的环境变量。
下面是一个如何配置客户端的示例 mcpServers 设置:
{
"mcpServers": {
"chatvolt-mcp": {
"command": "npx",
"args": [
"chatvolt-mcp"
],
"env": {
"CHATVOLT_API_KEY": "{your_token}"
}
}
}
}注: 您必须更换 "{your_token}" 使用您的实际Chatvolt API密钥。
______________________________________________________________________
Chatvolt MCP服务器:详细架构
本文档提供了Chatvolt模型上下文协议(MCP)服务器的详细技术架构。它扩展了高级概述,涵盖了请求生命周期、目录结构以及定义和注册工具的过程。
1.请求生命周期: CallTool
这 CallTool 请求是AI代理执行动作的主要机制。此请求的生命周期如下:
sequenceDiagram
participant AI Agent
participant MCP Server
participant Tool Handler
participant Chatvolt API
AI Agent->>+MCP Server: Sends CallToolRequest (e.g., 'delete_agent', {id: '123'})
MCP Server->>MCP Server: Receives request in CallTool handler
Note over MCP Server: Finds handler for 'delete_agent' in `toolHandlers` map
MCP Server->>+Tool Handler: Invokes handleDeleteAgent(request)
Tool Handler->>Tool Handler: Validates arguments (e.g., checks for 'id')
Tool Handler->>+Chatvolt API: Calls `deleteAgent('123')`
Chatvolt API-->>-Tool Handler: Returns result (e.g., {success: true})
Tool Handler-->>-MCP Server: Returns formatted content
MCP Server-->>-AI Agent: Sends response with tool output流程说明:
- 请求接收: MCP服务器接收
CallToolRequest。此请求由通用程序处理CallToolRequestSchema处理程序定义于src/server.ts. - 处理人员派遣: 服务器从以下位置查找特定的工具处理程序
toolHandlers其映射工具名称(例如。,"delete_agent")将它们对应的处理函数(例如。,handleDeleteAgent).此对象是从中心导入的src/tools/索引文件。 - 工具执行: 执行匹配的处理程序函数。例如,
handleDeleteAgent在……里面src/tools/deleteAgent.ts被称为。 - 业务逻辑: 工具处理程序从请求中提取必要的参数,验证它们,然后从
src/services/层(例如。,deleteAgent(id)). - API交互: 服务功能负责对Chatvolt平台进行实际的API调用。
- 响应格式: 工具处理程序从服务接收数据,将其字符串化(在本例中为JSON),并将其包装为MCP SDK所期望的格式。
- 响应传输: 服务器将最终的格式化内容发送回发起呼叫的AI代理。
2.目录结构
该项目被组织为独立的关注点,使其模块化和可维护。
src/:这是所有应用程序源代码的根目录。src/tools/:此目录包含服务器公开的每个工具的实现。
- 结构: 每个工具通常都有自己的文件(例如。, deleteAgent.ts). - 内容: 每个文件导出两个主要构造: 1. A. Tool 定义对象(例如。, deleteAgentTool)包含工具的 name, description,以及 inputSchema 根据MCP SDK的要求。 1. 处理器函数(例如。, handleDeleteAgent)它包含执行该工具的逻辑。 - 聚合: A中心 index.js 此目录中的文件负责导入所有单独的工具和处理程序,并将其导出为两个聚合对象: tools (所有工具定义的数组)和 toolHandlers (工具名称到其处理程序的映射)。
src/services/:此目录旨在容纳与外部服务(主要是Chatvolt API)交互的业务逻辑和API客户端代码。
- 目的: 它充当工具处理程序和底层平台之间的桥梁。这种分离确保了工具处理程序只负责请求/响应处理和参数验证,而服务层管理API通信的细节。 - 例子: 这 deleteAgent 功能,从导入 ../services/chatvolt.js,将包含 fetch 发送所需的调用和逻辑 DELETE 向Chatvolt提出请求 /agents/:id 终点。
3.工具定义和注册
工具是定义服务器功能的核心组件。它们的定义和注册遵循一个明确的模式:
- 工具定义: 每个工具都被定义为一个类型为的常量对象
Tool从@modelcontextprotocol/sdk/types.js图书馆。该对象包括:
- name:工具的唯一机器可读名称(例如。, "delete_agent"). - description:工具功能及其参数的人类可读描述。而资源文件类似 TOOL_DESCRIPTIONS.md 存在为AI模型提供详细文档的功能 description 工具定义中的属性本身就是一个简洁的总结。 - inputSchema:一个JSON Schema对象,正式定义了工具接受的参数,包括它们的类型以及它们是否是必需的。
- 工具注册: 服务器通过以下过程发现并注册工具:
- 这 tools 阵列和 toolHandlers 地图从以下位置导入 src/tools/index.js 进入 src/server.ts. - 这 ListToolsRequestSchema 处理程序在 src/server.ts 使用导入的 tools 数组以响应对可用工具列表的请求。 - 这 CallToolRequestSchema 处理程序使用 toolHandlers 根据映射查找并执行正确的函数 name 传入请求中的参数。
这种架构创建了一个解耦的系统,通过在 src/tools/ 目录和更新中心 index.js 文件,无需修改中的核心服务器逻辑 src/server.ts.
______________________________________________________________________
系统提示文档
本文档解释了用于指导AI代理在与Chatvolt MCP(模型上下文协议)交互时的行为的系统提示的作用和内容。这些提示在 SYSTEM_PROMPTS.md 文件,并为AI提供一组基础指令。
系统提示的目的
系统提示是定义人工智能的角色、目标和操作约束的高级指令。他们通过建立一个清晰的框架来解释用户请求、使用工具和构建响应,确保人工智能以可预测和有效的方式行事。
关键说明和场景
这 SYSTEM_PROMPTS.md 该文件概述了三种主要场景,每种场景都有相应的系统提示来指导人工智能的行为。
1.工具操作简单
- 目的:处理可以通过单个工具调用完成的简单用户请求。
- AI角色:Chatvolt平台的人工智能专家助理。
- 核心指令:
1. 识别用户的意图。 1. 选择单个最合适的工具(例如。, list_agents). 1. 使用正确的参数执行工具。 1. 向用户报告结果。
2.复杂的多步骤工作流程
- 目的:管理需要一系列工具调用才能实现更大目标的复杂任务。
- AI角色:负责编排工作流程的高级人工智能自动化工程师。
- 核心指令:
1. 解构:将用户的请求分解为更小的、连续的步骤。 1. 计划:制定一个循序渐进的计划,为每个步骤确定合适的工具。 1. 执行:按顺序调用工具,等待每个工具成功完成,然后再继续下一个。一个工具的输出可以用作另一个工具。 1. 合成:提供所采取的所有行动和结果的最终总结。
3.自我发现和学习
- 目的:使人工智能在执行任务之前能够足智多谋并了解自己的能力。
- AI角色:高度自主和主动的人工智能代理。
- 核心指令:
1. 自我发现优先:在尝试复杂任务之前,AI 必须 第一个电话 getDocumentation 该工具用于检索有关其所有可用工具的信息。 1. 分析:查看文档以了解其功能。 1. 计划根据新获得的工具知识制定计划。 1. 执行:执行计划并报告结果。
______________________________________________________________________
API和工具参考
本文档提供了可用于与服务器交互的可用工具的详细参考。
______________________________________________________________________
create_agent
创建新的Chatvolt代理。
| 参数 | 类型 | 说明 |
|---|---|---|
name | string,必填 | 代理的名称。这是代理的人类可读标识符。 |
description | string,必填 | 对代理的目的和功能的详细描述。 |
modelName | string,必填 | 代理将使用的特定AI模型(例如,“gpt-4”、“claude_3_sonnet”)。 |
systemPrompt | string,必填 | 给代理的初始指令或上下文,用于定义其个性、角色和行为。 |
temperature | number,可选 | 控制模型输出的随机性。接近0的值使输出更具确定性,而接近1的值使其更具创造性。 |
tools | array,可选 | 代理可用于执行操作的工具列表。 |
______________________________________________________________________
update_agent
根据ID部分更新现有代理。允许更新特定代理的一个或多个字段。只有请求正文中提供的字段才会被更新。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,需要 | 要更新的代理的ID。 |
name | string,可选 | 代理的新名称。 |
description | string,可选 | 代理的新描述。 |
modelName | string,可选 | 代理要使用的新LLM模型。 |
temperature | 数字,可选 | 新型号温度(最低0.0,最高1.0)。 |
systemPrompt | string,可选 | 代理的新系统提示。 |
visibility | string,可选 | 代理的新可见性(例如,“public”、“private”)。 |
handle | string,可选 | 代理的新唯一标识符(slug)。 |
interfaceConfig | object,可选 | 此代理的新聊天界面设置。 |
configUrlExternal | 对象,可选 | 新的外部URL配置。 |
configUrlInfosSystemExternal | object,可选 | 系统的新外部URL配置。 |
______________________________________________________________________
delete_agent
删除指定的代理。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要删除的代理的唯一标识符。 |
______________________________________________________________________
list_agents
检索所有可用代理的列表。
此工具不接受任何参数。
______________________________________________________________________
get_agent
检索单个代理的详细信息。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要检索的代理的唯一标识符。 |
______________________________________________________________________
agent_query
将查询或消息发送到代理进行处理。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 将接收查询的代理的唯一标识符。 |
query | string,必填 | 要发送给代理的问题或命令的文本。 |
conversationId | string,可选 | 现有对话的标识符。如果提供,查询将成为该对话历史的一部分。 |
______________________________________________________________________
enable_disable_agent_integration
启用或禁用代理的特定集成。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 代理的唯一标识符。 |
type | string,必填 | 要修改的集成类型(例如“whatsapp”、“telegram”)。 |
enabled | boolean,必填 | 设置为 true 以实现集成或 false 禁用它 |
______________________________________________________________________
create_crm_scenario
在CRM中创建新场景。
| 参数 | 类型 | 说明 |
|---|---|---|
name | string,必填 | 新CRM方案的名称 |
description | string,可选 | 场景目的的描述。 |
______________________________________________________________________
update_crm_scenario
更新现有CRM方案。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要更新的场景的唯一标识符。 |
name | string,必填 | 场景的新名称 |
description | string,可选 | 场景的新描述 |
______________________________________________________________________
delete_crm_scenario
删除CRM方案。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要删除的方案的唯一标识符。 |
______________________________________________________________________
list_crm_scenarios
列出所有CRM方案。
| 参数 | 类型 | 说明 |
|---|---|---|
agentId | string,可选 | 如果提供,则筛选列表以仅显示与此代理ID关联的场景 |
______________________________________________________________________
create_crm_step
在CRM场景中创建新步骤。
| 参数 | 类型 | 说明 |
|---|---|---|
scenarioId | string,必填 | 将添加此步骤的场景的唯一标识符。 |
name | string,必填 | 新步骤的名称。 |
______________________________________________________________________
update_crm_step
更新CRM场景中的现有步骤。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要更新的步骤的唯一标识符。 |
name | string,必填 | 步骤的新名称。 |
______________________________________________________________________
delete_crm_step
从CRM场景中删除步骤。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要删除的步骤的唯一标识符。 |
______________________________________________________________________
list_crm_steps
列出给定CRM场景的所有步骤。
| 参数 | 类型 | 说明 |
|---|---|---|
scenarioId | string,必填 | 要列出其步骤的场景的唯一标识符。 |
______________________________________________________________________
create_datastore
创建新的数据存储。
| 参数 | 类型 | 说明 |
|---|---|---|
type | string,必填 | 要创建的数据存储的类型(例如“qdrant”)。 |
name | string,可选 | 数据存储的名称。 |
description | string,可选 | 数据存储内容或用途的描述。 |
______________________________________________________________________
get_datastore
检索有关特定数据存储的信息。
| 参数 | 类型 | 说明 |
|---|---|---|
id | string,必填 | 要检索的数据存储的唯一标识符。 |
search | string,可选 | 用于在数据存储中查找特定数据的搜索词。 |
______________________________________________________________________
list_datastores
检索所有数据存储的列表。
此工具不接受任何参数。
______________________________________________________________________
create_datasource
在数据存储中创建新的数据源。
| 参数 | 类型 | 说明 |
|---|---|---|
datastoreId | string,必填 | 将创建数据源的数据存储的唯一标识符。 |
name | string,必填 | 数据源的名称,通常用作文件名。 |
text | string,必填 | 数据源的实际文本内容。 |
