Skip to main content
Glama

List SAP Cloud ALM data

calm_list
Read-only

List or query any SAP Cloud ALM collection—tasks, projects, features, documents—with filters, projections, and counts. Use count_only or group_by for totals without overflowing clients.

Instructions

List or query any SAP Cloud ALM collection (tasks, projects, features, documents, test cases, hierarchy nodes, cross-library objects, landscape objects, status events, code lists). Choose a "resource"; OData resources accept $filter/$select/$expand/$orderby/$top/$skip; REST resources read only the params calm_resources lists for them, and any other param (including $filter) is rejected rather than ignored. Defects: resource="tasks", task_type="CALMDEF". To answer "how many?" pass count_only=true, or group_by="status" for a breakdown — never list records to count them, as a few hundred tasks overflow most clients. See calm_resources for the full catalog.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idsNoFetch specific tasks by id (resource:tasks); sent as a comma-separated list
topNoOData $top — maximum number of records
skipNoOData $skip — records to skip
tagsNoTag filters (resource:tasks)
countNoReturn the total as "@count" ALONGSIDE the records (OData resources and analytics only). For a total without the records, use count_only instead
limitNoREST page size (REST resources)
expandNoOData $expand — comma-separated navigation properties
fieldsNoComma-separated field projection applied by calmcp to the returned records (any resource). Use it to keep responses small, e.g. "displayId,title,status,assigneeName,timeboxId". Unlike $select this works for REST resources too. Unknown names are rejected
filterNoOData $filter, e.g. "status eq 'CIPDFCTOPEN'". OData resources only: REST resources have no server-side filter and reject it. calm_resources lists the parameters each resource reads
offsetNoREST page offset (REST resources)
selectNoOData $select — comma-separated field list
statusNoStatus code filter (e.g. CIPDFCTOPEN; or deployment plan status)
filtersNoFree-form REST filters for landscape_objects / bsm_events
orderbyNoOData $orderby, e.g. "priority desc". OData resources, and REST resources whose calm_resources entry lists orderby; any other resource rejects it
task_idNoTask id (required for task sub-resources)
team_idNoTeam id (required for team_roles/program_team_roles)
group_byNoComma-separated field name(s) to break the count down by, e.g. "status" or "projectName,status". Returns {total, groups:[{value,count}]} instead of records. Also the quickest way to discover which values a field actually takes
resourceYesWhich collection to list (see calm_resources for the catalog and required params)
task_typeNoTask type filter (resource:tasks). CALMDEF = Defect
count_onlyNoReturn ONLY the total number of matching records, no records at all. Use this for every "how many ...?" question — the answer is a few hundred bytes instead of hundreds of KB. Works for every resource and provider
program_idNoProgram id (required for program_teams)
project_idNoProject id (required for tasks/deliverables/etc.)
sub_statusNoSub-status code filter (resource:tasks)
timebox_idNoTimebox (sprint/phase) id filter (resource:tasks). Applied by calmcp after fetching, paging through the project automatically
assignee_idNoAssignee id filter (resource:tasks)
group_limitNoMaximum groups returned by group_by (default 50); the rest fold into otherCount
timebox_nameNoTimebox name filter, e.g. "Sprint 5" (resource:tasks). Resolved against the project's timeboxes; errors listing the known names when it does not match
last_changed_dateNoLast-changed date filter (resource:tasks). Prefix with an operator: gt:, eq: or lt:, e.g. "gt:2026-08-01"
solution_process_idNoSolution process id filter (resource:task_solution_process_assignments)
last_changed_timestampNoLast-changed timestamp filter (resource:tasks). Prefix with gt:, eq: or lt: and use ISO 8601, e.g. "gt:2026-08-01T00:00:00Z". Use this for incremental "what changed since" queries

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.9.2
    • addedInput schema / properties / filters / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / group_limit / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / limit / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / offset / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / skip / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / top / maximum
      Added value: +9007199254740991
  2. Changed4 schema fields changedv0.9.1
    • addedInput schema / properties / program_id / pattern
      Added value: +"^(?!\\.\\.?$).+$"
    • addedInput schema / properties / project_id / pattern
      Added value: +"^(?!\\.\\.?$).+$"
    • addedInput schema / properties / task_id / pattern
      Added value: +"^(?!\\.\\.?$).+$"
    • addedInput schema / properties / team_id / pattern
      Added value: +"^(?!\\.\\.?$).+$"
  3. Changed7 schema fields changedv0.9.0
    • addedInput schema / properties / count
      Added value: +{
      +  "description": "Return the total as \"@count\" ALONGSIDE the records (OData resources and analytics only). For a total without the records, use count_only instead",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / count_only
      Added value: +{
      +  "description": "Return ONLY the total number of matching records, no records at all. Use this for every \"how many ...?\" question — the answer is a few hundred bytes instead of hundreds of KB. Works for every resource and provider",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / filter / description
      Previous value: -"OData $filter, e.g. \"status eq 'CIPDFCTOPEN'\""New value: +"OData $filter, e.g. \"status eq 'CIPDFCTOPEN'\". OData resources only: REST resources have no server-side filter and reject it. calm_resources lists the parameters each resource reads"
    • addedInput schema / properties / group_by
      Added value: +{
      +  "description": "Comma-separated field name(s) to break the count down by, e.g. \"status\" or \"projectName,status\". Returns {total, groups:[{value,count}]} instead of records. Also the quickest way to discover which values a field actually takes",
      +  "type": "string"
      +}
    • addedInput schema / properties / group_limit
      Added value: +{
      +  "description": "Maximum groups returned by group_by (default 50); the rest fold into otherCount",
      +  "exclusiveMinimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / orderby / description
      Previous value: -"OData $orderby, e.g. \"priority desc\" (OData resources / analytics only)"New value: +"OData $orderby, e.g. \"priority desc\". OData resources, and REST resources whose calm_resources entry lists orderby; any other resource rejects it"
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "features",
      -  "feature_external_references",
      -  "feature_url_references",
      -  "feature_task_assignments",
      -  "feature_priorities",
      -  "feature_statuses",
      -  "documents",
      -  "document_types",
      -  "document_statuses",
      -  "document_sources",
      -  "document_priorities",
      -  "document_approval_states",
      -  "hierarchy_nodes",
      -  "manual_test_cases",
      -  "automated_test_cases",
      -  "test_activities",
      -  "test_actions",
      -  "xlib_applications",
      -  "xlib_configurations",
      -  "xlib_developments",
      -  "xlib_interfaces",
      -  "xlib_application_url_references",
      -  "xlib_configuration_url_references",
      -  "xlib_development_url_references",
      -  "xlib_interface_url_references",
      -  "xlib_configuration_activities",
      -  "xlib_configuration_activity_types",
      -  "xlib_configuration_assignments",
      -  "scopes",
      -  "solution_scenario_versions",
      -  "scope_solution_processes",
      -  "business_processes",
      -  "solution_processes",
      -  "solution_process_flows",
      -  "solution_activities",
      -  "process_assets",
      -  "test_plans",
      -  "test_case_assignments",
      -  "test_plan_tag_assignments",
      -  "tasks",
      -  "task_solution_process_assignments",
      -  "task_subtasks",
      -  "task_comments",
      -  "task_references",
      -  "task_relations",
      -  "task_feature_assignments",
      -  "task_document_assignments",
      -  "task_hierarchy_assignments",
      -  "deliverables",
      -  "workstreams",
      -  "projects",
      -  "project_timeboxes",
      -  "project_teams",
      -  "team_roles",
      -  "programs",
      -  "program_teams",
      -  "program_team_roles",
      -  "system_groups",
      -  "deployment_plans",
      -  "landscape_objects",
      -  "bsm_events"
      -]New value: +[
      +  "features",
      +  "feature_external_references",
      +  "feature_url_references",
      +  "feature_task_assignments",
      +  "feature_priorities",
      +  "feature_statuses",
      +  "documents",
      +  "document_types",
      +  "document_statuses",
      +  "document_sources",
      +  "document_priorities",
      +  "document_approval_states",
      +  "hierarchy_nodes",
      +  "manual_test_cases",
      +  "automated_test_cases",
      +  "test_activities",
      +  "test_actions",
      +  "xlib_applications",
      +  "xlib_configurations",
      +  "xlib_developments",
      +  "xlib_interfaces",
      +  "xlib_application_url_references",
      +  "xlib_configuration_url_references",
      +  "xlib_development_url_references",
      +  "xlib_interface_url_references",
      +  "xlib_configuration_activities",
      +  "xlib_configuration_activity_types",
      +  "xlib_configuration_assignments",
      +  "xlib_application_priorities",
      +  "xlib_application_readiness",
      +  "xlib_application_usage_statuses",
      +  "xlib_application_clean_core_levels",
      +  "xlib_application_upgrade_impacts",
      +  "xlib_configuration_priorities",
      +  "xlib_configuration_readiness",
      +  "xlib_development_priorities",
      +  "xlib_development_readiness",
      +  "xlib_development_usage_statuses",
      +  "xlib_development_clean_core_levels",
      +  "xlib_development_upgrade_impacts",
      +  "xlib_interface_priorities",
      +  "xlib_interface_readiness",
      +  "xlib_interface_usage_statuses",
      +  "xlib_interface_clean_core_levels",
      +  "xlib_interface_upgrade_impacts",
      +  "scopes",
      +  "solution_scenario_versions",
      +  "scope_solution_processes",
      +  "business_processes",
      +  "solution_processes",
      +  "solution_process_flows",
      +  "solution_activities",
      +  "process_assets",
      +  "test_plans",
      +  "test_case_assignments",
      +  "test_plan_tag_assignments",
      +  "tasks",
      +  "task_solution_process_assignments",
      +  "task_subtasks",
      +  "task_comments",
      +  "task_references",
      +  "task_relations",
      +  "task_feature_assignments",
      +  "task_document_assignments",
      +  "task_hierarchy_assignments",
      +  "deliverables",
      +  "workstreams",
      +  "projects",
      +  "project_timeboxes",
      +  "project_teams",
      +  "team_roles",
      +  "programs",
      +  "program_teams",
      +  "program_team_roles",
      +  "system_groups",
      +  "deployment_plans",
      +  "landscape_objects",
      +  "landscape_access_control_lists",
      +  "bsm_events"
      +]
  4. Changed10 schema fields changedv0.2.0
    • addedInput schema / properties / fields
      Added value: +{
      +  "description": "Comma-separated field projection applied by calmcp to the returned records (any resource). Use it to keep responses small, e.g. \"displayId,title,status,assigneeName,timeboxId\". Unlike $select this works for REST resources too. Unknown names are rejected",
      +  "type": "string"
      +}
    • addedInput schema / properties / ids
      Added value: +{
      +  "description": "Fetch specific tasks by id (resource:tasks); sent as a comma-separated list",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / last_changed_date
      Added value: +{
      +  "description": "Last-changed date filter (resource:tasks). Prefix with an operator: gt:, eq: or lt:, e.g. \"gt:2026-08-01\"",
      +  "type": "string"
      +}
    • addedInput schema / properties / last_changed_timestamp
      Added value: +{
      +  "description": "Last-changed timestamp filter (resource:tasks). Prefix with gt:, eq: or lt: and use ISO 8601, e.g. \"gt:2026-08-01T00:00:00Z\". Use this for incremental \"what changed since\" queries",
      +  "type": "string"
      +}
    • addedInput schema / properties / program_id
      Added value: +{
      +  "description": "Program id (required for program_teams)",
      +  "type": "string"
      +}
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "features",
      -  "feature_external_references",
      -  "feature_url_references",
      -  "feature_task_assignments",
      -  "feature_priorities",
      -  "feature_statuses",
      -  "documents",
      -  "document_types",
      -  "document_statuses",
      -  "document_sources",
      -  "document_priorities",
      -  "document_approval_states",
      -  "hierarchy_nodes",
      -  "manual_test_cases",
      -  "automated_test_cases",
      -  "test_activities",
      -  "test_actions",
      -  "xlib_applications",
      -  "xlib_configurations",
      -  "xlib_developments",
      -  "xlib_interfaces",
      -  "tasks",
      -  "task_subtasks",
      -  "task_comments",
      -  "task_references",
      -  "task_relations",
      -  "task_feature_assignments",
      -  "task_document_assignments",
      -  "task_hierarchy_assignments",
      -  "deliverables",
      -  "workstreams",
      -  "projects",
      -  "project_timeboxes",
      -  "project_teams",
      -  "team_roles",
      -  "programs",
      -  "system_groups",
      -  "deployment_plans",
      -  "landscape_objects",
      -  "bsm_events"
      -]New value: +[
      +  "features",
      +  "feature_external_references",
      +  "feature_url_references",
      +  "feature_task_assignments",
      +  "feature_priorities",
      +  "feature_statuses",
      +  "documents",
      +  "document_types",
      +  "document_statuses",
      +  "document_sources",
      +  "document_priorities",
      +  "document_approval_states",
      +  "hierarchy_nodes",
      +  "manual_test_cases",
      +  "automated_test_cases",
      +  "test_activities",
      +  "test_actions",
      +  "xlib_applications",
      +  "xlib_configurations",
      +  "xlib_developments",
      +  "xlib_interfaces",
      +  "xlib_application_url_references",
      +  "xlib_configuration_url_references",
      +  "xlib_development_url_references",
      +  "xlib_interface_url_references",
      +  "xlib_configuration_activities",
      +  "xlib_configuration_activity_types",
      +  "xlib_configuration_assignments",
      +  "scopes",
      +  "solution_scenario_versions",
      +  "scope_solution_processes",
      +  "business_processes",
      +  "solution_processes",
      +  "solution_process_flows",
      +  "solution_activities",
      +  "process_assets",
      +  "test_plans",
      +  "test_case_assignments",
      +  "test_plan_tag_assignments",
      +  "tasks",
      +  "task_solution_process_assignments",
      +  "task_subtasks",
      +  "task_comments",
      +  "task_references",
      +  "task_relations",
      +  "task_feature_assignments",
      +  "task_document_assignments",
      +  "task_hierarchy_assignments",
      +  "deliverables",
      +  "workstreams",
      +  "projects",
      +  "project_timeboxes",
      +  "project_teams",
      +  "team_roles",
      +  "programs",
      +  "program_teams",
      +  "program_team_roles",
      +  "system_groups",
      +  "deployment_plans",
      +  "landscape_objects",
      +  "bsm_events"
      +]
    • addedInput schema / properties / solution_process_id
      Added value: +{
      +  "description": "Solution process id filter (resource:task_solution_process_assignments)",
      +  "type": "string"
      +}
    • changedInput schema / properties / team_id / description
      Previous value: -"Team id (required for team_roles)"New value: +"Team id (required for team_roles/program_team_roles)"
    • addedInput schema / properties / timebox_id
      Added value: +{
      +  "description": "Timebox (sprint/phase) id filter (resource:tasks). Applied by calmcp after fetching, paging through the project automatically",
      +  "type": "string"
      +}
    • addedInput schema / properties / timebox_name
      Added value: +{
      +  "description": "Timebox name filter, e.g. \"Sprint 5\" (resource:tasks). Resolved against the project's timeboxes; errors listing the known names when it does not match",
      +  "type": "string"
      +}
  5. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuine behavioral context beyond that: REST resources reject unknown params instead of ignoring them, count_only returns bytes rather than KB, and group_by returns {total, groups:[...]} rather than records. It stops short of describing paging defaults or output envelope shape for non-grouped calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope, then the OData/REST contract, then the counting guidance, then the pointer to calm_resources. Information-dense with little waste, though the single long paragraph packs several distinct rules together and could be split for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 30-parameter, no-output-schema tool the description covers the important operational facts: the resource catalogue pointer, per-provider param acceptance/rejection, counting and grouping semantics, and the group_by result shape. It omits default page sizes and the general response envelope, which an agent would otherwise have to discover empirically.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it distinguishes count from count_only ('for a total without the records, use count_only'), explains which params only OData vs REST resources accept, and gives the defect recipe that ties resource+task_type together. That raises it above the schema-alone baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and enumerates the collection families it covers (tasks, projects, features, documents, test cases, hierarchy nodes, cross-library objects, landscape objects, status events, code lists). It also distinguishes itself from siblings by pointing to calm_resources for the catalog, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use rules: count_only=true for 'how many?', group_by for breakdowns, and the hard exclusion 'never list records to count them, as a few hundred tasks overflow most clients'. It also states the OData-vs-REST param contract and that other params are rejected rather than ignored, plus a concrete recipe for defects (resource="tasks", task_type="CALMDEF").

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools