IcePanel MCP connector
OAuth 2.1/DCRDeveloper ToolsCollaborationConnect your IcePanel software architecture models to AI agents. Query and update your C4 model landscapes — systems, apps, components, connections, and...
IcePanel MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Set up the connector
Section titled “Set up the connector”Register your IcePanel MCP credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps
IcePanel uses OAuth 2.1 with Dynamic Client Registration (DCR) — Scalekit registers an OAuth client with IcePanel automatically. No manual app registration or client credentials are needed.
-
Copy the redirect URI from Scalekit
In the Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find IcePanel MCP and click Create. Copy the redirect URI — it looks like
https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback. -
Authorize with your IcePanel account
Click Connect in the Scalekit dashboard. You are redirected to IcePanel’s login page. Sign in with the IcePanel account that owns the landscapes you want to access.
-
Confirm the connection is active
After you authorize, Scalekit exchanges the authorization code for tokens and marks the connection as Active. IcePanel tokens are refreshed automatically — no further steps are needed.
-
-
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'icepanelmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize IcePanel MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'icepanelmcp_icepanel_listadrs',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "icepanelmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize IcePanel MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="icepanelmcp_icepanel_listadrs",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Createadr icepanel — Create a new Architecture Decision Record (ADR) in the landscape
- Createconnection icepanel — Create a new connection between two model objects
- Createmodelobject icepanel — Create a new model object in the landscape
- Getadrdetails icepanel — Get detailed information about a specific Architecture Decision Record (ADR) including its full content, status history, and related items
- Getconnectiondetails icepanel — Get full details for a single connection including description, links, technologies, and tags
- Getdiagramdetails icepanel — Get detailed information about a diagram including its objects, connections, and flows, or export as a PNG image
Common workflows
Section titled “Common workflows”Find a landscape and list its model objects
Most IcePanel tools require a landscapeId. Use icepanelmcp_icepanel_landscapesearch to find landscapes by name or description, then pass the returned id to subsequent tools.
// Step 1 — find the landscapeconst results = await actions.executeTool({ connectionName: 'icepanelmcp', identifier: 'user_123', toolName: 'icepanelmcp_icepanel_landscapesearch', toolInput: { query: 'production' },});const landscapeId = results.landscapes[0].id;
// Step 2 — list all model objects in the landscapeconst objects = await actions.executeTool({ connectionName: 'icepanelmcp', identifier: 'user_123', toolName: 'icepanelmcp_icepanel_listmodelobjects', toolInput: { landscapeId },});console.log(objects);# Step 1 — find the landscaperesults = actions.execute_tool( connection_name="icepanelmcp", identifier="user_123", tool_name="icepanelmcp_icepanel_landscapesearch", tool_input={"query": "production"},)landscape_id = results["landscapes"][0]["id"]
# Step 2 — list all model objects in the landscapeobjects = actions.execute_tool( connection_name="icepanelmcp", identifier="user_123", tool_name="icepanelmcp_icepanel_listmodelobjects", tool_input={"landscapeId": landscape_id},)print(objects)Create an architecture decision record
Use icepanelmcp_icepanel_createadr to log an ADR directly from your agent. Provide name and optionally description and content. The content field supports Markdown — use it to structure context, decision, and consequences sections.
const adr = await actions.executeTool({ connectionName: 'icepanelmcp', identifier: 'user_123', toolName: 'icepanelmcp_icepanel_createadr', toolInput: { name: 'Use event sourcing for order history', description: 'Decision to adopt event sourcing for the Orders bounded context', content: '## Context\nWe need a reliable audit trail for order state changes.\n\n## Decision\nAdopt event sourcing for the Orders bounded context.\n\n## Consequences\nIncreased storage; simpler replay and debugging.', },});console.log(adr.id);adr = actions.execute_tool( connection_name="icepanelmcp", identifier="user_123", tool_name="icepanelmcp_icepanel_createadr", tool_input={ "name": "Use event sourcing for order history", "description": "Decision to adopt event sourcing for the Orders bounded context", "content": "## Context\nWe need a reliable audit trail for order state changes.\n\n## Decision\nAdopt event sourcing for the Orders bounded context.\n\n## Consequences\nIncreased storage; simpler replay and debugging.", },)print(adr["id"])Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
icepanelmcp_icepanel_createadr#Create a new Architecture Decision Record (ADR) in the landscape.3 params
Create a new Architecture Decision Record (ADR) in the landscape.
namestringrequiredThe title of the ADR.contentstringoptionalThe full content or body of the ADR. Markdown is supported.descriptionstringoptionalA brief summary of the ADR.icepanelmcp_icepanel_createconnection#Create a new connection between two model objects.9 params
Create a new connection between two model objects.
directionstringrequiredThe direction of data or control flow for this connection. Common values: outgoing, incoming, bidirectional.namestringrequiredThe display name for the new connection. This name appears on diagrams and in the model.originIdstringrequiredThe unique ID of the origin model object (the source of the connection). Use listModelObjects to find valid IDs.targetIdstringrequiredThe unique ID of the target model object (the destination of the connection). Use listModelObjects to find valid IDs.descriptionstringoptionalA human-readable description of the connection explaining what data or control flows through it.statusstringoptionalInitial status for the new connection (e.g. active, deprecated). Leave blank for the default status.tagIdsarrayoptionalAn array of tag IDs to attach to the new connection. Use listTags to discover available tag IDs.technologyIdsarrayoptionalAn array of technology IDs to attach to the new connection. Use listTechnologies to discover available technology IDs.viaIdstringoptionalThe unique ID of an intermediary model object through which this connection routes. For example, an API gateway that sits between the origin and target.icepanelmcp_icepanel_createmodelobject#Create a new model object in the landscape. Types 'actor' and 'system' can be created at root level; 'app' and 'component' require a parentId pointing to a parent system.12 params
Create a new model object in the landscape. Types 'actor' and 'system' can be created at root level; 'app' and 'component' require a parentId pointing to a parent system.
namestringrequiredThe name of the model object to create.typestringrequiredThe type of model object to create.captionstringoptionalA short caption or subtitle for the model object.descriptionstringoptionalA detailed description of the model object.domainIdstringoptionalThe domain ID to place the model object in.externalbooleanoptionalWhether this model object represents an external system.groupIdsarrayoptionalArray of group IDs to assign to the model object.parentIdstringoptionalThe ID of the parent model object to nest this object within.statusstringoptionalThe initial status for the model object.tagIdsarrayoptionalArray of tag IDs to attach to the model object.teamIdsarrayoptionalArray of team IDs to assign ownership of the model object.technologyIdsarrayoptionalArray of technology IDs to attach to the model object.icepanelmcp_icepanel_getadrdetails#Get detailed information about a specific Architecture Decision Record (ADR) including its full content, status history, and related items.3 params
Get detailed information about a specific Architecture Decision Record (ADR) including its full content, status history, and related items.
adrIdstringrequiredThe unique identifier of the ADR to retrieve.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full ADR information or 'concise' for a summary.versionIdstringoptionalThe landscape version ID. Omit to use the latest version.icepanelmcp_icepanel_getconnectiondetails#Get full details for a single connection including description, links, technologies, and tags.3 params
Get full details for a single connection including description, links, technologies, and tags.
connectionIdstringrequiredThe unique ID of the connection to retrieve. Use listConnections to discover available connection IDs.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full connection information including all technologies and tags, or 'concise' for a summary.versionIdstringoptionalThe landscape version ID to retrieve the connection from. Leave blank to use the latest version.icepanelmcp_icepanel_getdiagramdetails#Get detailed information about a diagram including its objects, connections, and flows, or export as a PNG image.3 params
Get detailed information about a diagram including its objects, connections, and flows, or export as a PNG image.
diagramIdstringrequiredThe unique identifier of the diagram to retrieve.responseFormatstringoptionalResponse format. Use 'detailed' for full information, 'concise' for a summary, or 'image' to export as a PNG image.versionIdstringoptionalThe landscape version ID. Omit to use the latest version.icepanelmcp_icepanel_getdomaindetails#Get detailed information about a specific domain including its name, labels, and timestamps.3 params
Get detailed information about a specific domain including its name, labels, and timestamps.
domainIdstringrequiredThe unique ID of the domain to retrieve. Use listDomains to discover available domain IDs.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full domain information or 'concise' for a summary.versionIdstringoptionalThe landscape version ID to retrieve the domain from. Leave blank to use the latest version.icepanelmcp_icepanel_getflowdetails#Get detailed information about a flow including its steps, or export it as a Mermaid sequence diagram.3 params
Get detailed information about a flow including its steps, or export it as a Mermaid sequence diagram.
flowIdstringrequiredThe unique identifier of the flow to retrieve.responseFormatstringoptionalResponse format. Use 'detailed' for full information, 'concise' for a summary, or 'mermaid' to export as a Mermaid sequence diagram.versionIdstringoptionalThe landscape version ID. Omit to use the latest version.icepanelmcp_icepanel_getmodelobjectdetails#Get detailed information about a model object including its type, status, domain, technologies, tags, and relationships.3 params
Get detailed information about a model object including its type, status, domain, technologies, tags, and relationships.
modelObjectIdstringrequiredThe unique ID of the model object to retrieve. Use listModelObjects to discover available model object IDs.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full object information including all relationships, or 'concise' for a summary.versionIdstringoptionalThe landscape version ID to retrieve the model object from. Leave blank to use the latest version.icepanelmcp_icepanel_getteamdetails#Get detailed information about a specific team including its members, assigned model objects, and timestamps.2 params
Get detailed information about a specific team including its members, assigned model objects, and timestamps.
teamIdstringrequiredThe unique identifier of the team to retrieve.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full team information or 'concise' for a summary.icepanelmcp_icepanel_gettechnologydetails#Get detailed information about a specific technology including its type, provider, description, and links.2 params
Get detailed information about a specific technology including its type, provider, description, and links.
catalogTechnologyIdstringrequiredThe unique ID of the technology to retrieve details for. Use listTechnologies to discover available technology IDs.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full technology information or 'concise' for a summary.icepanelmcp_icepanel_landscapesearch#Search across all landscape entities (model objects, connections, diagrams, flows) by name. Supports fuzzy and prefix matching. Only works on the latest version.4 params
Search across all landscape entities (model objects, connections, diagrams, flows) by name. Supports fuzzy and prefix matching. Only works on the latest version.
querystringrequiredSearch query string used to find landscape entities by name. Supports fuzzy and prefix matching across model objects, connections, diagrams, and flows.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full entity information or 'concise' for a summary. Defaults to detailed if omitted.typestringoptionalFilter results to a specific entity type. Valid values: actor, app, component, group, store, system, app-diagram, component-diagram, context-diagram, connection, flow.versionIdstringoptionalThe landscape version ID to search within. Defaults to 'latest'. Only the latest version is supported for search.icepanelmcp_icepanel_listadrs#List Architecture Decision Records (ADRs) in the landscape.4 params
List Architecture Decision Records (ADRs) in the landscape.
namestringoptionalFilter ADRs by name.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full ADR information or 'concise' for a summary.statusstringoptionalFilter ADRs by status. Valid values: accepted, draft, rejected.versionIdstringoptionalThe landscape version ID to list ADRs from. Omit to use the latest version.icepanelmcp_icepanel_listconnections#List connections where a model object is the origin or target.6 params
List connections where a model object is the origin or target.
modelObjectIdstringrequiredThe unique ID of the model object to list connections for. Returns all connections where this object is either the origin or target.directionstringoptionalFilter connections by direction relative to the specified model object. Use 'inbound' for connections where the object is the target, or 'outbound' for connections where the object is the origin.statusstringoptionalFilter connections by status (e.g. active, deprecated, removed). Leave blank to return connections in all statuses.tagIdstringoptionalFilter connections by tag ID. Returns only connections that have the specified tag applied.technologyIdstringoptionalFilter connections by technology ID. Returns only connections that use the specified technology.versionIdstringoptionalThe landscape version ID to list connections from. Leave blank to use the latest version.icepanelmcp_icepanel_listdiagrams#List diagrams in the landscape. Filter by name, type, or parent model object.5 params
List diagrams in the landscape. Filter by name, type, or parent model object.
modelIdstringoptionalFilter diagrams by parent model object ID.namestringoptionalFilter diagrams by name.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full diagram information or 'concise' for a summary.typestringoptionalFilter diagrams by type. Valid values: app-diagram, component-diagram, context-diagram.versionIdstringoptionalThe landscape version ID to list diagrams from. Omit to use the latest version.icepanelmcp_icepanel_listdomains#List domains in the landscape. Domains are top-level organizational boundaries (level 0 in the C4 hierarchy).3 params
List domains in the landscape. Domains are top-level organizational boundaries (level 0 in the C4 hierarchy).
namestringoptionalFilter domains by name. Returns domains whose name matches this value.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full domain information or 'concise' for a summary.versionIdstringoptionalThe landscape version ID to list domains from. Leave blank to use the latest version.icepanelmcp_icepanel_listflows#List flows in the landscape. Flows represent sequence diagrams showing how objects interact over time.2 params
List flows in the landscape. Flows represent sequence diagrams showing how objects interact over time.
responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full flow information or 'concise' for a summary.versionIdstringoptionalThe landscape version ID to list flows from. Omit to use the latest version.icepanelmcp_icepanel_listmodelobjects#List model objects in the landscape. Filter by name, type, status, parent, or group.11 params
List model objects in the landscape. Filter by name, type, status, parent, or group.
cursorstringoptionalPagination cursor returned from a previous response. Pass this value to retrieve the next page of results.groupIdstringoptionalFilter model objects by group ID. Returns only objects belonging to the specified group.limitintegeroptionalMaximum number of model objects to return per page. Leave blank for the server default.namestringoptionalFilter model objects by name. Returns objects whose name matches this value.parentIdstringoptionalFilter model objects by parent object ID. Returns only direct children of the specified parent object.statusstringoptionalFilter model objects by status. Common values include 'active' and 'deprecated'.tagIdstringoptionalFilter model objects by tag ID. Returns only objects that have the specified tag applied.teamIdstringoptionalFilter model objects by team ID. Returns only objects owned by or assigned to the specified team.technologyIdstringoptionalFilter model objects by technology ID. Returns only objects that use the specified technology.typestringoptionalFilter model objects by type. Valid values: actor, app, component, group, store, system.versionIdstringoptionalThe landscape version ID to list model objects from. Leave blank to use the latest version.icepanelmcp_icepanel_listtags#List tags and tag groups in the landscape. Tags are organized by groups.3 params
List tags and tag groups in the landscape. Tags are organized by groups.
groupNamestringoptionalFilter results to tags belonging to a specific tag group name. Leave blank to return tags from all groups.namestringoptionalFilter results to tags matching a specific tag name. Leave blank to return all tags.versionIdstringoptionalThe landscape version ID to list tags from. Defaults to 'latest'.icepanelmcp_icepanel_listteams#List teams in the organization. Teams represent ownership groups assignable to model objects.2 params
List teams in the organization. Teams represent ownership groups assignable to model objects.
namestringoptionalFilter teams by name. Returns only teams whose name matches or contains the provided value.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' for full team information or 'concise' for a summary.icepanelmcp_icepanel_listtechnologies#List technologies from the catalog and organization. Filter by name, type, or provider.6 params
List technologies from the catalog and organization. Filter by name, type, or provider.
cursorstringoptionalPagination cursor returned from a previous response. Pass this value to retrieve the next page of results.limitintegeroptionalMaximum number of technologies to return per page. Leave blank for the server default.namestringoptionalFilter technologies by name. Returns technologies whose name matches or contains this value.providerstringoptionalFilter technologies by provider (e.g. AWS, GCP, Azure). Returns only technologies from the specified provider.responseFormatstringoptionalControls the verbosity of the response. Use 'detailed' to include technology IDs (required for getTechnologyDetails) or 'concise' for a summary.typestringoptionalFilter technologies by type (e.g. database, framework, language, platform). Returns only technologies of the specified type.icepanelmcp_icepanel_updateadr#Update an Architecture Decision Record (ADR). Supports updating name, description, content, status, and related items.6 params
Update an Architecture Decision Record (ADR). Supports updating name, description, content, status, and related items.
adrIdstringrequiredThe unique identifier of the ADR to update.contentstringoptionalNew content or body for the ADR. Markdown is supported.descriptionstringoptionalNew brief summary for the ADR.namestringoptionalNew title for the ADR.relatedItemsarrayoptionalRelated items to associate with the ADR.statusstringoptionalNew status for the ADR. Valid values: accepted, draft, rejected.icepanelmcp_icepanel_updateconnection#Update a connection in the landscape. Supports $add/$remove operations. Set status to 'removed' to delete.10 params
Update a connection in the landscape. Supports $add/$remove operations. Set status to 'removed' to delete.
connectionIdstringrequiredThe unique ID of the connection to update. Use listConnections or getConnectionDetails to find available connection IDs.descriptionstringoptionalNew description for the connection. Replaces the existing description.directionstringoptionalNew direction for the connection. Common values: outgoing, incoming, bidirectional.labelsobjectoptionalKey-value metadata labels to set on the connection. Provide as a JSON object with string keys and string values.namestringoptionalNew display name for the connection. Replaces the existing name.originIdstringoptionalNew origin model object ID for the connection. Changes the source of the connection.statusstringoptionalNew status for the connection. Set to 'removed' to effectively delete the connection from the landscape.tagIdsarrayoptionalTag IDs to set on the connection. Replaces any existing tags. Use listTags to discover available tag IDs.targetIdstringoptionalNew target model object ID for the connection. Changes the destination of the connection.technologyIdsarrayoptionalTechnology IDs to set on the connection. Replaces any existing technologies. Use listTechnologies to discover available IDs.icepanelmcp_icepanel_updatemodelobject#Update a model object in the landscape. Supports $add/$remove operations. Set status to 'removed' to delete.11 params
Update a model object in the landscape. Supports $add/$remove operations. Set status to 'removed' to delete.
modelObjectIdstringrequiredThe unique identifier of the model object to update.captionstringoptionalNew caption or subtitle for the model object.descriptionstringoptionalNew detailed description for the model object.externalbooleanoptionalWhether this model object represents an external system.groupIdsarrayoptionalGroup IDs to set on the model object. Replaces existing group assignments.namestringoptionalNew name for the model object.statusstringoptionalNew status for the model object. Set to 'removed' to soft-delete the object.tagIdsarrayoptionalTag IDs to set on the model object. Replaces existing tag assignments.teamIdsarrayoptionalTeam IDs to set for ownership of the model object.technologyIdsarrayoptionalTechnology IDs to set on the model object.typestringoptionalNew type for the model object.