# @centrali-io/centrali-mcp 中文文档

规范地址：https://npmcn.com/package/%40centrali-io/centrali-mcp/

版本：9\.10\.0
npm 元数据更新时间：2026-11-09T04:34:50.767Z
中文译文更新时间：2026-11-09T12:58:02.149Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40centrali-io/centrali-mcp
原文对照：https://npmcn.com/package/%40centrali-io/centrali-mcp/?lang=original
项目主页：https://github.com/blueinit/centrali-mcp#readme
源码仓库：https://github.com/blueinit/centrali-mcp

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：988 kB，61 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-02-17T06:43:23.630Z
- 最新版本发布：2026-11-09T04:34:50.591Z
- 近 30 天下载量：2683（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：129（近 12 个月 129 个）

## 中文简介

Centri MCP( 中央中心) 服务器 - Centrali 工作空间的 AI 助理集成

## 安装

```sh
npm install @centrali-io/centrali-mcp
```

也可以使用：`pnpm add @centrali-io/centrali-mcp`、`yarn add @centrali-io/centrali-mcp`、`bun add @centrali-io/centrali-mcp`

## README

# @ centrali-io/ centrali- mcp

Centrali平台的MCP(模式上下文协议)服务器. 让AI助手(Claude,Cursor等)与Centri工作空间互动——查询数据,管理记录,搜索,触发函数,检查执行结果,构建管弦乐,等等.

> **完整文档:** [(原始内容存档于2018-09-29) (英语). docs.centeri.io](https://docs.centrali.io/) ——SDK向导,API参考,计算函数,管弦乐等等.

## 文件上传

提供主机和Stdio服务器 `upload_file`。它上传一个独立的存储器 通过现有的SDK和存储 API,使用认证的工作空间 及其现有的文件夹权限。 节点(Node.js 22)或更新的需要为stdio.

```json
{
  "filename": "hello.txt",
  "contentType": "text/plain",
  "contentEncoding": "utf8",
  "content": "Hello from MCP"
}
```

用于二进制文件 `contentEncoding: "base64"` 以警犬加固基座64 (没有数据 URL 前缀或白空). 解码限制是 **256基贝**,包括: 文本的 UTF-8 字节长度 。 支持空文件 。 连载 `content` JSON弦还有一个 **768 基贝** 所以JSON离开 空间在 主机服务器的 1 MB 请求限制 。 对于重逃的文本( 如控件) 字符),将准确的UTF-8字节编码为base64. `location` 默认为 `/root/shared`; 自定义文件夹 必须已经存在。 文件是私有的,除非 `isPublic: true` 明确设置. 公共上传只允许 PNG, JPEG, GIF, WebP, 纯文本, JSON, MPEG/OGG/ WAV 音频,以及MP4/WebM视频MIME类型. HTML、SVG、XML 和其他活动文档 类型不能通过此工具公开, 因为存储服务 在 API 来源上提供了 MIME 类型 。 私人上传保留支持 用于任意的 MIME 类型。 SDK 前缀在工作空间中存储文件名 和时间戳.

结果包含 `renderId`, (中文(简体) ), `sizeBytes`, (中文(简体) ), `contentType`, (中文(简体) ), `isPublic`, (中文(简体) ), `renderUrl` 财务报告和审定财务报表 `downloadUrl`。私人 URL 仍然需要正常的认证。 附上 返回时使用单独的记录更新渲染 ID; 附件失败离开 存储中上传的文件。 重复上传可以创建另一个文件.

该工具接受客户端提供的内容. 它不能读取本地路径, 获取源代码 URL,或访问隐藏的聊天附件/生成的图像 主持人。 永远不要通过模型复制重建图像字节. 更大的文件 比起256 KiB,必须使用现有的SDK/HTTP多段上传API.

## 连接选项

### 备选案文1:主机MCP服务器(建议)

将任何AI客户端连接到Centrali的最简单方式. 添加一个单一的URL——认证通过OAuth在浏览器中发生.

**Claude桌面 / Claude 代码/ 光标 :**

```json
{
  "mcpServers": {
    "centrali": {
      "type": "url",
      "url": "https://mcp.centrali.io"
    }
  }
}
```

