Skip to content

Connect Anaplan to Claude: Manage Revisions and Audit Tracking

Learn how to connect Anaplan to Claude using a managed MCP server. Automate model revisions, track audit logs, and execute CloudWorks integrations with AI.

Riya Sethi Riya Sethi · · 9 min read
Connect Anaplan to Claude: Manage Revisions and Audit Tracking

If your team uses ChatGPT, check out our guide on connecting Anaplan to ChatGPT or explore our broader architectural overview on connecting Anaplan to AI Agents.

Giving a Large Language Model (LLM) read and write access to an enterprise planning platform like Anaplan is an engineering challenge. You have to handle short-lived authentication sessions, map highly nested workspace hierarchies to Model Context Protocol (MCP) tool definitions, and deal with Anaplan's strict API concurrency limits. Every time Anaplan updates an endpoint or changes its administrative constraints, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Anaplan, connect it natively to Claude Desktop, and execute complex workflows - like model synchronization and audit tracking - using natural language.

The Engineering Reality of the Anaplan API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Anaplan's API is painful. You are not just integrating a simple REST API - you are integrating a highly structured, multi-tenant planning engine that enforces strict administrative boundaries.

If you decide to build a custom MCP server for Anaplan, here are the specific integration challenges you will face:

Workspace Hierarchy and Role Governance Anaplan's API is deeply nested. You cannot simply "query models." Almost every operation requires a workspace_id and a model_id. Furthermore, the API enforces strict role-based access control. Endpoints like create_a_anaplan_revision or anaplan_models_close require the user to be a Workspace Administrator. If your MCP server does not correctly expose these identifier requirements to Claude, the LLM will repeatedly guess parameters and fail. Truto maps these dependencies directly into the JSON schema of each tool, ensuring Claude knows exactly what identifiers it needs before attempting an action.

Exclusive Model Locks and Concurrency Certain actions in Anaplan - such as imports, exports, or writeback operations - require exclusive access to a model during execution. When these actions run, they lock the model. If Claude attempts to execute a data sync while a model is locked, the API will throw an error. A proper Anaplan integration requires checking the model status (get_single_anaplan_model_status_by_id) before initiating destructive or locking actions. You also need a mechanism to forcefully release locks (anaplan_models_close) if a previous job failed silently.

Dump File Chunking for Large Payloads Anaplan handles massive datasets (like model exports or audit dumps) using a specific chunking mechanism. You cannot download a 5GB process dump in a single HTTP request. You must first query the number of chunks (list_all_anaplan_process_dump_chunks), and then iterate through them sequentially, concatenating the bytes locally. This is exceptionally difficult for an LLM to manage natively. By exposing these granular chunking operations as individual MCP tools, Claude can write Python scripts in its execution environment to handle the heavy lifting, using the API to feed the required chunk IDs.

Rate Limits and 429 Headers Anaplan enforces strict rate limits on API requests. It is critical to note that Truto does not retry, throttle, or apply backoff on rate limit errors. When Anaplan returns an HTTP 429 (Too Many Requests), Truto passes that error directly to the caller. Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. The caller - in this case, Claude or your agent orchestrator - is entirely responsible for reading these headers and executing retry and backoff logic. Do not expect the integration layer to absorb these limits for you.

Generating the Anaplan MCP Server

Truto dynamically generates MCP tools based on Anaplan's API documentation and endpoint definitions. Because Truto maintains the underlying API connections and authentication state (like Anaplan's 35-minute token lifecycle), your MCP server remains continuously authenticated.

You can generate an MCP server for Anaplan using either the Truto UI or the API.

Method 1: Via the Truto UI

