# https://github.com/mindstone/mcp-servers 项目说明书

生成时间：2026-05-26 15:27:47 UTC

## 目录

- [项目概述](#overview)
- [连接器开发模板](#connector-template)
- [系统架构](#architecture)
- [认证模式](#auth-patterns)
- [安全加固机制](#security)
- [OAuth 安全加固](#oauth-hardening)
- [Google Workspace 连接器](#google-workspace-connector)
- [Microsoft 365 连接器套件](#microsoft-connectors)
- [生产力工具连接器](#productivity-connectors)
- [CRM 与客服连接器](#crm-connectors)

<a id='overview'></a>

## 项目概述

### 相关页面

相关主题：[系统架构](#architecture), [连接器开发模板](#connector-template)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/mindstone/mcp-servers/blob/main/README.md)
- [MIGRATION.md](https://github.com/mindstone/mcp-servers/blob/main/MIGRATION.md)
- [package.json](https://github.com/mindstone/mcp-servers/blob/main/package.json)
- [connectors/_template/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/_template/package.json)
- [connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)
- [connectors/google-workspace/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)
- [connectors/hubspot/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/README.md)
- [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)
- [connectors/google-analytics/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-analytics/README.md)
</details>

# 项目概述

## 项目简介

mcp-servers 是一个由 Mindstone 团队维护的 **MCP (Model Context Protocol) 服务器集合**，旨在为 AI 助手提供与各种企业服务和生产力工具集成的能力。该项目采用模块化架构，每个连接器（Connector）独立封装一个外部服务的集成逻辑，通过 MCP 协议与主机应用（如 Claude Desktop、Claude Code、Goose、Continue.dev 等）进行通信 资料来源：[README.md:1]。

MCP 协议是一种标准化的人机交互协议，允许 AI 模型通过统一的工具接口调用外部系统功能。该仓库中的所有连接器都遵循这一协议规范，实现了从简单的邮件发送到复杂的 CRM 数据操作的各类工具 资料来源：[README.md:1-5]。

## 项目架构

### 整体架构设计

项目采用 **Monorepo 单体仓库结构**，所有连接器位于 `connectors/` 目录下，每个连接器都是一个独立的 Node.js 模块，拥有自己的 `package.json`、TypeScript 源码和构建配置。这种设计使得各服务集成可以独立开发、测试和发布，同时共享统一的代码规范和最佳实践 资料来源：[package.json:1-20]。

```mermaid
graph TD
    subgraph "MCP Host Layer"
        A[MCP Host<br/>Claude Desktop/Code<br/>Goose/Continue.dev]
    end
    
    subgraph "Connectors Layer"
        B[Office Connector]
        C[Google Workspace<br/>Connector]
        D[HubSpot Connector]
        E[Microsoft Teams<br/>Connector]
        F[Zendesk Connector]
        G[Google Analytics<br/>Connector]
        H[Napkin Connector]
        I[Nano Banana<br/>Connector]
        J[Microsoft SharePoint<br/>Connector]
    end
    
    subgraph "External Services"
        K[Microsoft 365]
        L[Google Workspace]
        M[HubSpot CRM]
        N[Various APIs]
    end
    
    A --> B
    A --> C
    A --> D
    A --> E
    A --> F
    A --> G
    A --> H
    A --> J
    
    B --> K
    C --> L
    D --> M
    E --> K
    F --> N
    G --> L
    J --> K
```

### 连接器目录结构

每个连接器遵循统一的项目结构，保证了代码的可维护性和一致性：

| 目录/文件 | 说明 |
|-----------|------|
| `src/` | TypeScript 源代码目录 |
| `src/tools/` | 工具定义和处理逻辑 |
| `src/tools/definitions.ts` | 工具元数据定义文件 |
| `dist/` | TypeScript 编译输出目录 |
| `package.json` | NPM 包配置和脚本定义 |
| `README.md` | 连接器使用文档 |
| `LICENSE` | 许可证文件 |

资料来源：[connectors/_template/package.json:1-30]

## 核心连接器一览

### Microsoft Office 连接器

`@mindstone/mcp-server-office` 提供了对 Microsoft Office 套件的深度集成，支持 Word、Excel 和 PowerPoint 三大应用。该连接器提供了超过 **53 个工具**，涵盖文档操作、数据处理和演示管理三大领域 资料来源：[connectors/office/README.md:1-100]。

#### Word 工具（17个）

| 工具名称 | 功能描述 | 操作类型 |
|----------|----------|----------|
| `rebel_office_word_read_document` | 读取 Word 文档正文，按段落分页 | 只读 |
| `rebel_office_word_get_document_structure` | 获取文档标题/章节大纲 | 只读 |
| `rebel_office_word_insert_text` | 在指定位置插入文本 | 破坏性 |
| `rebel_office_word_replace_text` | 查找并替换文档文本 | 破坏性 |
| `rebel_office_word_format_text` | 应用字体、颜色、强调或对齐格式 | 破坏性 |
| `rebel_office_word_insert_table` | 插入带表头和行的表格 | 破坏性 |
| `rebel_office_word_insert_image` | 从文件路径或 base64 数据插入图片 | 破坏性 |

#### Excel 工具（22个）

| 工具名称 | 功能描述 | 操作类型 |
|----------|----------|----------|
| `rebel_office_excel_read_range` | 从 A1 范围或命名范围读取单元格值 | 只读 |
| `rebel_office_excel_write_range` | 向范围写入二维值数组 | 破坏性 |
| `rebel_office_excel_add_worksheet` | 在指定位置添加新工作表 | 破坏性 |
| `rebel_office_excel_delete_worksheet` | 删除工作表及所有数据 | 破坏性 |
| `rebel_office_excel_set_formula` | 设置单元格公式 | 破坏性 |

资料来源：[connectors/office/README.md:1-80]

### Google Workspace 连接器

`@mindstone/mcp-server-google-workspace` 集成了 Gmail、日历、Drive、Docs、Sheets、Slides、Contacts、Tasks 和 Forms 等 Google 服务。该连接器的最新版本 **v0.1.2** 引入了一个重要的行为变更：增加了 `handleComposeWorkspaceEmail` 的输入验证机制，在 `to`、`subject`、`body` 参数为空时不再静默使用默认值，而是抛出 `McpError(InvalidParams)` 错误 资料来源：[connectors/google-workspace/package.json:8-15]。

> ⚠️ **社区关注点**：此变更在 Issue #67 和 PR #66 中讨论，是一次行为变更（Behaviour-changing），可能影响依赖旧行为的上游应用 资料来源：[社区上下文:#67]。

### HubSpot 连接器

HubSpot CRM 连接器提供了全面的客户关系管理功能，包括联系人、公司、交易、工单、任务等核心模块的操作。连接器通过 `src/tools/definitions.ts` 导出了完整的工具定义列表，并通过 `applyCohortHygieneAnnotations` 函数为每个工具自动添加安全注解，包括 `destructiveHint`（破坏性提示）、`openWorldHint`（开放世界提示）等元数据 资料来源：[connectors/hubspot/src/tools/definitions.ts:1-50]。

| 功能模块 | 工具数量 | 主要工具 |
|----------|----------|----------|
| Account | 多个 | 账户信息管理 |
| Contact | 多个 | 联系人 CRUD 操作 |
| Company | 多个 | 公司信息管理 |
| Deal | 多个 | 交易管理 |
| Ticket | 多个 | 工单管理 |
| Forms | 多个 | 表单列表和提交获取 |
| Knowledge Base | 多个 | 知识库文章管理 |
| Analytics | 多个 | 网站流量分析报告 |

资料来源：[connectors/hubspot/README.md:1-80]

### Microsoft Teams 连接器

Microsoft 365 Teams 连接器允许通过 MCP 协议与 Microsoft Teams 进行交互。该连接器依赖 Microsoft Entra (Azure AD) 进行身份验证，需要配置 `MS_CLIENT_ID` 和 `MS_CONFIG_DIR` 环境变量 资料来源：[connectors/microsoft-teams/README.md:1-50]。

### 其他连接器

| 连接器 | NPM 包名 | 主要功能 |
|--------|----------|----------|
| Google Analytics | `@mindstone/mcp-server-google-analytics` | GA4 数据查询和报告 |
| Zendesk | `@mindstone/mcp-server-zendesk` | 工单和宏管理 |
| Napkin | `@mindstone/mcp-server-napkin` | 文本生成专业可视化图表 |
| Nano Banana | `@mindstone/mcp-server-nano-banana` | 集成 Gemini API 的图像生成 |
| Microsoft SharePoint | `@mindstone/mcp-server-sharepoint` | SharePoint 站点和页面内容管理 |

资料来源：[connectors/google-analytics/README.md:1], [connectors/zendesk/README.md:1], [connectors/napkin/README.md:1], [connectors/nano-banana/README.md:1]

## 技术规范

### 运行时要求

所有连接器均要求 Node.js 版本 **18 或更高版本**，使用 TypeScript 作为开发语言，并采用 ESM (ES Modules) 模块系统 资料来源：[connectors/google-workspace/package.json:25]。

```json
{
  "engines": {
    "node": ">=18"
  },
  "type": "module"
}
```

### 构建流程

项目采用统一的构建脚本，通过 `npm run build` 命令执行以下步骤：

1. 清理 `dist/` 目录
2. TypeScript 编译
3. 复制资源文件（如工具定义 JSON）
4. 设置可执行权限
5. 生成工具注解

```bash
npm install
npm run build
```

资料来源：[connectors/google-workspace/package.json:15-20]

### 许可证

该项目采用 **FSL-1.1-MIT**（Functional Source License, Version 1.1, with MIT future license）许可证。FSL 是一种"竞争性使用"许可证，在非竞争性用途下保持开源免费，在转换日期后自动转换为 MIT 许可证 资料来源：[connectors/napkin/README.md:1]。

## 安装与配置

### MCP 主机配置示例

#### Claude Desktop / Cursor

```json
{
  "mcpServers": {
    "Microsoft Office": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-office"],
      "env": {
        "MCP_OFFICE_SIDECAR_STATE": "/path/to/sidecar-state.json"
      }
    },
    "Google Workspace": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-google-workspace"]
    },
    "HubSpot": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-hubspot"],
      "env": {
        "HUBSPOT_CONFIG_PATH": "/path/to/hubspot/config"
      }
    }
  }
}
```

资料来源：[connectors/office/README.md:100-120]

### 本地开发配置

```json
{
  "mcpServers": {
    "Microsoft Office": {
      "command": "node",
      "args": ["/path/to/repo/connectors/office/dist/index.js"],
      "env": {
        "MCP_OFFICE_SIDECAR_STATE": ""
      }
    }
  }
}
```

资料来源：[connectors/office/README.md:130-140]

## 工具注解系统

连接器实现了 MCP 工具注解系统，为每个工具提供元数据提示，帮助 MCP 主机做出更好的决策：

| 注解名称 | 说明 | 取值示例 |
|----------|------|----------|
| `destructiveHint` | 指示操作是否具有破坏性 | `true` / `false` |
| `idempotentHint` | 指示操作是否幂等 | `true` / `false` |
| `openWorldHint` | 指示工具是否访问外部网络 | `true` / `false` |
| `readOnlyHint` | 指示操作是否只读 | `true` / `false` |

```typescript
annotations: {
  readOnlyHint: false,
  destructiveHint: true,
  idempotentHint: false,
  openWorldHint: true,
}
```

资料来源：[connectors/office/src/index.ts:1-50]

## 错误处理机制

连接器实现了统一的错误处理系统，根据错误类型返回用户友好的错误消息：

| 错误码 | 说明 | 建议操作 |
|--------|------|----------|
| `NOT_IMPLEMENTED` | 功能尚未实现 | 等待后续版本 |
| `INVALID_MESSAGE` | 消息解析失败 | 尝试重新连接 |
| `TAB_CONTEXT_GONE` | 目标标签页已关闭或导航 | 重新检查标签页状态 |
| `AUTH_REQUIRED` | 需要身份验证 | 执行认证流程 |
| `TIMEOUT` | 操作超时 | 重试或增加超时时间 |

资料来源：[connectors/office/src/shared/appBridge/shared/errors.ts:1-30]

## 常见问题排查

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接器启动失败 | 未构建项目 | 运行 `npm install && npm run build` |
| 认证错误或空结果 | 配置路径错误或凭证无效 | 检查配置文件和 `accounts.json` |
| MCP 主机报告协议问题 | stdio 会话中有控制台输出噪声 | 确保使用 `console.error` 进行日志记录 |
| 工具调用超时 | 网络延迟或服务响应慢 | 增加超时配置或重试 |

资料来源：[connectors/zendesk/README.md:40-50]

## 社区与贡献

### 相关社区资源

- **Issue #67** - google-workspace v0.1.2 发布审批：引入了 `handleComposeWorkspaceEmail` 的输入验证变更，要求 `to`、`subject`、`body` 参数必须提供有效值，否则抛出 `McpError(InvalidParams)` 错误 资料来源：[社区上下文:#67]

### 版本迁移

项目维护者提供了 MIGRATION.md 文档，详细记录了各版本之间的 breaking changes 和升级路径。建议在升级连接器版本前仔细阅读该文档 资料来源：[MIGRATION.md:1]。

## 另请参阅

- [Microsoft Office 连接器文档](./connectors/office/README.md)
- [Google Workspace 连接器文档](./connectors/google-workspace/README.md)
- [HubSpot 连接器文档](./connectors/hubspot/README.md)
- [Microsoft Teams 连接器文档](./connectors/microsoft-teams/README.md)
- [Google Analytics 连接器文档](./connectors/google-analytics/README.md)
- [Zendesk 连接器文档](./connectors/zendesk/README.md)
- [迁移指南](./MIGRATION.md)

---

<a id='connector-template'></a>

## 连接器开发模板

### 相关页面

相关主题：[项目概述](#overview), [系统架构](#architecture)

```markdown
<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)
- [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)
- [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)
- [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)
- [connectors/google-workspace/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)
- [connectors/office/src/index.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/index.ts)
</details>

# 连接器开发模板

## 概述

`connectors/_template` 目录提供了一个标准化的 MCP（Model Context Protocol）连接器开发模板，用于快速创建新的集成连接器。本模板定义了 Mindstone mcp-servers 项目中所有连接器的通用架构、最佳实践和代码组织规范。

### 模板目的

MCP 连接器模板的主要目的是：

- **统一开发标准**：为所有新的连接器提供一致的代码结构和命名规范
- **加速开发**：新连接器开发者可以直接复用模板框架，专注于业务逻辑实现
- **降低维护成本**：标准化结构便于团队协作和代码审查
- **保证质量**：内置错误处理、日志记录和安全最佳实践

资料来源：[connectors/google-workspace/package.json:14-17](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

## 架构设计

### 整体架构

MCP 连接器采用标准的三层架构模式，通过标准输入输出（stdio）与主机应用通信。

```mermaid
graph TD
    subgraph MCP主机应用
        A[Claude Desktop / Cursor / Goose]
    end
    
    subgraph MCP连接器
        B[server.ts - MCP服务器核心]
        C[bridge.ts - 主机桥接层]
        D[tools/ - 工具定义]
        E[modules/ - 业务模块]
        F[types.ts - 类型定义]
        G[utils.ts - 工具函数]
    end
    
    subgraph 外部服务
        H[第三方API]
        I[OAuth服务]
    end
    
    A -->|"stdio JSON-RPC"| B
    B --> C
    C -->|"HTTP API"| H
    C -->|"OAuth"| I
    B --> D
    D --> E
    E --> F
    E --> G
    
    style A fill:#e1f5fe
    style H fill:#fff3e0
    style I fill:#f3e5f5
```

### 核心组件职责

| 组件文件 | 职责 | 说明 |
|----------|------|------|
| `server.ts` | MCP服务器入口 | 注册工具处理器、定义输入Schema、处理MCP协议通信 |
| `bridge.ts` | 主机桥接层 | 处理OAuth认证流程、读写凭据文件、与主机应用通信 |
| `types.ts` | 类型定义 | TypeScript接口定义，确保类型安全 |
| `utils.ts` | 工具函数 | 日志、错误处理、请求封装等通用功能 |

资料来源：[connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)

## 工具注册模式

### 工具定义结构

每个 MCP 工具通过 `server.registerTool()` 方法注册，包含以下关键属性：

```typescript
server.registerTool(TOOL_NAMES.toolName, {
  title: '工具显示名称',
  description: '工具功能描述',
  inputSchema: {
    type: "object",
    properties: {
      // 参数定义
    },
    required: ["必需参数"]
  },
  annotations: {
    readOnlyHint: false,        // 是否只读操作
    destructiveHint: false,     // 是否破坏性操作
    idempotentHint: false,      // 是否幂等操作
    openWorldHint: false        // 是否访问外部世界
  }
}, async (input) => {
  // 工具实现逻辑
});
```

资料来源：[connectors/office/src/index.ts:1-50](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/index.ts)

### 工具分类注解

MCP 工具根据操作性质使用不同的注解标记：

| 注解 | 含义 | 使用场景 |
|------|------|----------|
| `readOnlyHint: true` | 只读查询 | `list_*`, `get_*`, `search_*` |
| `destructiveHint: true` | 破坏性操作 | `create_*`, `delete_*`, `update_*`, `write_*` |
| `idempotentHint: true` | 幂等操作 | 设置属性、发送消息等 |

## 认证与配置

### 环境变量配置

模板连接器支持以下标准环境变量：

| 变量名 | 必需 | 说明 |
|--------|------|------|
| `*_CONFIG_DIR` | 是 | 配置目录路径，包含凭据和账户信息 |
| `*_CLIENT_ID` | 部分 | OAuth应用的客户端ID |
| `*_ACCOUNT_EMAIL` | 否 | 多账户模式下的指定账户 |
| `*_PACKAGE_ID` | 否 | 错误响应中显示的包标识符 |
| `*_REQUEST_TIMEOUT_MS` | 否 | 请求超时时间（毫秒） |

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

### OAuth认证流程

对于需要OAuth的连接器（如Microsoft 365、Google Workspace），模板提供标准认证流程：

```mermaid
sequenceDiagram
    participant U as 用户
    participant H as MCP主机
    participant C as 连接器
    participant A as OAuth Provider
    
    U->>H: 触发认证工具
    H->>C: 调用 authenticate_* 工具
    C->>A: 请求OAuth授权
    A->>U: 显示授权页面
    U->>A: 确认授权
    A->>C: 返回授权码
    C->>A: 交换访问令牌
    A->>C: 返回令牌
    C->>C: 写入凭据文件 (mode 0600)
    C-->>H: 认证成功响应
```

### 错误处理规范

连接器使用结构化错误响应格式，便于主机应用进行错误恢复：

```typescript
{
  error: '错误描述',
  errorCode: 'ERROR_CODE',
  suggestion: '修复建议',
  action_required?: '需要用户操作',
  next_step?: '下一步建议'
}
```

资料来源：[connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)

## 包配置规范

### package.json 结构

```json
{
  "name": "@mindstone/mcp-server-{connector-name}",
  "version": "0.1.0",
  "mcpName": "io.github.mindstone/mcp-server-{name}",
  "description": "连接器功能描述",
  "license": "FSL-1.1-MIT",
  "type": "module",
  "bin": {
    "mcp-server-{name}": "dist/index.js"
  },
  "engines": {
    "node": ">=18"
  },
  "scripts": {
    "build": "shx rm -rf dist && tsc && shx chmod +x dist/index.js",
    "start": "node dist/index.js",
    "test": "vitest run"
  }
}
```

资料来源：[connectors/google-workspace/package.json:8-27](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

### 目录结构

```
connectors/
└── {connector-name}/
    ├── src/
    │   ├── index.ts          # 入口文件
    │   ├── server.ts         # MCP服务器
    │   ├── bridge.ts         # 桥接层
    │   ├── types.ts          # 类型定义
    │   ├── utils.ts          # 工具函数
    │   ├── tools/            # 工具实现
    │   │   ├── definitions/  # 工具Schema定义
    │   │   └── handlers/     # 工具处理器
    │   └── modules/          # 业务模块
    ├── dist/                 # 编译输出
    ├── package.json
    ├── tsconfig.json
    ├── README.md
    └── LICENSE
```

## 构建与部署

### 构建流程

```bash
cd connectors/{connector-name}
npm install
npm run build
```

编译过程执行以下操作：
1. 清理 `dist/` 目录
2. TypeScript 编译
3. 复制静态资源（如工具Schema定义）
4. 设置可执行权限

### 运行模式

连接器支持三种运行模式：

| 模式 | 命令 | 用途 |
|------|------|------|
| npx运行 | `npx -y @mindstone/mcp-server-{name}` | 发布后快速测试 |
| 本地运行 | `node dist/index.js` | 开发调试 |
| MCP主机集成 | 通过stdio通信 | 生产环境 |

## 输入验证最佳实践

### 必填参数校验

根据社区反馈（Issue #67），新版模板强调**fail-closed**（失败即止）输入验证策略：

```typescript
// 错误示例 - 静默默认值
if (!input.to) input.to = "";  // 不推荐

// 正确示例 - 显式验证
if (!input.to || !input.subject || !input.body) {
  throw new McpError(InvalidParams, "Missing required fields: to, subject, body");
}
```

### 验证规则

| 字段类型 | 验证要求 | 实现方式 |
|----------|----------|----------|
| 必填字符串 | 非空检查 | `required` in schema + 运行时校验 |
| 邮箱地址 | 格式验证 | 正则表达式或专用验证器 |
| 数值范围 | 边界检查 | `minimum`, `maximum` in schema |
| 枚举值 | 白名单验证 | `enum` in schema |

## 日志记录规范

### 日志级别使用

| 级别 | 使用场景 | 示例 |
|------|----------|------|
| `logger.info` | 成功操作记录 | `logger.info('Listed ${count} items')` |
| `logger.warn` | 可恢复异常 | 缺失可选参数使用默认值 |
| `logger.error` | 错误详情记录 | 异常信息和上下文 |

### 日志输出位置

- **stdio会话**：所有日志必须输出到 `stderr`（`console.error`）
- **禁止**：在stdio模式下使用 `console.log`，会破坏JSON-RPC协议

资料来源：[connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)

## 主机配置示例

### Claude Desktop 配置

```json
{
  "mcpServers": {
    "{ConnectorName}": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-{name}"],
      "env": {
        "{CONFIG_VAR}": "配置值"
      }
    }
  }
}
```

### 本地开发配置

```json
{
  "mcpServers": {
    "{ConnectorName}": {
      "command": "node",
      "args": ["/path/to/connectors/{name}/dist/index.js"],
      "env": {
        "{CONFIG_VAR}": "配置值"
      }
    }
  }
}
```

## 常见问题排查

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接器启动失败 | 未执行构建 | 运行 `npm install && npm run build` |
| 认证错误或空结果 | 配置路径错误或凭据无效 | 检查 `*_CONFIG_DIR` 和 `accounts.json` |
| MCP协议错误 | stdout中有非JSON输出 | 确保所有日志使用 `console.error` |
| 请求超时 | 网络问题或API限流 | 检查 `*_REQUEST_TIMEOUT_MS` 配置 |

## 许可证

本模板及所有基于模板创建的连接器采用 **FSL-1.1-MIT**（Functional Source License, Version 1.1, with MIT future licence）许可证。

资料来源：[connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)

## 另请参阅

- [Microsoft Office 连接器](../office/) - 完整的Office集成示例
- [Microsoft Teams 连接器](../microsoft-teams/) - OAuth认证模式示例
- [Google Workspace 连接器](../google-workspace/) - 多种服务集成示例
- [HubSpot 连接器](../hubspot/) - 复杂业务逻辑处理示例

---

<a id='architecture'></a>

## 系统架构

### 相关页面

相关主题：[项目概述](#overview), [认证模式](#auth-patterns)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [packages/mcp-server-microsoft-shared/src/graphClient.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/graphClient.ts)
- [packages/mcp-server-microsoft-shared/src/tokenProvider.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/tokenProvider.ts)
- [packages/mcp-server-microsoft-shared/src/types.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/types.ts)
- [connectors/google-workspace/src/tools/server.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/server.ts)
- [connectors/google-workspace/src/modules/tools/registry.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/tools/registry.ts)
- [connectors/hubspot/src/tools/definitions.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)
- [connectors/office/src/index.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/index.ts)
- [connectors/office/src/shared/appBridge/shared/errors.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/appBridge/shared/errors.ts)
</details>

# 系统架构

## 概述

mcp-servers 是一个 MCP (Model Context Protocol) 服务器集合，为 AI 助手提供与各种企业服务和工具集成的能力。该项目采用**模块化连接器架构**，每个连接器对应一个外部服务（如 Google Workspace、Microsoft 365、HubSpot 等），通过 MCP 协议向 AI 主机暴露标准化的工具接口。

资料来源：[connectors/google-workspace/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

## 整体架构

```mermaid
graph TD
    subgraph MCP主机层
        A[MCP Host<br/>Claude Desktop/Cursor]
    end
    
    subgraph 连接器层
        B[Google Workspace<br/>Connector]
        C[Microsoft 365<br/>Connector]
        D[HubSpot<br/>Connector]
        E[Office<br/>Connector]
        F[其他连接器]
    end
    
    subgraph 共享包层
        G[mcp-server-microsoft-shared]
    end
    
    subgraph 外部服务层
        H[Google APIs]
        I[Microsoft Graph API]
        J[HubSpot API]
        K[Office 应用程序]
    end
    
    A --> B
    A --> C
    A --> D
    A --> E
    A --> F
    
    C --> G
    E --> G
    
    B --> H
    C --> I
    D --> J
    E --> K
    G --> I
```

## 连接器架构

### 连接器目录结构

每个连接器都是一个独立的 Node.js 模块，具有相似的目录结构：

| 组件 | 说明 |
|------|------|
| `src/index.ts` | MCP 服务器入口点，注册所有工具 |
| `src/tools/` | 工具定义和处理逻辑 |
| `src/modules/` | 业务逻辑模块 |
| `package.json` | 包配置和依赖声明 |
| `dist/` | TypeScript 编译输出 |

资料来源：[connectors/google-workspace/src/tools/server.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/server.ts)

### 工具注册模式

工具通过标准化的注册流程暴露给 MCP 主机：

```mermaid
graph LR
    A[工具定义<br/>definitions.ts] --> B[工具元数据<br/>ToolMetadata]
    B --> C[注册表<br/>registry.ts]
    C --> D[MCP 服务器<br/>index.ts]
    D --> E[MCP 主机]
    
    F[处理函数<br/>handlers.ts] --> C
    G[类型定义<br/>types.ts] --> B
```

**工具元数据结构**（`ToolMetadata`）包含以下核心属性：

| 属性 | 类型 | 说明 |
|------|------|------|
| `name` | `string` | 工具唯一标识符 |
| `description` | `string` | 工具功能描述 |
| `inputSchema` | `JSON Schema` | 输入参数验证模式 |
| `annotations` | `object` | 行为注解（破坏性、幂等性等） |
| `requiresAuth` | `boolean` | 是否需要认证 |

资料来源：[connectors/hubspot/src/tools/definitions.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)

### 行为注解系统

每个工具都通过注解系统声明其行为特征，帮助 AI 代理做出安全决策：

| 注解 | 说明 | 示例 |
|------|------|------|
| `destructiveHint` | 是否为破坏性操作 | `trash_drive_file` |
| `idempotentHint` | 重复执行是否安全 | `read_workspace_document` |
| `readOnlyHint` | 是否为只读操作 | `list_workspace_labels` |
| `openWorldHint` | 是否影响外部世界 | `send_workspace_email` |

```typescript
// 强制破坏性标记示例
const DESTRUCTIVE_TOOL_NAME_PATTERN = /^(create|update|delete|trash|remove|send)/;
const FORCE_DESTRUCTIVE_TOOL_SET = new Set(['rebel_office_word_insert_text']);

function applyCohortHygieneAnnotations(tool: ToolMetadata): ToolMetadata {
  const shouldForceDestructiveHint =
    DESTRUCTIVE_TOOL_NAME_PATTERN.test(tool.name) ||
    FORCE_DESTRUCTIVE_TOOL_SET.has(tool.name);
  // ...
}
```

资料来源：[connectors/hubspot/src/tools/definitions.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)

## Microsoft 共享包架构

`mcp-server-microsoft-shared` 是一个共享包，为所有 Microsoft 服务连接器提供通用功能。

```mermaid
graph TD
    subgraph mcp-server-microsoft-shared
        A[GraphClient]
        B[TokenProvider]
        C[类型定义]
    end
    
    subgraph Microsoft 连接器
        D[microsoft-teams]
        E[microsoft-sharepoint]
        F[microsoft-mail]
        G[office]
    end
    
    A --> D
    A --> E
    A --> F
    B --> D
    B --> E
    B --> F
    C --> D
    C --> E
    C --> F
    C --> G
```

### Graph 客户端

`GraphClient` 封装了 Microsoft Graph API 的调用逻辑，提供标准化的请求/响应处理：

```typescript
export class GraphClient {
  constructor(tokenProvider: TokenProvider, options?: ClientOptions);
  
  async get<T>(path: string, params?: Record<string, string>): Promise<T>;
  async post<T>(path: string, data: unknown): Promise<T>;
  async patch<T>(path: string, data: unknown): Promise<T>;
  async delete(path: string): Promise<void>;
}
```

资料来源：[packages/mcp-server-microsoft-shared/src/graphClient.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/graphClient.ts)

### 令牌提供者

`TokenProvider` 负责 OAuth2 令牌的生命周期管理：

| 方法 | 说明 |
|------|------|
| `getAccessToken()` | 获取当前有效的访问令牌 |
| `refreshIfNeeded()` | 令牌过期前自动刷新 |
| `invalidate()` | 使当前令牌失效 |

资料来源：[packages/mcp-server-microsoft-shared/src/tokenProvider.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/tokenProvider.ts)

### 配置目录结构

Microsoft 连接器使用标准化的配置目录结构：

```
${MS_CONFIG_DIR}/
├── accounts.json          # 账户配置
├── credentials/           # OAuth 凭据存储
└── token-cache.json       # 令牌缓存
```

| 环境变量 | 说明 |
|----------|------|
| `MS_CLIENT_ID` | Microsoft Entra 应用程序客户端 ID |
| `MS_CONFIG_DIR` | 配置文件目录路径 |
| `MS_ACCOUNT_EMAIL` | 多账户模式下的目标账户 |
| `MICROSOFT_REQUEST_TIMEOUT_MS` | Graph API 请求超时（最大 300000ms） |
| `MICROSOFT_DISABLE_REFRESH` | 禁用令牌自动刷新 |

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

## Office 连接器架构

Office 连接器采用**Sidecar 模式**，通过独立的进程（sidecar）与 Office 应用程序通信。

```mermaid
graph TD
    subgraph MCP层
        A[MCP Server<br/>index.ts]
    end
    
    subgraph Sidecar进程
        B[Sidecar Server<br/>端口+令牌]
        C[Word Bridge]
        D[Excel Bridge]
        E[PowerPoint Bridge]
    end
    
    subgraph Office应用程序
        F[Word]
        G[Excel]
        H[PowerPoint]
    end
    
    A -->|"MCP_OFFICE_SIDECAR_STATE"| B
    B --> C
    B --> D
    B --> E
    C --> F
    D --> G
    E --> H
```

### Sidecar 状态文件

Sidecar 状态文件（JSON）包含 MCP 服务器与 sidecar 进程通信所需的连接信息：

```json
{
  "port": 12345,
  "token": "xxx-xxx-xxx"
}
```

| 环境变量 | 说明 |
|----------|------|
| `MCP_OFFICE_SIDECAR_STATE` | Sidecar 状态文件路径（必需） |
| `MCP_OFFICE_SIDECAR_DISABLE` | 禁用 sidecar 模式 |

资料来源：[connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)

### 错误代码体系

Office 连接器定义了完整的错误代码体系：

| 错误代码 | 说明 |
|----------|------|
| `NOT_FOUND` | 目标元素不存在 |
| `ELEMENT_MISSING` | 必需的参数缺失 |
| `ALREADY_DONE` | 操作已完成（如已标记的评论） |
| `TIMEOUT` | 操作超时 |
| `NOT_IMPLEMENTED` | 功能未实现 |
| `INVALID_MESSAGE` | 消息格式无效（版本不匹配） |
| `IDEMPOTENT_DROP` | 幂等丢弃（重复操作） |
| `CAPABILITY_NOT_SUPPORTED` | 当前不支持该操作 |
| `TAB_CONTEXT_GONE` | 目标标签页已关闭 |
| `TAB_CONTEXT_DIVERGED` | 页面内容已变更 |

```typescript
export function toUserMessage(code: ErrorCode, label: string): string {
  switch (code) {
    case 'NOT_FOUND':
      return `I couldn't find that. Double-check the ID or selection and try again.`;
    case 'TIMEOUT':
      return `The operation timed out — the app was busy, try a smaller scope or try again.`;
    // ...
  }
}
```

资料来源：[connectors/office/src/shared/appBridge/shared/errors.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/appBridge/shared/errors.ts)

## 认证与授权

### Google Workspace 认证

Google Workspace 连接器使用 OAuth2 授权码流程：

```mermaid
sequenceDiagram
    participant AI as AI 代理
    participant MCP as MCP Server
    participant Google as Google APIs
    
    AI->>MCP: authenticate_workspace_account(email)
    MCP->>AI: 请求 auth_code
    Note over AI: 用户在浏览器完成授权
    AI->>MCP: authenticate_workspace_account(auth_code)
    MCP->>Google: 交换 access_token
    Google-->>MCP: access_token + refresh_token
    MCP->>MCP: 存储账户配置
    MCP-->>AI: 认证成功
```

资料来源：[connectors/google-workspace/src/tools/types.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/types.ts)

### Google Analytics 认证

Google Analytics 连接器使用 Application Default Credentials (ADC)：

```bash
gcloud auth application-default login \
  --scopes=https://www.googleapis.com/auth/analytics.readonly,\
https://www.googleapis.com/auth/cloud-platform
```

| 环境变量 | 说明 |
|----------|------|
| `GOOGLE_APPLICATION_CREDENTIALS` | 服务账户密钥文件路径 |

资料来源：[connectors/google-analytics/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-analytics/README.md)

## 工具分类与组织

### Google Workspace 工具分类

| 类别 | 工具数量 | 主要工具 |
|------|----------|----------|
| Gmail | 10+ | `send_workspace_email`, `search_workspace_emails` |
| 日历 | 8+ | `manage_workspace_calendar_event`, `respond_to_workspace_calendar_event` |
| Drive | 10+ | `search_drive_files`, `update_drive_permissions` |
| Docs | 6+ | `read_workspace_document`, `replace_workspace_document` |
| Sheets | 4+ | `read_workspace_spreadsheet`, `read_workspace_spreadsheet_values` |
| Slides | 3+ | `read_workspace_presentation` |
| Contacts | 3+ | `search_workspace_contacts` |
| Tasks | 2+ | `update_task` |
| Forms | 3+ | 管理表单和提交 |

### HubSpot 工具分类

| 类别 | 工具数量 |
|------|----------|
| Account/Contact/Company | 15+ |
| Deals/Pipeline | 10+ |
| Tickets/Leads | 8+ |
| Tasks/Notes | 6+ |
| Products/Line Items | 4+ |
| Forms/Analytics | 6+ |
| Marketing Emails | 4+ |
| Lists/Knowledge Base | 8+ |
| Workflows/Conversations | 6+ |

资料来源：[connectors/hubspot/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/README.md)

### Office 工具分类

| 类别 | 工具数量 | 说明 |
|------|----------|------|
| Word | 17 | 文档读写、格式、批注、修订 |
| Excel | 22 | 范围读写、工作表管理、表单、公式 |
| PowerPoint | 14 | 幻灯片管理、文本、形状 |
| 设置 | 2 | `rebel_office_setup`, `rebel_office_status` |

资料来源：[connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)

## 响应格式标准

所有 MCP 工具返回统一的标准响应格式：

```typescript
export interface McpToolResponse {
  content: {
    type: 'text';
    text: string;
  }[];
  isError?: boolean;
  _meta?: Record<string, unknown>;
}
```

资料来源：[connectors/google-workspace/src/tools/types.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/types.ts)

## 输入验证与错误处理

### Fail-Closed 验证模式

从 v0.1.2 开始，Google Workspace 连接器采用**Fail-Closed**（故障关闭）验证策略：

> **行为变更**：在 `handleComposeWorkspaceEmail` 中新增了 fail-closed 输入验证门控。当 `to`/`subject`/`body` 参数为空时，不再静默使用默认值，而是抛出 `McpError(InvalidParams)` 错误。

资料来源：[PR #66](https://github.com/mindstone/mcp-servers/pull/66)，社区讨论见 [Issue #67](https://github.com/mindstone/mcp-servers/issues/67)

### 常见故障排除

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接器启动失败 | 未构建 | 运行 `npm install && npm run build` |
| 认证错误或空结果 | 配置路径或凭据错误 | 检查配置文件和 `accounts.json` |
| MCP 主机协议错误 | stdout 有额外输出 | 确保使用 `console.error` 而非 `console.log` |
| 令牌过期 | 令牌未自动刷新 | 检查 `MICROSOFT_DISABLE_REFRESH` 设置 |
| Office 连接失败 | Sidecar 未启动 | 运行 `rebel_office_setup` |

资料来源：[connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)

## 部署模式

### npx 模式（推荐）

```json
{
  "mcpServers": {
    "Google Workspace": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-google-workspace"]
    }
  }
}
```

### 本地开发模式

```json
{
  "mcpServers": {
    "Microsoft365Teams": {
      "command": "node",
      "args": ["/path/to/connectors/microsoft-teams/dist/index.js"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}
```

## 许可证

所有连接器采用 **FSL-1.1-MIT**（Functional Source License, Version 1.1, with MIT future licence）许可证。软件在 2030-04-08 自动转换为 MIT 许可证。

资料来源：[connectors/google-workspace/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

## 相关文档

- [Google Workspace 连接器](../google-workspace/)
- [Microsoft 365 Teams 连接器](../microsoft-teams/)
- [Microsoft SharePoint 连接器](../microsoft-sharepoint/)
- [HubSpot 连接器](../hubspot/)
- [Microsoft Office 连接器](../office/)
- [Google Analytics 连接器](../google-analytics/)

---

<a id='auth-patterns'></a>

## 认证模式

### 相关页面

相关主题：[系统架构](#architecture), [OAuth 安全加固](#oauth-hardening)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [connectors/google-workspace/src/modules/accounts/oauth.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/accounts/oauth.ts)
- [connectors/google-workspace/src/modules/accounts/manager.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/accounts/manager.ts)
- [connectors/hubspot/src/modules/accounts/oauth.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/modules/accounts/oauth.ts)
- [connectors/email-imap/src/imap-client.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/email-imap/src/imap-client.ts)
- [connectors/slack/src/tokenProvider.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/slack/src/tokenProvider.ts)
- [packages/mcp-server-microsoft-shared/src/tokenProvider.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/tokenProvider.ts)
</details>

# 认证模式

## 概述

mcp-servers 仓库支持多种认证模式，以适配不同的外部服务和协议。认证模式分为三大类：

1. **OAuth2 认证** — 适用于 Google Workspace、HubSpot、Microsoft 365 等需要 OAuth2 授权的云服务
2. **令牌认证** — 适用于 Slack 等使用静态 API Token 的服务
3. **IMAP/SMTP 认证** — 适用于邮件服务的基础凭证认证

每种认证模式都由独立的模块处理，遵循统一的错误处理规范和账户管理接口。认证成功后，凭证会被持久化到本地配置文件，供后续请求复用。

资料来源：[connectors/google-workspace/src/modules/accounts/oauth.ts:1-50](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/accounts/oauth.ts)

---

## OAuth2 认证

### 架构概述

OAuth2 认证采用标准的授权码流程（Authorization Code Flow），支持多账户管理和令牌自动刷新。

```mermaid
graph TD
    A[用户发起认证请求] --> B[生成授权 URL]
    B --> C[用户访问授权页面]
    C --> D[用户授权并获取授权码]
    D --> E[后端交换授权码]
    E --> F[获取 Access Token]
    F --> G[获取 Refresh Token]
    G --> H[保存到 accounts.json]
    H --> I[返回认证成功]
    
    J[Token 过期] --> K[使用 Refresh Token 刷新]
    K --> F
```

### Google Workspace 认证

Google Workspace 采用 OAuth2 授权码流程，支持 Gmail、Calendar、Drive、Docs、Sheets、Slides、Contacts、Tasks 等服务。

**认证流程实现：**

```typescript
// connectors/google-workspace/src/modules/accounts/oauth.ts
async function exchangeCodeForTokens(code: string) {
  const response = await fetch(googTokenEndpoint, {
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: new URLSearchParams({
      code,
      client_id: clientId,
      client_secret: clientSecret,
      redirect_uri: redirectUri,
      grant_type: 'authorization_code',
    }),
  });
  return response.json();
}
```

**支持的认证参数：**

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `email` | string | 是 | 账户邮箱地址 |
| `category` | string | 否 | 账户类别，如 'work'、'personal' |
| `description` | string | 否 | 账户描述信息 |
| `auth_code` | string | 是 | OAuth2 授权码 |

资料来源：[connectors/google-workspace/src/modules/accounts/oauth.ts:30-80](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/accounts/oauth.ts)
资料来源：[connectors/google-workspace/src/tools/types.ts:40-55](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/types.ts)

### HubSpot 认证

HubSpot 使用 OAuth2 连接其 CRM、Marketing、Sales、Service 和 CMS 平台。

**认证流程特点：**

- 使用 `hubspotapis/hubspot-api-nodejs` 官方 SDK
- 通过异步客户端获取方式管理认证状态
- 支持 OAuth2 刷新令牌自动续期

```typescript
// connectors/hubspot/src/modules/accounts/oauth.ts
const hubspotClient = new hubspot.Client({
  accessToken: storedTokens.access_token,
  refreshToken: storedTokens.refresh_token,
  clientId: config.clientId,
  clientSecret: config.clientSecret,
});
```

资料来源：[connectors/hubspot/src/modules/accounts/oauth.ts:1-60](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/modules/accounts/oauth.ts)

### Microsoft 认证

Microsoft 服务使用 Microsoft Identity Platform 进行 OAuth2 认证，凭证由主机应用管理。

**认证流程特点：**

- 需要配置 `MS_CLIENT_ID`（Entra 应用程序客户端 ID）
- 凭证存储在 `${MS_CONFIG_DIR}/credentials/` 目录
- 支持多账户模式，通过 `MS_ACCOUNT_EMAIL` 指定账户

| 环境变量 | 必填 | 说明 |
|----------|------|------|
| `MS_CLIENT_ID` | 是 | Microsoft Entra 应用程序客户端 ID |
| `MS_CONFIG_DIR` | 是 | 配置文件目录路径 |
| `MS_ACCOUNT_EMAIL` | 否 | 多账户模式下的账户邮箱 |
| `MS_MCP_PACKAGE_ID` | 否 | 错误响应中的包标识符 |
| `MICROSOFT_REQUEST_TIMEOUT_MS` | 否 | 请求超时时间（默认 60000ms） |

资料来源：[connectors/microsoft-teams/README.md:40-65](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)
资料来源：[packages/mcp-server-microsoft-shared/src/tokenProvider.ts:1-50](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/tokenProvider.ts)

---

## 令牌认证

### Slack 令牌认证

Slack 使用静态 API Token 进行认证，这是一种简单的令牌认证模式。

**令牌认证流程：**

```typescript
// connectors/slack/src/tokenProvider.ts
async getAccessToken(authCode: string) {
  const response = await fetch('https://slack.com/api/oauth.v2.access', {
    method: 'POST',
    body: new URLSearchParams({
      client_id: this.clientId,
      client_secret: this.clientSecret,
      code: authCode,
      redirect_uri: this.redirectUri,
    }),
  });
  return response.json();
}
```

**特点：**

- 令牌直接存储在配置文件中，无需刷新机制
- 每个工作区对应一个独立的令牌
- 支持通过 `SLACK_BOT_TOKEN` 环境变量直接配置

资料来源：[connectors/slack/src/tokenProvider.ts:1-40](https://github.com/mindstone/mcp-servers/blob/main/connectors/slack/src/tokenProvider.ts)

---

## IMAP/SMTP 认证

### 邮件服务认证

邮件服务采用 IMAP 协议进行认证，支持标准的用户名密码认证方式。

**IMAP 认证配置：**

| 配置项 | 类型 | 说明 |
|--------|------|------|
| `host` | string | IMAP 服务器地址 |
| `port` | number | IMAP 端口（默认 993） |
| `secure` | boolean | 是否使用 TLS |
| `username` | string | 邮箱用户名 |
| `password` | string | 邮箱密码或应用专用密码 |
| `accountEmail` | string | 账户邮箱地址 |

```typescript
// connectors/email-imap/src/imap-client.ts
const imapConfig = {
  user: config.username,
  password: config.password,
  host: config.host,
  port: config.port,
  tls: config.secure,
  tlsOptions: { rejectUnauthorized: false }
};
```

资料来源：[connectors/email-imap/src/imap-client.ts:1-60](https://github.com/mindstone/mcp-servers/blob/main/connectors/email-imap/src/imap-client.ts)

---

## 账户管理

### 账户管理器架构

账户管理采用统一的 `AccountManager` 架构，支持多账户注册、切换和凭证持久化。

```mermaid
graph TD
    A[AccountManager] --> B[accounts.json]
    A --> C[OAuth Provider]
    A --> D[Token Cache]
    
    B --> E[账户列表]
    C --> F[OAuth 授权]
    D --> G[Access Token]
    D --> H[Refresh Token]
    
    G --> I[API 请求]
    J[Token 过期] --> D
    J --> K[自动刷新]
    K --> G
```

### 账户注册流程

```typescript
// connectors/google-workspace/src/modules/accounts/manager.ts
async registerAccount(args: AuthenticateAccountArgs) {
  const { email, category, description, auth_code } = args;
  
  // 1. 验证参数
  if (!email || !auth_code) {
    throw new Error('Missing required fields: email, auth_code');
  }
  
  // 2. 交换授权码获取令牌
  const tokens = await exchangeCodeForTokens(auth_code);
  
  // 3. 保存账户信息
  await saveAccount({ email, category, description, ...tokens });
  
  return { success: true, email };
}
```

资料来源：[connectors/google-workspace/src/modules/accounts/manager.ts:1-80](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/accounts/manager.ts)

### 账户配置文件格式

账户信息存储在 `accounts.json` 文件中，采用 JSON 格式：

```json
{
  "accounts": [
    {
      "email": "user@example.com",
      "category": "work",
      "description": "公司账户",
      "access_token": "ya29.xxx",
      "refresh_token": "1//xxx",
      "token_type": "Bearer",
      "expiry_date": 1704067200000
    }
  ],
  "activeAccount": "user@example.com"
}
```

---

## 错误处理

### 认证错误类型

| 错误码 | 说明 | 处理建议 |
|--------|------|----------|
| `AUTH_REQUIRED` | 需要认证 | 调用认证接口完成授权 |
| `AUTH_EXPIRED` | 令牌已过期 | 触发令牌刷新流程 |
| `AUTH_INVALID` | 凭证无效 | 检查并重新配置凭证 |
| `INVALID_PARAMS` | 参数错误 | 检查请求参数格式 |
| `NOT_FOUND` | 资源不存在 | 验证资源 ID 正确性 |

### 认证失败处理流程

```mermaid
graph TD
    A[API 请求] --> B{认证状态}
    B -->|有效| C[执行请求]
    B -->|过期| D[刷新 Token]
    B -->|无效| E[返回错误]
    D -->|成功| C
    D -->|失败| F[触发重新认证]
    F --> G[提示用户授权]
```

### v0.1.2 版本的行为变更

**重要变更：** Google Workspace v0.1.2 版本对邮件发送功能进行了行为变更。

在 `handleComposeWorkspaceEmail` 中新增了 fail-closed 输入验证机制：

- **变更前：** `to`、`subject`、`body` 参数为空时会静默使用默认值，可能导致发送空白邮件
- **变更后：** 当这些必需参数为空时，抛出 `McpError(InvalidParams)` 错误

这确保了用户不会意外发送不完整的邮件，提升了操作的安全性。

资料来源：[社区讨论 #67](https://github.com/mindstone/mcp-servers/issues/67)

---

## 配置参考

### 环境变量配置汇总

| 连接器 | 变量名 | 必填 | 说明 |
|--------|--------|------|------|
| Google Workspace | `GOOGLE_CLIENT_ID` | 是 | OAuth2 客户端 ID |
| Google Workspace | `GOOGLE_CLIENT_SECRET` | 是 | OAuth2 客户端密钥 |
| Google Analytics | `GOOGLE_APPLICATION_CREDENTIALS` | 是 | 服务账户密钥文件路径 |
| HubSpot | `HUBSPOT_CLIENT_ID` | 是 | HubSpot 应用客户端 ID |
| HubSpot | `HUBSPOT_CLIENT_SECRET` | 是 | HubSpot 应用客户端密钥 |
| Microsoft Teams | `MS_CLIENT_ID` | 是 | Entra 应用程序客户端 ID |
| Microsoft Teams | `MS_CONFIG_DIR` | 是 | 配置文件目录路径 |
| Slack | `SLACK_BOT_TOKEN` | 是 | Slack Bot 用户令牌 |
| Email IMAP | `IMAP_HOST` | 是 | IMAP 服务器地址 |
| Email IMAP | `IMAP_PORT` | 是 | IMAP 端口 |
| Email IMAP | `IMAP_USERNAME` | 是 | 邮箱用户名 |
| Email IMAP | `IMAP_PASSWORD` | 是 | 邮箱密码 |

### Claude Desktop 配置示例

```json
{
  "mcpServers": {
    "Google Workspace": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-google-workspace"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    },
    "Microsoft 365 Teams": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-microsoft-teams"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}
```

---

## 常见问题排查

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 认证失败，提示 `AUTH_REQUIRED` | 令牌过期或未配置 | 检查 `accounts.json` 是否存在，尝试重新认证 |
| OAuth 回调失败 | `redirect_uri` 不匹配 | 确认回调地址与应用程序配置一致 |
| 令牌刷新失败 | Refresh Token 过期或被撤销 | 需要用户重新授权 |
| IMAP 连接失败 | 服务器地址或端口错误 | 检查 `imap_host` 和 `imap_port` 配置 |
| Slack 令牌无效 | 令牌被撤销或应用被卸载 | 在 Slack 应用设置中重新安装并获取新令牌 |

---

## 参见

- [Google Workspace 连接器](../google-workspace/)
- [HubSpot 连接器](../hubspot/)
- [Microsoft 365 Teams 连接器](../microsoft-teams/)
- [Slack 连接器](../slack/)
- [Email IMAP 连接器](../email-imap/)
- [Office 文档集成](../office/)

---

<a id='security'></a>

## 安全加固机制

### 相关页面

相关主题：[OAuth 安全加固](#oauth-hardening)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [SECURITY.md](https://github.com/mindstone/mcp-servers/blob/main/SECURITY.md)
- [docs/security/AUDIT_FOX-3319_tanstack_supply_chain.md](https://github.com/mindstone/mcp-servers/blob/main/docs/security/AUDIT_FOX-3319_tanstack_supply_chain.md)
- [docs/security/BRANCH_PROTECTION.md](https://github.com/mindstone/mcp-servers/blob/main/docs/security/BRANCH_PROTECTION.md)
- [docs/PUBLISH_APPROVAL_PROCESS.md](https://github.com/mindstone/mcp-servers/blob/main/docs/PUBLISH_APPROVAL_PROCESS.md)
- [packages/mcp-server-microsoft-shared/src/utils/atomicCredentialWrite.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/utils/atomicCredentialWrite.ts)
- [packages/mcp-server-microsoft-shared/src/utils/emfileRetry.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/utils/emfileRetry.ts)
- [connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- [connectors/office/src/shared/office/errors.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)
- [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)
</details>

# 安全加固机制

## 概述

mcp-servers 项目采用多层次的安全加固机制，涵盖供应链安全、凭证管理、输入验证、错误处理和发布流程等多个方面。这些机制共同构成了一个纵深防御体系，确保连接器在各种场景下的安全性。

项目核心安全原则包括：

- **失败安全（Fail-Closed）**：默认拒绝未授权或不安全的操作
- **最小权限**：仅请求必要的权限和作用域
- **原子性操作**：确保敏感操作的完整性
- **透明审计**：记录关键安全事件便于追踪

资料来源：[SECURITY.md:1-20](https://github.com/mindstone/mcp-servers/blob/main/SECURITY.md)

---

## 供应链安全

### 依赖审计机制

项目使用 Tanstack Supply Chain 审计工具对第三方依赖进行持续监控，及时发现和修复潜在的安全漏洞。

资料来源：[docs/security/AUDIT_FOX-3319_tanstack_supply_chain.md:1-30](https://github.com/mindstone/mcp-servers/blob/main/docs/security/AUDIT_FOX-3319_tanstack_supply_chain.md)

### 分支保护策略

所有安全相关的分支实施严格的保护策略：

| 保护措施 | 说明 |
|---------|------|
| 强制代码审查 | 所有合并必须经过至少一名审核者批准 |
| 状态检查要求 | CI/CD 必须通过才能合并 |
| 禁止直接推送 | 禁止向受保护分支直接推送代码 |
| 分支自动删除 | 合并后自动删除特性分支 |

资料来源：[docs/security/BRANCH_PROTECTION.md:1-25](https://github.com/mindstone/mcp-servers/blob/main/docs/security/BRANCH_PROTECTION.md)

```mermaid
graph LR
    A[开发者提交PR] --> B{分支保护检查}
    B -->|通过| C[代码审查]
    B -->|失败| D[合并阻止]
    C --> E{审查通过?}
    E -->|是| F[CI/CD 检查]
    E -->|否| G[返回修改]
    F --> H{检查通过?}
    H -->|是| I[自动合并]
    H -->|否| D
```

---

## 凭证安全管理

### 原子性凭证写入

敏感凭证文件采用原子性写入机制，防止部分写入导致的安全风险。写入操作首先写入临时文件，然后原子性地重命名到目标位置。

资料来源：[packages/mcp-server-microsoft-shared/src/utils/atomicCredentialWrite.ts:1-50](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/utils/atomicCredentialWrite.ts)

### 文件权限控制

Token 文件写入时强制设置 `0600` 权限，确保只有文件所有者能够访问。

```typescript
// 伪代码示例
await writeFile(tokenPath, JSON.stringify(tokenData), { mode: 0o600 });
```

资料来源：[connectors/microsoft-mail/README.md:45-60](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)

### EMFILE 重试机制

处理文件描述符耗尽的错误场景时，实现智能重试逻辑：

| 参数 | 默认值 | 说明 |
|------|--------|------|
| `maxRetries` | 3 | 最大重试次数 |
| `baseDelayMs` | 100 | 基础延迟时间 |
| `maxDelayMs` | 5000 | 最大延迟时间 |

资料来源：[packages/mcp-server-microsoft-shared/src/utils/emfileRetry.ts:1-40](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/utils/emfileRetry.ts)

### Token 刷新控制

云端部署场景下禁用 Token 自动刷新，由主机应用统一管理刷新流程，避免多实例竞争刷新令牌：

```json
{
  "env": {
    "MICROSOFT_DISABLE_REFRESH": "1"
  }
}
```

此设置确保工具在 Token 过期时返回 `auth_required` 响应，让主机驱动重新认证流程。

资料来源：[connectors/microsoft-mail/README.md:55-65](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)

---

## 输入验证与失败安全

### 失败封闭式验证

项目在关键操作中实施失败封闭式（Fail-Closed）验证策略。以 Gmail 邮件撰写为例，当必填字段缺失时，系统主动抛出错误而非使用默认值：

```typescript
// handleComposeWorkspaceEmail 验证逻辑
if (!to || !subject || !body) {
  throw new McpError(InvalidParams, 'Missing required fields');
}
```

这确保了不会意外发送空主题或空内容的邮件。

资料来源：[connectors/google-workspace/src/tools/definitions/gmail.ts:30-50](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)

### 错误代码映射

Office 连接器使用统一的错误代码体系，提供用户友好的错误提示：

| 错误代码 | 用户提示 | 含义 |
|---------|---------|------|
| `APP_NOT_CONNECTED` | 应用未连接 | Office 应用未启动或未安装插件 |
| `ADDIN_DISCONNECTED` | 插件已断开 | 插件与 Office 通信中断 |
| `COMMAND_TIMEOUT` | 操作超时 | 命令执行超出预期时间 |
| `TAB_CONTEXT_GONE` | 标签页已关闭 | 目标页面已关闭或导航 |
| `INTERNAL_ERROR` | 内部错误 | 服务器端发生意外错误 |

资料来源：[connectors/office/src/shared/office/errors.ts:10-35](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)

### HTTP 错误转换

WebSocket 错误消息经过标准化转换，确保客户端接收到一致的错误格式：

```typescript
export function toWsErrorMessage(
  code: ErrorCode,
  message?: string,
  details?: Record<string, unknown>,
): ResponseErrorMessage {
  return {
    type: 'response',
    id: '',  // 非关联错误使用空ID
    // ...
  };
}
```

资料来源：[connectors/office/src/shared/office/errors.ts:60-75](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)

---

## 发布安全流程

### 发布审批机制

所有 npm 包发布必须经过审批流程，防止恶意代码注入：

```mermaid
graph TD
    A[开发者提交发布PR] --> B{安全审查}
    B -->|通过| C[版本号验证]
    B -->|失败| D[驳回]
    C --> E{测试通过?}
    E -->|是| F[管理员审批]
    E -->|否| D
    F --> G{审批通过?}
    G -->|是| H[发布执行]
    G -->|否| D
    H --> I[npm publish]
```

资料来源：[docs/PUBLISH_APPROVAL_PROCESS.md:1-50](https://github.com/mindstone/mcp-servers/blob/main/docs/PUBLISH_APPROVAL_PROCESS.md)

### 行为变更追踪

发布审批过程记录所有行为变更（Behaviour-Changing Changes），例如：

> **行为变更**：为 `handleComposeWorkspaceEmail` 添加失败封闭式输入验证。当 `to`/`subject`/`body` 字段缺失时，主动抛出 `McpError(InvalidParams)` 错误，而非静默使用空值。

这种透明化追踪确保用户了解升级影响。

资料来源：[社区讨论 #67](https://github.com/mindstone/mcp-servers/issues/67)

---

## 超时与限流机制

### 请求超时控制

每个 Microsoft Graph API 调用配置双重超时保护：

```typescript
// 组合超时信号
const signal = composeTimeoutSignal(callerTimeout, cohortTimeout);
const result = await client.request(options).options({ signal });
```

| 参数 | 默认值 | 最大值 |
|------|--------|--------|
| `MICROSOFT_REQUEST_TIMEOUT_MS` | 60000 | 300000 |

资料来源：[connectors/microsoft-mail/README.md:50-55](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)

### 防御性竞态保护

超时机制使用 `Promise.race` 进行纵深防御，确保单个请求不会无限阻塞：

```typescript
const result = await Promise.race([
  performOperation(),
  new Promise((_, reject) => 
    setTimeout(() => reject(new TimeoutError()), maxTimeout)
  )
]);
```

---

## 安全配置矩阵

| 功能 | 环境变量 | 云端默认值 | 本地默认值 | 说明 |
|------|----------|-----------|-----------|------|
| Token刷新 | `MICROSOFT_DISABLE_REFRESH` | `1` (禁用) | 未设置 | 云端由主机统一管理 |
| 请求超时 | `MICROSOFT_REQUEST_TIMEOUT_MS` | 60000 | 60000 | Microsoft Graph 调用超时 |
| 凭证目录 | `MS_CONFIG_DIR` | 必需 | 必需 | 凭证和账户配置路径 |
| 账户选择 | `MS_ACCOUNT_EMAIL` | 可选 | 可选 | 多账户模式下的目标账户 |

---

## 故障排查与安全日志

| 症状 | 可能原因 | 安全相关建议 |
|------|---------|-------------|
| Token 刷新失败 | `MICROSOFT_DISABLE_REFRESH=1` | 云端预期行为，检查主机认证流程 |
| 权限拒绝 | Token 文件权限不正确 | 确保文件权限为 `0600` |
| 间歇性认证失败 | EMFILE 错误 | 系统文件描述符耗尽，考虑增加 ulimit |
| 发布失败 | 缺少审批签名 | 提交 PR 进行安全审查 |

---

## See Also

- [Microsoft 365 Mail 连接器](../microsoft-mail/) - 凭证管理最佳实践
- [Google Workspace 连接器](../google-workspace/) - 输入验证示例
- [Microsoft Office 连接器](../office/) - 错误处理机制
- [发布审批流程](../../docs/PUBLISH_APPROVAL_PROCESS.md) - 发布安全要求

---

<a id='oauth-hardening'></a>

## OAuth 安全加固

### 相关页面

相关主题：[安全加固机制](#security), [认证模式](#auth-patterns)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [packages/mcp-server-microsoft-shared/src/token-provider.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/token-provider.ts)
- [connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- [connectors/google-workspace/src/tools/server.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/server.ts)
- [connectors/slack/src/types.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/slack/src/types.ts)
- [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)
- [connectors/google-workspace/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/README.md)
</details>

# OAuth 安全加固

本文档介绍 MCP 服务器项目中的 OAuth 安全加固机制，涵盖令牌管理、错误处理、输入验证和安全审计等方面的最佳实践。

## 概述

MCP 服务器项目为多个第三方服务（Google Workspace、Microsoft 365、Slack 等）提供 MCP（Model Context Protocol）集成。每个连接器都需要处理 OAuth 认证流程，项目采用统一的安全策略来保护令牌和用户凭据。

```mermaid
graph TD
    A[MCP Host Application] -->|OAuth Flow| B[第三方服务提供商]
    B -->|Access Token + Refresh Token| A
    A -->|写入令牌文件| C[Token Storage]
    C -->|读取令牌| D[MCP Connector]
    D -->|API调用| B
    
    C -.->|安全加固| E[权限控制 0o600]
    C -.->|安全加固| F[原子写入]
    C -.->|安全加固| G[符号链接防护]
```

## 令牌安全管理

### 令牌存储架构

所有 MCP 连接器采用统一的令牌存储结构，由主机应用管理 OAuth 流程并写入令牌文件，连接器仅读取这些文件而不发起 OAuth 请求。

```mermaid
graph LR
    A[主机应用 OAuth] -->|写入| B[Config Directory]
    B --> C[accounts.json]
    B --> D[credentials/]
    D --> E[${sanitised-email}.token.json]
    
    style B fill:#f9f,color:#000
    style E fill:#ff9,color:#000
```

令牌文件存储路径配置通过环境变量指定：

| 连接器 | 配置变量 | 默认路径 |
|--------|----------|----------|
| Microsoft 365 | `MS_CONFIG_DIR` | 主机指定 |
| Google Workspace | `ACCOUNTS_PATH` / `CREDENTIALS_PATH` | 主机指定 |
| Slack | `SLACK_CONFIG_PATH` | 主机指定 |

### 原子写入与权限控制

`mcp-server-microsoft-shared` 包实现了生产级的令牌安全机制：

- **原子写入**：使用临时文件加重命名的模式（temp-file + rename），确保写入过程不会留下不完整的令牌文件
- **权限控制**：令牌文件权限设置为 `0o600`（仅所有者读写），目录权限设置为 `0o700`
- **强制同步**：使用 `fsync` 强制将数据写入磁盘
- **符号链接防护**：拒绝跟随符号链接，防止目录遍历攻击
- **陈旧清理**：初始化时执行陈旧临时文件扫描和清理

资料来源：[packages/mcp-server-microsoft-shared/README.md:安全 notes]()

### 令牌刷新控制

云端部署场景下，主机应用需要完全控制令牌刷新流程：

```typescript
// MICROSOFT_DISABLE_REFRESH=1 时，令牌刷新被禁用
// TokenProvider.getAccessToken 抛出 MicrosoftRefreshDisabledError
// 连接器捕获该错误并返回结构化的 auth_required 响应
```

| 环境变量 | 行为 | 适用场景 |
|----------|------|----------|
| 未设置 | 自动刷新令牌 | 本地开发 |
| `MICROSOFT_DISABLE_REFRESH=1` | 禁用自动刷新 | 云端部署 |

资料来源：[packages/mcp-server-microsoft-shared/README.md:Configuration]()

## 认证错误处理

### 统一错误响应格式

所有连接器采用统一的认证错误响应结构，确保 MCP Host 能够正确处理认证失败：

```typescript
{
  status: 'auth_required',
  user_action: { id: 'google.connect_account' },
  agent_action: {
    instruction: "Connect Google Workspace to continue. The user will be redirected to Google's sign-in."
  },
  setupToolName: 'authenticate_workspace_account'
}
```

### HTTP 状态码映射

| HTTP 状态码 | 错误类型 | 用户操作 |
|-------------|----------|----------|
| 401 | `AUTH_REQUIRED` | 触发重新认证流程 |
| 403 | 权限不足 | 请求额外权限或联系资源所有者 |
| 429 | 速率限制 | 退避后重试，减少请求量 |
| 5xx | 服务端错误 | 短暂延迟后重试，缩小请求范围 |

资料来源：[connectors/google-workspace/src/tools/server.ts:1-50]()

### Slack 连接器错误代码

Slack 连接器定义了详细的错误代码体系：

| 错误代码 | 含义 | 建议操作 |
|----------|------|----------|
| `NO_TOKEN` | 无有效令牌 | 调用 `authenticate_slack_workspace` |
| `REFRESH_FAILED` | 令牌刷新失败 | 调用 `authenticate_slack_workspace` |
| `REFRESH_TRANSIENT` | 刷新遇到临时错误 | 延迟后重试 |
| `REFRESH_RATE_LIMITED` | 刷新被限流 | 延迟后重试 |
| `REFRESH_AUTH_REJECTED` | 刷新被拒绝 | 调用 `authenticate_slack_workspace` |
| `TOKEN_PERSIST_FAILED` | 令牌持久化失败 | 重试（避免浪费 Slack 一次性刷新令牌） |
| `TOKEN_FILE_CORRUPT` | 令牌文件损坏 | 调用 `authenticate_slack_workspace` |
| `MISSING_SCOPE` | 缺少必要权限范围 | 调用 `authenticate_slack_workspace` |

资料来源：[connectors/slack/src/types.ts:1-40]()

## 输入验证与故障安全

### Gmail 邮件撰写验证

Google Workspace 连接器实现了 fail-closed（故障关闭）输入验证机制，在 `handleComposeWorkspaceEmail` 函数中添加了严格参数校验：

```typescript
// 验证逻辑：以下字段不能为空或默认值
// - to: 收件人地址
// - subject: 邮件主题
// - body: 邮件正文

// 验证失败时抛出 McpError(InvalidParams)
// 避免静默发送空值邮件
```

**常见错误避免：**

| 错误做法 | 正确做法 |
|----------|----------|
| 包含 HTML 标签但未设置 `is_html: true` | 设置 `"is_html": true` |
| 对纯文本设置 `is_html: true` | 省略该字段或设为 `false` |
| HTML 内容中缺少换行标签 | 使用 `<br>` 或 `<p>` 标签 |
| 回复时不包含历史消息内容 | 在 body 中手动添加引用内容 |

资料来源：[connectors/google-workspace/src/tools/definitions/gmail.ts:1-30]()

### 速率限制处理

当遇到速率限制时，连接器返回结构化错误响应：

```json
{
  "ok": false,
  "action_required": "Google Workspace rate limit reached",
  "next_step": "Back off before retrying, reduce the request size if possible"
}
```

## 认证流程模式

### Microsoft 365 多连接器认证共享

Microsoft 365 系列连接器（Mail、Teams、SharePoint）采用共享认证基础设施：

```mermaid
sequenceDiagram
    participant Host as MCP Host
    participant Mail as microsoft-mail
    participant Teams as microsoft-teams
    participant Graph as Microsoft Graph API
    
    Host->>Mail: authenticate_microsoft_account
    Mail->>Graph: OAuth Flow
    Graph-->>Mail: tokens
    Mail-->>Host: Write to ${MS_CONFIG_DIR}
    
    Host->>Teams: authenticate_sharepoint (增量授权)
    Teams->>Mail: 读取共享配置
    Mail-->>Teams: credentials/
    Teams-->>Host: 复用 Mail 的基础会话
```

**关键安全设计：**

- Teams 和 SharePoint 连接器复用 Mail 连接器建立的认证会话
- 所有连接器共享 `MS_CONFIG_DIR` 中的令牌存储
- 主机应用统一管理令牌刷新，`MICROSOFT_DISABLE_REFRESH=1` 确保单点刷新权威

资料来源：[connectors/microsoft-mail/README.md:Requirements]()

### Google Workspace 认证流程

Google Workspace 连接器支持两种认证模式：

| 模式 | 检测条件 | 描述 |
|------|----------|------|
| bridge | `MCP_HOST_BRIDGE_STATE` 已设置 | 主机应用管理 OAuth |
| standalone_oauth | `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET` 已设置 | 本地 OAuth（浏览器重定向） |
| manual_token | `GOOGLE_ACCESS_TOKEN` 已设置 | 静态访问令牌 |
| unconfigured | 无认证环境变量 | 工具返回设置引导信息 |

**优先级**：bridge > standalone_oauth > manual_token > unconfigured

资料来源：[connectors/google-workspace/README.md:Tools (94)]()

## 安全审计与监控

### 成功响应包装

所有工具的成功响应遵循统一的成功结果格式：

```json
{
  "ok": true,
  "result": { ... }
}
```

### 错误响应结构

业务错误和验证错误返回以下结构，确保主机恢复层能够采取行动：

```json
{
  "ok": false,
  "error": "Human-readable error description",
  "action_required": "What user needs to do",
  "next_step": "Specific recovery guidance"
}
```

### 超时保护

每个工具调用都配置了超时保护：

- Microsoft Graph 请求默认超时 60 秒（可配置，最高 300 秒）
- Gemini API 请求默认超时 180 秒
- 所有超时使用 AbortController 信号管理

## 部署安全建议

### 本地开发环境

```bash
# 使用 npx 直接运行（自动处理依赖）
npx -y @mindstone/mcp-server-google-workspace
```

### 云端部署

| 安全措施 | 实现方式 |
|----------|----------|
| 令牌刷新控制 | 设置 `MICROSOFT_DISABLE_REFRESH=1` |
| 主机管理认证 | 配置 `MCP_HOST_BRIDGE_STATE` |
| 网络隔离 | 服务间通信使用 TLS |
| 日志脱敏 | 敏感信息不写入日志 |

### Claude Desktop 配置示例

```json
{
  "mcpServers": {
    "GoogleWorkspace": {
      "command": "node",
      "args": ["/path/to/connectors/google-workspace/dist/index.js"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "ACCOUNTS_PATH": "/absolute/path/to/accounts.json",
        "CREDENTIALS_PATH": "/absolute/path/to/credentials"
      }
    }
  }
}
```

## 相关文档

- [Google Workspace 连接器](../google-workspace/) — Gmail、日历、Drive、Docs、Sheets、Slides 集成
- [Microsoft 365 Mail](../microsoft-mail/) — Outlook 邮件集成
- [Microsoft Teams](../microsoft-teams/) — Teams 消息和频道集成
- [Microsoft SharePoint](../microsoft-sharepoint/) — SharePoint 文件集成
- [Slack 连接器](../slack/) — Slack 工作区集成

## 参考资料

- TokenProvider 安全实现：[packages/mcp-server-microsoft-shared/README.md](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/README.md)
- Google Workspace 认证流程：[connectors/google-workspace/src/tools/server.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/server.ts)
- Gmail 输入验证：[connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- Slack 错误代码体系：[connectors/slack/src/types.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/slack/src/types.ts)
- Microsoft 共享认证库：[packages/mcp-server-microsoft-shared/README.md](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/README.md)

---

<a id='google-workspace-connector'></a>

## Google Workspace 连接器

### 相关页面

相关主题：[生产力工具连接器](#productivity-connectors), [Microsoft 365 连接器套件](#microsoft-connectors)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [connectors/google-workspace/package.json](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)
- [connectors/google-workspace/src/tools/definitions/index.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/index.ts)
- [connectors/google-workspace/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/README.md)
- [connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- [connectors/google-workspace/src/tools/drive-handlers.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/drive-handlers.ts)
- [connectors/google-workspace/src/modules/slides/types.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/slides/types.ts)
- [connectors/google-workspace/src/api/validators/parameter.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/api/validators/parameter.ts)
</details>

# Google Workspace 连接器

## 概述

Google Workspace 连接器是 Mindstone MCP 服务器项目中的一个核心组件，为 MCP (Model Context Protocol) 主机提供与 Google Workspace 服务的集成能力。该连接器支持 Gmail、Calendar、Drive、Docs、Sheets、Slides、Contacts、Tasks 和 Forms 等多项 Google Workspace 服务的操作，使 AI 代理能够代表用户执行各种办公任务。

资料来源：[connectors/google-workspace/package.json:4-5](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

### 核心特性

| 特性 | 说明 |
|------|------|
| MCP 协议兼容 | 完全遵循 MCP 标准协议，支持 stdio 通信模式 |
| 多服务集成 | 覆盖 Google Workspace 主要办公服务 |
| OAuth 认证 | 通过主机应用管理 OAuth 流程，确保安全认证 |
| 幂等性注解 | 每个工具都包含 destructiveHint、idempotentHint 等注解 |
| 开放世界提示 | 明确标识工具是否影响外部世界（openWorldHint） |

资料来源：[connectors/google-workspace/src/tools/definitions/index.ts:1-15](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/index.ts)

---

## 架构设计

### 系统组件架构

```mermaid
graph TD
    subgraph "MCP 主机 (Host Application)"
        A[MCP 主机] --> |OAuth 流程| B[accounts.json]
        A --> |Token 管理| C[Per-account Token Files]
    end
    
    subgraph "Google Workspace MCP Server"
        D[STDIO 通信层] --> E[工具注册表]
        E --> F[工具定义模块]
        F --> G[Gmail 工具]
        F --> H[Calendar 工具]
        F --> I[Drive 工具]
        F --> J[Docs 工具]
        F --> K[Sheets 工具]
        F --> L[Slides 工具]
        F --> M[Contacts 工具]
        F --> N[Tasks 工具]
        F --> O[Forms 工具]
        F --> P[Account 工具]
    end
    
    subgraph "Google API 层"
        Q[Google APIs] --> G
        Q --> H
        Q --> I
        Q --> J
        Q --> K
        Q --> L
        Q --> M
        Q --> N
        Q --> O
    end
    
    B --> D
    C --> D
```

### 认证流程

Google Workspace 连接器采用**分离式认证架构**，主机应用负责 OAuth 流程和令牌管理，连接器仅负责读取已存储的凭证：

```mermaid
sequenceDiagram
    participant Host as MCP 主机
    participant Server as Google Workspace Server
    participant Google as Google OAuth
    
    Host->>Google: 发起 OAuth 授权请求
    Google-->>Host: 授权码
    Host->>Google: 交换访问令牌
    Google-->>Host: Token + Refresh Token
    Host->>Host: 写入 accounts.json
    Host->>Host: 写入 per-account token 文件
    
    Note over Host,Server: 连接器启动
    
    Server->>Host: 读取 accounts.json
    Server->>Host: 读取 token 文件
    Server->>Google: API 请求
```

资料来源：[connectors/google-workspace/README.md:35-45](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/README.md)

---

## 支持的服务与工具

### 工具模块总览

| 服务类别 | 工具数量 | 主要功能 |
|----------|----------|----------|
| Account | 2 | 账户管理 |
| Gmail | 10+ | 邮件搜索、发送、标签管理、草稿 |
| Calendar | 5+ | 事件创建、查询、响应 |
| Drive | 8+ | 文件上传、下载、权限管理 |
| Docs | 5+ | 文档读取、结构获取 |
| Sheets | 6+ | 表格读取、写入、公式设置 |
| Slides | 8+ | 演示文稿读取、幻灯片操作 |
| Contacts | 2+ | 联系人搜索 |
| Tasks | 3+ | 任务列表和任务管理 |
| Forms | 3+ | 表单读取、响应查看 |

资料来源：[connectors/google-workspace/src/tools/definitions/index.ts:16-27](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/index.ts)

### Gmail 工具详解

Gmail 工具提供完整的邮件管理功能，支持纯文本和 HTML 格式邮件：

#### 发送邮件示例

```json
{
  "to": ["alice@example.com"],
  "subject": "会议纪要",
  "body": "Hi Alice,\\n\\n明天3点能见面吗？\\n\\n谢谢,\\nBob"
}
```

#### HTML 邮件示例

```json
{
  "to": ["alice@example.com"],
  "subject": "会议总结",
  "body": "<p>Hi Alice,</p><p>会议要点：</p><ul><li>预算已批准</li><li>上线日期：3月1日</li></ul>",
  "is_html": true
}
```

#### 回复邮件示例

```json
{
  "to": ["original-sender@example.com"],
  "subject": "Re: 会议安排",
  "body": "好的！\\n\\nOn Mon, Jan 6, 2026 at 10:00 AM, Alice <alice@example.com> wrote:\\n> 明天会议还照常进行吗？",
  "reply_to_message_id": "18c5a2b3d4e5f6g7"
}
```

**常见错误避免：**

| 错误做法 | 正确做法 |
|----------|----------|
| 未设置 `is_html: true` 却包含 HTML 标签 | HTML 内容必须设置 `is_html: true` |
| 纯文本消息使用 HTML 格式 | 简单消息使用纯文本即可 |
| HTML 内容缺少换行标签 | 使用 `<br>` 或 `<p>` 标签换行 |

资料来源：[connectors/google-workspace/src/tools/definitions/gmail.ts:1-35](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)

### Drive 工具

Drive 工具支持多种文件操作，包括上传、下载、搜索和权限管理：

#### 文件搜索参数

```typescript
interface DriveSearchArgs {
  email?: string;
  options: FileSearchOptions;
  return_json?: boolean;
  returnJson?: boolean;
}
```

#### 文件上传参数

```typescript
interface DriveUploadArgs {
  email?: string;
  options: FileUploadOptions;
}
```

#### 错误处理

Drive 工具内置完善的错误恢复机制：

```typescript
function formatDriveRecoveryError(operation: string, error: unknown): DriveRecoveryResponse {
  const statusText = error instanceof Error ? error.message : 'Unknown error';
  return {
    ok: false,
    action_required: `Drive ${operation} failed${statusText}`,
    next_step: `${message}. Check Google Workspace authentication and Drive permissions, then retry.`,
  };
}
```

资料来源：[connectors/google-workspace/src/tools/drive-handlers.ts:1-30](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/drive-handlers.ts)

### Slides 工具类型定义

```typescript
export interface ReadPresentationOptions {
  maxChars?: number;
  includeNotes?: boolean;
  returnJson?: boolean; // 默认: false (人类可读文本)
}

export interface BatchUpdatePresentationOptions {
  requests: SlidesRequest[];
  writeControl?: SlidesWriteControl;
  returnJson?: boolean;
}

export interface ThumbnailOptions {
  mimeType?: 'PNG';
  thumbnailSize?: 'SMALL' | 'MEDIUM' | 'LARGE';
}

export interface CreatePresentationOptions {
  title: string;
}
```

资料来源：[connectors/google-workspace/src/modules/slides/types.ts:14-35](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/modules/slides/types.ts)

---

## 配置与部署

### 环境变量配置

| 变量名 | 必填 | 说明 |
|--------|------|------|
| `GOOGLE_CLIENT_ID` | 是 | Google OAuth 客户端 ID |
| `GOOGLE_CLIENT_SECRET` | 是 | Google OAuth 客户端密钥 |
| `ACCOUNTS_PATH` | 是 | accounts.json 文件路径 |
| `ENABLE_GOOGLE_TASKS_FORMS` | 否 | 启用 Tasks 和 Forms 功能（默认禁用） |

资料来源：[connectors/google-workspace/README.md:50-58](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/README.md)

### Claude Desktop 配置示例

```json
{
  "mcpServers": {
    "Google Workspace": {
      "command": "npx",
      "args": [
        "-y",
        "@mindstone/mcp-server-google-workspace"
      ],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "ACCOUNTS_PATH": "/path/to/accounts.json"
      }
    }
  }
}
```

### 快速开始

#### 构建项目

```bash
cd <path-to-repo>/connectors/google-workspace
npm install
npm run build
```

#### 本地运行

```bash
node dist/index.js
```

#### 使用 npx 运行

```bash
npx -y @mindstone/mcp-server-google-workspace
```

### 系统要求

| 要求 | 最小版本 |
|------|----------|
| Node.js | >=18（推荐 20+） |
| npm | 任意支持版本 |

资料来源：[connectors/google-workspace/package.json:9-12](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

---

## 输入验证 (v0.1.2)

### 版本变更说明

**v0.1.2** 版本引入了一个重要的行为变更：为 `handleComposeWorkspaceEmail` 函数添加了**故障关闭（fail-closed）输入验证门**。

### 验证规则

在 v0.1.2 之前，如果 `to`、`subject` 或 `body` 参数为空，连接器会静默使用默认值（空字符串）。新版本现在会在这些参数缺失或为空时抛出 `McpError(InvalidParams)` 异常：

```typescript
interface ParameterValidationResult {
  valid: boolean;
  errors: string[];
}

// 验证逻辑伪代码
function validateEmailParams(params: EmailParams): ParameterValidationResult {
  const errors: string[] = [];
  
  if (!params.to || params.to.length === 0) {
    errors.push('"to" field is required and cannot be empty');
  }
  
  if (!params.subject || params.subject.trim() === '') {
    errors.push('"subject" field is required and cannot be empty');
  }
  
  if (!params.body || params.body.trim() === '') {
    errors.push('"body" field is required and cannot be empty');
  }
  
  return {
    valid: errors.length === 0,
    errors
  };
}
```

### 迁移指南

如果您正在从旧版本升级，请确保：

1. **检查所有邮件发送调用**，确保 `to`、`subject` 和 `body` 字段都有有效值
2. **更新错误处理逻辑**，捕获可能的 `InvalidParams` 错误
3. **测试邮件发送功能**，验证所有场景下的参数传递

| 场景 | v0.1.1 行为 | v0.1.2 行为 |
|------|-------------|-------------|
| `to` 为空数组 | 静默发送至空地址 | 抛出 InvalidParams 错误 |
| `subject` 为空字符串 | 静默使用空主题 | 抛出 InvalidParams 错误 |
| `body` 为空字符串 | 静默发送空正文 | 抛出 InvalidParams 错误 |
| 所有字段有效 | 正常发送 | 正常发送 |

资料来源：[connectors/google-workspace/src/api/validators/parameter.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/api/validators/parameter.ts)

---

## 工具注解系统

### 注解类型说明

每个工具都包含以下注解，用于帮助 MCP 主机和 AI 模型理解工具行为：

| 注解名称 | 类型 | 说明 |
|----------|------|------|
| `readOnlyHint` | boolean | 仅读取数据，不修改外部状态 |
| `destructiveHint` | boolean | 可能导致数据永久丢失或不可逆变更 |
| `idempotentHint` | boolean | 重复执行相同操作结果一致 |
| `openWorldHint` | boolean | 影响外部世界（需开启） |
| `requiresAuth` | boolean | 需要身份验证 |

### 工具命名约定

```typescript
// 破坏性操作前缀
const DESTRUCTIVE_TOOL_NAME_PATTERN = /^.*_(delete|destroy|trash|remove)/;

// 本地操作（不访问外部世界）
const LOCAL_ONLY_TOOL_SET = new Set([
  'read_workspace_document',
  'read_workspace_spreadsheet',
  // ...
]);

// 认证豁免工具
const AUTH_EXEMPT_TOOL_SET = new Set([
  'list_workspace_labels',
  // ...
]);
```

### 常用工具注解示例

| 工具名称 | readOnlyHint | destructiveHint | openWorldHint |
|----------|--------------|------------------|---------------|
| `search_workspace_emails` | true | false | true |
| `trash_workspace_email` | false | true | true |
| `read_workspace_document` | true | false | false |
| `send_workspace_email` | false | false | true |

---

## 使用场景示例

### 场景一：搜索并回复邮件

```
工具调用序列：
1. search_workspace_emails — 搜索 Gmail 中的相关邮件
2. reply_to_workspace_email — 在返回的线程 ID 上回复
```

### 场景二：管理 Google 日历事件

```
工具调用序列：
1. list_workspace_calendars — 列出所有日历
2. search_workspace_events — 查询特定时间范围内的事件
3. manage_workspace_calendar_event — 创建或更新事件
4. respond_to_workspace_calendar_event — 响应邀请
```

### 场景三：Google Drive 文件协作

```
工具调用序列：
1. search_drive_files — 查找共享文档
2. read_workspace_document — 读取文档内容
3. update_drive_permissions — 添加协作者权限
```

---

## 常见故障排除

### 认证问题

| 问题症状 | 可能原因 | 解决方案 |
|----------|----------|----------|
| `accounts.json` 读取失败 | 文件路径不正确 | 检查 `ACCOUNTS_PATH` 环境变量 |
| Token 已过期 | Refresh token 失效 | 重新进行 OAuth 授权流程 |
| 权限不足 | 缺少 Scopes | 确保申请了所有必要权限 |

### API 调用错误

| 错误类型 | 错误消息 | 解决建议 |
|----------|----------|----------|
| `InvalidParams` | 必需参数缺失 | 检查参数是否正确传递 |
| `Drive operation failed` | Drive API 错误 | 检查 Drive 认证和权限 |
| `Quota exceeded` | API 配额超限 | 降低请求频率 |

### 连接器启动问题

| 问题 | 诊断步骤 |
|------|----------|
| 服务无响应 | 检查 Node.js 版本是否 >=18 |
| 工具列表为空 | 检查 accounts.json 格式是否正确 |
| 特定工具不可用 | 确认是否启用了 Tasks/Forms 功能 |

---

## 许可证

本项目采用 **FSL-1.1-MIT**（Functional Source License, Version 1.1, with MIT future licence）开源许可证。

资料来源：[connectors/google-workspace/package.json:6](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/package.json)

---

## 安全说明

请参阅 [SECURITY.md](./SECURITY.md) 了解本连接器的安全策略，以及仓库级别的 [SECURITY.md](../../SECURITY.md) 了解漏洞报告流程。

---

## 相关链接

- [GitHub 仓库](https://github.com/mindstone/mcp-servers)
- [Google Workspace 连接器目录](https://github.com/mindstone/mcp-servers/tree/main/connectors/google-workspace)
- [npm 包发布页面](https://www.npmjs.com/package/@mindstone/mcp-server-google-workspace)
- [原项目 (aaronsb/google-workspace-mcp)](https://github.com/aaronsb/google-workspace-mcp)

---

## 参见

- [Office 连接器](../office/README.md) — Microsoft Office 集成
- [HubSpot 连接器](../hubspot/README.md) — CRM 集成
- [Google Analytics 连接器](../google-analytics/README.md) — 数据分析集成
- [Nano Banana 连接器](../nano-banana/README.md) — Gemini AI 图像生成

---

<a id='microsoft-connectors'></a>

## Microsoft 365 连接器套件

### 相关页面

相关主题：[Google Workspace 连接器](#google-workspace-connector), [认证模式](#auth-patterns)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [packages/mcp-server-microsoft-shared/src/graphClient.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/graphClient.ts)
- [packages/mcp-server-microsoft-shared/README.md](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/README.md)
- [connectors/microsoft-mail/src/mail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/src/mail.ts)
- [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts)
- [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts)
- [connectors/microsoft-teams/src/teams.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/src/teams.ts)
- [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)
- [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)
</details>

# Microsoft 365 连接器套件

## 概述

Microsoft 365 连接器套件是 [mcp-servers](https://github.com/mindstone/mcp-servers) 项目中用于与 Microsoft 365 服务集成的 MCP（Model Context Protocol）服务器集合。该套件通过 [Microsoft Graph API](https://learn.microsoft.com/en-us/graph/use-the-api) 提供对 Microsoft 365 核心服务的标准化访问能力。

套件包含多个独立的 MCP 连接器，分别对应不同的 Microsoft 365 服务：

| 连接器 | 功能范围 | 资料来源 |
|--------|----------|----------|
| `mcp-server-microsoft-mail` | Outlook 邮件、日历、联系人管理 | [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md) |
| `mcp-server-microsoft-teams` | Microsoft Teams 消息、频道、会议管理 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| `mcp-server-microsoft-sharepoint` | SharePoint Online 网站、文档库、列表管理 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| `mcp-server-microsoft-files` | OneDrive 个人文件管理 | [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts) |
| `mcp-server-microsoft-calendar` | 日历事件创建、读取、更新、删除 | [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts) |

## 架构设计

### 共享认证层

Microsoft 365 连接器套件采用共享认证架构，所有连接器共享同一套 OAuth 2.0 认证体系。核心认证逻辑封装在 `mcp-server-microsoft-shared` 包中：

```mermaid
graph TD
    A[主机应用 Host Application] --> B[mcp-server-microsoft-mail<br/>authenticate_microsoft_account]
    B --> C[MS Graph OAuth 2.0<br/>Microsoft Entra ID]
    C --> D[credentials/accounts.json<br/>credentials/tokens.json]
    D --> E[共享认证文件]
    E --> F[mcp-server-microsoft-teams]
    E --> G[mcp-server-microsoft-sharepoint]
    E --> H[mcp-server-microsoft-files]
```

资料来源：[packages/mcp-server-microsoft-shared/README.md](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/README.md)

### Graph API 客户端封装

所有连接器通过统一的 Graph 客户端与 Microsoft Graph API 交互。共享包提供了标准化的请求处理、错误转换和超时管理机制。

```mermaid
classDiagram
    class GraphClient {
        +get(endpoint: string)
        +post(endpoint: string, body: object)
        +patch(endpoint: string, body: object)
        +delete(endpoint: string)
        +uploadStream(endpoint: string, stream: Readable)
    }
    
    class MailConnector {
        +send_email()
        +read_emails()
        +create_draft()
    }
    
    class TeamsConnector {
        +send_channel_message()
        +list_channels()
        +create_meeting()
    }
    
    class SharePointConnector {
        +list_sites()
        +upload_file()
        +search_sharepoint()
    }
    
    GraphClient <-- MailConnector : 使用
    GraphClient <-- TeamsConnector : 使用
    GraphClient <|-- SharePointConnector : 使用
```

资料来源：[packages/mcp-server-microsoft-shared/src/graphClient.ts](https://github.com/mindstone/mcp-servers/blob/main/packages/mcp-server-microsoft-shared/src/graphClient.ts)

## 认证与配置

### 必需环境变量

| 变量名 | 描述 | 资料来源 |
|--------|------|----------|
| `MS_CLIENT_ID` | Microsoft Entra（Azure AD）应用程序客户端 ID | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| `MS_CONFIG_DIR` | Microsoft 配置目录路径（包含 `credentials/` 和 `accounts.json`） | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |

### 可选环境变量

| 变量名 | 描述 | 默认值 | 资料来源 |
|--------|------|--------|----------|
| `MS_ACCOUNT_EMAIL` | 多账户模式下指定账户邮箱 | `accounts.json` 中第一个账户 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| `MS_MCP_PACKAGE_ID` | 错误响应中的逻辑包标识符 | 服务特定默认值 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| `MICROSOFT_REQUEST_TIMEOUT_MS` | Microsoft Graph 请求超时时间（最大 300000ms） | `60000` | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| `MICROSOFT_DISABLE_REFRESH` | 设为 `1` 禁用令牌刷新，工具以 `auth_required` 响应失败关闭 | 未设置 | [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md) |

### MCP 主机配置示例

```json
{
  "mcpServers": {
    "Microsoft365Mail": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-microsoft-mail"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    },
    "Microsoft365Teams": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-microsoft-teams"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    },
    "Microsoft365SharePoint": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-microsoft-sharepoint"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}
```

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

### 认证流程

```mermaid
sequenceDiagram
    participant User as 用户
    participant Host as MCP 主机
    participant Mail as mcp-server-microsoft-mail
    participant Graph as Microsoft Graph
    participant Entra as Microsoft Entra ID

    User->>Host: 调用 authenticate_microsoft_account
    Host->>Mail: 执行认证工具
    Mail->>Entra: 发起 OAuth 授权请求
    Entra-->>User: 显示登录页面
    User->>Entra: 输入凭据并授权
    Entra-->>Mail: 返回授权码/令牌
    Mail->>Graph: 使用令牌调用 API
    Graph-->>Mail: 验证成功
    Mail->>Mail: 保存 credentials/accounts.json
    Mail-->>Host: 认证成功
```

## Microsoft Mail 连接器

`mcp-server-microsoft-mail` 是 Microsoft 365 连接器套件的核心组件，负责邮件、日历和联系人的基础认证。

### 主要工具

| 工具名称 | 功能 | 资料来源 |
|----------|------|----------|
| `authenticate_microsoft_account` | 发起 Microsoft 365 OAuth 授权流程 | [connectors/microsoft-mail/src/mail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/src/mail.ts) |
| `send_email` | 发送邮件，支持纯文本和 HTML 格式 | [connectors/microsoft-mail/src/mail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/src/mail.ts) |
| `read_emails` | 读取邮件，支持分页和过滤器 | [connectors/microsoft-mail/src/mail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/src/mail.ts) |
| `create_draft` | 创建草稿邮件 | [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md) |

### 安全注意事项

- 令牌文件以 `0600` 权限模式写入主机，由共享库以严格模式读取
- 云端表面默认设置 `MICROSOFT_DISABLE_REFRESH=1`，避免单次使用刷新令牌的竞争
- 成功响应使用标准 `successResult` 格式；错误响应返回 `isError:true` 并包含 `action_required` 和 `next_step` 字段

资料来源：[connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)

## Microsoft Teams 连接器

`mcp-server-microsoft-teams` 提供 Microsoft Teams 消息、频道和会议的管理能力。

### 主要工具

| 工具类别 | 工具示例 | 功能描述 | 资料来源 |
|----------|----------|----------|----------|
| 消息 | `send_channel_message`, `reply_to_message` | 发送频道消息和回复 | [connectors/microsoft-teams/src/teams.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/src/teams.ts) |
| 频道 | `list_channels`, `get_channel` | 浏览和管理团队频道 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| 会议 | `create_meeting`, `get_meeting` | 创建和获取 Teams 会议 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| 成员 | `list_members`, `add_member` | 团队成员管理 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |

### 与邮件连接器的认证共享

Teams 连接器复用 `mcp-server-microsoft-mail` 写入的凭据，无需单独认证：

> Sign in via `@mindstone/mcp-server-microsoft-mail`'s `authenticate_microsoft_account` first; the Teams tools then reuse the credentials it writes to `${MS_CONFIG_DIR}/`.

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

## Microsoft SharePoint 连接器

`mcp-server-microsoft-sharepoint` 提供 SharePoint Online 网站、文档库和列表的管理能力。

### 主要工具

| 工具类别 | 工具名称 | 功能描述 | 资料来源 |
|----------|----------|----------|----------|
| 文档库 | `list_library_items`, `download_library_item`, `upload_file_to_library` | 文档库文件管理 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| 共享 | `copy_library_item`, `rename_library_item`, `create_sharing_link` | 文档共享和操作 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| 页面 | `list_site_pages`, `read_site_page` | SharePoint 页面浏览 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| 列表 | `list_lists`, `list_list_items`, `create_list_item` | SharePoint 列表操作 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |
| 搜索 | `search_sharepoint` | 跨站点搜索内容 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |

### 增量认证

SharePoint 连接器需要额外的 `Sites.Read.All` 权限范围：

> Sign in via `@mindstone/mcp-server-microsoft-mail`'s `authenticate_microsoft_account` first to negotiate the base session, then call this server's `authenticate_sharepoint` to request the additional SharePoint `Sites.Read.All` scope on top.

资料来源：[connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)

## Microsoft Calendar 连接器

`mcp-server-microsoft-calendar` 提供日历事件的完整 CRUD 操作能力。

### 主要工具

| 工具名称 | 功能描述 | 资料来源 |
|----------|----------|----------|
| `list_events` | 列出日历事件，支持日期范围过滤 | [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts) |
| `create_event` | 创建日历事件 | [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts) |
| `update_event` | 更新现有事件 | [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts) |
| `delete_event` | 删除日历事件 | [connectors/microsoft-calendar/src/calendar.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-calendar/src/calendar.ts) |

## Microsoft Files 连接器

`mcp-server-microsoft-files` 提供 OneDrive 个人云存储的文件管理能力。

### 主要工具

| 工具名称 | 功能描述 | 资料来源 |
|----------|----------|----------|
| `list_files` | 列出 OneDrive 文件和文件夹 | [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts) |
| `upload_file` | 上传文件到 OneDrive | [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts) |
| `download_file` | 下载 OneDrive 文件 | [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts) |
| `search_files` | 搜索 OneDrive 文件 | [connectors/microsoft-files/src/files.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-files/src/files.ts) |

## 错误处理

### 错误响应格式

所有 Microsoft 365 连接器采用统一的错误响应格式：

```json
{
  "isError": true,
  "data": {
    "ok": false,
    "error": "错误消息描述",
    "errorCode": "ERROR_CODE",
    "action_required": "需要的操作步骤",
    "next_step": "下一步建议"
  }
}
```

### 认证错误处理

| 错误场景 | 响应代码 | 处理方式 | 资料来源 |
|----------|----------|----------|----------|
| 令牌过期 | `auth_required` | 主机驱动重新认证 | [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md) |
| 刷新禁用 | `MICROSOFT_DISABLE_REFRESH=1` | 工具以 `auth_required` 失败关闭 | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| 令牌文件损坏 | `INVALID_TOKEN_FILE` | 共享库失败关闭 | [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md) |

### 超时管理

每个工具的 Graph API 调用使用组合超时信号：

> Per-tool Graph calls run under a composed caller + cohort timeout signal via `.options({signal})` plus a `Promise.race` wrapper for defence-in-depth.

资料来源：[connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md)

## 常见故障排除

| 症状 | 可能原因 | 解决方案 | 资料来源 |
|------|----------|--------|----------|
| 连接器启动失败 | 未执行构建 | 运行 `npm install && npm run build` | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| 认证错误或空结果 | 配置文件路径错误或凭据无效 | 检查 `MS_CONFIG_DIR` 和 `accounts.json` | [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md) |
| MCP 主机报告协议问题 | stdio 会话中的标准输出噪音 | 确保没有 `console.log` 调用（所有日志使用 `console.error`） | [connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md) |
| 请求超时 | Graph API 响应缓慢 | 调整 `MICROSOFT_REQUEST_TIMEOUT_MS` 环境变量 | [connectors/microsoft-sharepoint/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-sharepoint/README.md) |

## 社区相关问题

### Google Workspace 输入验证增强

虽然此问题针对 Google Workspace 连接器，但它反映了 Microsoft 365 连接器套件中类似的最佳实践趋势：

> **行为变更。** 为 `handleComposeWorkspaceEmail` 添加了之前不存在的 fail-closed 输入验证门。当 `to`/`subject`/`body` 本应被静默默认为空值时，抛出 `McpError(InvalidParams)`。

Microsoft 365 连接器套件同样遵循严格的输入验证模式，确保 API 调用的参数完整性。

资料来源：[社区上下文 #67](https://github.com/mindstone/mcp-servers/issues/67)

## 本地开发

### 构建所有连接器

```bash
cd <path-to-repo>/connectors/microsoft-mail
npm install
npm run build

cd <path-to-repo>/connectors/microsoft-teams
npm install
npm run build

cd <path-to-repo>/connectors/microsoft-sharepoint
npm install
npm run build
```

### 本地运行配置

```json
{
  "mcpServers": {
    "Microsoft365Mail": {
      "command": "node",
      "args": ["<path-to-repo>/connectors/microsoft-mail/dist/index.js"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}
```

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

## 相关连接器

- [Microsoft Office 连接器](../office/) — Word、Excel、PowerPoint 桌面集成
- [Google Workspace 连接器](../google-workspace/) — Gmail、Google Calendar、Google Drive 集成
- [HubSpot 连接器](../hubspot/) — CRM、销售和营销自动化
- [共享认证库](../mcp-server-microsoft-shared/) — Microsoft 365 认证核心组件

## 许可证

所有 Microsoft 365 连接器使用 [FSL-1.1-MIT](./LICENSE) — 功能源许可证，版本 1.1，附带 MIT 未来许可证。软件将于 2030 年 4 月 8 日转换为 MIT 许可证。

---

<a id='productivity-connectors'></a>

## 生产力工具连接器

### 相关页面

相关主题：[Google Workspace 连接器](#google-workspace-connector), [Microsoft 365 连接器套件](#microsoft-connectors)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)
- [connectors/office/src/index.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/index.ts)
- [connectors/office/src/shared/office/errors.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)
- [connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- [connectors/google-workspace/src/resources/compose-email-template.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/resources/compose-email-template.ts)
- [connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)
- [connectors/microsoft-mail/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-mail/README.md)
- [connectors/hubspot/src/tools/definitions.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)
- [connectors/hubspot/src/tools/marketing-handlers.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/marketing-handlers.ts)
- [connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)
- [connectors/napkin/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/napkin/README.md)
- [connectors/elevenlabs/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/elevenlabs/README.md)
- [connectors/google-analytics/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-analytics/README.md)
</details>

# 生产力工具连接器

## 概述

生产力工具连接器（P roductivity Tools Connectors）是 `mindstone/mcp-servers` 仓库中的一组 MCP（Model Context Protocol）服务器实现，用于将各种主流办公软件和 SaaS 平台与 AI 助手进行集成。这些连接器通过标准化的 MCP 协议暴露工具接口，使 AI 助手能够直接操控目标系统的数据和功能，无需用户手动切换应用程序。

仓库中的连接器覆盖以下主要类别：

| 类别 | 连接器 | 主要功能 |
|------|--------|----------|
| 办公套件 | Office (Word/Excel/PowerPoint) | 文档读写、表格处理、演示文稿管理 |
| 企业通讯 | Microsoft Teams、Slack | 消息发送、频道管理、会议集成 |
| 邮件系统 | Microsoft Mail、Google Workspace (Gmail) | 邮件撰写、发送、草稿管理 |
| 内容管理 | SharePoint | 文件浏览、列表操作、页面编辑 |
| CRM | HubSpot | 联系人、公司、交易、工单管理 |
| 客服 | Zendesk | 工单查询、宏应用 |
| 分析 | Google Analytics | 报告生成、实时数据 |
| AI/视觉 | ElevenLabs、Napkin AI、NanoBanana | 语音合成、视觉生成、Gemini 图像 |

所有连接器均采用 [FSL-1.1-MIT](./LICENSE) 许可证，功能源代码许可证版本 1.1，附带 MIT 未来许可证，软件将于 2030 年 4 月 8 日转换为 MIT 许可证。

## 架构设计

### MCP 服务器通用模式

每个连接器都是一个独立的 Node.js 包，通过标准输入/输出（stdio）协议与 MCP 主机进行通信。服务器接收 JSON-RPC 格式的请求并返回结构化响应。

```mermaid
graph TD
    A["MCP 主机<br/>(Claude Desktop/Cursor等)"] <-->|"JSON-RPC over stdio"| B["MCP 连接器服务器"]
    B --> C["第三方 API / SDK"]
    B --> D["认证凭据存储"]
    C --> E["外部服务<br/>(Office 365/Google等)"]
```

### Office 连接器架构

Office 连接器采用特殊的 Sidecar（边车）架构设计，包含两个主要组件：

1. **MCP 服务器端** (`dist/index.js`) — 通过 stdio 与 MCP 主机通信
2. **Sidecar 进程** — 一个独立的 Node.js 进程，负责与 Office 加载项（Add-in）建立 WebSocket 连接

Sidecar 架构的核心特点包括：

- MCP 服务器通过环境变量 `MCP_OFFICE_SIDECAR_STATE` 指向的 JSON 文件获取 sidecar 的端口和令牌
- Sidecar 进程负责维护与 Office 应用程序的连接状态
- 错误转换层（`errors.ts`）将核心错误映射为 Office 品牌化消息

资料来源：[connectors/office/src/shared/office/errors.ts:1-50](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)

```mermaid
graph TD
    A["MCP 主机"] <-->|"stdio"| B["MCP Office 服务器<br/>dist/index.js"]
    B <-->|"port + token<br/>sidecar-state.json"| C["Sidecar 进程"]
    C <-->|"WebSocket"| D["Office 加载项"]
    D <-->|"Office.js API"| E["Office 应用<br/>(Word/Excel/PowerPoint)"]
    
    F["环境变量"] --> B
    G["环境变量"] --> C
```

### 认证与凭据管理

Microsoft 产品线连接器采用共享的认证体系：

| 环境变量 | 描述 |
|----------|------|
| `MS_CLIENT_ID` | Microsoft Entra (Azure AD) 应用程序客户端 ID |
| `MS_CONFIG_DIR` | 包含凭据和账户信息的配置目录路径 |
| `MS_ACCOUNT_EMAIL` | 多账户模式下的指定账户邮箱 |
| `MS_MCP_PACKAGE_ID` | 错误响应中显示的逻辑包 ID |
| `MICROSOFT_REQUEST_TIMEOUT_MS` | 上游 Microsoft Graph 请求超时（最大 300000ms） |
| `MICROSOFT_DISABLE_REFRESH` | 设为 `1` 禁用令牌刷新，强制主机驱动重新认证 |

资料来源：[connectors/microsoft-teams/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/microsoft-teams/README.md)

云端表面默认设置 `MICROSOFT_DISABLE_REFRESH=1`，使桌面会话成为唯一的刷新令牌权威，避免单次使用刷新令牌的竞争条件。

## 工具分类与功能

### Office 连接器工具集

Office 连接器提供 **53 个工具**，分为以下类别：

#### 设置工具（2 个）

| 工具名称 | 功能描述 |
|----------|----------|
| `rebel_office_setup` | 安装或修复（或卸载）Office 加载项 |
| `rebel_office_status` | 检查 Word、Excel、PowerPoint 的连接状态 |

#### Word 工具（17 个）

| 工具名称 | 功能描述 |
|----------|----------|
| `rebel_office_word_read_document` | 按段落分页读取活动 Word 文档正文 |
| `rebel_office_word_get_document_structure` | 获取文档的标题/章节大纲 |
| `rebel_office_word_get_selection` | 获取当前选中的文本和位置 |
| `rebel_office_word_find_text` | 搜索文本出现位置并返回周围上下文 |
| `rebel_office_word_insert_text` | 在指定位置插入文本或替换选中内容（破坏性） |
| `rebel_office_word_replace_text` | 在文档中查找并替换文本（破坏性） |
| `rebel_office_word_format_text` | 应用字体、颜色、高亮或对齐格式（破坏性） |
| `rebel_office_word_insert_table` | 插入带表头和行的表格（破坏性） |
| `rebel_office_word_insert_image` | 从文件路径或 base64 数据插入图片（破坏性） |
| `rebel_office_word_insert_break` | 插入分页符或分节符（破坏性） |
| `rebel_office_word_set_header_footer` | 设置页眉或页脚文本和对齐方式（破坏性） |
| `rebel_office_word_get_properties` | 获取文档元数据（标题、作者、计数） |
| `rebel_office_word_get_comments` | 读取评论和回复线程 |
| `rebel_office_word_add_comment` | 在选中文本上添加评论或回复线程（破坏性） |
| `rebel_office_word_resolve_comment` | 按 ID 解决或删除评论（破坏性） |
| `rebel_office_word_get_tracked_changes` | 读取追踪的更改（修订） |
| `rebel_office_word_accept_reject_changes` | 批量或按 ID 接受或拒绝追踪的更改（破坏性） |

资料来源：[connectors/office/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/README.md)

#### Excel 工具（22 个）

| 工具名称 | 功能描述 |
|----------|----------|
| `rebel_office_excel_read_range` | 从 A1 范围或命名范围读取单元格值 |
| `rebel_office_excel_write_range` | 将二维值数组写入范围（破坏性） |
| `rebel_office_excel_get_worksheets` | 列出工作表及其位置和使用范围 |
| `rebel_office_excel_add_worksheet` | 在指定位置添加新工作表（破坏性） |
| `rebel_office_excel_delete_worksheet` | 删除工作表及其所有数据（破坏性） |
| `rebel_office_excel_read_table` | 从命名 Excel 表格读取行 |
| `rebel_office_excel_create_table` | 将范围转换为命名 Excel 表格（破坏性） |
| `rebel_office_excel_set_formula` | 设置单元格公式 |

#### PowerPoint 工具（14 个）

| 工具名称 | 功能描述 |
|----------|----------|
| `rebel_office_powerpoint_get_presentation` | 获取幻灯片列表和基本信息 |
| `rebel_office_powerpoint_get_slide` | 获取单张幻灯片内容 |
| `rebel_office_powerpoint_add_slide` | 在指定位置添加幻灯片（破坏性） |
| `rebel_office_powerpoint_delete_slide` | 删除幻灯片（破坏性） |
| `rebel_office_powerpoint_insert_text` | 在形状或文本框中插入文本（破坏性） |
| `rebel_office_powerpoint_add_shape` | 添加几何形状（破坏性） |
| `rebel_office_powerpoint_update_text` | 更新形状或布局占位符中的文本（破坏性） |
| `rebel_office_powerpoint_get_speaker_notes` | 读取一张或所有幻灯片的演讲者备注 |
| `rebel_office_powerpoint_set_speaker_notes` | 为幻灯片设置或替换演讲者备注（破坏性） |
| `rebel_office_powerpoint_get_presentation_properties` | 获取演示文稿元数据、尺寸和布局 |

### HubSpot 连接器工具集

HubSpot 连接器提供全面的 CRM 功能，包括以下工具类别：

| 类别 | 工具数量 | 主要功能 |
|------|----------|----------|
| 账户管理 | ✓ | 获取账户信息 |
| 联系人 | ✓ | 列表、获取、创建、更新、删除、搜索 |
| 公司 | ✓ | 列表、获取、创建、更新、删除、搜索 |
| 交易 | ✓ | 完整生命周期管理 |
| 工单 | ✓ | 创建、更新、关闭、评论 |
| 营销表单 | ✓ | 列表、获取、提交处理 |
| 分析报告 | ✓ | 报告生成、数据聚合 |

资料来源：[connectors/hubspot/src/tools/definitions.ts:1-30](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)

HubSpot 错误处理采用统一的错误解析机制，根据错误类型返回结构化的错误信息：

```typescript
// 错误类型映射
if (error.statusCode === 404) {
  return {
    error: `${context.feature} not found`,
    errorCode: 'NOT_FOUND',
    suggestion: `Verify the ${context.feature} ID is correct.`
  };
}
```

资料来源：[connectors/hubspot/src/tools/marketing-handlers.ts:1-30](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/marketing-handlers.ts)

### Google Workspace 连接器

Google Workspace 连接器的 Gmail 功能支持以下操作：

| 工具名称 | 功能描述 |
|----------|----------|
| `handleComposeWorkspaceEmail` | 撰写并发送邮件（支持纯文本和 HTML 格式） |
| `create_draft` | 保存新的独立草稿邮件 |

**重要变更（v0.1.2）：**

> ⚠️ **行为变更** — PR #66 在 `handleComposeWorkspaceEmail` 中添加了 fail-closed（故障关闭）输入验证门控，此前该门控不存在。当 `to`/`subject`/`body` 本应静默默认为空值时，现在会抛出 `McpError(InvalidParams)`。

资料来源：[PR #66](https://github.com/mindstone/mcp-servers/pull/66)、[社区讨论 #67](https://github.com/mindstone/mcp-servers/issues/67)

#### Gmail 工具使用示例

**纯文本邮件：**
```json
{
  "to": ["alice@example.com"],
  "subject": "会议通知",
  "body": "Hi Alice,\\n\\n我们明天3点能见面吗？\\n\\n谢谢，\\nBob"
}
```

**HTML 格式邮件：**
```json
{
  "to": ["alice@example.com"],
  "subject": "会议纪要",
  "body": "<p>Hi Alice,</p><p>会议要点：</p><ul><li>预算已批准</li><li>发布日期：3月1日</li></ul>",
  "is_html": true
}
```

**回复邮件：**
```json
{
  "to": ["original-sender@example.com"],
  "subject": "Re: 会议安排",
  "body": "听起来不错！\n\nOn Mon, Jan 6, 2026 at 10:00 AM, Alice <alice@example.com> wrote:\n> 明天我们还见面吗？",
  "reply_to_message_id": "18c5a2b3d4e5f6g7"
}
```

资料来源：[connectors/google-workspace/src/tools/definitions/gmail.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)

### 其他专业连接器

#### Zendesk 连接器

| 工具类别 | 工具示例 | 功能 |
|----------|----------|------|
| 工单管理 | `list_zendesk_tickets` | 列出或搜索工单 |
| | `get_zendesk_ticket` | 获取工单详情 |
| | `update_zendesk_ticket` | 更新工单状态/字段 |
| | `add_comment_to_ticket` | 添加评论 |
| 宏 | `list_zendesk_macros` | 列出或搜索宏 |
| | `get_zendesk_macro` | 获取宏详情 |
| | `apply_zendesk_macro` | 预览和应用宏到工单 |

资料来源：[connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)

#### Google Analytics 连接器

| 工具类别 | 工具名称 | 功能 |
|----------|----------|------|
| 维度/指标 | `ga_get_dimensions_by_category` | 按类别获取维度 |
| | `ga_get_metrics_by_category` | 按类别获取指标 |
| 报告 | `ga_run_report` | 核心报告生成（支持行数安全估计） |
| | `ga_run_pivot_report` | 交叉表报告 |
| | `ga_run_realtime_report` | 最近 30 分钟活动 |
| 管理 | `ga_get_property_quotas_snapshot` | 剩余配额查询 |

资料来源：[connectors/google-analytics/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-analytics/README.md)

#### AI/视觉工具连接器

| 连接器 | 工具数量 | 主要功能 |
|--------|----------|----------|
| ElevenLabs | 语音合成 | `configure_elevenlabs_api_key`、`napkin_generate_visual`、`napkin_check_status`、`napkin_download_visual` |
| Napkin AI | 视觉生成 | 将文本描述转换为专业图表 |
| NanoBanana | Gemini 图像 | 使用 Google Gemini 模型生成图像 |

**NanoBanana 特殊配置：**

| 环境变量 | 描述 | 默认值 |
|----------|------|--------|
| `GEMINI_API_KEY` | Google Gemini API 密钥 | 必填 |
| `MCP_WORKSPACE_PATH` | 保存生成图像的工作区路径 | 可选 |
| `NANO_BANANA_GEMINI_TIMEOUT_MS` | Gemini 请求超时 | 180000ms (3分钟) |
| `NANO_BANANA_BRIDGE_TIMEOUT_MS` | 主机桥接请求超时 | 30000ms |

资料来源：[connectors/nano-banana/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/nano-banana/README.md)

## 工具注解系统

MCP 连接器使用标准化的注解系统来标记工具的行为特性：

| 注解名称 | 含义 |
|----------|------|
| `readOnlyHint: true` | 工具仅读取数据，不修改状态 |
| `destructiveHint: true` | 工具执行破坏性操作，需要谨慎使用 |
| `idempotentHint: true` | 重复执行相同操作不会产生额外副作用 |
| `openWorldHint: false` | 工具仅访问本地/内部资源 |
| `requiresAuth: true` | 工具需要有效的认证凭据 |

```typescript
annotations: {
  readOnlyHint: true,
  destructiveHint: false,
  idempotentHint: true,
  openWorldHint: false,
}
```

资料来源：[connectors/office/src/index.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/index.ts)

对于名称包含 `delete`、`remove`、`destroy` 等模式或被列入 `FORCE_DESTRUCTIVE_HINT` 集合的工具，系统自动强制设置 `destructiveHint: true`。

## 错误处理机制

### 统一错误响应格式

连接器采用统一的错误响应结构，便于 MCP 主机进行错误恢复：

```typescript
{
  error: '错误描述',
  errorCode: 'ERROR_CODE',
  suggestion: '用户友好的修复建议',
  details: { /* 可选的详细信息 */ }
}
```

### Office 错误代码映射

| 核心错误代码 | Office 品牌化消息 |
|--------------|-------------------|
| `APP_NOT_CONNECTED` | 应用程序未连接，请检查 Office 加载项状态 |
| `ADDIN_DISCONNECTED` | 加载项已断开连接，请重新启动 Office |
| `COMMAND_TIMEOUT` | 操作超时，请重试 |

资料来源：[connectors/office/src/shared/office/errors.ts:20-40](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)

### HubSpot 错误处理

| 状态码 | 错误代码 | 建议操作 |
|--------|----------|----------|
| 404 | `NOT_FOUND` | 验证 ID 是否正确 |
| 401/403 | `AUTH_ERROR` | 检查凭据和权限 |
| 429 | `RATE_LIMIT` | 等待后重试 |
| 其他 | `API_ERROR` | 检查请求参数 |

## 快速开始

### 安装与构建

```bash
# 进入连接器目录
cd connectors/<connector-name>

# 安装依赖
npm install

# 构建项目
npm run build
```

### 本地运行

```bash
# 直接运行编译后的 JavaScript
node dist/index.js
```

### MCP 主机配置

#### Claude Desktop 配置示例

```json
{
  "mcpServers": {
    "Microsoft Office": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-office"],
      "env": {
        "MCP_OFFICE_SIDECAR_STATE": ""
      }
    },
    "HubSpot": {
      "command": "node",
      "args": ["/path/to/repo/connectors/hubspot/dist/index.js"],
      "env": {
        "HUBSPOT_CONFIG_PATH": "/path/to/config"
      }
    }
  }
}
```

## 配置参考

### Office 连接器环境变量

| 变量名 | 必需 | 描述 |
|--------|------|------|
| `MCP_OFFICE_SIDECAR_STATE` | 是 | sidecar 状态文件（JSON）的绝对路径 |
| `MCP_OFFICE_SIDECAR_DISABLE` | 否 | 禁用 sidecar（用于无头环境） |

### HubSpot 连接器环境变量

| 变量名 | 必需 | 描述 |
|--------|------|------|
| `HUBSPOT_CONFIG_PATH` | 是 | 包含 `accounts.json` 的配置目录路径 |

`accounts.json` 格式：
```json
{
  "subdomain": "your-company",
  "email": "user@example.com",
  "apiKey": "your-private-app-token"
}
```

### Microsoft 产品连接器环境变量

| 变量名 | 必需 | 描述 |
|--------|------|------|
| `MS_CLIENT_ID` | 是 | Microsoft Entra 应用程序客户端 ID |
| `MS_CONFIG_DIR` | 是 | 配置目录（包含 credentials/ 和 accounts.json） |
| `MS_ACCOUNT_EMAIL` | 否 | 多账户模式下的指定账户 |
| `MS_MCP_PACKAGE_ID` | 否 | 错误响应中的包标识符 |
| `MICROSOFT_REQUEST_TIMEOUT_MS` | 否 | Graph API 超时（最大 300000ms） |
| `MICROSOFT_DISABLE_REFRESH` | 否 | 设为 `1` 禁用令牌刷新 |

## 安全注意事项

| 连接器 | 安全特性 |
|--------|----------|
| Microsoft Mail | 令牌文件权限设为 0600；云表面默认禁用刷新 |
| Microsoft Teams/SharePoint | 继承 Microsoft Mail 的认证体系 |
| Office | 使用 sidecar 架构隔离敏感操作 |
| HubSpot | 通过 `accounts.json` 管理 API 密钥 |

所有连接器的成功响应遵循标准 `successResult` 格式；业务错误返回 `isError: true` 和 `{ ok: false, error, action_required, next_step }` 有效载荷，便于主机恢复层处理。

## 故障排查

### 常见问题与解决方案

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接器启动失败 | 项目未构建 | 运行 `npm install && npm run build` |
| 认证错误或空结果 | 配置路径错误或凭据无效 | 检查环境变量和 `accounts.json` |
| MCP 主机协议问题 | stdio 会话中有标准输出噪音 | 确保无 `console.log` 调用（所有日志使用 `console.error`） |
| Office 连接器无法工作 | Office 加载项未安装 | 运行 `rebel_office_setup` 安装或修复 |
| Google Workspace 邮件发送失败 | 输入验证失败（v0.1.2+） | 确保 `to`、`subject`、`body` 字段非空 |

### Office 连接器烟雾测试

```bash
MCP_OFFICE_SIDECAR_STATE=/tmp/rebel-office-smoke/sidecar-state.json \
  node dist/index.js
```

发送 `listTools` MCP 请求到标准输入，应返回完整的工具清单。服务器无需活动的 sidecar 即可响应 `listTools` 请求。

### Zendesk 连接器烟雾测试

在 MCP 主机中运行：

> 列出我的待处理 Zendesk 工单

如果失败，请确认：
- `dist/index.js` 存在（运行 `npm run build`）
- `ZENDESK_CONFIG_PATH` 指向可读目录
- `accounts.json` 包含有效的子域、邮箱和 API 令牌

## 参见

- [Microsoft Office 架构文档](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/docs/connectors/office-architecture.md)
- [HubSpot 连接器源码](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)
- [Google Workspace Gmail 工具定义](https://github.com/mindstone/mcp-servers/blob/main/connectors/google-workspace/src/tools/definitions/gmail.ts)
- [Office 错误处理模块](https://github.com/mindstone/mcp-servers/blob/main/connectors/office/src/shared/office/errors.ts)
- [MCP 协议官方文档](https://modelcontextprotocol.io/)

---

<a id='crm-connectors'></a>

## CRM 与客服连接器

### 相关页面

相关主题：[生产力工具连接器](#productivity-connectors)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [connectors/hubspot/src/tools/definitions.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/definitions.ts)
- [connectors/hubspot/src/tools/marketing-handlers.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/marketing-handlers.ts)
- [connectors/hubspot/src/tools/input-limits.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/hubspot/src/tools/input-limits.ts)
- [connectors/zendesk/README.md](https://github.com/mindstone/mcp-servers/blob/main/connectors/zendesk/README.md)
- [connectors/freshdesk/src/tools/tickets.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/freshdesk/src/tools/tickets.ts)
- [connectors/outreach/src/tools/prospects.ts](https://github.com/mindstone/mcp-servers/blob/main/connectors/outreach/src/tools/prospects.ts)
</details>

# CRM 与客服连接器

## 概述

MCP Servers 仓库提供了一系列专注于客户关系管理（CRM）和客服系统的连接器，使 AI 代理能够与主流 CRM 平台和客服工具进行交互。这些连接器通过 Model Context Protocol (MCP) 标准接口暴露工具函数，实现对客户数据、工单、线索、交易等业务对象的读取和操作。

**支持的平台：**

| 连接器 | 类型 | 主要功能 |
|--------|------|----------|
| HubSpot | CRM | 账户、联系人、公司、交易、工单、线索、任务、备注、市场营销 |
| Salesforce | CRM | 账户、联系人、潜在客户、机会、自定义对象 |
| Zendesk | 客服 | 工单、用户、宏、附件 |
| Freshdesk | 客服 | 工单、客户、对话、解决方案 |
| Outreach | CRM/Sales | 潜在客户、序列、任务 |

## 架构概览

CRM 与客服连接器遵循统一的技术架构模式，每个连接器都是一个独立的 MCP 服务器，通过标准输入输出（stdio）进行通信。

```mermaid
graph TD
    A[MCP Host<br/>Claude/AI Agent] -->|MCP Protocol| B[CRM/客服连接器]
    B --> C[平台 API 客户端]
    C --> D[HubSpot API]
    C --> E[Salesforce API]
    C --> F[Zendesk API]
    C --> G[Freshdesk API]
    C --> H[Outreach API]
    
    I[配置文件<br/>accounts.json] --> B
    J[环境变量] --> B
```

## HubSpot 连接器

### 功能范围

HubSpot 连接器是最全面的 CRM 连接器，提供了对 HubSpot CRM 几乎所有核心对象的访问能力。工具按照功能分为多个类别：

**资料来源：** [connectors/hubspot/src/tools/definitions.ts:1-50]()

### 工具分类

| 类别 | 工具数量 | 主要功能 |
|------|----------|----------|
| 账户工具 | 3 | 账户创建、读取、更新 |
| 联系人工具 | 5 | 联系人 CRUD、搜索、关联 |
| 公司工具 | 4 | 公司管理、域名匹配 |
| 交易工具 | 5 | 交易阶段、管道、关闭操作 |
| 工单工具 | 4 | 工单创建、状态更新、评论 |
| 线索工具 | 3 | 线索识别、转换 |
| 任务工具 | 4 | 任务创建、关联 |
| 备注工具 | 3 | 备注关联、CRM 对象关联 |
| 关联工具 | 6 | 对象间关联管理 |
| 属性工具 | 4 | 自定义属性读取 |
| 所有者工具 | 2 | 用户/所有者查询 |
| 管道工具 | 3 | 交易管道配置 |
| 互动工具 | 5 | 邮件、会议、日志 |
| 产品工具 | 3 | 产品目录管理 |
| 方案行工具 | 3 | 交易方案行项 |
| 表单工具 | 2 | 表单列表和详情 |
| 分析工具 | 2 | 分析数据查询 |
| 营销邮件工具 | 3 | 营销邮件管理 |
| 列表工具 | 2 | 静态列表操作 |
| 知识库工具 | 2 | 知识库文章 |
| 文件工具 | 2 | 文件上传下载 |
| 工作流工具 | 2 | 工作流触发 |
| 对话工具 | 2 | 会话管理 |

### 工具注解机制

HubSpot 连接器实现了智能的工具注解系统，根据工具的性质自动添加安全提示注解：

```typescript
function applyCohortHygieneAnnotations(tool: ToolMetadata): ToolMetadata {
  const shouldForceDestructiveHint =
    DESTRUCTIVE_TOOL_NAME_PATTERN.test(tool.name) ||
    FORCE_DESTRUCTIVE_TOOL_SET.has(tool.name);
  const openWorldHint = !LOCAL_ONLY_TOOL_SET.has(tool.name);

  return {
    ...tool,
    requiresAuth: !AUTH_EXEMPT_TOOL_SET.has(tool.name),
    annotations: {
      ...tool.annotations,
      destructiveHint: shouldForceDestructiveHint ? true : tool.annotations?.destructiveHint,
      openWorldHint,
    },
  };
}
```

**资料来源：** [connectors/hubspot/src/tools/definitions.ts:60-75]()

### 输入限制

为防止 API 限流和数据量过大，HubSpot 连接器定义了严格的输入限制：

| 参数类型 | 限制值 | 说明 |
|----------|--------|------|
| `limit` | 最大 100 | 单次请求返回记录数上限 |
| `properties` | 最大 200 | 单次请求指定属性数上限 |
| 批量操作 | 100 条/批次 | 大批量操作需分批处理 |

**资料来源：** [connectors/hubspot/src/tools/input-limits.ts]()

### 错误处理

HubSpot 连接器实现了结构化的错误处理机制，针对不同类型的 API 错误返回标准化的错误响应：

```typescript
if (error.statusCode === 404) {
  return {
    error: `${context.feature} not found`,
    errorCode: 'NOT_FOUND',
    suggestion: `Verify the ${context.feature} ID is correct.`
  };
}
```

**资料来源：** [connectors/hubspot/src/tools/marketing-handlers.ts:50-60]()

## Zendesk 连接器

### 功能范围

Zendesk 连接器专注于客服工单管理，提供了完整的工单生命周期管理能力。

### 核心工具

| 工具名称 | 功能描述 | 操作类型 |
|----------|----------|----------|
| `list_zendesk_tickets` | 列出工单，支持状态和分页过滤 | 只读 |
| `get_zendesk_ticket` | 获取单个工单详情 | 只读 |
| `create_zendesk_ticket` | 创建新工单 | 写入 |
| `update_zendesk_ticket` | 更新工单状态、优先级等 | 写入 |
| `list_zendesk_users` | 列出终端用户和支持人员 | 只读 |
| `list_zendesk_macros` | 列出或搜索宏 | 只读 |
| `get_zendesk_macro` | 获取宏详情 | 只读 |
| `apply_zendesk_macro` | 预览并应用宏到工单 | 写入 |

### 配置要求

Zendesk 连接器需要通过 `ZENDESK_CONFIG_PATH` 环境变量指定配置目录，配置目录中需包含 `accounts.json` 文件：

```json
{
  "subdomain": "your-company",
  "email": "admin@example.com",
  "api_token": "your-api-token"
}
```

**资料来源：** [connectors/zendesk/README.md]()

### 常见故障排查

| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 连接器启动失败 | 尚未构建 | 运行 `npm install && npm run build` |
| 认证错误或空结果 | 配置路径错误或凭据无效 | 检查 `ZENDESK_CONFIG_PATH` 和 `accounts.json` |
| MCP 协议问题 | stdio 会话中有 stdout 噪声 | 确保使用 `console.error` 进行日志输出 |

## Freshdesk 连接器

### 功能范围

Freshdesk 连接器提供了工单管理、客户服务和知识库访问能力。

### 核心工具

| 类别 | 工具名称 | 功能描述 |
|------|----------|----------|
| 工单 | `freshdesk_create_ticket` | 创建新客服工单 |
| 工单 | `freshdesk_list_tickets` | 列出工单，支持多种过滤条件 |
| 工单 | `freshdesk_get_ticket` | 获取工单详情 |
| 工单 | `freshdesk_update_ticket` | 更新工单状态或属性 |
| 工单 | `freshdesk_delete_ticket` | 删除工单 |
| 对话 | `freshdesk_create_reply` | 在工单下创建回复 |
| 对话 | `freshdesk_get_conversation` | 获取工单对话历史 |
| 解决方案 | `freshdesk_list_solutions` | 列出知识库文章 |
| 解决方案 | `freshdesk_get_solution` | 获取解决方案详情 |
| 客户 | `freshdesk_get_contact` | 获取客户/联系人信息 |

**资料来源：** [connectors/freshdesk/src/tools/tickets.ts]()

### 数据流示意

```mermaid
graph LR
    A[MCP Host] -->|create_ticket| B[Freshdesk Connector]
    B --> C[Freshdesk REST API]
    C --> D{工单创建成功?}
    D -->|是| E[返回工单 ID]
    D -->|否| F[返回错误信息]
```

## Outreach 连接器

### 功能范围

Outreach 连接器专注于销售外展流程，支持潜在客户管理和序列自动化。

### 核心工具

| 工具名称 | 功能描述 | 操作类型 |
|----------|----------|----------|
| `list_outreach_prospects` | 列出潜在客户 | 只读 |
| `get_outreach_prospect` | 获取潜在客户详情 | 只读 |
| `create_outreach_prospect` | 创建新潜在客户 | 写入 |
| `update_outreach_prospect` | 更新潜在客户信息 | 写入 |
| `list_outreach_sequences` | 列出外展序列 | 只读 |
| `enroll_outreach_sequence` | 将潜在客户加入序列 | 写入 |

**资料来源：** [connectors/outreach/src/tools/prospects.ts]()

## 通用配置模式

### 配置文件结构

CRM 和客服连接器普遍采用基于文件的配置模式：

```
config-directory/
├── accounts.json          # 账户凭据配置
└── credentials/           # 敏感凭据存储
    └── *.token.json       # OAuth 令牌文件
```

### 账户配置文件格式

```json
{
  "subdomain": "平台子域",
  "email": "管理员邮箱",
  "api_token": "API 令牌"
}
```

### 环境变量配置

| 环境变量 | 连接器 | 说明 |
|----------|--------|------|
| `ZENDESK_CONFIG_PATH` | Zendesk | 配置文件目录路径 |
| `MS_CONFIG_DIR` | Microsoft 365 | Microsoft 配置目录 |
| `HUBSPOT_ACCESS_TOKEN` | HubSpot | HubSpot 私有应用访问令牌 |

## 安全最佳实践

### 令牌文件权限

所有包含敏感凭据的文件必须设置严格的文件权限：

- 令牌文件权限：`0600`（仅所有者可读写）
- 配置目录权限：`0700`（仅所有者可访问）

### 云端部署注意事项

在云端部署场景下，建议禁用连接器自身的令牌刷新能力：

```bash
MICROSOFT_DISABLE_REFRESH=1  # Microsoft 连接器
```

这样可以确保桌面会话是唯一的刷新令牌权威，避免单次使用刷新令牌的竞争条件。

**资料来源：** [connectors/microsoft-mail/README.md]()

## 输入验证与故障关闭

根据社区反馈（Issue #67），部分连接器已实现故障关闭（fail-closed）的输入验证机制。这确保了无效输入不会被静默接受并使用默认值，而是会抛出明确的 `McpError(InvalidParams)` 错误。

这种验证机制应用于：
- 必填字段的空值检查
- 必填参数的默认值检测
- 数据类型验证

## 性能优化建议

### 避免 API 限流

1. **合理设置分页大小**：单次请求量不超过平台限制
2. **使用批量工具**：需要处理多条记录时优先使用批量接口
3. **添加请求间隔**：高频操作间添加适当延迟

### 数据量控制

| 连接器 | 单次查询上限 | 建议 |
|--------|-------------|------|
| HubSpot | 100 条/页 | 使用游标分页遍历大结果集 |
| Zendesk | 100 条/页 | 结合时间过滤减少数据量 |
| Freshdesk | 30 条/页 | 使用服务端过滤 |

## 故障排查指南

### 认证失败

1. 验证 `accounts.json` 中的凭据是否正确
2. 检查 API 令牌是否有效且未过期
3. 确认配置文件路径正确设置

### 工具执行失败

1. 检查工具名称拼写是否正确
2. 验证参数类型和必填字段
3. 查看连接器日志确认错误详情

### 数据不同步

1. 确认目标平台的数据更新状态
2. 检查 Webhook 是否正常工作
3. 验证 OAuth 刷新令牌有效性

## 相关连接器

- [Google Workspace 连接器](./google-workspace) — 邮件和日历集成
- [Microsoft 365 Mail 连接器](./microsoft-mail) — Outlook 邮件操作
- [Office 连接器](./office) — 文档处理能力

## 参考资料

- HubSpot API 文档：https://developers.hubspot.com/docs/api/overview
- Zendesk API 文档：https://developer.zendesk.com/api-reference/
- Freshdesk API 文档：https://developers.freshdesk.com/api/
- Outreach API 文档：https://api.outreach.io/api/v2/

---

<!-- evidence_injected: true -->

---

## Doramagic 踩坑日志

项目：mindstone/mcp-servers

摘要：发现 13 个潜在踩坑项，其中 2 个为 high/blocking；最高优先级：安全/权限坑 - 失败模式：security_permissions: ci(pages): release commits to main bypass the catalogue-drift gate。

## 1. 安全/权限坑 · 失败模式：security_permissions: ci(pages): release commits to main bypass the catalogue-drift gate

- 严重度：high
- 证据强度：source_linked
- 发现：Developers should check this security_permissions risk before relying on the project: ci(pages): release commits to main bypass the catalogue-drift gate
- 对用户的影响：Developers may expose sensitive permissions or credentials: ci(pages): release commits to main bypass the catalogue-drift gate
- 建议检查：Before packaging this project, run the relevant install/config/quickstart check for: ci(pages): release commits to main bypass the catalogue-drift gate. Context: Observed when using node
- 防护动作：Do not recommend enabling privileged or credential-bearing paths until the source-backed risk is reviewed: https://github.com/mindstone/mcp-servers/issues/55
- 证据：failure_mode_cluster:github_issue | fmev_666f4299f397eb35a75616d6d577d2f2 | https://github.com/mindstone/mcp-servers/issues/55 | ci(pages): release commits to main bypass the catalogue-drift gate

## 2. 安全/权限坑 · 来源证据：Publish approval: google-workspace v0.1.2

- 严重度：high
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Publish approval: google-workspace v0.1.2
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_cda254fc0c504be3b3868bae771fc8e6 | https://github.com/mindstone/mcp-servers/issues/67 | 来源讨论提到 node 相关条件，需在安装/试用前复核。

## 3. 身份坑 · 仓库名和安装名不一致

- 严重度：medium
- 证据强度：runtime_trace
- 发现：仓库名 `mcp-servers` 与安装入口 `@mindstone/mcp-server-google-workspace` 不完全一致。
- 对用户的影响：用户照着仓库名搜索包或照着包名找仓库时容易走错入口。
- 建议检查：在 npm/PyPI/GitHub 上确认包名映射和官方 README 说明。
- 复现命令：`npx @mindstone/mcp-server-google-workspace`
- 防护动作：页面必须同时展示 repo 名和真实安装入口，避免用户搜索错包。
- 证据：identity.distribution | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | repo=mcp-servers; install=@mindstone/mcp-server-google-workspace

## 4. 安装坑 · 失败模式：installation: Publish approval: google-workspace v0.1.2

- 严重度：medium
- 证据强度：source_linked
- 发现：Developers should check this installation risk before relying on the project: Publish approval: google-workspace v0.1.2
- 对用户的影响：Developers may fail before the first successful local run: Publish approval: google-workspace v0.1.2
- 建议检查：Before packaging this project, run the relevant install/config/quickstart check for: Publish approval: google-workspace v0.1.2. Context: Observed when using node
- 防护动作：State this as source-backed community evidence, not as Doramagic reproduction.
- 证据：failure_mode_cluster:github_issue | fmev_ceadd6904b4ab0cf84ff4f94f1151954 | https://github.com/mindstone/mcp-servers/issues/67 | Publish approval: google-workspace v0.1.2

## 5. 安装坑 · 失败模式：installation: Publish approval: hubspot v0.2.0

- 严重度：medium
- 证据强度：source_linked
- 发现：Developers should check this installation risk before relying on the project: Publish approval: hubspot v0.2.0
- 对用户的影响：Developers may fail before the first successful local run: Publish approval: hubspot v0.2.0
- 建议检查：Before packaging this project, run the relevant install/config/quickstart check for: Publish approval: hubspot v0.2.0. Context: Observed when using node
- 防护动作：State this as source-backed community evidence, not as Doramagic reproduction.
- 证据：failure_mode_cluster:github_issue | fmev_340ebf69d011beb0ee55df9cc658fe46 | https://github.com/mindstone/mcp-servers/issues/63 | Publish approval: hubspot v0.2.0

## 6. 能力坑 · 能力判断依赖假设

- 严重度：medium
- 证据强度：source_linked
- 发现：README/documentation is current enough for a first validation pass.
- 对用户的影响：假设不成立时，用户拿不到承诺的能力。
- 建议检查：将假设转成下游验证清单。
- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。
- 证据：capability.assumptions | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | README/documentation is current enough for a first validation pass.

## 7. 维护坑 · 维护活跃度未知

- 严重度：medium
- 证据强度：source_linked
- 发现：未记录 last_activity_observed。
- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。
- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。
- 证据：evidence.maintainer_signals | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | last_activity_observed missing

## 8. 安全/权限坑 · 下游验证发现风险项

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：下游已经要求复核，不能在页面中弱化。
- 建议检查：进入安全/权限治理复核队列。
- 防护动作：下游风险存在时必须保持 review/recommendation 降级。
- 证据：downstream_validation.risk_items | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | no_demo; severity=medium

## 9. 安全/权限坑 · 存在评分风险

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：风险会影响是否适合普通用户安装。
- 建议检查：把风险写入边界卡，并确认是否需要人工复核。
- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。
- 证据：risks.scoring_risks | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | no_demo; severity=medium

## 10. 安全/权限坑 · 来源证据：Publish approval: hubspot v0.2.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Publish approval: hubspot v0.2.0
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_31605309e751483ebe4289c7e27a9335 | https://github.com/mindstone/mcp-servers/issues/63 | 来源讨论提到 node 相关条件，需在安装/试用前复核。

## 11. 安全/权限坑 · 来源证据：ci(pages): release commits to main bypass the catalogue-drift gate

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：ci(pages): release commits to main bypass the catalogue-drift gate
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_67be881bdf36428099e1bc23b99554c8 | https://github.com/mindstone/mcp-servers/issues/55 | 来源讨论提到 node 相关条件，需在安装/试用前复核。

## 12. 维护坑 · issue/PR 响应质量未知

- 严重度：low
- 证据强度：source_linked
- 发现：issue_or_pr_quality=unknown。
- 对用户的影响：用户无法判断遇到问题后是否有人维护。
- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。
- 防护动作：issue/PR 响应未知时，必须提示维护风险。
- 证据：evidence.maintainer_signals | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | issue_or_pr_quality=unknown

## 13. 维护坑 · 发布节奏不明确

- 严重度：low
- 证据强度：source_linked
- 发现：release_recency=unknown。
- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。
- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。
- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。
- 证据：evidence.maintainer_signals | mcp_registry:io.github.mindstone/mcp-server-google-workspace:0.1.2 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mindstone%2Fmcp-server-google-workspace/versions/0.1.2 | release_recency=unknown

<!-- canonical_name: mindstone/mcp-servers; human_manual_source: deepwiki_human_wiki -->
