内容
# tm1-mcp-server
IBM Planning Analytics / TM1 的 Model Context Protocol (MCP) 服务器。
暴露整个 TM1 模型的生命周期 — 元数据、维度、立方体、单元格输入/输出、
TI 进程、作业、安全性和代码图分析 — 给任何兼容 MCP 的
LLM 客户端(Claude Code、Claude Desktop 等)。
针对 TM1 11.8 通过 REST API(基本身份验证)进行测试。
## 功能
12 个类别中的 111 个工具:
| 类别 | 工具 |
|---|---|
| 元数据 | 列出立方体 / 维度 / 进程 / 作业,获取层次结构 |
| 模型构建 | 创建/删除/清除/卸载立方体,获取/更新/检查立方体规则,大批量获取所有规则 |
| 维度管理 | 维度 + 层次结构 CRUD,元素 CRUD,大批量更新,属性 CRUD |
| 子集 | 列出/获取/创建/更新/删除子集 |
| 视图 | 列出 / 创建 MDX 视图 / 删除视图 |
| 单元格数据 | 执行 MDX(+ `format=markdown` 旋转渲染),获取视图,获取单元格值,写入单元格,**预写入坐标检查**(N 级 + 规则重叠警告) |
| TI 开发 | 进程 CRUD,编译,**无绑定检查**(预保存验证),获取/更新代码(单个 + 大批量),数据源,变量,参数,**跨所有 TI 的正则表达式搜索**,**插入(原子式捆绑)**,**引用验证**(立方体/维度解析) |
| TI 生命周期(.pro + git) | **导入 .pro 文件**(解析 + 1 次调用部署),**安装 bundle**(.pro 文件目录),**git 导出/导入**(`{name}.json` + `{name}.ti` 双文件布局,tm1-git/TM1py 样式;内联或主机磁盘路径 — 参见[本地文件访问](#local-file-access-tm1_local_file_root)) |
| 进程执行 | 执行进程,获取参数 |
| 调度 | 作业 CRUD,执行,切换 |
| 安全 | 客户端 + 组 CRUD,组分配 |
| 操作 | 服务器信息,消息日志,事务日志,线程,会话,文件操作 |
| 分析 | 调用图(完整 + 摘要模式 + 全局排名),对象使用,作业图,缓存失效 |
## 安装
**选项 A — 来自 npm(推荐)**。 无需克隆,无需构建。 按需运行
`npx`(始终拉取最新的发布版本):
```bash
npx -y tm1-mcp-server
```
… 或全局安装 `tm1-mcp-server` CLI:
```bash
npm install -g tm1-mcp-server
tm1-mcp-server
```
**选项 B — 克隆和构建**(源代码 / 开发安装):
```bash
git clone https://github.com/flameY3T1/tm1-mcp-server.git
cd tm1-mcp-server
npm install
npm run build
node dist/index.js
```
### 更新
- **`npx`:** 自动获取新版本。 如果缓存的版本已过时,
运行 `npm cache clean --force`(或使用 `tm1-mcp-server@1.2.3` 固定版本),
然后重启您的 MCP 客户端。
- **全局安装:** `npm update -g tm1-mcp-server`(或
`npm install -g tm1-mcp-server@latest`);检查
`npm view tm1-mcp-server version` 与 `npm list -g tm1-mcp-server`。
- **源代码安装:** `git pull && npm install && npm run build`。
更新后始终**重启 MCP 客户端**(Claude Desktop / Claude Code)—
服务器进程仅在客户端启动时启动。
## 配置
复制 `.env.example` 到 `.env` 并设置 TM1 连接详细信息:
```env
TM1_BASE_URL=https://your-tm1-server:8010
TM1_USER=admin
TM1_PASSWORD=your-password
TM1_SSL_REJECT_UNAUTHORIZED=false
TM1_VERSION=11.8
TM1_MODE=readonly # readonly(默认)| readwrite
# TM1_LOCAL_FILE_ROOT=/srv/tm1-git # 可选;启用主机磁盘文件参数(参见下文)
```
对于 **CAM(Cognos Access Manager)/ LDAP** 服务器,
设置 `TM1_NAMESPACE` 为您的 CAM 命名空间
(客户端然后使用 `Authorization: CAMNamespace` 登录);
或通过 `TM1_CAM_PASSPORT` 提供预先获得的护照
(`Authorization: CAMPassport`,无需用户/密码)。
当未设置两者时,默认使用原生 TM1 身份验证。
参见 [.env.example](.env.example) 以获取完整设置
(CAM 身份验证、超时、日志记录、HTTP 传输)。
> **默认安全:** 服务器以 `TM1_MODE=readonly` 启动 —
> 仅注册只读工具,因此它无法修改或删除任何内容。
> 要启用整个生命周期(单元格写入、立方体/维度/进程删除、TI 执行),
> 显式设置 `TM1_MODE=readwrite`。
> 永远不要在未检查写入路径的情况下,将 `readwrite` 服务器指向生产实例。
### 本地文件访问(`TM1_LOCAL_FILE_ROOT`)
主机上运行的服务器读写文件的工具 — `tm1_import_pro_file`、
`tm1_install_pro_bundle`、`tm1_diff_process_with_file`、`tm1_validate_process_refs`
和 git 导出/导入对 — **默认禁用**。
设置 `TM1_LOCAL_FILE_ROOT` 为绝对目录以启用主机路径参数;
每个提供的路径必须在该根目录内解析(拒绝路径遍历)。
```env
TM1_LOCAL_FILE_ROOT=/srv/tm1-git # 可选;启用主机磁盘文件参数
```
git 工具在没有它的情况下通过内联内容工作:
- `tm1_export_process_to_git` 默认返回 `{name}.json` + `{name}.ti` 内联;
通过 `writeToDir`(主机路径下的根目录)传递以持久化它们。
- `tm1_import_process_from_git` 接受 `jsonContent`/`tiContent` 字符串,
或当设置根目录时,`jsonPath`/`tiPath` 主机路径。
## 与 Claude Code 一起使用
凭证存储在 `.env`(在启动时从存储库根目录加载 —
即包含 `dist/` 的目录 — 因此无论 MCP 客户端从哪个工作目录启动服务器,
它都能被找到)。MCP 客户端配置仅指向二进制文件 —
**不要将 `TM1_PASSWORD` 放入 `.mcp.json` 或 `settings.json`**。
复制 `mcp.json.example` 到 `.mcp.json`(项目本地)或合并到
`~/.claude/settings.json`。
**推荐 — `npx`(选项 A 安装,无克隆):**
```json
{
"mcpServers": {
"tm1": {
"command": "npx",
"args": ["-y", "tm1-mcp-server"]
}
}
}
```
如果您已全局安装(`npm install -g tm1-mcp-server`),
请使用 CLI 名称:
```json
{
"mcpServers": {
"tm1": {
"command": "tm1-mcp-server"
}
}
}
```
对于源代码构建(选项 B),请指向构建的入口点:
```json
{
"mcpServers": {
"tm1": {
"command": "node",
"args": ["/absolute/path/to/tm1-mcp-server/dist/index.js"]
}
}
}
```
重启 Claude Code → 服务器名称 `tm1` 可用。
## HTTP 传输(可流式,无状态)
默认传输为 **stdio**(适用于本地 Claude Code / Claude Desktop)。
对于多客户端 / 远程设置,切换到 MCP **可流式 HTTP**:
```env
TM1_MCP_TRANSPORT=http
TM1_MCP_HTTP_HOST=127.0.0.1 # 默认 — 仅绑定环回
TM1_MCP_HTTP_PORT=3000 # 默认
TM1_MCP_HTTP_ALLOWED_ORIGINS= # 可选,逗号分隔的额外源地址,绕过 DNS 重新绑定保护
TM1_MCP_HTTP_TOKEN= # 可选,需要每个 /mcp 请求的“Authorization: Bearer <token>”
```
然后 `npm start` 暴露一个单一的 `POST /mcp` 端点,
用于 JSON-RPC(无状态模式,无会话 ID)。
DNS 重新绑定保护默认启用,
`Host`/`Origin` 与 `allowedHosts: [host:port, 127.0.0.1, localhost]` 验证。
```bash
curl -X POST http://127.0.0.1:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1"}}}'
```
> 设置 `TM1_MCP_HTTP_HOST=0.0.0.0` 将服务器(和您的 TM1
> 凭证)暴露给 LAN — 仅在具有额外身份验证的反向代理后面执行此操作。
>
> HTTP 传输 **没有内置身份验证**,除非您设置
> `TM1_MCP_HTTP_TOKEN`。
> 设置后,每个 `/mcp` 请求必须携带
> `Authorization: Bearer <token>`(其他人获取 `401`)。
> 如果没有它,请绑定到环回或在服务器前面添加一个身份验证反向代理。
### 安全
- 将 `TM1_PASSWORD` 和其他秘密仅保存在 `.env`(gitignored)中。
- `.mcp.json` 和 `~/.claude/settings.json` 通常被共享/提交 —
将 `env: { TM1_PASSWORD: "..." }` 传递到那里会将凭证泄漏到
团队配置、点文件存储库和 Claude Code 会话日志中。
- 如果您必须按主机覆盖,请使用每个主机的 `.env` 文件,
而不是客户端配置中的内联 `env` 块。
- 需要多个 TM1 环境吗?运行多个服务器实例,每个实例都有自己的工作目录和 `.env`。
使用 `mcpServers` 键区分(例如 `tm1-prod`、`tm1-dev`)。
### autoApprove
`mcp.json.example` 提供了 **只读** 工具的 `autoApprove` 列表 —
分析/列出/获取/搜索/检查/编译/差异。
破坏性工具(`delete_*`、`clear_*`、`unload_*`、`cancel_*`、`execute_*`、
`remove_*`、`invalidate_*`)和写入(`create_*`、`update_*`、
`upsert_*`、`write_cells`、`import_pro_file`,...)故意
**不** 在允许列表中,需要每个调用手动批准。
每个工具还会发布 MCP `readOnlyHint` / `destructiveHint` /
`idempotentHint` 注释(参见 `src/tools/annotation-map.ts`),
因此支持这些提示的客户端可以在调用破坏性工具之前发出警告。
## 开发
```bash
npm run dev # tsx live-reload
npm test # vitest
npm run lint # tsc --noEmit
```
## 文档
- [docs/EXAMPLES.md](docs/EXAMPLES.md) — 每个主要功能的 JSON 工具调用有效载体示例
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — 分层、服务类模式、传输、只读/读写门控
- [CONTRIBUTING.md](CONTRIBUTING.md) — 工作流程、lint 门控、如何添加工具或服务
- [CHANGELOG.md](CHANGELOG.md) · [SECURITY.md](SECURITY.md) · [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## 贡献
欢迎贡献。
阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 首先 —
运行 `npm run verify`(类型检查 + lint 门控 + 测试)
后再打开 PR。
这是尽力而为的项目,无支持保证(参见 [来源](#provenance))。
## 分析工具
用于代码审查和依赖跟踪的大批量 + 调用图工具:
- `tm1_get_all_processes_code` — 所有 TI 进程 + 4 个选项卡一次性
- `tm1_get_all_cube_rules` — 所有立方体规则一次性
- `tm1_search_code` — 对所有 TI 选项卡进行正则表达式搜索,带有每个进程/总上限;返回命中行而不是完整批量
- `tm1_analyze_callgraph` — 执行进程/运行进程树(下游/上游)并带有参数环境传播。`mode='summary'` 返回扁平的进程聚合(出现次数、深度最小/最大)用于预处理,然后拉取重树。省略 `start` 以获取全局排名:每个进程按 `rankBy='outgoing'`(扇出)或 `'incoming'`(扇入)调用计数排名 — 回答“哪些进程触发 / 被其他进程触发”而无需遍历每个进程。
- `tm1_analyze_object_usage` — 查找立方体/维度引用在所有 TI 进程(CellGet/Put、ViewExtract、ZeroOut,...)和立方体规则(DB(),[dim].[el])
- `tm1_analyze_chore_graph` — 每个任务的下游调用图,用于 TM1 作业
- `tm1_invalidate_callgraph_cache` — 重置 60 秒 TTL 缓存后部署
- `tm1_audit_naming` — 扫描所有 TM1 对象以获取 IBM Planning Analytics 命名约定(PA 2.0 + 3.1)
- `tm1_audit_complexity` — 扫描 TI 进程和立方体规则的复杂度指标(LOC、分支、最大嵌套、注释比率)和跨进程一致性(变量名集群、类型冲突、前缀约定遵守)。容忍 Bedrock 样式的凝聚多语句行。
- `tm1_audit_feeders` — 扫描立方体规则以获取过度馈送模式。静态启发式 S1–S5(馈送器比规则更广泛,馈送到合并,通配符/无范围括号,DB() 进入没有 `skipcheck;` 的立方体,孤立馈送器)+ `mode: "runtime" | "both"` 用于 `}StatsByCube` 证据(cube_high_fed_ratio — 馈送/填充 ≥ 50× 提示,≥ 100× 证据按 TM1 社区校准 — 以及 cube_high_memory)。运行时证据将静态发现从严重性 `hint` → `evidence` 升级到同一立方体上的静态发现。
## MCP 资源
用于 IDE 边栏浏览和聊天中的 `#` 引用的四个只读资源:
| URI | 内容 | 完成 |
|---|---|---|
| `tm1://server/info` | 服务器身份 + 配置快照 | — |
| `tm1://server/state` | 健康检查:计数、连接状态 | — |
| `tm1://process/{name}/code` | TI 进程源(所有 4 个选项卡,JSON) | 名称自动完成 |
| `tm1://cube/{name}/rules` | 立方体规则文本(纯文本) | 名称自动完成 |
完成回调按子字符串匹配(最多 100 个建议,控制对象除外)。
在 Claude Code 聊天中使用 `#tm1://process/MyProcess/code` 附加进程作为上下文。
## TI 生命周期(.pro 文件)
适用于原生 TM1 `.pro` 序列化格式的工具 —
适用于 Bedrock 样式的库、版本控制和棕地部署。
解析器处理选项卡(572-575)、参数(560/561/590/637)、变量
(577-582)和数据源(562-589)。
- `tm1_import_pro_file` — 解析 `.pro` 并在一次调用中部署(创建/更新/插入)。可选的预飞行检查,无绑定编译。
- `tm1_diff_process_with_file` — 比较已安装的进程 vs `.pro`(每个选项卡的行计数 + 标识符标志,参数添加/删除/更改,变量差异,数据源差异)。 在导入之前使用预览。
- `tm1_install_pro_bundle` — 迭代 `.pro` 文件目录(可选递归,文件名过滤器正则表达式)。每个文件模式 + dryRun + continueOnError。返回每个文件结果。
- `tm1_upsert_process` — 与 `import_pro_file` 相同的原子式捆绑,但正文内联(无 `.pro` 解析器)。## 兼容性
- Node.js >= 20
-`TM1 11.8(大多数工具);一些元数据写入路径假设 11.x 语义
- `v12` 独有功能(例如 `DataSource.usesUnicode`)在 `TM1_VERSION` 后关闭
## 工具参考
由 `scripts/gen-tool-list.mjs` 自动生成 —
在注册或删除工具后运行 `npm run tools:update-readme`。
<!-- TOOLS-AUTOGEN:START -->
## 工具(111 个)
### 分析(9 个)
- `tm1_analyze_callgraph` — 为 TI 进程构建进程调用图(ExecuteProcess/RunProcess)
- `tm1_analyze_chore_graph` — 为 TM1 作业的每个任务构建下游调用图
- `tm1_analyze_object_usage` — 查找立方体或维度在所有 TI 进程(CellGet/Put,ViewExtract,ZeroOut,...)和立方体规则(DB(),[dim].[el])中的每个引用
- `tm1_audit_complexity` — 扫描 TI 进程和立方体规则以获取复杂度指标(LOC、分支、最大嵌套、分数)
- `tm1_audit_feeders` — 静态启发式(S1–S5)扫描立方体规则以获取过度馈送:通配符括号、馈送到聚合
- `tm1_audit_naming` — 扫描 TM1 对象以获取 IBM PA 2.0/3.1 命名约定;报告严重违规
- `tm1_check_v12_readiness` — 对 v12(Cloud Native)停用列表进行静态差距分析
- `tm1_find_orphan_dimensions` — 确定未被任何立方体引用的维度 — 模型卫生检查
- `tm1_invalidate_callgraph_cache` — 删除 `tm1_analyze_callgraph` / `tm1_analyze_object_usage` / `tm1_analyze_chore_graph` 使用的内存 ReferenceIndex 缓存
### 单元格数据(10 个)
- `tm1_check_feeders` — 检查单元格的馈送器:验证单元格底层单元格的馈送器覆盖范围,并返回具有馈送器标志的 problematic Ones — fed=false 标记为 br
- `tm1_check_writable_coords` — 单元格置换前的飞行检查
- `tm1_execute_mdx` — 在 TM1 服务器上执行 MDX 查询并返回带有轴的结构化单元格数据(与 list_* 保持一致的页面信封形状)
- `tm1_get_cell_value` — 通过指定元素坐标从 TM1 立方体获取单个单元格值
- `tm1_get_view` — 执行命名立方体视图并返回结构化单元格数据和轴
- `tm1_get_view_definition` — 返回立方体视图的结构定义(MDX 表达式 OR 本地视图轴)而无需执行它
- `tm1_sample_cells` — 返回最多 maxCells 个来自立方体的已填充单元格,而无需猜测元素坐标
- `tm1_trace_cell_calculation` — 跟踪单元格值的计算方式:具有每个组件类型(Consolidation/Rule/Simple)、状态(Null/Data/Error)、值和规则的递归组件树
- `tm1_trace_feeders` — 跟踪单元格的馈送器:返回此单元格馈送的单元格以及涉及的馈送器语句 — 回答“哪些馈送器语句从此单元格触发,以及哪些单元格写入?”
- `tm1_write_cells` — 直接在 TM1 立方体中写入一个或多个单元格值,通过 REST
### 单元格数据(10 个)
- `tm1_check_feeders`
- `tm1_check_writable_coords`
- `tm1_execute_mdx`
- `tm1_get_cell_value`
- `tm1_get_view`
- `tm1_get_view_definition`
- `tm1_sample_cells`
- `tm1_trace_cell_calculation`
- `tm1_trace_feeders`
- `tm1_write_cells`
### 维度管理
- 维度 + 层次结构 CRUD
- 元素 CRUD
- 大批量更新
- 属性 CRUD
### 模型构建
- 创建/删除/清除/卸载立方体
- 获取/更新/检查立方体规则
- 大批量获取所有规则
### 安全
- 客户端 + 组 CRUD
- 组分配
### 调度
- 作业 CRUD
- 执行
- 切换
### 操作
- 服务器信息
- 消息日志
- 事务日志
- 线程
- 会话
- 文件操作
### 元数据
- 列出立方体 / 维度 / 进程 / 作业
- 获取层次结构
### 子集
- 列出/获取/创建/更新/删除子集
### 视图
- 列出 / 创建 MDX 视图 / 删除视图
<!-- TOOLS-AUTOGEN:END -->
### 维度管理(13)
- `tm1_bulk_upsert_elements` — 批量创建或更新多个元素在 TM1 分层结构中(两步:先是叶子节点,然后是汇总节点)
- `tm1_create_dimension` — 创建一个新的 TM1 维度,并附带一个默认的分层结构,名称相同
- `tm1_create_element` — 在 TM1 维度分层结构中创建一个新元素
- `tm1_create_element_attribute` — 在 TM1 分层结构上创建元素属性定义(模式)
- `tm1_create_hierarchy` — 在现有的维度中创建一个新的(备用)分层结构
- `tm1_delete_dimension` — 删除一个 TM1 维度及其所有分层结构
- `tm1_delete_element` — 从 TM1 维度分层结构中删除一个元素
- `tm1_delete_hierarchy` — 从维度中删除一个分层结构
- `tm1_get_element_attribute_values` — 通过 MDX 读取单个元素的属性值(数值/字符串/别名),使用 }ElementAttributes_{Dim} 控制立方体
- `tm1_list_element_attributes` — 列出 TM1 分层结构的元素属性定义及其类型(数值/字符串/别名)
- `tm1_move_element` — 在 TM1 维度分层结构中将元素移动到新的父节点
- `tm1_update_element` — 更新 TM1 维度分层结构中现有的元素(名称、类型或组件)
- `tm1_update_element_attribute_value` — 通过写入 }ElementAttributes_{Dim} 控制立方体来设置元素的单个属性值
### 文件操作(5)
- `tm1_delete_file` — 从 TM1 服务器的 Blob/文件存储中删除文件
- `tm1_get_file_content` — 读取 TM1 服务器数据目录中文件的内容
- `tm1_list_files` — 列出 TM1 服务器数据目录(Blob/文件存储)中的文件
- `tm1_search_files` — 通过前缀和/或子字符串搜索 TM1 服务器 Blob/文件存储中的文件名
- `tm1_upload_file` — 上传(创建或更新)文件到 TM1 服务器的 Blob/文件存储
### 元数据(10)
- `tm1_get_ancestors` — 通过父节点遍历获取元素的祖先
- `tm1_get_descendants` — 获取汇总元素的子孙
- `tm1_get_hierarchy` — 获取给定维度的分层结构元素及其父子关系
- `tm1_list_chores` — 列出 TM1 服务器中的 Chore 及其计划和分配的进程
- `tm1_list_cubes` — 列出 TM1 服务器中的立方体
- `tm1_list_dimensions` — 列出 TM1 服务器中的维度及其分层结构名称
- `tm1_list_processes` — 列出 TM1 服务器中的 TurboIntegrator 进程及其参数
- `tm1_list_processes_grouped` — 按名称前缀分组 TurboIntegrator 进程,以提供结构概述,而不列出每个进程
- `tm1_resolve_default_member` — 解析分层结构的默认成员,有效地避免在构造视图切片器时往返扫描多级
- `tm1_resolve_default_members` — `tm1_resolve_default_member` 的批量版本 — 并行解析 N 个分层结构的默认成员
### 模型构建(9)
- `tm1_check_cube_rule` — 验证 TM1 立方体规则的语法,而不应用它
- `tm1_clear_cube` — 清除立方体中的一 subset 单元格
- `tm1_create_cube` — 创建具有指定维度的新 TM1 立方体
- `tm1_delete_cube` — 删除 TM1 立方体及其所有数据
- `tm1_get_all_cube_rules` — 批量加载所有立方体的规则文本
- `tm1_get_cube_rules` — 获取 TM1 立方体的当前规则文本
- `tm1_search_rules` — 在立方体规则文本中进行正则表达式搜索
- `tm1_set_cube_rules` — 创建或替换 TM1 立方体的规则
- `tm1_unload_cube` — 将立方体从内存中卸载
### 操作(13)
- `tm1_cancel_thread` — 通过 ID 取消正在运行的 TM1 服务器线程
- `tm1_diagnose_process_error` — 对失败的 TI 进程进行一次性错误诊断:列出匹配的错误日志,获取其内容,并可选地包括与之相关的兄弟日志
- `tm1_get_audit_log` — 获取最近的 TM1 审计日志条目(元数据/安全更改:谁更改了什么,何时),最新的优先
- `tm1_get_cube_stats` — 读取 }StatsByCube 立方体的指标(内存,占据单元格,馈送单元格,馈送效率)
- `tm1_get_error_log_content` — 获取由失败的进程运行生成的单个 TI 错误日志文件的内容
- `tm1_get_message_log` — 获取最近的 TM1 服务器消息日志条目,最新的优先
- `tm1_get_server_info` — 返回 TM1 服务器身份 + 精心策划的配置(TI,规则,MTQ,作业队列,内存,日志记录,HTTP,安全)
- `tm1_get_server_state` — 健康检查风格的 TM1 服务器快照
- `tm1_get_transaction_log` — 获取最近的 TM1 事务日志条目(单元格写入),最新的优先
- `tm1_list_error_logs` — 列出 TM1 服务器上的 TI 进程错误日志文件,最新的优先
- `tm1_list_sessions` — 列出 TM1 服务器上的活动会话及其关联的用户和线程
- `tm1_list_threads` — 列出 TM1 服务器上的活动线程(运行的进程,Chore,MDX 查询等)
- `tm1_save_data` — 将内存中的立方体数据持久化到磁盘:SaveDataAll(所有立方体)或 CubeSaveData(当指定 `cube` 时)
### 调度(5)
- `tm1_create_chore` — 创建具有计划和要运行的 TI 进程列表的新 TM1 Chore
- `tm1_delete_chore` — 永久删除 TM1 Chore
- `tm1_execute_chore` — 立即执行 TM1 Chore,绕过其计划
- `tm1_toggle_chore` — 激活或停用 TM1 Chore(启用/禁用其计划)
- `tm1_update_chore` — 更新现有的 TM1 Chore
### 安全(8)
- `tm1_assign_client_group` — 将 TM1 客户端分配给组
- `tm1_create_client` — 创建新的 TM1 客户端(用户)
- `tm1_delete_client` — 删除 TM1 客户端(用户)
- `tm1_get_client` — 获取单个 TM1 客户端(用户)的详细信息,包括组 memberships
- `tm1_list_clients` — 列出 TM1 客户端(用户)
- `tm1_list_groups` — 列出 TM1 组
- `tm1_remove_client_group` — 从组中删除 TM1 客户端
- `tm1_update_client` — 更新 TM1 客户端
### 子集(5)
- `tm1_create_subset` — 创建公共 TM1 子集
- `tm1_delete_subset` — 删除公共 TM1 子集
- `tm1_get_subset` — 获取单个 TM1 子集及其 MDX 表达式(如果有)以及解析的元素列表
- `tm1_list_subsets` — 列出 TM1 分层结构的公共和私有子集
- `tm1_update_subset` — 更新公共 TM1 子集(部分)
### TI 开发(20)
- `tm1_check_process_code` — 验证 TI 进程代码,而不将其保存在服务器上
- `tm1_compile_process` — 编译 TI 进程以验证其语法,而不执行它
- `tm1_copy_process` — 复制 TI 进程(包括变量和数据源)到新名称
- `tm1_delete_process` — 从 TM1 服务器删除 TurboIntegrator 进程
- `tm1_diff_process_with_file` — 比较服务器上的已安装 TI 进程与本地 `.pro` 文件
- `tm1_diff_processes` — 比较两个已安装的 TI 进程,逐选项卡比较(Prolog/Metadata/Data/Epilog)
- `tm1_execute_process` — 在 TM1 服务器上执行 TurboIntegrator 进程,可选参数
- `tm1_export_process_to_git` — 将 TM1 进程序列化为 tm1-git 的双文件布局:`{name}.json`(参数,变量,数据源)+ `{name}.ti`(Prolog/Metadata/Data/Epilog)
- `tm1_export_process_to_pro` — 将 TM1 进程序列化回 `.pro` 文件体
- `tm1_get_all_processes_code` — 批量加载所有 TI 进程的源代码
- `tm1_get_process_code` — 获取 TI 进程的所有四个选项卡(Prolog,Metadata,Data,Epilog)的源代码
- `tm1_get_process_datasource` — 获取 TurboIntegrator 进程的数据源配置
- `tm1_get_process_parameters` — 获取 TurboIntegrator 进程的参数,包括名称,类型和默认值
- `tm1_get_process_variables` — 获取 TurboIntegrator 进程的变量(ASCII/ODBC 源的列名映射)
- `tm1_import_pro_file` — 解析 TM1 `.pro` 文件(选项卡/参数/变量/数据源)并部署进程
- `tm1_import_process_from_git` — 从 tm1-git 的双文件布局(`{name}.json` + `{name}.ti`)部署 TM1 进程
- `tm1_install_pro_bundle` — 一次调用安装目录中的所有 `.pro` 文件
- `tm1_search_code` — 对所有 TI 进程代码进行正则表达式搜索
- `tm1_upsert_process` — 为 TI 进程创建或更新
- `tm1_validate_process_refs` — 扫描 TI 进程(实时,按名称或从 `.pro`)以获取 cube/dimension 引用
### 视图(4)
- `tm1_create_mdx_view` — 在立方体上创建基于 MDX 的公共视图
- `tm1_create_native_view` — 在立方体上创建公共原生(基于子集)视图 - 经典视图类型用作 TI 进程数据源
- `tm1_delete_view` — 从立方体中删除公共视图
- `tm1_list_views` — 列出立方体上定义的公共和私有视图
<!-- TOOLS-AUTOGEN:END -->
## 故障排除
**TLS / 自签名证书错误** (`unable to verify the first certificate`, `self-signed certificate`):TM1 开发服务器通常使用自签名证书。为这些设置 `TM1_SSL_REJECT_UNAUTHORIZED=false` - 但仅限开发环境,切勿用于生产环境。
**`401` / 身份验证失败:** 验证 `TM1_USER` / `TM1_PASSWORD` 并确保 `TM1_BASE_URL` 指向 REST API 端口(例如 `https://host:8010`)。一些测试服务器允许空白管理员密码 - 空的 `TM1_PASSWORD` 被接受,服务器记录警告而不是阻止,因此真正的 TM1 `401` 在有上下文的情况下出现。对于 CAM/LDAP 服务器,`401` 通常意味着错误的 `TM1_NAMESPACE`(或 PA Cloud 上的交互式帐户 - 使用非交互式服务帐户);通过 `tm1_get_server_info` 确认服务器的 `IntegratedSecurityMode`。
**v11 与 v12 功能错误** (`DataSource.usesUnicode`,分层结构/文件端点):设置 `TM1_VERSION=11.8`(或您的 `11.x`),这样仅 v12 的路径被禁用。文件服务自动从 v12 的 `Files` 根目录回退到 v11 的 `Blobs` 根目录。
**HTTP 传输:`/mcp` 上的 `401 Unauthorized`:** 设置了 `TM1_MCP_HTTP_TOKEN` - 发送 `Authorization: Bearer <token>`。 **连接被拒绝/源被拒绝:** 服务器默认绑定 `127.0.0.1` 并验证 `Host`/`Origin`;将您的源添加到 `TM1_MCP_HTTP_ALLOWED_ORIGINS`,或设置 `TM1_MCP_HTTP_HOST`(仅限环回,除非由身份验证代理支持)。
**`tm1_get_transaction_log` 慢或超时:** TM1 事务日志是全扫描。始终传递紧密的 `since` 窗口;广泛的查询可能会达到查询超时。
**启动错误 `Invalid TM1_…: expected a positive integer`:** 数值环境变量(`TM1_KEEP_ALIVE_INTERVAL`,`TM1_REQUEST_TIMEOUT`,`TM1_MCP_HTTP_PORT`)具有非数值或非正值。修复值或取消设置以使用默认值。
## 来源
该代码库由 AI 编码代理(Anthropic 的 Claude)生成,经过审查和测试,但非手动编写。测试套件也是 AI 生成的,并针对模拟运行,而非实时 TM1 服务器 - 通过测试并不保证正确的 REST 语义,请在依赖它之前使用您自己的实例验证行为,尤其是任何写入或破坏性操作。按原样提供,“尽力而为”,不保证支持。参见 [NOTICE](NOTICE)。
IBM,Planning Analytics 和 TM1 是 IBM Corp. 的商标。该项目不隶属于或得到 IBM 的赞助或认可。
## 许可证
MIT - 参见 [LICENSE](LICENSE).
该项目不隶属于、赞助或得到 IBM 的认可。IBM,TM1 和 Planning Analytics 是国际商业机器公司的商标。这里仅使用这些名称来描述与 TM1 REST API 的兼容性。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器