  ](https://nodejs.org/)   ](https://lobehub.com/mcp/larasrinath-anaplan-mcp)
MCP计划
Anaplan的非官方MCP服务器
安装指南:适用于Windows、macOS和Linux的平台感知安装演练,带有OAuth2/证书/基本身份验证选项。
A. 模型上下文协议 (MCP)服务器,将人工智能助手连接到Anaplan's Integration API v2。通过70个结构化工具,使用您现有的Anaplan凭据和权限,让Claude等LLM直接访问浏览工作区、管理数据、运行导入/导出和管理模型。
内置TypeScript。支持stdio(本地)和Streamable HTTP(远程)传输。适用于Claude Desktop、Claude Code、Claude.ai和任何兼容MCP的客户端。包括一个内置的编排指南,教导AI助手每个工作流程的正确工具序列。
为什么存在
Anaplan's Integration API功能强大,但需要专业技术才能直接使用。 大多数团队依靠少数模型构建器来导航复杂的模型、提取数据和运行导入——当其他人需要访问相同的信息时,就会产生瓶颈。
该服务器将API封装在70个结构化工具中,Claude等人工智能助手可以代表您调用这些工具。探索模型、提取数据、运行操作和加入新的团队成员——所有这些都是通过简单的英语询问,而不是编写API调用或等待了解模型的人。
对于企业用户: 不要等待有人提取数据或解释模型是如何工作的。让Claude向您展示数字,引导您了解模块结构,或运行常规导入。
对于模型构建者和顾问: 分析模型结构、跟踪公式依赖关系、查看行项目配置并识别性能问题——所有这些都是通过对话完成的,而不是手动点击数百个模块。
对于IT和平台团队: 使用您现有的身份验证和权限进行标准API访问。没有新的凭据,没有提升的访问权限。开源可审计性。Anaplan数据由您的AI助手处理——根据您的设置,可以在本地或通过提供商的环境进行处理。
常见用例
模型文档:
- “显示供应计划模型的结构”
- “列出收入模块中的所有行项目及其公式”
- “边距行项目使用什么尺寸?”
数据审查:
- “提取所有产品的当前定价数据”
- “显示最近添加的列表项”
- “阅读第三季度的预测数据并总结”
影响分析:
- “哪些模块使用产品列表作为维度?”
- “显示所有引用单位成本的行项目”
- “哪些视图包含区域维度?”
自动化:
- “运行月度需求导入并向我显示结果”
- “导出销售实际值并保存到下载”
- “将这50个新产品添加到主列表”
入职培训:
- “引导我了解此模型中的模块”
- “这个模型是如何构建的?关键列表是什么?”
- “自上个季度以来,这种模式发生了什么变化?”
它能做什么和不能做什么
它能做什么
- 浏览工作区、模型、模块、列表和视图
- 读取单元格数据并列出项目
- 写入单元格值并管理列表项(添加、更新、删除)
- 运行导入、导出、处理和删除操作
- 上传和下载文件
- 管理模型(打开、关闭、删除、设置期间和会计年度)
- 查询用户、版本和任务历史记录
模型构建限制
Anaplanneneneba API不支持:
- 以编程方式创建模块或行项目
- 通过API定义公式
- 从头开始构建模型结构
- 以编程方式配置模型日历
对于模型构建,请使用Anaplan的UI或Agent Studio。
先决条件
- Node.js 18+ - 在这里下载
- Anaplan账户 使用API访问(任何身份验证方法-基本、证书或OAuth)
- MCP兼容客户端 -Claude Desktop(推荐)、Claude Code或任何其他MCP客户端
设置
1.克隆和构建
git clone https://github.com/larasrinath/anaplan-mcp.git
cd anaplan-mcp
npm install
npm run build2.连接到克劳德桌面
Claude Desktop是使用此服务器的最简单方法。以下是如何设置它:
第一步:打开配置文件
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
C:\Users\\AppData\Roaming\Claude\claude_desktop_config.json
如果文件还不存在,请使用创建它 {} 作为内容。
提示(Windows): 您可以键入 %APPDATA%\Claude 在文件资源管理器地址栏中直接跳转到该文件夹。步骤2:添加Anaplan服务器
替换 带有克隆仓库的绝对路径(例如。 /Users/you/anaplan-mcp 在macOS/Linux或 C:/Users/you/anaplan-mcp 在Windows上-始终使用正斜杠)。
选择 一 仅限auth方法。对于大多数用户,使用 OAuth2 这样克劳德就可以在聊天中显示登录链接。不要同时设置OAuth、证书和基本环境变量。
推荐:OAuth2(设备授权)
{
"mcpServers": {
"anaplan": {
"command": "node",
"args": ["
/dist/index.js"],
"env": {
"ANAPLAN_CLIENT_ID": "your-client-id"
}
}
}
}首次使用时,Claude会在聊天中显示一个链接,在Anaplan中批准它,然后重试您的请求。OAuth令牌仅保存在内存中。如果MCP进程重新启动,或者OAuth会话空闲超过60分钟,系统将提示您再次授权,除非您提供 ANAPLAN_REFRESH_TOKEN 你自己。
OAuth支持仅限于设备授权。 ANAPLAN_CLIENT_SECRET, ANAPLAN_OAUTH_AUTHORIZATION_CODE,以及 ANAPLAN_OAUTH_REDIRECT_URI 被服务器忽略。
如果你不想要OAuth,请使用以下替代方案之一:
证书认证
"env": {
"ANAPLAN_CERTIFICATE_PATH": "/path/to/cert.pem",
"ANAPLAN_PRIVATE_KEY_PATH": "/path/to/key.pem"
}ANAPLAN_CERTIFICATE_ENCODED_DATA_FORMAT 可以选择性地添加;默认为 v2.Set v1 仅适用于传统租户。
基本认证
"env": {
"ANAPLAN_USERNAME": "user@company.com",
"ANAPLAN_PASSWORD": "your-password"
}仅当您需要电子邮件/密码身份验证而不是OAuth或证书身份验证时,才使用此选项。如果您的Anaplan帐户使用SSO,则基本身份验证可能无法工作,除非您的租户允许例外用户。
如果您的配置文件已经有内容,请添加 mcpServers 在现有顶级对象内-不要创建第二个 {} 块。
步骤3:重新启动克劳德桌面
完全退出Claude Desktop(右键单击系统托盘图标并退出-不要只是关闭窗口),然后重新打开它。您应该看到可用的Anaplan工具(在聊天输入区域中查找锤子图标)。
故障排除:
- “意外的非空格”错误 -您的JSON无效。确保只有一个
{}文件中的对象,没有尾随逗号。将配置粘贴到 Jsonlin.com 检查。 - 服务器断开连接 -快跑
node C:/path/to/anaplan-mcp/dist/index.js在终端中查看实际错误。常见原因:路径错误args,失踪npm run build,或未安装Node.js。 - 401使用工具时未经授权 -您的Anaplan凭据错误,或者您的帐户使用SSO(在这种情况下,基本身份验证将不起作用,请使用证书或OAuth2)。
- OAuth刷新失败/需要重新授权 -MCP服务器已启动并连接到Anaplan,但保存的OAuth会话不再有效。在MCP客户端中重新授权,然后重试该工具。
连接到克劳德代码
复制 .mcp.json.example 到 .mcp.json 并填写您的凭据。默认情况下,该文件是gitignore的,永远不要将凭据提交到版本控制中。
cp .mcp.json.example .mcp.json或者,使用CLI:
claude mcp add anaplan -- node /absolute/path/to/anaplan-mcp/dist/index.js其他MCP客户端
任何支持stdio传输的MCP兼容客户端都可以连接。服务器预计将作为子进程启动,并使用stdin/stdout进行通信。通过环境变量传递Anaplan凭据。
基于浏览器的人工智能(claude.AI、ChatGPT)
服务器还支持 可流式HTTP传输 用于远程MCP连接 claude.ai, ChatGPT以及其他基于浏览器的AI助手。部署到云平台(建议使用Fly.io),并通过远程MCP集成设置进行连接。
远程HTTP模式设计用于 每会话Anaplan OAuth,不是一个共享的Anaplan用户。集 ANAPLAN_CLIENT_ID 在服务器上,这样每个远程会话都可以使用自己的身份对Anaplan进行授权。基本身份验证(ANAPLAN_USERNAME/ANAPLAN_PASSWORD)和证书认证(ANAPLAN_CERTIFICATE_PATH/ANAPLAN_PRIVATE_KEY_PATH)是故意的 不 在远程HTTP模式下受支持——它们会将每个会话折叠到一个共享的Anaplan标识上,破坏每个用户的权限和可审计性。它们仅可用于stdio/本地使用。如果您希望在端点前增加一个额外的外门,您还可以设置 ANAPLAN_MCP_HTTP_AUTH_TOKEN 并让您的客户端或反向代理将其作为 Authorization: Bearer .
看 远程部署指南 有关完整的设置说明、平台建议和故障排除。
配置
环境变量
所有配置都是通过环境变量完成的。没有配置文件、CLI标志或设置菜单。
| 方法 | 环境变量 | 描述 |
|---|---|---|
| OAuth2(设备授权) | ANAPLAN_CLIENT_ID | 最高优先级。设备授权流程。Claude在聊天中向您展示URL和代码;在浏览器中授权,然后重试。令牌仅保留在内存中,因此重新启动或>60分钟的空闲时间需要另一个设备登录,除非您设置 ANAPLAN_REFRESH_TOKEN 手动 |
| 证书 | ANAPLAN_CERTIFICATE_PATH, ANAPLAN_PRIVATE_KEY_PATH, ANAPLAN_CERTIFICATE_ENCODED_DATA_FORMAT (可选) | 第二优先级。PEM证书+私钥,通过CACertificate流进行身份验证。数据格式默认为 v2 |
| 基础 | ANAPLAN_USERNAME, ANAPLAN_PASSWORD | 最低优先级。电子邮件+密码,向身份验证端点发送base64凭据 |
您只需要一组凭据。如果配置了多个,服务器会自动选择优先级最高的方法。
HTTP传输安全
这些仅适用于 npm run start:http /远程MCP部署:
| 变量 | 描述 |
|---|---|
ANAPLAN_CLIENT_ID | 远程HTTP模式需要。每个HTTP会话都使用此OAuth客户端通过Anaplan对最终用户进行身份验证 |
ANAPLAN_MCP_HTTP_AUTH_TOKEN | 可选额外边缘保护。设置后,调用者还必须将其作为 Authorization: Bearer . MCP_HTTP_AUTH_TOKEN 被接受为别名 |
ANAPLAN_MCP_HTTP_BODY_LIMIT | 远程HTTP请求的可选JSON正文限制。默认为 100mb 支持大型 run_import 和 upload_file 有效载荷。 MCP_HTTP_BODY_LIMIT 被接受为别名 |
在哪里设置环境变量
- 克劳德代码配置: 使用
"env"挡住.mcp.json(默认情况下,文件被忽略) - Claude桌面配置: 使用
"env"JSON配置中的块(将凭据限定在服务器范围内) - 外壳轮廓: 出口
.bashrc/.zshrc关于Claude Code CLI的使用 - 系统环境: 如果你愿意,可以在操作系统级别设置
安全说明: 切勿将凭据提交到版本控制。默认情况下,此仓库中的环境文件和MCP配置文件被忽略。
权限和安全
服务器可以做什么
此服务器具有 完全访问 无论你的Anaplan证书允许什么。70个工具涵盖了读写操作:
- 只读工具 (可自由安全使用):
show_*工具,read_cells,get_list_items,download_file,get_action_status - 编写工具 (修改数据):
write_cells,add_list_items,update_list_items,delete_list_items - 行动工具 (触发Anaplan流程):
run_import,run_export,run_process,run_delete - 管理工具 (模型管理):
close_model,open_model,bulk_delete_models,set_currentperiod,set_fiscalyear
Claude Desktop中的工具批准
Claude Desktop在每次调用工具之前都会提示您。您将看到工具名称和参数,并可以批准或拒绝。这使您有机会在执行任何操作之前进行查看。您还可以为您信任的工具使用“允许此聊天”选项。
建议
- 从只读开始。 在运行任何写入操作之前,请Claude探索您的工作区和模型。首先熟悉工具输出。
- 在开发工作区中进行测试。 如果您有一个非生产Anaplan工作区,请在熟悉工具的同时使用它。
- 使用最低权限凭据。 如果您的Anaplan管理员可以创建具有有限工作区访问权限的服务帐户,请使用该帐户而不是您的个人管理员帐户。
- 确认写入操作前进行审核。 当Claude建议运行导入、写入单元格或删除项目时,请在批准之前仔细阅读参数。
- 导出和导入是异步的。 服务器轮询,直到完成(最多5分钟)。您可以使用以下命令取消正在运行的任务
cancel_task如果需要的话。
工具
模型探索(37个工具)
| 工具 | 说明 |
|---|---|
show_workspaces | 列出所有可访问的工作区 |
GET /workspaces | |
show_workspacedetails | 获取工作区详细信息(大小和活动状态) |
GET /workspaces/{workspaceId} | |
show_models | 列出工作区中的模型。可选的 state filter:解锁、生产、存档、锁定、维护、生产_维护 |
GET /workspaces/{workspaceId}/models | |
show_allmodels | 列出所有工作空间中的所有模型。可选的 state filter:解锁、生产、存档、锁定、维护、生产_维护 |
GET /models | |
show_modeldetails | 获取模型详细信息,包括状态和工作空间 |
GET /models/{modelId} | |
show_modelstatus | 检查模型状态(传统端点,通常返回405) |
POST /workspaces/{workspaceId}/models/{modelId}/status | |
show_modules | 列出模型中的模块 |
GET /workspaces/{workspaceId}/models/{modelId}/modules | |
show_moduledetails | 通过过滤模块列表获取模块详细信息 |
GET /workspaces/{workspaceId}/models/{modelId}/modules | |
show_lineitems | 列出模块中的行项目(includeAll 支持) |
GET /models/{modelId}/modules/{moduleId}/lineItems | |
show_alllineitems | 列出模型中的所有行项目(includeAll 支持) |
GET /models/{modelId}/lineItems | |
show_lineitem_dimensions | 列出行项目的尺寸 |
GET /models/{modelId}/lineItems/{lineItemId}/dimensions | |
show_lineitem_dimensions_items | 列出行项目/维度对的维度项目 |
GET /models/{modelId}/lineItems/{lineItemId}/dimensions/{dimensionId}/items | |
show_savedviews | 列出模块中保存的视图和默认视图 |
GET /workspaces/{workspaceId}/models/{modelId}/modules/{moduleId}/views | |
show_allviews | 列出模型中的所有视图(跨模块) |
GET /models/{modelId}/views | |
show_viewdetails | 获取视图轴元数据(行、列、页) |
GET /models/{modelId}/views/{viewId} | |
show_lists | 列出模型中的列表(尺寸) |
GET /workspaces/{workspaceId}/models/{modelId}/lists | |
get_list_items | 从列表中获取项目 |
GET /workspaces/{workspaceId}/models/{modelId}/lists/{listId}/items | |
show_listmetadata | 获取包含父级/属性/计数的列表元数据 |
GET /workspaces/{workspaceId}/models/{modelId}/lists/{listId} | |
show_dimensionitems | 列出模型级维度中的所有项目 |
GET /models/{modelId}/dimensions/{dimensionId}/items | |
show_viewdimensionitems | 列出视图的选定维度项 |
GET /models/{modelId}/views/{viewId}/dimensions/{dimensionId}/items | |
lookup_dimensionitems | 按名称/代码解析维度项 |
POST /workspaces/{workspaceId}/models/{modelId}/dimensions/{dimensionId}/items | |
show_imports | 列出模型中的导入操作 |
GET /workspaces/{workspaceId}/models/{modelId}/imports | |
show_importdetails | 获取导入元数据 |
GET /workspaces/{workspaceId}/models/{modelId}/imports/{importId} | |
show_exports | 列出模型中的导出操作 |
GET /workspaces/{workspaceId}/models/{modelId}/exports | |
show_exportdetails | 获取导出元数据 |
GET /workspaces/{workspaceId}/models/{modelId}/exports/{exportId} | |
show_processes | 列出模型中的流程操作 |
GET /workspaces/{workspaceId}/models/{modelId}/processes | |
show_processdetails | 获取流程元数据 |
GET /workspaces/{workspaceId}/models/{modelId}/processes/{processId} | |
show_files | 列出模型中的文件 |
GET /workspaces/{workspaceId}/models/{modelId}/files | |
show_actions | 列出模型操作(包括删除) |
GET /workspaces/{workspaceId}/models/{modelId}/actions | |
show_actiondetails | 获取操作元数据 |
GET /workspaces/{workspaceId}/models/{modelId}/actions/{actionId} | |
show_currentperiod | 获取当前期间 |
GET /workspaces/{workspaceId}/models/{modelId}/currentPeriod | |
show_modelcalendar | 获取会计年度/日历设置 |
GET /workspaces/{workspaceId}/models/{modelId}/modelCalendar | |
show_versions | 列出版本元数据 |
GET /models/{modelId}/versions | |
show_currentuser | 获取当前经过身份验证的用户 |
GET /users/me | |
show_users | 列出租户范围内的用户 |
GET /users | |
show_userdetails | 按ID获取用户详细信息 |
GET /users/{userId} | |
show_tasks | 列出导入/导出/流程/操作的任务历史记录 |
GET /workspaces/{workspaceId}/models/{modelId}/{actionType}/{actionId}/tasks |
批量数据操作(28个工具)
| 工具 | 说明 |
|---|---|
run_export | 运行导出任务,下载输出,可选择在本地保存 saveToDownloads 和 fileName |
POST .../exports/{exportId}/tasks | |
run_import | 上传文件块,运行导入,轮询任务完成 |
POST .../imports/{importId}/tasks | |
run_process | 运行流程任务并完成轮询 |
POST .../processes/{processId}/tasks | |
run_delete | 运行删除操作任务 |
POST .../actions/{deleteActionId}/tasks | |
upload_file | 初始化分块上传,上传分块,完成文件上传 |
POST .../files/{fileId} | |
download_file | 通过读取所有块有效载荷来下载文件。文本内联返回;二进制文件应使用 saveToDownloads |
GET .../files/{fileId}/chunks | |
delete_file | 删除模型文件(不可逆) |
DELETE .../files/{fileId} | |
get_action_status | 获取导入/导出/处理/操作任务的状态 |
GET .../{actionType}/{actionId}/tasks/{taskId} | |
close_model | 关闭(存档)模型 |
POST .../models/{modelId}/close | |
open_model | 打开(唤醒)一个封闭的模型 |
POST .../models/{modelId}/open | |
bulk_delete_models | 删除多个已关闭的模型 |
POST /workspaces/{workspaceId}/bulkDeleteModels | |
set_currentperiod | 设置当前期间 |
PUT .../models/{modelId}/currentPeriod | |
set_fiscalyear | 更新模型会计年度 |
PUT .../models/{modelId}/modelCalendar/fiscalYear | |
set_versionswitchover | 设置版本切换日期 |
PUT /models/{modelId}/versions/{versionId}/switchover | |
download_importdump | 下载失败的导入转储块(CSV) |
GET .../imports/{importId}/tasks/{taskId}/dump/chunks | |
download_processdump | 下载失败的进程转储块(CSV) |
GET .../processes/{processId}/tasks/{taskId}/dumps/{objectId}/chunks | |
cancel_task | 取消正在运行的导入/导出/处理/操作任务 |
DELETE .../{actionType}/{actionId}/tasks/{taskId} | |
create_view_readrequest | 创建大容量视图读取请求 |
POST .../views/{viewId}/readRequests | |
get_view_readrequest | 获取大容量视图读取请求状态 |
GET .../views/{viewId}/readRequests/{requestId} | |
get_view_readrequest_page | 从视图读取请求下载CSV页面 |
GET .../views/{viewId}/readRequests/{requestId}/pages/{pageNo} | |
delete_view_readrequest | 删除大容量视图读取请求 |
DELETE .../views/{viewId}/readRequests/{requestId} | |
preview_list | 在完整的大型读取请求之前,从大列表(CSV)中预览多达1000条记录 |
GET .../lists/{listId}/readRequests/preview | |
create_list_readrequest | 创建大容量列表读取请求 |
POST .../lists/{listId}/readRequests | |
get_list_readrequest | 获取大容量列表读取请求状态 |
GET .../lists/{listId}/readRequests/{requestId} | |
get_list_readrequest_page | 从列表读取请求下载CSV页面 |
GET .../lists/{listId}/readRequests/{requestId}/pages/{pageNo} | |
delete_list_readrequest | 删除大容量列表读取请求 |
DELETE .../lists/{listId}/readRequests/{requestId} | |
reset_list_index | 重置列表项索引编号 |
POST /models/{modelId}/lists/{listId}/resetIndex | |
download_optimizer_log | 下载优化器求解器日志以获取已完成的操作 |
GET .../optimizeActions/{actionId}/tasks/{correlationId}/solutionLogs |
交易操作(5个工具)
| 工具 | 说明 |
|---|---|
read_cells | 从模块视图读取单元数据 |
GET /models/{modelId}/views/{viewId}/data?format=v1 | |
write_cells | 将值写入特定模块单元格 |
POST /models/{modelId}/modules/{moduleId}/data | |
add_list_items | 向列表中添加新项目 |
POST .../lists/{listId}/items?action=add | |
update_list_items | 更新现有列表项 |
PUT .../lists/{listId}/items | |
delete_list_items | 删除列表项 |
POST .../lists/{listId}/items?action=delete |
编排指南
服务器公开了一个内置的MCP资源(anaplan://orchestration-guide)AI助手会自动阅读。本指南为每个工作流类别教授正确的工具顺序:
- 导航 --工作区->模型->模块->行项目/视图
- 读取数据 --发现模块、查找视图、读取单元格(对于大于1M的单元格,回退到大容量读取)
- 写入数据 --在调用write_cell之前解析行项目维度和项目ID
- 大宗进口 --检查导入定义,将数据上传到源文件,运行导入,检查状态,如果失败,下载错误转储
- 批量导出 --单步run_export处理整个生命周期
- 过程 --运行链式操作,使用get_action_status进行监控
- 大容量读取 --创建请求、轮询直到完成、下载页面、清理
- 列出突变 --查找列表项,然后添加/更新/删除
每个工具描述还包括先决条件提示(“首先使用show_imports查找importId”)和参数描述,解释了每个值的来源(“来自show_lineitems或show_alllineitems”)。关键工作流工具在其响应中附加了“下一步”指南。
建筑
src/
auth/ # Authentication providers (basic, certificate, oauth) + token manager
api/ # HTTP client with retry logic + 17 domain-specific API wrappers
tools/ # MCP tool registrations (exploration, bulk, transactional) + response hints
resources/ # MCP resource content (orchestration guide)
server.ts # Wires auth > client > APIs > MCP server + registers resources
index.ts # Entry point (stdio transport)
http.ts # Entry point (Streamable HTTP transport)
docs/
api/ # Anaplan API reference docs (Integration, ALM, SCIM, CloudWorks, Audit)
architecture/ # Runtime diagrams (request flow, trust boundary, subsystem map)
guides/ # Tool selection and workflow guides
examples/ # Example output - FY26 Sales Forecast deck generated via MCP三层:
- 认证层 -通用背后的可插拔提供程序
AuthProvider界面。这AuthManager从env-vars中选择正确的提供者并处理令牌生命周期。 - API层 -
AnaplanClient处理与Anaplanneneneba API的所有HTTP通信。17个域包装器为每个端点提供类型化方法。使用Anaplan的自动分页列表端点meta.paging元数据。 - 工具层 -在服务器上使用zod模式注册MCP工具以进行输入验证。每个工具都委托给适当的API包装器并格式化结果。关键工具包括指导多工具工作流程的下一步提示。
有关详细的运行时图(请求流、信任边界、子系统映射),请参阅 docs/architecture/overview.md.
定制技能
这 skills/ 文件夹包含Claude Code项目级技能——可重用的指令集,AI助手在会话期间自动加载。
模板提供于 skills/example.md。复制它,重命名它,并填写您的说明。Claude Code将把它作为本项目中可用的技能。
默认情况下,技能被忽略(个人工作流程各不相同),只跟踪示例。添加你自己的,不用担心承诺。
免责声明
非官方个人项目-不隶属于Anaplan、不受Anaplan认可或支持。使用官方 Anaplan集成API v2 -没有未记录的端点。用户有责任遵守 Anaplan的服务条款。不提供保修;使用风险自负。
许可证
麻省理工学院-见 许可证 文件以获取详细信息。仅涵盖此存储库中的代码。Anaplan的API和服务受Anaplan的服务条款和可接受使用政策的约束。