首先使用时,您的AI客户端打开浏览器进行登录和工作空间选择. 不需要客户身份 秘密或工作空间的子弹.

### 备选案文2:带有服务账户的系统(CI/自动化)

对于无头环境(CI管线,自动化脚本,cron jobs),浏览器无法登录. 使用有RBAC权限的服务账户证书.

```json
{
  "mcpServers": {
    "centrali": {
      "command": "npx",
      "args": ["@centrali-io/centrali-mcp"],
      "env": {
        "CENTRALI_URL": "https://centrali.io",
        "CENTRALI_CLIENT_ID": "<service-account-client-id>",
        "CENTRALI_CLIENT_SECRET": "<service-account-secret>",
        "CENTRALI_WORKSPACE": "my-workspace"
      }
    }
  }
}
```

### 从 OAuth stdio 迁移到主机

如果你之前使用过 `CENTRALI_OAUTH_CLIENT_ID` 与 stdio 软件包一起,切换到主机 URL :

1.  删除旧的 `command`编号 :`args`编号 :`env` 配置
2.  替换为: `{ "type": "url", "url": "https://mcp.centrali.io" }`
3.  下次连接时, 在浏览器中认证

### 环境变量(仅限astio模式)

| 变量 | 需求 | 说明 |
| --- | --- | --- |
| `CENTRALI_URL` | 对 | 中央实例 URL( 例如 ), `https://centrali.io`(中文(简体) ) |
| `CENTRALI_WORKSPACE` | 对 | 要操作的工作空间弹片 |
| `CENTRALI_CLIENT_ID` | 对 | 服务账户客户端ID |
| `CENTRALI_CLIENT_SECRET` | 对 | 服务账户客户端秘密 |

### 服务账户权限

新创建的服务账户 **默认没有权限**。在 MCP 服务器做任何有用的事情之前, 您必须指定它的角色, 否则每个工具呼叫都会返回 `403 Forbidden`。 。 。 .

**最快的设置——全管理员访问:**

1.  在指挥台,去 **设置 > 服务账户**
2.  创建您的服务账户并保存客户端秘密
3.  打开服务账户,转到 **组** 选项卡
4.  把它加进 **工作空间( a)** 组

**最低特权设置:** 创建自定义组,其策略范围设定为您需要的资源 。 见 [政策和权限指南](https://docs.centrali.io/authentication/policies-and-permissions/) 详细情况.

## 开始

连接后, 拨打 `describe_centrali` 首先——它返回全能映射,特征矩阵,和SDK集成指导. 然后使用特定 `describe_*` 用于任何域的更深层次计划细节的工具.

## 可用工具

### 发现(先叫这些)

| 工具 | 说明 |
| --- | --- |
| `describe_centrali` | 平台概览、特征矩阵、SDK整合指导以及所有工具清单 |
| `describe_collections` | 收集的图表参考(数据模型、字段类型、限制) |
| `describe_records` | 记录操作( 过滤、 排序、 pagination、 扩展) 的 Schema 引用 |
| `describe_compute` | 计算函数引用( 输入合同、 秘密、 自动执行、 api 对象) |
| `describe_saved_queries` | 保存-query 计划参考(参数化查询,变量) |
| `describe_orchestrations` | 管弦参考(多步工作流程,加密参数) |
| `describe_insights` | 反常的见解参考 |
| `describe_validation` | 数据验证参考 |
| `describe_auth_providers` | Auth 提供者参考( BYOT 设置, 索赔映射) |
| `describe_service_accounts` | 服务账户和 IAM 参考( SA 设置、 角色、 组、 权限) |
| `describe_webhooks` | 输出的 webhook 引用( 订阅形状、 签名、 重试/ 重放) |

### 收款

| 工具 | 说明 |
| --- | --- |
| `list_collections` | 列出工作空间中的所有数据收集( chemas) |
| `get_collection` | 用有记录的弹簧来收集完整的计划 |
| `create_collection` | 创建带有输入属性的新收藏 |
| `update_collection` | 更新现有收藏 |
| `delete_collection` | 删除收藏及其所有记录 |

### 记录

| 工具 | 说明 |
| --- | --- |
| `query_records` | 使用cononic Central查询语言(POST /records/query)查询记录. 接受一个 `QueryDefinition` 体 (单位:千人)`where`, (中文(简体) ), `text`, (中文(简体) ), `sort`, (中文(简体) ), `page`, (中文(简体) ), `select`) (中文(简体) ). |
| `get_record` | 通过身份识别获得单一记录 |
| `get_records_by_ids` | 用身份证获取多个记录 |
| `create_record` | 创建新记录 |
| `update_record` | 更新现有记录 |
| `upsert_record` | 创建或更新记录 |
| `delete_record` | 软或硬删除记录 |
| `restore_record` | 恢复软删除记录 |