This is the fastest method for internal tooling or local agent testing.

  1. Log into your Truto account and navigate to the Integrated Accounts page.
  2. Select your connected Anaplan account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Select your configuration. You can filter the tools by method (e.g., read, write, custom) or restrict access using specific tool tags.
  6. Click Generate and copy the resulting MCP server URL (e.g., https://api.truto.one/mcp/a1b2c3d4e5f6...).

Method 2: Via the Truto API

For production use cases where you need to programmatically provision MCP servers for your end-users, use the Truto API.

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer <YOUR_TRUTO_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Anaplan RevOps Server",
    "config": {
      "methods": ["read", "write", "custom"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'

The response returns the server ID and the cryptographic URL required for Claude to connect.

{
  "id": "mcp-7f8a9b",
  "name": "Anaplan RevOps Server",
  "config": { "methods": ["read", "write", "custom"] },
  "expires_at": "2026-12-31T23:59:59Z",
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}

Connecting the MCP Server to Claude

Once you have your Truto MCP URL, you need to register it with your LLM client. Claude will automatically call the tools/list endpoint to discover the available Anaplan operations.

Method A: Via the Claude UI

If you are using Claude Desktop or a supported enterprise tier:

  1. Open Claude Desktop.
  2. Navigate to Settings > Integrations > Add MCP Server.
  3. Give the server a descriptive name (e.g., "Anaplan Admin").
  4. Paste the Truto MCP URL into the connection field.
  5. Click Add.

(Note: If your team uses ChatGPT, the process is similar: go to Settings > Apps > Advanced settings, enable Developer mode, and add the server under Custom connectors).

Method B: Via Manual Config File

For developers using the Claude Desktop configuration file directly, you can map the Truto URL using the Server-Sent Events (SSE) transport provided by the official MCP SDK.

Edit your claude_desktop_config.json file (typically located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "anaplan_truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/a1b2c3d4e5f67890"
      ]
    }
  }
}

Restart Claude Desktop. The application will initialize the connection, perform the handshake, and load the Anaplan tools.

Hero Tools for Anaplan

Truto exposes dozens of tools for Anaplan. Here are 6 high-leverage hero tools that enable complex model management and auditing workflows.

1. list_all_anaplan_audit_events

Retrieves the audit events stored in the database for the tenant associated with your user. This is critical for tracking who modified models, changed access rights, or triggered integrations.

"Fetch the Anaplan audit events for the last 48 hours and identify any users who were granted Workspace Administrator privileges."

2. create_a_anaplan_revision

Creates a model revision. Revisions are snapshots of the model's structural state. This tool requires Workspace Administrator access and ensuring the model is in standard mode.

"Create a new revision for the Q4 Financial Planning model in the Finance workspace, naming it 'Pre-Close Snapshot'."

3. create_a_anaplan_sync_task

Initiates a task to synchronize structural data across two models. This is used when moving changes from a development model to a production model via Application Lifecycle Management (ALM).

"Start a sync task to push the 'Pre-Close Snapshot' revision from the staging model to the production model. Monitor the task ID until it completes."

4. anaplan_models_close

Enables a workspace administrator to forcefully close a model without having to wait for a timeout. This is incredibly useful for root cause analysis or releasing a locked model when a process fails mid-execution.

"The supply chain model appears to be locked by an old export job. Close the model immediately so we can resume normal operations."

5. anaplan_cloudworks_integrations_execute

Executes a predefined CloudWorks integration. CloudWorks connects Anaplan to external cloud storage (like AWS S3 or Azure Blob) to pull or push large datasets.

"Run the CloudWorks integration for the daily AWS S3 inventory import. Let me know if the run throws any errors."

6. get_single_anaplan_model_status_by_id

Checks the current online/offline and lock status of a specific model. Always use this before attempting destructive actions or large data writes.

"Check the status of the EU Revenue model. If it is currently locked by a writeback action, tell me who initiated it."

To see the complete tool inventory, including endpoints for managing lists, users, export tasks, and SCIM provisioning, visit the Anaplan integration page.

Workflows in Action

Here is how an AI agent uses these tools in sequence to execute complex Anaplan tasks.

Scenario 1: Pre-Deployment Audit and Model Sync

Persona: Application Lifecycle Management (ALM) Administrator

"Before we deploy to production, check the audit logs for the staging model over the last 24 hours. If there are no unauthorized structural changes, create a new revision named 'v2.4-RC', and sync it to the production model."

Agent Execution Steps:

  1. list_all_anaplan_audit_events: The agent queries the audit events, filtering by the staging model_id and analyzing the payload for structural_change event types.
  2. create_a_anaplan_revision: Finding no anomalies, the agent calls this tool on the staging model, passing name: "v2.4-RC". It receives a revision_id.
  3. create_a_anaplan_sync_task: The agent initiates the sync, passing the workspace_id, the target production model_id, the source staging model_id, and the new revision_id.
  4. get_single_anaplan_sync_task_by_id: The agent loops this tool every few seconds to monitor the sync task, waiting until the status reads COMPLETE.

