tm1-mcp-server
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- exec() — Shell command execution in scripts/check-annotation-coverage.mjs
- exec() — Shell command execution in scripts/check-no-flat-tm1-methods.mjs
- exec() — Shell command execution in scripts/check-output-schema-coverage.mjs
- exec() — Shell command execution in scripts/check-tool-registration.mjs
- exec() — Shell command execution in scripts/codemod-remove-dead-trycatch.mjs
- exec() — Shell command execution in scripts/lib/scan-tools.mjs
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
MCP server for IBM Planning Analytics / TM1 — full model lifecycle via REST API
tm1-mcp-server
Model Context Protocol (MCP) server for IBM Planning Analytics / TM1.
Exposes the full TM1 model lifecycle — metadata, dimensions, cubes, cell I/O,
TI processes, chores, security, and code-graph analysis — to any MCP-compatible
LLM client (Claude Code, Claude Desktop, etc.).
Tested against TM1 11.8 via REST API (Basic Auth).
Features
112 tools across 12 categories:
| Category | Tools |
|---|---|
| Metadata | list cubes / dimensions / processes / chores, get hierarchy |
| Model Building | create/delete/clear/unload cube, get/update/check cube rules, bulk get all rules |
| Dimension Management | dim + hierarchy CRUD, element CRUD, bulk upsert, attribute CRUD |
| Subsets | list/get/create/update/delete subsets |
| Views | list / create MDX view / delete view |
| Cell Data | execute MDX (+ format=markdown pivot render), get view, get cell value, write cells, pre-write coord check (N-Level + rule-overlap warn) |
| TI Development | process CRUD, compile, unbound check (pre-save validation), get/update code (single + bulk), datasource, variables, parameters, regex search across all TI, upsert (atomic-style bundle), ref validation (cube/dim resolve) |
| TI Lifecycle (.pro + git) | import .pro file (parse + 1-call deploy), diff installed vs .pro, install bundle (directory of .pro files), git export/import (diff-friendly {name}.json + {name}.ti two-file layout, tm1-git/TM1py style; inline or host-disk paths — see Local file access) |
| Process Execution | execute process, get parameters |
| Scheduling | chore CRUD, execute, toggle |
| Security | client + group CRUD, group assignment |
| Operations | server info, message log, transaction log, threads, sessions, file ops |
| Analysis | callgraph (full + summary mode + global ranking), object usage, chore graph, cache invalidation |
Install
Option A — from npm (recommended). No clone, no build. Run on demand withnpx (always pulls the latest published version):
npx -y tm1-mcp-server
…or install the tm1-mcp-server CLI globally:
npm install -g tm1-mcp-server
tm1-mcp-server
Option B — clone and build (source / development install):
git clone https://github.com/flameY3T1/tm1-mcp-server.git
cd tm1-mcp-server
npm install
npm run build
node dist/index.js
Updating
npx: picks up new versions automatically on the next start. If a stale
version is cached, runnpm cache clean --force(or pin a version with[email protected]), then restart your MCP client.- Global install:
npm update -g tm1-mcp-server(ornpm install -g tm1-mcp-server@latest); check withnpm view tm1-mcp-server versionvsnpm list -g tm1-mcp-server. - Source install:
git pull && npm install && npm run build.
Always restart the MCP client (Claude Desktop / Claude Code) after updating —
the server process is only spawned at client startup.
Configure
Copy .env.example to .env and set TM1 connection details:
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 (default) | readwrite
# TM1_LOCAL_FILE_ROOT=/srv/tm1-git # optional; enables host-disk file params (see below)
For CAM (Cognos Access Manager) / LDAP servers, set TM1_NAMESPACE to your
CAM namespace (the client then logs in with Authorization: CAMNamespace); or
supply a pre-obtained passport via TM1_CAM_PASSPORT (Authorization: CAMPassport, no user/password needed). Native TM1 auth stays the default when
neither is set.
See .env.example for the full set (CAM auth, timeouts, logging, HTTP transport).
Safe by default: the server starts in
TM1_MODE=readonly— only read
tools are registered, so it cannot mutate or delete anything. To enable the
full lifecycle (cell writes, cube/dimension/process deletion, TI execution),
setTM1_MODE=readwriteexplicitly. Never point areadwriteserver at a
production instance without reviewing the write path first.
Local file access (TM1_LOCAL_FILE_ROOT)
Tools that read or write files on the host running the server — tm1_import_pro_file,tm1_install_pro_bundle, tm1_diff_process_with_file, tm1_validate_process_refs,
and the git export/import pair — are disabled by default. SetTM1_LOCAL_FILE_ROOT to an absolute directory to enable host-path parameters;
every supplied path must resolve inside that root (path traversal is rejected).
TM1_LOCAL_FILE_ROOT=/srv/tm1-git # optional; enables host-disk file params
The git tools work without it via inline content:
tm1_export_process_to_gitreturns{name}.json+{name}.tiinline by
default; passwriteToDir(a host path under the root) to also persist them.tm1_import_process_from_gitacceptsjsonContent/tiContentstrings, orjsonPath/tiPathhost paths when the root is set.
Use with Claude Code
Credentials live in .env (loaded at startup from the repo root — the directory
containing dist/ — so it is found no matter which working directory the MCP
client launches the server from). The MCP client config only points at the
binary — do not put TM1_PASSWORD in .mcp.json or settings.json.
Copy mcp.json.example to .mcp.json (project-local) or merge into~/.claude/settings.json.
Recommended — npx (Option A install, no clone):
{
"mcpServers": {
"tm1": {
"command": "npx",
"args": ["-y", "tm1-mcp-server"]
}
}
}
If you installed globally (npm install -g tm1-mcp-server), use the CLI name:
{
"mcpServers": {
"tm1": {
"command": "tm1-mcp-server"
}
}
}
For a source build (Option B), point at the built entrypoint:
{
"mcpServers": {
"tm1": {
"command": "node",
"args": ["/absolute/path/to/tm1-mcp-server/dist/index.js"]
}
}
}
Restart Claude Code → server name tm1 available.
HTTP transport (Streamable, stateless)
Default transport is stdio (best for local Claude Code / Claude Desktop).
For multi-client / remote setups, switch to MCP Streamable HTTP:
TM1_MCP_TRANSPORT=http
TM1_MCP_HTTP_HOST=127.0.0.1 # default — bind loopback only
TM1_MCP_HTTP_PORT=3000 # default
TM1_MCP_HTTP_ALLOWED_ORIGINS= # optional, comma-separated extra Origins past DNS-rebinding protection
TM1_MCP_HTTP_TOKEN= # optional, require "Authorization: Bearer <token>" on every /mcp request
Then npm start exposes a single POST /mcp endpoint speaking JSON-RPC
(stateless mode, no session IDs). DNS-rebinding protection is on by default
and Host/Origin are validated against allowedHosts: [host:port, 127.0.0.1, localhost].
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"}}}'
Setting
TM1_MCP_HTTP_HOST=0.0.0.0exposes the server (and your TM1
credentials) to the LAN — only do this behind a reverse proxy with
additional auth.The HTTP transport has no built-in authentication unless you set
TM1_MCP_HTTP_TOKEN. When set, every/mcprequest must carryAuthorization: Bearer <token>(others get401). Without it, bind to
loopback only or front the server with an authenticating reverse proxy.
Security
- Keep
TM1_PASSWORDand any other secret only in.env(gitignored). .mcp.jsonand~/.claude/settings.jsonare often shared/committed —
passingenv: { TM1_PASSWORD: "..." }there leaks the credential into
team configs, dotfile repos, and Claude Code session logs.- If you must override per-host, use a per-host
.envfile rather than
inlineenvblocks in client config. - Need multiple TM1 environments? Run multiple server instances, each with
its own working directory and.env. Distinguish bymcpServerskey
(e.g.tm1-prod,tm1-dev).
autoApprove
mcp.json.example ships an autoApprove list of read-only tools only —
analyze/list/get/search/check/compile/diff. Destructive tools
(delete_*, clear_*, unload_*, cancel_*, execute_*,remove_*, invalidate_*) and writes (create_*, update_*,upsert_*, write_cells, import_pro_file, …) deliberately stay
off the allowlist and require manual approval per call.
Each tool also publishes MCP readOnlyHint / destructiveHint /idempotentHint annotations (see src/tools/annotation-map.ts) so
clients that surface those hints can warn before invoking destructive
tools.
Development
npm run dev # tsx live-reload
npm test # vitest
npm run lint # tsc --noEmit
Documentation
- docs/EXAMPLES.md — working JSON tool-call payloads for every major feature
- docs/ARCHITECTURE.md — layering, service-class pattern, transports, the readonly/readwrite gate
- CONTRIBUTING.md — workflow, lint gates, how to add a tool or service
- CHANGELOG.md · SECURITY.md · CODE_OF_CONDUCT.md
Contributing
Contributions are welcome. Read CONTRIBUTING.md first — runnpm run verify (typecheck + lint gates + tests) before opening a PR. This is a
best-effort project with no support guarantee (see Provenance).
Analysis Tools
Bulk-load + callgraph tools for code review and dependency tracking:
tm1_get_all_processes_code— all TI processes + 4 tabs in one roundtriptm1_get_all_cube_rules— all cube rules in one roundtriptm1_search_code— regex over all TI tabs with per-process / total caps; returns hit lines instead of full bulktm1_analyze_callgraph— ExecuteProcess/RunProcess tree (downstream/upstream) with parameter env propagation.mode='summary'returns flat per-process aggregates (occurrences, depthMin/Max) for triage before pulling a heavy tree. Omitstartfor a global ranking: every process ranked byrankBy='outgoing'(fan-out) or'incoming'(fan-in) call counts — answers "which process triggers / is triggered by the most others" without a per-process traversal.tm1_analyze_object_usage— find cube/dim references across TI + rulestm1_analyze_chore_graph— per-task downstream tree for a choretm1_invalidate_callgraph_cache— reset 60s TTL cache after deploytm1_audit_naming— bulk-scan all TM1 objects against IBM Planning Analytics naming conventions (PA 2.0 + 3.1)tm1_audit_complexity— bulk-scan TI processes + cube rules for complexity metrics (LOC, branches, max nesting, comment ratio) and cross-process consistency (variable-name clusters, type conflicts, prefix-convention adherence). Tolerates Bedrock-style condensed multi-statement lines.tm1_audit_feeders— bulk-scan cube rules for overfeeding patterns. Static heuristics S1–S5 (feeder broader than rule, feeder-into-consolidated, wildcard/unscoped brackets, DB() into cubes withoutskipcheck;, orphan feeders) plusmode: "runtime" | "both"for}StatsByCubeevidence (cube_high_fed_ratio — fed/populated ≥ 50× hint, ≥ 100× evidence per TM1-community calibration — and cube_high_memory). Runtime evidence escalates static findings on the same cube from severityhint→evidence. CI gate viaseverityThreshold: "evidence".
MCP Resources
Four read-only resources for IDE sidebar browsing and #-references in chat:
| URI | Content | Completion |
|---|---|---|
tm1://server/info |
Server identity + config snapshot | — |
tm1://server/state |
Health-check: counts, connection state | — |
tm1://process/{name}/code |
TI process source (all 4 tabs, JSON) | name autocomplete |
tm1://cube/{name}/rules |
Cube rules text (plain text) | name autocomplete |
Completion callbacks filter by substring match (max 100 suggestions, control objects excluded).
Use #tm1://process/MyProcess/code in Claude Code chat to attach a process as context.
TI Lifecycle (.pro file)
Tools that work on the native TM1 .pro serialization format — useful for
Bedrock-style libraries, version control, and brownfield deployments. The
parser handles tabs (572-575), parameters (560/561/590/637), variables
(577-582), and datasource (562-589).
tm1_import_pro_file— parse a.proand deploy in one call (create/update/upsert). Optional preflight via unbound compile.tm1_diff_process_with_file— compare installed process vs.pro(per-tab line counts + identical flag, parameter add/remove/change, variable diff, datasource diff). Use before import to preview.tm1_install_pro_bundle— iterate a directory of.profiles (optionally recursive, regex filename filter). Per-file mode + dryRun + continueOnError. Returns per-file outcome.tm1_upsert_process— same atomic-style bundle asimport_pro_filebut body is passed inline (no.proparser).
Pre-Write Validation
Catch the gap between "compile passes" and "runtime crashes":
tm1_check_process_code— unbound process compile (no save). Returns syntax errors with procedure tab + line number.tm1_check_cube_rule— same for cube rules.tm1_validate_process_refs— scan TI code for cube/dim references in well-known functions (CellGetN/S, CellPutN/S, ViewCreate, DimensionElementInsertDirect, AttrPutS/N, ElementSecurityPut, …) and verify each name resolves on the live model.tm1_check_writable_coords— pre-flight before CellPutN/S: every coord element exists, every element is N-Level (writes to Consolidated silent-fail), and a rule-overlap warning if the cube has rules.
Compatibility
- Node.js >= 20
- TM1 11.8 (most tools); some metadata-write paths assume 11.x semantics
- v12-only features (e.g.
DataSource.usesUnicode) gated behindTM1_VERSION
Tool Reference
Auto-generated by scripts/gen-tool-list.mjs — run npm run tools:update-readme after registering or removing a tool.
Tools (112)
analysis (10)
tm1_analyze_callgraph— Build a process call graph (ExecuteProcess/RunProcess) for a TI processtm1_analyze_chore_graph— Build downstream call graphs for every task of a TM1 choretm1_analyze_object_usage— Find every reference to a cube or dimension across all TI processes (CellGet/Put, ViewExtract, ZeroOut, …) and cube rules (DB(), [dim].[el])tm1_audit_complexity— Bulk-scan TI processes and cube rules for complexity metrics (LOC, branches, max nesting, score)tm1_audit_feeders— Static heuristics (S1–S5) scan cube rules for overfeeding: wildcard brackets, feeders into consolidatedtm1_audit_naming— Bulk-scan TM1 objects against IBM PA 2.0/3.1 naming conventions; reports hard violations onlytm1_check_v12_readiness— Static gap-analysis against the TM1 / Planning Analytics v12 (Cloud Native) deprecation listtm1_find_orphan_dimensions— Identify dimensions that are not referenced by any cube — a model hygiene checktm1_invalidate_callgraph_cache— Drop the in-memory ReferenceIndex cache used by tm1_analyze_callgraph / tm1_analyze_object_usage / tm1_analyze_chore_graphtm1_trace_data_flow— Trace data flow into and out of a cube in one call, instead of analyze_object_usage + N× get_process_code
celldata (10)
tm1_check_feeders— Check the feeders of a cell: verifies feeder coverage for the cells underlying this cell and returns the problematic ones with a fed flag — fed=false marks a brtm1_check_writable_coords— Pre-flight check before CellPutN/CellPutStm1_execute_mdx— Execute an MDX query against the TM1 server and return structured cell data with axes (page-envelope shape consistent with list_*)tm1_get_cell_value— Get a single cell value from a TM1 cube by specifying element coordinatestm1_get_view— Execute a named cube view and return structured cell data with axestm1_get_view_definition— Return the structural definition of a cube view (MDX expression OR NativeView axes) WITHOUT executing ittm1_sample_cells— Return up to maxCells populated cells from a cube without guessing element coordinatestm1_trace_cell_calculation— Trace how a cell value is calculated: recursive component tree with per-component type (Consolidation/Rule/Simple), status (Null/Data/Error), value, and the rultm1_trace_feeders— Trace the feeders of a cell: returns the cells this cell feeds plus the feeder statements involved — answers 'which feeder statement fires from this cell, and wtm1_write_cells— Write one or more cell values directly to a TM1 cube via REST
dimension-management (13)
tm1_bulk_upsert_elements— Create or update multiple elements in a TM1 hierarchy in bulk (two-pass: leafs first, then consolidations)tm1_create_dimension— Create a new TM1 dimension with a default hierarchy of the same nametm1_create_element— Create a new element in a TM1 dimension hierarchytm1_create_element_attribute— Create an element attribute definition (schema) on a TM1 hierarchytm1_create_hierarchy— Create a new (alternate) hierarchy inside an existing dimensiontm1_delete_dimension— Delete a TM1 dimension and all its hierarchiestm1_delete_element— Delete an element from a TM1 dimension hierarchytm1_delete_hierarchy— Delete a hierarchy from a dimensiontm1_get_element_attribute_values— Read all attribute values (Numeric/String/Alias) for a single element via MDX on the }ElementAttributes_{Dim} control cubetm1_list_element_attributes— List element attribute definitions of a TM1 hierarchy with their types (Numeric/String/Alias)tm1_move_element— Move an element to a new parent within a TM1 dimension hierarchytm1_update_element— Update an existing element in a TM1 dimension hierarchy (name, type, or components)tm1_update_element_attribute_value— Set a single attribute value on an element by writing to the }ElementAttributes_{Dim} control cube
fileops (5)
tm1_delete_file— Delete a file from the TM1 server's blob/file storagetm1_get_file_content— Read the content of a file from the TM1 server's data directorytm1_list_files— List files in the TM1 server's data directory (blob/file storage)tm1_search_files— Search file names in the TM1 server's blob/file storage by prefix and/or substringtm1_upload_file— Upload (create or update) a file in the TM1 server's blob/file storage
metadata (10)
tm1_get_ancestors— Get all ancestors of an element via parent-walktm1_get_descendants— Get descendants of a consolidation elementtm1_get_hierarchy— Get hierarchy elements with parent-child relationships for a given dimensiontm1_list_chores— List chores in the TM1 server with schedule and assigned processestm1_list_cubes— List cubes in the TM1 servertm1_list_dimensions— List dimensions in the TM1 server with their hierarchy namestm1_list_processes— List TurboIntegrator processes in the TM1 server with their parameterstm1_list_processes_grouped— Group TI processes by name prefix to give a structural overview without listing every processtm1_resolve_default_member— Resolve a hierarchy's effective default member in one call — avoids the 3-8 round-trip iterative level-scan when constructing view slicerstm1_resolve_default_members— Bulk variant of tm1_resolve_default_member — resolves N hierarchies in parallel from a single tool call
model-building (9)
tm1_check_cube_rule— Validate the syntax of a TM1 cube rule WITHOUT applying ittm1_clear_cube— Clear a subset of cells from a cubetm1_create_cube— Create a new TM1 cube with the specified dimensionstm1_delete_cube— Delete a TM1 cube and all its datatm1_get_all_cube_rules— Bulk-load rules text for every cube in one calltm1_get_cube_rules— Get the current rules text for a TM1 cubetm1_search_rules— Regex search across cube rules texttm1_set_cube_rules— Create or replace the rules for a TM1 cubetm1_unload_cube— Unload a cube from memory
operations (13)
tm1_cancel_thread— Cancel a running TM1 server thread by its IDtm1_diagnose_process_error— One-call error diagnosis for a failed TI process: lists matching error logs, fetches their content, and optionally includes cascade-related sibling logs (same ttm1_get_audit_log— Fetch recent TM1 audit log entries (metadata/security changes: who changed what, when), newest firsttm1_get_cube_stats— Read }StatsByCube metrics for one or more cubes (memory, populated cells, fed cells, feeder efficiency)tm1_get_error_log_content— Fetch the raw text of one TI error log file produced by a failed process runtm1_get_message_log— Fetch recent TM1 server message log entries, newest firsttm1_get_server_info— Return TM1 server identity + curated configuration (TI, Rules, MTQ, JobQueuing, Memory, Logging, HTTP, Security)tm1_get_server_state— Health-check style snapshot of the TM1 server in one calltm1_get_transaction_log— Fetch recent TM1 transaction log entries (cell writes), newest firsttm1_list_error_logs— List TI process error log files on the TM1 server, newest firsttm1_list_sessions— List active sessions on the TM1 server with their associated user and threadstm1_list_threads— List active threads on the TM1 server (running processes, chores, MDX queries, etc.)tm1_save_data— Persist in-memory cube data to disk: SaveDataAll (all cubes) or CubeSaveData whencubeis given
scheduling (5)
tm1_create_chore— Create a new TM1 chore with a schedule and list of TI processes to runtm1_delete_chore— Delete a TM1 chore permanently.tm1_execute_chore— Execute a TM1 chore immediately, bypassing its scheduletm1_toggle_chore— Activate or deactivate a TM1 chore (enable/disable its schedule).tm1_update_chore— Update an existing TM1 chore
security (8)
tm1_assign_client_group— Assign a TM1 client to a grouptm1_create_client— Create a new TM1 client (user)tm1_delete_client— Delete a TM1 client (user)tm1_get_client— Get details for a single TM1 client (user) including group memberships.tm1_list_clients— List TM1 clients (users)tm1_list_groups— List TM1 groupstm1_remove_client_group— Remove a TM1 client from a grouptm1_update_client— Update a TM1 client
subsets (5)
tm1_create_subset— Create a public TM1 subsettm1_delete_subset— Delete a public TM1 subsettm1_get_subset— Get a single TM1 subset with its MDX expression (if any) and resolved element listtm1_list_subsets— List public + private subsets of a TM1 hierarchytm1_update_subset— Update a public TM1 subset (partial)
ti-development (20)
tm1_check_process_code— Validate TI process code WITHOUT saving it on the server (POST /api/v1/CompileProcess unbound)tm1_compile_process— Compile a TI process to validate its syntax without executing ittm1_copy_process— Copy a TI process (including variables and datasource) to a new nametm1_delete_process— Delete a TurboIntegrator process from the TM1 servertm1_diff_process_with_file— Compare an installed TI process on the server against a local .pro filetm1_diff_processes— Compare two installed TI processes tab-by-tab (Prolog/Metadata/Data/Epilog)tm1_execute_process— Execute a TurboIntegrator process on the TM1 server with optional parameterstm1_export_process_to_git— Serialize a TM1 process to the tm1-git two-file layout: a '{name}.json' (parameters, variables, datasource) plus a '{name}.ti' (Prolog/Metadata/Data/Epilog as ptm1_export_process_to_pro— Reverse of tm1_import_pro_file: serialize a TM1 process back to a .pro file bodytm1_get_all_processes_code— Bulk-load source code (Prolog/Metadata/Data/Epilog) of every TI process in one calltm1_get_process_code— Get the source code of all four tabs (Prolog, Metadata, Data, Epilog) of a TI processtm1_get_process_datasource— Get the data source configuration of a TurboIntegrator processtm1_get_process_parameters— Get the parameters of a TurboIntegrator process including names, types and defaultstm1_get_process_variables— Get the variables (column-name mapping for ASCII/ODBC sources) of a TurboIntegrator processtm1_import_pro_file— Parse a TM1 .pro file (Tabs / Parameters / Variables / DataSource) and deploy the process in one calltm1_import_process_from_git— Deploy a TM1 process from the tm1-git two-file layout ('{name}.json' + '{name}.ti')tm1_install_pro_bundle— Install all .pro files from a directory in one calltm1_search_code— Regex search across all TI process code (Prolog/Metadata/Data/Epilog)tm1_upsert_process— Atomic-style create-or-update for a TI processtm1_validate_process_refs— Scan a TI process (live, by name, or from .pro) for cube/dimension references in well-known TI functions (CellGetN/S, CellPutN/S, ViewCreate, DimensionElementIn
views (4)
tm1_create_mdx_view— Create a public MDX-based view on a cubetm1_create_native_view— Create a public native (subset-based) view on a cube — the classic view type used as TI process datasourcetm1_delete_view— Delete a public view from a cube.tm1_list_views— List public and private views defined on a cube
Troubleshooting
TLS / self-signed certificate errors (unable to verify the first certificate, self-signed certificate): TM1 dev servers often use self-signed
certs. Set TM1_SSL_REJECT_UNAUTHORIZED=false for those — but only for dev,
never against production.
401 / authentication failed: verify TM1_USER / TM1_PASSWORD and thatTM1_BASE_URL points at the REST API port (e.g. https://host:8010). Some test
servers allow a blank admin password — an empty TM1_PASSWORD is accepted and
the server logs a warning rather than blocking, so the real TM1 401 surfaces
with context. For CAM/LDAP servers a 401 usually means the wrongTM1_NAMESPACE (or an interactive account on PA Cloud — use a non-interactive
service account); confirm the server's IntegratedSecurityMode viatm1_get_server_info.
v11 vs v12 feature errors (DataSource.usesUnicode, hierarchy/Files
endpoints): set TM1_VERSION=11.8 (or your 11.x) so v12-only paths are
disabled. The file service auto-falls back from the v12 Files root to the v11Blobs root.
HTTP transport: 401 Unauthorized on /mcp: TM1_MCP_HTTP_TOKEN is set —
send Authorization: Bearer <token>. Connection refused / origin rejected:
the server binds 127.0.0.1 by default and validates Host/Origin; add your
origin to TM1_MCP_HTTP_ALLOWED_ORIGINS, or set TM1_MCP_HTTP_HOST (loopback
only unless fronted by an authenticating proxy).
tm1_get_transaction_log is slow or times out: the TM1 transaction log is a
full scan. Always pass a tight since window; broad queries can hit the query
timeout.
Startup error Invalid TM1_…: expected a positive integer: a numeric env
var (TM1_KEEP_ALIVE_INTERVAL, TM1_REQUEST_TIMEOUT, TM1_MCP_HTTP_PORT) has a
non-numeric or non-positive value. Fix the value or unset it to use the default.
Provenance
This codebase was generated by an AI coding agent (Anthropic's Claude),
reviewed and tested but not written by hand. The test suite is also
AI-generated and runs against mocks, not a live TM1 server — passing tests do
not guarantee correct REST semantics on your Planning Analytics version. Verify
behavior against your own instance before relying on it, especially for any
write or destructive operation. Provided "as is", best-effort, no support
guarantee. See NOTICE.
IBM, Planning Analytics, and TM1 are trademarks of IBM Corp. This project is
not affiliated with or endorsed by IBM.
License
MIT — see LICENSE.
This project is not affiliated with, sponsored by, or endorsed by IBM.
IBM, TM1, and Planning Analytics are trademarks of International Business
Machines Corporation. The names are used here solely to describe
compatibility with the TM1 REST API.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found