### 计算

| 工具 | 说明 |
| --- | --- |
| `list_functions` | 列出计算函数 |
| `get_function` | 通过 ID 获得一个函数( 包括代码) |
| `create_function` | 创建新的计算函数 |
| `update_function` | 更新函数( 代码、 名称、 超时) |
| `delete_function` | 删除计算函数 |
| `test_function` | 在不保存的情况下测试执行代码 |
| `list_triggers` | 列表函数触发器( 点名、 事件驱动、 排程、 http- 触发) |
| `get_trigger` | 用ID来触发 |
| `create_trigger` | 创建新触发 |
| `update_trigger` | 更新触发器 |
| `delete_trigger` | 删除触发器 |
| `invoke_trigger` | 启动一个点播触发器(返回工作ID-async) |
| `pause_trigger` | 暂停触发 |
| `resume_trigger` | 恢复暂停触发 |
| `test_send_trigger` | 通过 http-trigger 真实的校验/发送路径发送已签名的合成测试事件 |
| `get_function_run` | 通过运行 ID( 状态、 输出、 错误) 获取执行结果 |
| `list_function_runs` | 列表运行于触发或函数 ID( 执行历史) |
| `get_compute_job_status` | 通过工作标识( 引用后翻转) 检查 async 工作状态 |
| `list_allowed_domains` | 列出出入境的允许域 HTTP |
| `add_allowed_domain` | 在允许列表中添加一个域 |
| `invoke_endpoint` | 按路径调用同步计算结束点( 返回响应内含) |
| `remove_allowed_domain` | 从允许列表中删除一个域 |

### 已保存的查询

已保存的查询存储库 `QueryDefinition` 加可选变量和可选多集 `joins[]` 条款.

| 工具 | 说明 |
| --- | --- |
| `list_saved_queries` | 列表保存的查询, 可选择通过收藏 |
| `get_saved_query` | 用 ID 获取已保存的查询 |
| `create_saved_query` | 创建可重复使用的参数化查询( 名称正文) |
| `update_saved_query` | 更新已保存的查询( 分类正文) |
| `delete_saved_query` | 删除已保存的查询 |
| `execute_saved_query` | 执行带有可选变量的已保存查询 |
| `test_saved_query` | 在不保存的情况下测试条形查询定义 |

**已键入参数发现 ~ 执行.** 使用已键入参数编写的已保存的查询通过参数形状曝光 `describe_saved_queries` (schema参考)和 `get_saved_query` 编号 : `list_saved_queries` (逐行数) `variables` 声明)。 预期发现时执行流量 :

