内容
# SPE MCP 服务器
[模型上下文协议(MCP)](https://modelcontextprotocol.io/) 的 SharePoint Embedded 服务器。允许任何与 MCP 兼容的 AI 客户端(VS Code Copilot、Claude Desktop、Cursor、Azure Foundry)通过自然语言管理 SPE 资源。
> ⚠️ **预览软件。** 配置 SharePoint Embedded 资源可能会产生 Azure 费用,任何连接的 AI 代理都可以使用您的凭证对您的租户执行操作。请在开始使用之前阅读 **[重要通知](#重要通知)**。
## 文档
- **在 Microsoft Learn 上开始使用:** [SharePoint Embedded MCP 服务器](https://learn.microsoft.com/sharepoint/dev/embedded/getting-started/spe-mcp-server)
- **SharePoint Embedded 产品文档:** <https://learn.microsoft.com/sharepoint/dev/embedded/>
- **在此仓库中:** [可用工具](#可用工具) · [配置](#配置) · [安全控制](docs/SECURITY-CONTROLS.md) · [故障排除](docs/TROUBLESHOOTING.md)
## 可用工具
服务器暴露了 **40 个工具**,以及一个 MCP **提示** (`provision_spe_app`) 和 **资源**(参考架构)。
**配置和状态**
| 工具 | 描述 |
|------|-------------|
| `status_get` | 已登录的身份(Azure CLI)+ 配置准备就绪 |
| `project_app_create` | 创建所有者 Entra 应用程序(通过 az bootstrap token) |
| `project_provision` | 一次调用编排器:应用程序 → 容器类型 →(计费)→ 注册 → 容器 |
| `container_type_create` / `container_type_register` / `container_create` | 单个配置步骤 |
| `container_type_list` / `container_list` / `container_get` / `container_type_get` | 读取操作 |
| `container_type_update` / `container_type_delete` | 更新或删除容器类型 |
| `container_type_grant_owner` / `container_type_revoke_owner` / `container_type_owners_list` | 管理容器类型所有者(beta;启用 PCA 容器创建) |
| `container_type_app_grant_add` / `container_type_app_grant_remove` / `container_type_app_grants_list` | 在容器类型注册上管理应用程序权限授予(授权使用应用程序;v1.0) |
**计费**
| 工具 | 描述 |
|------|-------------|
| `azure_subscriptions_list` / `azure_resource_groups_list` | 选择标准计费的位置(az) |
| `billing_setup` | 注册 Microsoft.Syntex RP + 链接容器类型(标准) |
| `billing_check` | 检查计费分类 / 试用期到期 |
**脚手架、运行和部署**
| 工具 | 描述 |
|------|-------------|
| `project_scaffold` | 实现参考架构(React SPA+Functions,C# web) |
| `project_hydrate_config` | 从配置状态写入 `.env` / `appsettings` / `azure.yaml` |
| `project_seed_sample_data` | 种子样本容器 + 文档(闭环) |
| `project_run_local` | 在本地启动脚手架应用程序 |
| `project_deploy` | 使用 `azd up` 部署到 Azure,返回实时 URL |
**内容平面(可选)和生命周期**
| 工具 | 描述 |
|------|-------------|
| `content_access_grant` / `content_access_revoke` | 选择性文件读取/管理同意 |
| `content_file_upload` / `content_folder_create` / `content_search` / `content_file_preview` / `content_sharing_manage` / `container_permissions_manage` / `container_archive_restore` / `container_delete` | 容器和内容操作 |
| `project_cleanup` | 删除已配置的 CT + 所有者应用程序(确认要求) |
**文档(通过 Microsoft Learn MCP 基础)
| 工具 | 描述 |
|------|-------------|
| `docs_search` | 搜索官方 SPE / Graph 文档(代理 [Microsoft Learn MCP](https://learn.microsoft.com/api/mcp)) |
| `docs_fetch` | 通过 URL 获取完整的 Microsoft Learn 文档页面 |
> 文档工具需要公共 **Microsoft Learn MCP** 服务器(`https://learn.microsoft.com/api/mcp`,无需身份验证)。使用 `SPE_LEARN_MCP_URL` 重写端点(用于测试)。
## 安装
直接从 MCP 客户端使用已发布的 npm 包运行,无需全局安装。
### VS Code / Cursor
在 `.vscode/mcp.json`(VS Code)或 Cursor MCP 配置中添加 MCP 服务器条目:
```json
{
"servers": {
"spe": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp"]
}
}
}
```
### Claude Desktop
添加到 `%APPDATA%\Claude\claude_desktop_config.json`(Windows)或 `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS):
```json
{
"mcpServers": {
"spe": {
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp"]
}
}
}
```
> 引导模式不需要应用特定的环境变量;使用 `az login --allow-no-subscriptions` 登录一次。
### 更新/删除
由于客户端通过 `npx` 运行包,它们会在不进行全局安装的情况下获取已发布的更新。使用 `@microsoft/spe-mcp@0.1.0-alpha.1` 固定特定版本。要删除服务器,请删除 MCP 客户端配置条目。
## 先决条件
- **Node.js** 22, 24 或 26
### 运行模式
**引导模式(默认,建议用于独立 POC)** — 无需 Microsoft 应用程序注册。服务器使用您的 **Azure CLI** 会话进行控制平面操作,并按需配置所有者应用程序。
- 安装 [Azure CLI](https://aka.ms/install-azure-cli)
- 登录一次:`az login --allow-no-subscriptions`(标志对于仅限 M365 的租户无 Azure 订阅是必需的)
- 启动服务器时 **不使用** `--client-id`
> **有条件访问/逐步身份验证(标准计费)。** 标准计费配置执行 Azure 资源管理器(ARM)写入操作 — 注册 `Microsoft.Syntex` 资源提供程序和创建 `Microsoft.Syntex/accounts` 计费账户。如果您的租户有条件访问策略,需要逐步身份验证(MFA / 身份验证上下文)用于 ARM,则 `az` 可能会失败,出现 `InteractionRequired` / `AADSTS50076` / **声明挑战**。MCP 服务器检测到这一点并显示可操作的错误。要满足策略,请在 **您自己的终端中** 以交互方式重新进行身份验证,然后重试:
```bash
az login --scope https://management.core.windows.net//.default --tenant <your-tenant-id>
```
如果交互式浏览器登录仍然无法清除策略(例如身份验证上下文“p1”逐步升级),请通过 **SharePoint 管理中心** 完成逐步升级,然后重试操作。Azure CLI 无法非交互式地兑换声明挑战,因此服务器 **不** 自动执行此步骤(仅检测 + 显示 + 文档)。
**预配置应用模式(后兼容)** — 传递现有的公共客户端 Entra 应用程序,该应用程序已经具有这些管理员同意的委托权限:
- `FileStorageContainer.Selected`
- `FileStorageContainerType.Manage.All`
- `FileStorageContainerTypeReg.Manage.All`
> 没有应用程序?在 [Azure 门户](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade) 中手动创建一个。应用程序必须是 **公共客户端**(`isFallbackPublicClient: true`),并将 `http://localhost` 作为重定向 URI。
## 快速入门(从源代码)
```bash
# 1. 安装依赖项
npm install
# 2. 构建
npm run build
# 3a. 引导模式 — 只需登录 Azure CLI(无需应用程序)
az login --allow-no-subscriptions
npx @modelcontextprotocol/inspector node dist/cli.js start
# 3b. 或预配置应用程序模式 — 身份验证为现有应用程序(一次)
node dist/cli.js auth --client-id YOUR_CLIENT_ID --tenant-id YOUR_TENANT_ID
# 4. 使用 MCP Inspector 测试
npx @modelcontextprotocol/inspector node dist/cli.js start
```
步骤 4,在 Inspector UI 中设置这些 **环境变量**:
- `SPE_CLIENT_ID` = 您的客户端 ID
- `SPE_TENANT_ID` = 您的租户 ID
## 配置
服务器通过 CLI 标志或环境变量接受配置:
| CLI 标志 | 环境变量 | 描述 |
|----------|---------|-------------|
| `--client-id` | `SPE_CLIENT_ID` | Entra ID 应用程序(客户端)ID |
| `--tenant-id` | `SPE_TENANT_ID` | Entra ID 租户 ID |
| `--read-only` | `SPE_READ_ONLY` | 广告/允许仅读取/列出/获取/搜索工具;拒绝变异调用 |
| `--tools` | `SPE_TOOLS` | 限制公开的工具到配置文件(`readOnly`,`docsOnly`,`provisioning`,`content`,`admin`)或逗号分隔的工具列表 |
| `--data-dir` | `SPE_DATA_DIR` | 用于令牌缓存 + 配置状态的目录(默认 `~/.spe-mcp`)。指向每个实例的唯一 **绝对** 路径(或 `~/...`;拒绝 CWD 相对路径)以运行多个服务器而不会破坏状态 |
| _(无)_ | `SPE_MCP_COLLECT_TELEMETRY` | 产品 `User-Agent` 属性标记,用于出站 Graph/ARM 请求。默认开启;设置为 `false` 以退出(参见 [PRIVACY.md](PRIVACY.md)) |
> CLI 标志优先于标志和 env var 均设置时。运行 `spe-mcp start --help` 以查看权威选项列表和描述。
>
> `--read-only` 和 `--tools` 行为是服务器的文档化安全模型的一部分 - 参见 [docs/SECURITY-CONTROLS.md](docs/SECURITY-CONTROLS.md) 以获取完整的源代码中使用的安全控制代码图例。
有关故障排除,请参见 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)。
## 与 VS Code 结合使用
在工作区中的 `.vscode/mcp.json` 中添加 MCP 服务器条目:
```json
{
"servers": {
"spe": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp"],
"env": {
"SPE_CLIENT_ID": "your-client-id",
"SPE_TENANT_ID": "your-tenant-id"
}
}
}
}
```
然后在 Copilot Chat 中询问:
- *"列出我的 SPE 容器类型"*
- *"为应用 ID abc-123 创建一个名为 Contoso Docs 的试用容器类型"*
要将 MCP 客户端指向本地源构建:
```json
{
"servers": {
"spe": {
"type": "stdio",
"command": "node",
"args": ["<path-to>\\mcp-server\\dist\\cli.js", "start"],
"env": {
"SPE_CLIENT_ID": "your-client-id",
"SPE_TENANT_ID": "your-tenant-id"
}
}
}
}
```
> **`npx -y`** 抑制安装提示,以便 VS Code 可以非交互式地启动服务器。引导模式不需要应用程序,因此您可以删除 `env` 块并仅 `az login --allow-no-subscriptions`。
## 与 Claude Desktop 结合使用
添加到 `%APPDATA%\Claude\claude_desktop_config.json`(Windows)或 `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS):
```json
{
"mcpServers": {
"spe": {
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp"],
"env": {
"SPE_CLIENT_ID": "your-client-id",
"SPE_TENANT_ID": "your-tenant-id"
}
}
}
}
```
## CLI 命令
```bash
# 启动 MCP 服务器(stdio 传输)
spe-mcp start [--client-id ID] [--tenant-id ID] [--read-only] [--tools <profileOrCsv>]
# 交互式身份验证(缓存令牌以无头使用)
spe-mcp auth --client-id ID --tenant-id ID [--reset]
# 清除缓存的令牌
spe-mcp logout
```
每个命令都有内置帮助 - 运行 `spe-mcp <command> --help`(例如 `spe-mcp start --help`)以获取完整的标志列表和描述。`start` 标志:
| 标志 | 描述 |
|------|-------------|
| `--client-id <id>` | 所属 Entra 应用程序客户端 ID。省略以引导模式运行(Azure CLI 控制平面)。 |
| `--tenant-id <id>` | Entra ID 租户 ID。当省略时,从 Azure CLI 发现。 |
| `--read-only` | 只读模式:仅公开和可调用的读取/列出/获取/搜索工具。 |
| `--tools <profileOrCsv>` | 工具允许列表:配置文件(`readOnly`,`docsOnly`,`provisioning`,`content`,`admin`)或逗号分隔的工具名称列表。 |
## 身份验证
服务器使用 [MSAL](https://learn.microsoft.com/en-us/entra/identity-platform/msal-overview) 及其身份验证瀑布:
1. **无声** - 使用 `~/.spe-mcp/token-cache.<tenantId>.<clientId>.json` 中的缓存令牌
2. **交互式浏览器** - 打开浏览器进行 PKCE 登录。这 **默认在进程中运行**,即使服务器通过 stdio 由 MCP 客户端启动 - 因此,第一个 SharePoint Embedded 调用会打开浏览器进行一次性同意并实时缓存令牌(无终端,无重启)。
3. **设备代码** - 打印 URL + 代码到 stderr;仅在终端(TTY)附加以查看代码时使用。设备代码有效期约为 15 分钟(Azure AD 生命周期);服务器等待最多该长时间以完成登录并且 **永远不会取消仍然有效的代码**。
对于大多数开发人员,不需要额外的操作:使用 `project_app_create` 工具创建所属应用程序,然后第一个 SPE 调用会自动提示浏览器同意。
**自动化 / 无头**:在 CI (`CI=true`) 或 Linux 无显示/ `DISPLAY`/`WAYLAND_DISPLAY` 环境中,交互式登录默认禁用,因此工具调用永远不会无声阻塞在浏览器上无法打开的提示符。默认仅限于显式覆盖:
| 变量 | 效果 |
| --- | --- |
| `SPE_INTERACTIVE=1` | 强制交互式登录 **开启**(浏览器 + 设备代码备用),即使环境看起来是无头的。 |
| `SPE_NON_INTERACTIVE=1` | 强制交互式登录 **关闭**;SPE 调用失败并返回清晰的“登录首先”的错误而不是挂起。 |
**为什么本地支持交互式(并且默认开启)。** 构建 SPE 应用程序的开发人员受益于一次性浏览器同意:它在第一个 SPE 调用时缓存令牌实时 - 无需单独的终端步骤,无需重启。自动化获得相反的默认值(关闭),因为没有人类完成浏览器流程。
**编排器 / 从属代理 / 代理团队场景。** 当 MCP 服务器通过 stdio 运行并由 **调用** 代理(编排器生成从属代理)时,从属代理的终端通常 **不可见** 调用者。因此,设备代码提示符打印到 **stderr**,调用代理通常无法看到 - 因此设备代码等待会隐形阻塞。为了避免这种情况,建议的模式:
1. **预身份验证启动服务器。** 对于引导 / 控制平面令牌,运行 `az login`(`--allow-no-subscriptions` M365 租户)。对于所属应用程序令牌,在可见终端中交互式登录一次:`spe-mcp auth --client-id <appId> --tenant-id <tenantId>`。
2. **启动服务器后重新启动**,以便从新缓存的令牌重新初始化身份验证(启动身份验证被印章用于会话),然后让代理驱动工具调用。
这使得从属代理不会阻塞:它们要么使用预缓存的令牌静默返回清晰的“登录首先”的错误。
### 令牌存储
令牌缓存在 **数据目录**(默认 `~/.spe-mcp/`,或 `--data-dir` / `SPE_DATA_DIR` 覆盖)中的每个身份的文件名为 `token-cache.<tenantId>.<clientId>.json`(旧的 `token-cache.json` 也可能存在)。每个文件包含 MSAL 的序列化令牌缓存(刷新令牌,帐户信息)。在 macOS/Linux 上,缓存目录创建 `0700`,缓存文件 `0600`(仅所有者读/写),服务器如果目录是符号链接、由其他用户拥有或具有组/其他可访问性,则失败关闭。Windows 文件夹保护用户配置文件 ACL(非配置文件 `--data-dir` 覆盖给定 DACL,或拒绝)。 ```jsonc
// .vscode/mcp.json - 两个隔离实例
{
"servers": {
"spe-tenantA": {
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp", "start"],
"env": { "SPE_DATA_DIR": "~/.spe-mcp-tenantA", "SPE_TENANT_ID": "<tenant-A>" }
},
"spe-tenantB": {
"command": "npx",
"args": ["-y", "@microsoft/spe-mcp", "start"],
"env": { "SPE_DATA_DIR": "~/.spe-mcp-tenantB", "SPE_TENANT_ID": "<tenant-B>" }
}
}
```
路径必须 **绝对** (`~/` 的前导字符会扩展到您的主目录);CWD 相对路径被拒绝,因此无法将凭据写入工作目录。相同的令牌缓存值必须用于给定实例的 `start`、`auth` 和 `logout`;设置一次 `SPE_DATA_DIR`(如上所示),这三个命令都同意。
### 完全本地身份验证重置
如果您想要一个完全干净的本地身份验证/配置状态(令牌 + Azure CLI 会话 + 记住的拥有应用/租户),请运行:
```powershell
npx spe-mcp logout
az logout
Remove-Item "$HOME/.spe-mcp/state.json" -Force -ErrorAction SilentlyContinue
```
`spe-mcp logout` 清除 MSAL 令牌缓存文件,而 `state.json` 存储用于在启动时初始化身份验证的持久化配置元数据。
> **待办事项:** 通过 [keytar](https://github.com/nicktrav/keytar) 添加操作系统密钥链支持,作为主要缓存,并在失败时回退到文件缓存。Keytar 提供操作系统管理的加密(Windows Credential Manager / macOS Keychain / Linux Secret Service),但在初始测试期间遇到 MSAL 多范围缓存的数据大小限制。
## 架构
```
src/
├── index.ts — MCP 服务器:工具注册、调度、传输、提示/资源连接
├── cli.ts — CLI 入口点(启动、身份验证、注销)
├── auth.ts — MSAL 身份验证(静默 → 浏览器 → 设备代码)
├── bootstrap.ts — Azure CLI 初始化(已登录身份,az token)
├── azure-cli.ts — az 调用(订阅、资源组、RP 注册)
├── graph-client.ts — 带有重试 + 身份验证的 Microsoft Graph 客户端
├── docs-client.ts — Microsoft Learn MCP 代理(docs_search / docs_fetch)
├── container-retry.ts — 注册传播延迟的重试助手
├── validation.ts — 共享输入验证
├── state.ts — 配置状态持久性
├── prompts.ts — MCP 提示(provision_spe_app)
├── resources.ts — MCP 资源(参考架构)
├── reference-architectures.ts — 参考架构目录(读取 ../samples/)
├── elicitation.ts — 交互式同意 / 逐步提示
├── user-agent.ts — 产品用户代理令牌 + SPE_MCP_COLLECT_TELEMETRY 退出
├── types.ts — 共享 TypeScript 类型
└── tools/ — 28 个模块中的 31 个工具(每个导出一个 McpTool)
├── status.ts — status_get
├── create-app.ts / provision.ts — project_app_create, project_provision
├── create-container-type.ts / register-container-type.ts / list-container-types.ts
├── create-container.ts / list-containers.ts / get-container.ts
├── manage-permissions.ts / archive-restore.ts / delete-container.ts
├── upload-file.ts / create-folder.ts / search-content.ts / preview-file.ts / manage-sharing.ts
├── content-access.ts — content_access_grant / content_access_revoke (+ withContentAccess 门控)
├── check-billing.ts / setup-billing.ts / list-azure.ts
├── scaffold.ts / hydrate-config.ts / seed-sample-data.ts / run-local.ts / deploy-azure.ts
├── cleanup.ts — project_cleanup
└── search-docs.ts — docs_search / docs_fetch
```
> 单元/集成测试与模块一起位于 `*.test.ts`(使用 `npm test` 运行)。
架构亮点:
- 传输在身份验证之前连接(MCP 握手从未阻塞)
- 身份验证在后台初始化;如果启动身份验证失败,则在第一个工具调用时重试
- 工具是 `{ name, description, inputSchema, handler }` — ListTools 剥离处理程序进行序列化
- 内容平面工具使用 `withContentAccess(...)` 包装,以便在选择加入同意后保持门控
## 添加新工具
1. 创建 `src/tools/your-tool.ts`。以分组的蛇形命名法命名工具(`<domain>_<action>`,例如 `container_get`、`content_file_upload`):
```typescript
import type { McpTool } from "../types.js";
export const yourTool: McpTool = {
name: "container_example_action",
description: "工具的作用",
inputSchema: {
type: "object",
properties: {
param: { type: "string", description: "..." },
},
required: ["param"],
},
handler: async (args) => {
// 调用 graph-client 函数
return {
content: [{ type: "text", text: "result" }],
};
},
};
```
2. 将 Graph API 调用添加到 `src/graph-client.ts`(或 `azure-cli.ts` 用于 `az` 支持的工具)
3. 导入工具并将其添加到 `src/index.ts` 中的 `TOOLS` 数组。如果它读取或写入容器内容,请使用 `withContentAccess(...)` 包装它,以尊重内容平面选择加入门控。
4. 重建:`npm run build`
## 测试
```bash
npm test # vitest 单元/集成测试(工具逻辑,模拟 I/O)
npm run lint # eslint
npm run typecheck # tsc --noEmit
npm run ci # typecheck + test + build(CI 运行的内容)
```
Vitest 在监视模式下运行,使用 `npm run test:watch`,在调试器旁边非常方便(见下文)。`npm run build:watch` 在保存时重新编译。
## 调试
服务器是一个 **stdio MCP 服务器**:其入口点是 `dist/cli.js start`(`spe-mcp` 二进制文件),其 stdout 携带 MCP JSON-RPC 流,而所有日志/诊断信息都发送到 stderr。TypeScript 编译为 `sourceMap: true`,因此 `.js.map` 文件与构建一起发布,`src/*.ts` 中的断点直接映射到正在运行的 `dist/*.js`。
**1. 构建首先**,以便存在源映射:
```bash
npm run build
```
**2. VS Code — 在调试器下启动服务器(和测试)。** 添加一个 `.vscode/launch.json`:
```json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "调试 SPE MCP 服务器",
"program": "${workspaceFolder}/dist/cli.js",
"args": ["start"],
"console": "integratedTerminal",
"sourceMaps": true,
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
},
{
"type": "node",
"request": "launch",
"name": "调试 vitest",
"program": "${workspaceFolder}/node_modules/vitest/vitest.mjs",
"args": ["run"],
"console": "integratedTerminal",
"sourceMaps": true
}
]
}
```
在 `src/` 中设置断点(例如,工具处理程序、`index.ts` 中的 `dispatch` 或 `startServer` 中的 `catch`),然后按 **F5**。 “调试 SPE MCP 服务器” 配置启动一个引导模式会话(首先使用 `az login --allow-no-subscriptions` 登录);在 `args` 中传递 `--client-id`/`--tenant-id` 以进行预配置的应用模式。
**3. 使用 `--inspect` 附加(CLI、Chrome DevTools 或当 MCP 客户端启动服务器时)。** 在第一行暂停,以便您可以在启动运行之前附加:
```bash
node --inspect-brk dist/cli.js start
```
然后从 VS Code (**Attach to Node Process**) 或打开 `chrome://inspect` 附加。因为日志在 stderr 上,所以检查员横幅和服务器日志永远不会破坏 stdout 上的 JSON-RPC 流。您还可以在调试器下使用 MCP 检查器以交互方式运行服务器:
```bash
npx @modelcontextprotocol/inspector node dist/cli.js start
```
当故障出现时,会显示一个 `correlationId`,请在服务器的 stderr 中 grep 该 id 以查找匹配的 `Tool error (<id>)` 日志行 — 请参阅 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md#correlation-ids).
## 贡献
该项目欢迎贡献和建议。有关详细信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。大多数贡献需要您同意贡献者许可协议(CLA);有关详细信息,请访问 <https://cla.opensource.microsoft.com>。
该项目已采用 [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)。有关更多信息,请参阅 [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 或联系 [opencode@microsoft.com](mailto:opencode@microsoft.com),提出其他问题或评论。
## 安全
微软非常重视安全。如果您认为您已经发现了一个安全漏洞,请按照 [SECURITY.md](SECURITY.md) 中描述的私密方式报告 — **不要** 提交公共 GitHub 问题。
## 重要通知
该项目的特定于 MCP 的通知和免责声明在 [NOTICE.md](NOTICE.md) 中汇总;关键点如下所述。
> **预览软件。** `@microsoft/spe-mcp` 是为评估和反馈而发布的早期(alpha)预览版。它按原样提供,不提供任何类型的保证;请参阅 [MIT License](LICENSE)。工具名称、选项和行为可能会在没有通知的情况下更改。微软不承担因使用、滥用或错误配置此软件而产生的任何损害的责任。
### 自主和代理调用的操作
此服务器公开了可在您的 Microsoft Entra 租户和 Azure 订阅中 **创建、修改和删除实际资源** 的工具 — 例如,应用程序注册、SharePoint Embedded 容器类型、容器及其内容。任何连接的 MCP 客户端,**包括自主 AI 代理**,都可以代表您调用这些工具,您需要对使用您的凭证采取的行动负责。为了保持控制:
- **审查每个操作。** 状态更改工具在运行前需要明确确认(`confirm: true`)— 破坏性操作确认门控(**SAFE-002**)。
- **探索只读操作。** 以 `--read-only`(或 `SPE_READ_ONLY`)启动服务器,以仅宣传和允许只读工具(**SAFE-003**)。
- **限制范围。** 使用 `--tools` 允许列表/配置文件(或 `SPE_TOOLS`)仅公开您需要的工具(**SAFE-004**)。
有关完整的安全措施列表,请参阅 [docs/SECURITY-CONTROLS.md](docs/SECURITY-CONTROLS.md)。
### 成本和计费
SharePoint Embedded 是一项 **计费服务**(标准计费通过 Azure 订阅中的 `Microsoft.Syntex` 资源提供商注册)。使用此工具 **可能会产生您连接的订阅费用**。提供一个用于评估的免费 **试用** 容器类型。您负责在您的租户和订阅中产生的任何费用。
### 数据、隐私和遥测
服务器 **本地运行**,通过 stdio 与您的 MCP 客户端通信。它 **验证您自己的租户** 并代表您调用 Microsoft 第一方端点 — Microsoft Graph 和 Azure Resource Manager — **您的租户/订阅中** 的内容和目录数据仅在您的机器、MCP 客户端和 Microsoft 服务之间流动。
服务器 **不打开单独的遥测通道**,也不向 Microsoft 发送 **使用分析数据**。出站 Graph/ARM 请求带有静态产品 `User-Agent`(`spe-mcp-server/<version>`),**不包含个人、租户或使用数据**,仅用于聚合流量归因。该归因令牌 **默认启用**,可以使用 `SPE_MCP_COLLECT_TELEMETRY=false` 禁用(请参见下面的 **遥测配置**)。身份验证令牌使用所有者权限本地缓存(**SEC-003**)。有关详细信息,请参阅 [PRIVACY.md](PRIVACY.md) 和 [docs/DATA-FLOW.md](docs/DATA-FLOW.md);Microsoft 处理您发送到其在线服务的数据的方式在 [Microsoft Privacy Statement](https://privacy.microsoft.com/privacystatement) 中有描述。
**数据收集(标准 Microsoft 通知)。** 软件可能会收集有关您和使用软件的信息,并将其发送到 Microsoft;Microsoft 可能会使用这些信息提供和改进产品和服务,而您使用软件被视为您同意这些做法(完整文本见 [NOTICE.md](NOTICE.md#data-collection))。**此版本不打开使用分析通道** — 唯一的 Microsoft 绑定信号是上述产品 `User-Agent` 归因令牌,您可以使用 `SPE_MCP_COLLECT_TELEMETRY=false` 关闭它。
**遥测配置。** 归因由环境变量 `SPE_MCP_COLLECT_TELEMETRY` 控制,**默认启用**。发出的唯一遥测数据是出站 Graph/ARM 请求上的静态产品 `User-Agent` 令牌(聚合流量归因 — 无使用分析,无个人/租户/每用户数据)。将 `SPE_MCP_COLLECT_TELEMETRY=false` 设置为从所有出站请求中省略令牌;然后,这些请求将回退到底层工具的默认 `User-Agent`(`az`/`azd` 的 Azure CLI 令牌;直接 Graph 调用为 Node 运行时默认值)。
### 数据驻留和 EU 数据边界
此工具 **不进行独立的跨区域处理**,也不存储自己的客户内容。因为它调用您自己的租户的 Microsoft Graph 和 Azure 端点,所以数据位置、驻留和 **EU Data Boundary (EUDB)** 承诺遵循底层 Microsoft Online Services 和您的租户配置 — 而不是此工具。唯一的额外端点是只读、公共 [Microsoft Learn MCP](https://learn.microsoft.com/api/mcp) 文档服务(无身份验证,无客户数据;主机按 **SEC-007** 验证),可以通过 `--tools` 禁用它。所有出站调用都针对 Microsoft 运营的服务;服务器 **不联系任何非 Microsoft 服务**。
### 合规责任
此 MCP 服务器可能与 Microsoft 合规边界之外的客户端和服务交互 — 特别是,您选择连接它的第三方 MCP 客户端、主机或代理。您负责确保任何集成符合适用的组织、监管和合同要求。
### 第三方组件
此 MCP 服务器可能使用或依赖第三方组件,例如第三方 MCP 客户端、主机、代理、AI 应用程序和/或模型。您负责审查和遵守任何第三方组件的许可证,并检查任何第三方组件的安全性。此服务器直接依赖的开源库在 [THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES) 中公开。
### 出口管制
使用此软件必须遵守所有适用的出口法律和法规,包括美国出口管理条例和本地司法管辖区的相关要求。
### 产品条款
通过此工具访问的 SharePoint Embedded、Microsoft Graph 和其他 Microsoft Online Services 均 **单独许可**,其使用受您获得它们的协议管辖 — 包括 [Microsoft Product Terms](https://www.microsoft.com/licensing/terms/) 和 [Microsoft Products and Services Data Protection Addendum (DPA)](https://www.microsoft.com/licensing/docs/view/Microsoft-Products-and-Services-Data-Protection-Addendum-DPA)。此开源工具授予任何 Microsoft Online Service 的权利,不修改这些条款。更一般地,此服务器可能会提供对底层资源 — 工具、服务和/或数据 — 的访问,而您对通过此服务器访问的任何此类底层资源的使用受其自身的许可条款管辖。
## 商标
此项目可能包含项目、产品或服务的商标或徽标。授权使用 Microsoft 商標或徽标须遵守并必须遵循 [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general)。在修改版本的此项目中使用 Microsoft 商標或徽标不得造成混淆或暗示 Microsoft 赞助。任何第三方商標或徽标的使用须遵守第三方政策。
## 许可证
在 [MIT License](LICENSE) 下许可。
连接信息
猜你喜欢
暂无推荐服务器