<!-- source: https://skills.internetcomputer.org/skills/canhelp/ | origin: https://github.com/dfinity/icskills/blob/6712dbdbe811292d4bc8c472a922d11fde008145/skills/canhelp/SKILL.md | publisher: DFINITY Foundation | license: Apache-2.0 | updated: 2026-03-30T08:44:49.000Z -->
---
name: canhelp
description: Display a human-readable summary of a canister's interface given its mainnet canister ID or a human-readable name. Like --help but for canisters. Only for mainnet canisters — for local canisters, read the generated .did file in your project directly.
license: Apache-2.0
compatibility: "icp-cli >= 0.1.0"
allowed-tools: Bash(./scripts/resolve-canister-id.sh *), Bash(./scripts/fetch-candid.sh *), Read, Grep, Glob
argument-hint: <canister-id-or-name>
metadata:
   title: Canister Help
   category: Infrastructure
---

Given a canister ID or name in `$ARGUMENTS`, fetch and summarize its Candid interface.

## Steps

1. Resolve the canister ID by running the resolve script from the skill's base directory:
   ```bash
   ./scripts/resolve-canister-id.sh "$ARGUMENTS"
   ```
   If `$ARGUMENTS` is already a valid principal, the script echoes it back.
   Otherwise, it queries the IC Dashboard API and outputs matches as `<canister-id>  <name>` (one per line).
   - If there is a single result, clearly display the resolved canister ID and use it directly.
   - If there are multiple results, present the list to the user and ask them to pick one before continuing.

2. Fetch the Candid interface using the resolved canister ID:
   ```bash
   ./scripts/fetch-candid.sh <resolved-canister-id>
   ```
   The script outputs the path to the downloaded `.did` file.

3. Read the file using the `Read` tool.

4. Present the output as a readable summary with the following structure:

   **Canister `<canister-id>`**

   **Query methods:**
   - `method_name(arg1: type1, arg2: type2) → return_type` — one-line description if inferable from the name

   **Update methods:**
   - `method_name(arg1: type1) → return_type`

   **Types:**
   - List any custom record/variant types defined in the interface, with their fields

## Guidelines

- Group methods by query vs update
- Sort methods alphabetically within each group
- For complex nested types, show the top-level structure and note nesting
- If the candid is very large (>100 methods), show a summary count and list only the most important-looking methods, offering to show the full list on request
- If the fetch succeeds, but the Candid interface is empty,explain that the canister is not exposing its Candid interface in the wasm metadata
- If the fetch fails, suggest the user verify the canister ID and that `icp` is installed