1.  **发现计划** (一发 `describe_saved_queries` 返回时 `QueryVariableDefinition` 形状( e)`type`, (中文(简体) ), `required?`, (中文(简体) ), `default?`, (中文(简体) ), `description?`和受支助者 `VariableType` 工会`string` | `number` | `boolean` | `datetime` | `id` | `{ array: T }` | `{ reference: collectionSlug }`) (中文(简体) ).
2.  **发现查询** —— 说 `get_saved_query` 返回包含 `variables`。读取每个条目以学习什么是束缚。 犬类反应包括: `queryDefinition.resource` (总是等于行 `recordSlug`:
    
    ```json
    {
      "id": "…",
      "name": "Monthly revenue",
      "recordSlug": "orders",
      "queryDefinition": {
        "resource": "orders",
        "where": { "and": [
          { "data.month": { "eq": "${month}" } },
          { "data.region": { "eq": "${region}" } }
        ]},
        "sort": [{ "field": "data.amount", "direction": "desc" }],
        "page": { "limit": 100 }
      },
      "variables": {
        "month":  { "type": "datetime", "required": true, "description": "Month bucket (UTC)" },
        "region": { "type": "string",   "required": true }
      }
    }
    ```
    
3.  **已执行** - 通过 `execute_saved_query`是因为 `variables` rg. 服务器对照其声明的类型验证每个值( 不强制 ) - `"123"` 将不接受 `number` ,然后替换. `datetime` 接受 ISO-8601 字符串 :
    
    ```json
    {
      "recordSlug": "orders",
      "queryId": "…",
      "variables": { "month": "2026-04-01T00:00:00Z", "region": "us-east" }
    }
    ```
    
    输入错误表面为 `variable_type_mismatch`, (中文(简体) ), `missing_required_variable`,或 `extra_variable`未类型(遗留)行有 `variables: null` ,并接受任何密钥;在替换前,数值会被字符串。 未打入的倒置也由后填行取取出(canonical body,尚未声明),直到作者推广.

多边方案 `test_saved_query` 工具故意这样做 **没有** 曝光 `variableDeclarations` ——它的干燥路径又回到了遗留的字符串替代,不执行打出的声明. 绕行 `create_saved_query` + 键 `execute_saved_query` 以验证输入参数的端到端.

**多收相会入.** 保存的查询支持可选 `joins[]` 条款 `queryDefinition` (最多4个条目). 每个条目加入另一个集合到主记录集中:

```json
{
  "resource": "orders",
  "where": { "data.status": { "eq": "open" } },
  "joins": [
    {
      "foreignSlug": "customers",
      "localField": "data.customerId",
      "foreignField": "id",
      "joinType": "left",
      "select": ["id", "data.name", "data.email"],
      "alias": "customer"
    }
  ],
  "sort": [{ "field": "createdAt", "direction": "desc" }],
  "page": { "limit": 50 }
}
```

制约因素(经 `@centrali/query`:

-   `joinType` 必须是 `'inner'` 或者说 `'left'` —— 说 `'right'` 财务报告和审定财务报表 `'full'` 被执行人拒绝 `unsupported_clause`。 。 。 .
-   `text` 财务报告和审定财务报表 `joins` 无法在同一查询中显示( n)`unsupported_combination`) (中文(简体) ).
-   别名( 或隐含) `foreignSlug`在其中必须是独一无二的 `joins[]` (单位:千美元)`duplicate_join_alias`) (中文(简体) ).
-   4个条目的封顶( C)`joins_length_exceeded`) (中文(简体) ).
-   `localField` 可使用 `<priorAlias>.<field>` 通过先前的化名将一个加入物链起来.

`execute_saved_query` 返回时 `{ rows, meta, fields }`。每个条目 `rows` 在顶层下携带关联数据 `_joined` 键 :

```json
{
  "rows": [
    {
      "id": "order-123",
      "data": { "status": "open" },
      "_joined": {
        "customer": { "id": "cust-1", "data": { "name": "Acme" } }
      }
    }
  ],
  "meta": { "limit": 50, "offset": 0, "total": 1 },
  "fields": [{ "name": "id" }, { "name": "data" }, { "name": "_joined" }]
}
```

LEFT 加入表面 `null` 用于无与伦比的行.

**授权(SECURITY DEFINER,锁入2026-05-04).** 保存的查询是作者绑定的 —— AUTHOR 权限定义查询可以读取的内容; 执行者只需要一个 `execute` 运行时检查保存的- query 资源 .

-   **作者时间** (单位:千美元)`create_saved_query` 编号 : `update_saved_query` 编号 : `test_saved_query`:呼叫者必须坚持 `records:list` 主要收藏品和每份参考文献 `joins[]`。如果缺少任何访问,数据服务返回403.
-   **执行时间** (单位:千美元)`execute_saved_query`: 仅限 `execute` 在保存的-query资源上检查;没有每次收集的再检查,并且字段级的编辑遵循了作者的权限,而不是执行者的权限。 秘密伪装仍然无条件适用.

