cisco-axl-cli
Original:🇺🇸 English
Translated
Use when managing Cisco CUCM via the cisco-axl CLI — phones, lines, route patterns, partitions, calling search spaces, SIP profiles, and any AXL operation. Covers CRUD operations, SQL queries, operation discovery, bulk provisioning from CSV, and raw AXL execute commands.
17installs
Sourcecmds-cc/skills
Added on
NPX Install
npx skill4agent add cmds-cc/skills cisco-axl-cliTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Cisco AXL CLI
A CLI for Cisco Unified Communications Manager (CUCM) Administrative XML (AXL) operations.
Setup
The CLI must be available. Either:
bash
# Option 1: Use npx (no install needed, works immediately)
npx cisco-axl --help
# Option 2: Install globally for faster repeated use
npm install -g cisco-axlIf using npx, prefix all commands with :
If installed globally, use directly:
npxnpx cisco-axl list Phone ...cisco-axl list Phone ...Configuration
Configure a CUCM cluster (interactive prompt for password — never pass credentials on the command line):
bash
cisco-axl config add <name> --host <hostname> --username <user> --cucm-version <ver> --insecure
# You will be prompted securely for the passwordValid versions: 11.0, 11.5, 12.0, 12.5, 14.0, 15.0. Use for self-signed certificates (common in CUCM).
--insecureOr use environment variables (set via your shell profile, a file, or a secrets manager — never hardcode credentials):
.envbash
# These should be set securely, e.g. via dotenv, vault, or shell profile
# CUCM_HOST, CUCM_USERNAME, CUCM_PASSWORD, CUCM_VERSIONTest the connection:
bash
cisco-axl config testCommon Workflows
Get a single item
bash
cisco-axl get Phone SEP001122334455
cisco-axl get Line 1001
cisco-axl get RoutePartition PT_INTERNAL
cisco-axl get Phone SEP001122334455 --returned-tags "name,model,description"List items with search
bash
cisco-axl list Phone --search "name=SEP%"
cisco-axl list Line --search "pattern=1%"
cisco-axl list Css --search "name=CSS_%"
cisco-axl list Phone --search "name=SEP%" --returned-tags "name,description" --format toon
cisco-axl list Phone --search "name=SEP%" --auto-page --max-results 5000Add an item
bash
cisco-axl add RoutePartition --data '{"name":"PT_INTERNAL","description":"Internal partition"}'Update an item
bash
cisco-axl update Phone SEP001122334455 --data '{"description":"Updated description"}'Remove an item
bash
cisco-axl remove RoutePartition PT_INTERNALSQL queries
bash
cisco-axl sql query "SELECT name, description FROM device WHERE name LIKE 'SEP%'"
cisco-axl sql update "UPDATE device SET description='test' WHERE name='SEP001122334455'"Discovering Operations
This is the CLI's most powerful feature. Discover and use ANY AXL operation dynamically — no static command definitions.
Step 1: Find operations
bash
cisco-axl operations --filter phone
cisco-axl operations --filter ldap
cisco-axl operations --type action --filter phone # apply, reset, restart, etc.
cisco-axl operations --type crud # add, get, list, update, removeStep 2: See what tags an operation needs
bash
cisco-axl describe getPhone
cisco-axl describe addLine --detailed # shows required/optional/typesStep 3: Execute it
bash
cisco-axl execute doLdapSync --tags '{"name":"LDAP_Main"}'
cisco-axl execute applyPhone --tags '{"name":"SEP001122334455"}'Bulk Operations from CSV
For provisioning multiple items, use templates with CSV files. Requires optional packages:
npm install json-variables csv-parseCreate a template (phone-template.json):
json
{
"name": "SEP%%mac%%",
"devicePoolName": "%%devicePool%%",
"description": "%%description%%",
"class": "Phone",
"protocol": "SIP"
}Create a CSV (phones.csv):
csv
mac,devicePool,description
001122334455,DP_HQ,Lobby Phone
001122334466,DP_BRANCH,Conf Room ARun bulk add:
bash
cisco-axl add Phone --template phone-template.json --csv phones.csv
cisco-axl add Phone --template phone-template.json --csv phones.csv --dry-run # preview first
cisco-axl add Phone --template phone-template.json --csv phones.csv --concurrency 10Single template with inline vars:
bash
cisco-axl add Phone --template phone-template.json --vars '{"mac":"001122334455","devicePool":"DP_HQ","description":"Lobby"}'Bulk updates and execute too:
bash
cisco-axl update Phone --template update-template.json --csv updates.csv
cisco-axl execute addLine --template line-template.json --csv lines.csvOutput Formats
Use to control output:
--format- — human-readable tables (default)
--format table - — structured JSON for parsing
--format json - — token-efficient format (recommended for AI agents, ~40% fewer tokens than JSON)
--format toon - — CSV for spreadsheet export
--format csv
For AI agents: Use for list queries to reduce token usage. Use when you need to parse nested structures.
--format toon--format jsonMultiple Clusters
bash
cisco-axl config add lab --host 10.0.0.1 --username admin --cucm-version 14.0 --insecure
cisco-axl config add prod --host 10.0.0.2 --username axladmin --cucm-version 15.0 --insecure
# You will be prompted securely for each password
cisco-axl config use prod
cisco-axl list Phone --search "name=SEP%" --cluster lab # override per-commandCommand Chaining
Shell chains commands sequentially — each waits for the previous to complete, and the chain stops on the first failure:
&&bash
# Create a partition, CSS, and line in order
cisco-axl add RoutePartition --data '{"name":"PT_INTERNAL","description":"Internal"}' && \
cisco-axl add Css --data '{"name":"CSS_INTERNAL","members":{"member":{"routePartitionName":"PT_INTERNAL","index":"1"}}}' && \
cisco-axl add Line --data '{"pattern":"1000","routePartitionName":"PT_INTERNAL"}'Piping with --stdin
Use to pipe JSON between commands or from other tools:
--stdinbash
# Get a phone's config, modify it with jq, update it
cisco-axl get Phone SEP001122334455 --format json | jq '.description = "Updated via pipe"' | cisco-axl update Phone SEP001122334455 --stdin
# Pipe JSON from a file
cat phone-config.json | cisco-axl add Phone --stdin
# Chain get → transform → execute
cisco-axl describe applyPhone --format json | jq '.name = "SEP001122334455"' | cisco-axl execute applyPhone --stdinThe flag is available on , , and commands. It is mutually exclusive with / and .
--stdinaddupdateexecute--data--tags--templateGlobal Flags
- Item types are PascalCase matching AXL: ,
Phone,Line,RoutePartition,Css,DevicePool,SipTrunk,TransPattern,RouteGroup, etc.RouteList - Use to discover exact type names.
cisco-axl operations - Use to learn required vs optional tags.
cisco-axl describe <operation> --detailed --format json - The flag removes empty/null values from results.
--clean - The flag removes XML attribute metadata.
--no-attributes - The flag is needed for most CUCM environments (self-signed certs).
--insecure - All operations are audit-logged to . Use
~/.cisco-axl/audit.jsonlto skip.--no-audit - Use with templates to preview resolved JSON before executing.
--dry-run