What the user gets: A confirmation that the audit passed, the revision ID of the new snapshot, and validation that the production model is now running the updated structure.

sequenceDiagram
    participant User as User
    participant Claude as Claude
    participant Truto as Truto MCP
    participant Anaplan as Anaplan API

    User->>Claude: "Audit staging, create revision, sync to prod"
    Claude->>Truto: call list_all_anaplan_audit_events
    Truto->>Anaplan: GET /audit/events
    Anaplan-->>Truto: Return event JSON
    Truto-->>Claude: Clean audit logs
    Claude->>Truto: call create_a_anaplan_revision
    Truto->>Anaplan: POST /models/{id}/revisions
    Anaplan-->>Truto: Return revision_id
    Truto-->>Claude: Revision created
    Claude->>Truto: call create_a_anaplan_sync_task
    Truto->>Anaplan: POST /models/{id}/syncTasks
    Anaplan-->>Truto: Return task_id
    Truto-->>Claude: Sync initiated
    Claude-->>User: "Sync complete. Prod model updated to v2.4-RC."

Scenario 2: Resolving Model Locks and Triggering CloudWorks

Persona: Financial Systems Analyst

"Try to run the nightly NetSuite data import via CloudWorks on the Main Ledger model. If the model is locked, force close it first, wait for it to come online, and then run the integration."

Agent Execution Steps:

  1. get_single_anaplan_model_status_by_id: The agent checks the Main Ledger model. The API returns a status indicating the model is locked due to a timeout on a previous user's export.
  2. anaplan_models_close: The agent explicitly kills the session and forces the model to close, releasing the lock.
  3. anaplan_models_start: The agent sends a wake-up command to bring the model back online cleanly.
  4. anaplan_cloudworks_integrations_execute: Once online, the agent triggers the CloudWorks integration ID mapped to the NetSuite import.

What the user gets: A report detailing that the model was locked, confirmation that the lock was cleared without manual intervention, and the Run ID of the newly started CloudWorks integration.

Security and Access Control

When connecting an AI agent to a mission-critical platform like Anaplan, security is paramount. Truto MCP servers enforce security at the infrastructure layer, ensuring LLMs only access exactly what you allow.

  • Method filtering: Restrict the MCP server to specific HTTP methods. You can limit an agent to read only (GET/LIST), preventing it from accidentally deleting lists or running syncs.
  • Tag filtering: Group tools logically. You can create an MCP server that only exposes tools tagged with cloudworks or audit, explicitly hiding core model structural endpoints.
  • Require API token auth (require_api_token_auth): For shared environments, you can require the caller to pass a valid Truto API token in the Authorization header alongside the MCP token URL. This prevents anonymous execution if the URL leaks.
  • Auto-expiring servers (expires_at): Generate ephemeral MCP servers for temporary automation runs. Once the expires_at timestamp is reached, Truto automatically destroys the token and drops all access.

Automate Planning with Precision

Integrating Anaplan with Claude changes how RevOps, FP&A, and IT teams interact with planning models. Instead of forcing analysts to navigate complex UI menus to check sync statuses, clear locks, or dig through audit logs, you can expose these operations as natural language commands.

By leveraging Truto's managed MCP architecture, you bypass the headache of parsing Anaplan's role-based access rules, managing token lifecycles, and manually curating JSON schemas for every endpoint. You get secure, authenticated, and highly curated tools out of the box, ready for agentic execution.

FAQ

How does Truto handle Anaplan's API rate limits?
Truto does not retry, throttle, or apply backoff on rate limit errors. When Anaplan returns a 429 Too Many Requests error, Truto passes it directly to Claude along with normalized ratelimit headers. The caller must implement retry logic.
Can I restrict Claude from making structural changes to Anaplan models?
Yes. When generating the MCP server in Truto, you can apply method filtering (e.g., `methods: ["read"]`) to ensure Claude only has access to GET and LIST endpoints, preventing destructive actions.
How do Anaplan MCP servers handle large data exports?
Anaplan enforces chunking for large dump files. Truto exposes these chunking endpoints (like `list_all_anaplan_process_dump_chunks`) as individual MCP tools, allowing Claude to query the chunk count and write scripts to download them sequentially.
Does Truto support Anaplan CloudWorks?
Yes. The MCP server includes tools to execute, monitor, and cancel CloudWorks integrations directly via Claude.

More from our Blog