AI 助手不应针对收藏提出保存的查询(或加入链条) **作者** 无法读取 —— 执行会成功给不太特权的呼叫者,但作者会失败.

**保留条款.** 拒绝保存- query 创建/ 更新/ 测试表面 `text` (全文搜索)和 `include` (关系扩大)422 `unsupported_clause`这些条款可在特设委员会上查阅 `POST /records/query` 表面 – 不要作者保存使用它们的查询 .

### 警报

在 cron 上运行保存的查询,并在结果满足条件时通知人们.

| 工具 | 说明 |
| --- | --- |
| `list_alerts` | 列表提醒, 可选择过滤到一个已保存的查询 |
| `get_alert` | 通过ID获得警告,包括其评价历史 |
| `create_alert` | 在已保存的查询中创建预定提醒 |
| `update_alert` | 更新提醒的调度、 条件、 收件人、 绑定或启用状态 |
| `delete_alert` | 删除提醒并取消任务 |

**条件.** 今天有两艘船.. `{ kind: 'rowCount', op, value }` (单位:千美元)`op` 一个 `eq`编号 :`neq`编号 :`gt`编号 :`gte`编号 :`lt`编号 :`lte`和 `{ kind: 'rowsChanged' }`,当行数与前一次评价不同时会起火,并且不会在第一次运行时起火(它只会给基线投下种子). 没有 `aggregate` 类型 : 提醒原因, 说明有多少行返回, 而不是总和或平均内容。 要在集合上提醒, 编写保存的查询, 从而返回行 _为:_ 例外设置和提醒 `rowCount`。 。 。 .

**日程安排.** `cronExpression` 是一个5-字段克龙表达式,在 `timezone` (IANA名称,默认) `UTC`) (中文(简体) ). 通知被节制到每个接收者每15分钟1个警报,所以一个分15分钟的克龙比它所能通知的更频繁的评价.

**受取者.** `recipients` 这是一份明确的清单—— `[{ type: 'user', id: '<userId>' }]` - 不是订阅名单。 没有 MCP 工具列出工作空间用户,所以一个助手必须向用户询问ID而不是构建它们.

**绑定变量——比执行更严格.** 如果保存的查询宣布参数,请通过 `variables`。服务器在创建和提交时验证地图,并需要 **每次声明查询机构引用没有 `default`**,无论 `required`数字 :

```json
{
  "savedQueryId": "…",
  "name": "Failed payments spiked",
  "cronExpression": "0 * * * *",
  "condition": { "kind": "rowCount", "op": "gt", "value": 10 },
  "recipients": [{ "type": "user", "id": "…" }],
  "variables": { "status": "failed" }
}
```

`execute_saved_query` 接受无约束的可选选项并留下原始 `${name}` ;然后在字面占位符上过滤,不匹配,并报告没有出错。 互动可见——呼叫者看到空出结果. 所以警报不会开火 `lastEvaluatedAt` 继续前进,好像健康。 写作是最后一点 差距是显著的, 所以它失败了 在那里一个400 命名每个违法的变量.

**诊断"它从来没有发射".** `get_alert` 曝光情况 `lastEvaluatedAt`, (中文(简体) ), `lastTriggeredAt`, (中文(简体) ), `lastRowCount`,以及卫生领域 `consecutiveFailures`, (中文(简体) ), `lastError`, (中文(简体) ), `lastErrorAt`。 。 。 .

检查 `consecutiveFailures` 先说 非零表示警报后所保存的查询是出错的,因此警报是预定和启用的,但不能开火; 2; `lastError` 带着消毒的理由 `lastErrorAt` 当它最后一次发生。 最常见的原因是从查询下重新命名的集合或字段. 计数器是一个运行长度,在第一次成功评价时重置,所以 `0` 规则整个失败阶层 而不是仅仅暗示健康.

与 `consecutiveFailures` 时间 `0`,无效或陈旧 `lastEvaluatedAt` 表示提醒已禁用或从未安排 。 当前 `lastEvaluatedAt` 无效 `lastTriggeredAt` 表示查询运行良好且条件不匹配 – 比较提醒 `variables` 根据保存的查询声明.

### 管弦乐

| 工具 | 说明 |
| --- | --- |
| `list_orchestrations` | 列出工作空间中的所有组合 |
| `get_orchestration` | 获得包括步骤定义在内的管弦细节 |
| `create_orchestration` | 创建多步工作流程 |
| `update_orchestration` | 更新管弦乐(步骤、触发器、加密参数) |
| `delete_orchestration` | 删除管弦乐及其运行 |
| `activate_orchestration` | 启动管弦乐(可触发器) |
| `pause_orchestration` | 暂停管弦( 失效触发器) |
| `trigger_orchestration` | 触发带有可选输入数据的运行 |
| `list_orchestration_runs` | 列表运行用于调谐 |
| `get_orchestration_run` | 获取运行细节( 包括Steps= true用于分步调试) |

### 透视(异常检测)

| 工具 | 说明 |
| --- | --- |
| `trigger_anomaly_analysis` | 启动异常探测扫描 |
| `list_insights` | 清单异常见解 |
| `get_insight` | 得到一个单一的见解 |
| `acknowledge_insight` | 将见解标为已审查 |
| `dismiss_insight` | 抛开洞察力 |
| `get_insights_summary` | 获取洞察力汇总数 |

### 校验(数据质量)

| 工具 | 说明 |
| --- | --- |
| `trigger_validation_scan` | 开始数据质量扫描 |
| `list_validation_suggestions` | 列表验证建议 |
| `accept_validation_suggestion` | 接受固定( 用于记录) |
| `reject_validation_suggestion` | 否决建议 |
| `get_validation_summary` | 获取验证摘要计数 |

### 服务账户和IAM

| 工具 | 说明 |
| --- | --- |
| `list_service_accounts` | 列出所有服务账户 |
| `get_service_account` | 获取服务账户细节 |
| `create_service_account` | 创建服务账户( 返回客户端ID + 客户端Secret) |
| `update_service_account_name` | 更新 SA 显示名 |
| `update_service_account_description` | 更新 SA 描述 |
| `delete_service_account` | 永久删除服务账户 |
| `rotate_service_account_secret` | 旋转客户端密钥( 旧一个立即失效d) |
| `revoke_service_account` | 永久撤销服务账户 |
| `generate_dev_token` | 生成一个短命的 dev 符号用于测试 |
| `scan_service_account_permissions` | 全面访问矩阵审计(每个资源+行动Allow/Deny) |
| `simulate_service_account_permission` | 以评价跟踪模拟授权检查 |
| `generate_remediation` | 生成给予缺失权限的选项( 作用、 组或新政策) |
| `preview_remediation` | 预览补救选项的改变 |
| `apply_remediation` | 应用补救选项允许访问 |
| `list_service_account_roles` | 列出分配给SA的角色 |
| `assign_role_to_service_account` | 指派一个SA的角色 |
| `remove_role_from_service_account` | 从 SA 中删除一个角色 |
| `list_service_account_groups` | 列出一组 SA 属于 |
| `add_service_account_to_group` | 添加 SA 到组 |
| `remove_service_account_from_group` | 从组合中删除 SA |
| `list_roles` | 列出工作空间中的所有角色 |
| `get_role` | 使用权限获取角色细节 |
| `create_role` | 使用权限创建角色 |
| `update_role` | 更新角色 |
| `delete_role` | 删除一个角色 |
| `list_groups` | 列出所有组 |
| `get_group` | 获取组细节 |
| `create_group` | 创建组 |
| `update_group` | 更新组 |
| `delete_group` | 删除一组 |

### 网页订阅

| 工具 | 说明 |
| --- | --- |
| `list_webhook_subscriptions` | 列出所有出局的 Webhook 订阅 |
| `get_webhook_subscription` | 使用 ID 订阅( 未包含机密) |
| `create_webhook_subscription` | 创建订阅- 响应返回 `whsec_` 签过一次秘密 |
| `update_webhook_subscription` | 更新名称、 URL、 事件、 记录Slugs 或活动旗帜 |
| `delete_webhook_subscription` | 删除订阅( 保存交货历史) |
| `rotate_webhook_subscription_secret` | 重现签名秘诀( 立即切换) |
| `publish_webhook_event` | 发布一个命名的商务活动(例如:. `invoice.paid`)并把它扇出匹配订阅 |
| `list_webhook_deliveries` | 订阅( 三行) 列表发送历史 |
| `get_webhook_delivery` | 获得一个装满有效载荷和反应机体的单发货 |
| `retry_webhook_delivery` | 重放交货——再利用原始有效载荷和签名 |
| `cancel_webhook_delivery` | 取消正在重试的送出( 使用特殊标记失败) |

### 可出版密钥( 前线)

| 工具 | 说明 |
| --- | --- |
| `list_publishable_keys` | 列出所有可公布的密钥 |
| `get_publishable_key` | 获取带有瞄准镜的密钥细节 |
| `create_publishable_key` | 创建范围前端密钥( pk live ...) |
| `update_publishable_key` | 更新标签或范围 |
| `revoke_publishable_key` | 撤销一个密钥( 立即、 不可逆转) |

### 身份

| 工具 | 说明 |
| --- | --- |
| `get_current_identity` | 获取当前认证的 MCP 身份( 服务账户或 OAuth 用户) |

### 结构(已折旧)

| 工具 | 说明 |
| --- | --- |
| `list_structures` | _折旧:使用 `list_collections`_ |
| `get_structure` | _折旧:使用 `get_collection`_ |

## 资源

| URI 资源 | 说明 |
| --- | --- |
| `centrali://collections` | 所有收藏的列表, 有名称、 弹片、 描述 |
| `centrali://collections/{slug}` | 特定收藏的完整计划 |

## 发展

```bash
# Install dependencies
npm install

# Build
npm run build

# Test with MCP inspector
CENTRALI_URL=https://centrali.io \
CENTRALI_CLIENT_ID=... \
CENTRALI_CLIENT_SECRET=... \
CENTRALI_WORKSPACE=my-workspace \
npx @modelcontextprotocol/inspector node dist/index.js
```

### 二. 服务账户识别符

账户路径工具使用字符串 `clientId` 返回时间 `create_service_account` 编号 : `list_service_accounts`,包括获取,更新,旋转,撤销,删除,dev-token,角色/组成员,以及权限扫描/模拟. 他们不再接受数字 `serviceAccountId` 投入。 支持现有的遗留客户ID. 在部署客户端ID路由更改时, 将这个软件包与 IAM 一起升级 .

分开 `generate_remediation`, (中文(简体) ), `preview_remediation`,以及 `apply_remediation` 工具保留其数字 `serviceAccountId` aPI的访问参数 `targetId` 合同。 账户应对措施继续包括两个方面 `id` 财务报告和审定财务报表 `clientId`。 。 。 .

## 开发测试

`npm test` 首先在单列中运行时建立兄弟式 SDK, 然后构建 MCP和运行它的测试。 健康回归使用真正的SDK正常化, 因此,它的运行时间分布必须存在,即使是在新离职时。 在外边 取而代之的是安装的 SDK 分布.

## 常见问题

### @centrali-io/centrali-mcp 是什么？

Centri MCP\( 中央中心\) 服务器 - Centrali 工作空间的 AI 助理集成

### 如何安装 @centrali-io/centrali-mcp？

在项目目录运行 npm install @centrali-io/centrali-mcp，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 centrali-mcp，可以用 npx centrali-mcp 直接运行。

### @centrali-io/centrali-mcp 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @centrali-io/centrali-mcp 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @centrali-io/centrali-mcp 可以商用吗？

@centrali-io/centrali-mcp 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @centrali-io/centrali-mcp 的下载量有多少？

根据 npm 官方下载统计，@centrali-io/centrali-mcp 在 2026/10/10 – 2026/11/08 这 30 天内被下载 2,683 次，日均约 89 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @centrali-io/centrali-mcp 还在维护吗？

最新版本 9\.10\.0 发布于 2026/11/09（今天）；至今共发布 129 个版本，其中过去 12 个月发布了 129 个；首次发布于 2026/02/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

