# CCIP Tools Documentation
> Auto-generated context file for LLMs. Generated: 2026-02-16
> For CCIP protocol details (glossary, message lifecycle, architecture): https://docs.chain.link/ccip/llms-full.txt
## Overview
CCIP Tools is a TypeScript toolkit for Chainlink CCIP (Cross-Chain Interoperability Protocol).
- **SDK Package:** `@chainlink/ccip-sdk`
- **CLI Package:** `@chainlink/ccip-cli`
- **REST API:** https://api.ccip.chain.link
---
## CCIP Protocol Reference
For detailed information about CCIP concepts, refer to the official documentation:
- **Glossary** (chainSelector, OnRamp, OffRamp, Lane, DON): https://docs.chain.link/ccip/llms-full.txt
- **Message Lifecycle** (Sent → Committed → Blessed → Success/Failed): https://docs.chain.link/ccip/llms-full.txt
- **Architecture**: https://docs.chain.link/ccip/llms-full.txt
---
## Tools Architecture (SDK, CLI, API)
The following Mermaid diagram shows the dependencies between SDK, CLI, and CCIP API:
```mermaid
flowchart TD
subgraph NPM["CCIP TypeScript Packages"]
SDK["@chainlink/ccip-sdk Multi-chain SDK (EVM, Solana, Aptos, Sui, TON)"]
CLI["@chainlink/ccip-cli Command-line tool"]
MCP["MCP Server Tools, Resources, Prompts"]
end
subgraph INFRA["CCIP Infrastructure"]
CONTRACTS["Onchain Contracts/Programs Read: Lane configs, pool configs, fee quotes, message events Write: ccipSend, execute (manual)"]
API["CCIP API Message queries, lane latency"]
end
subgraph EXTERNAL_API["External Attestation APIs"]
CIRCLE["Circle API USDC/CCTP attestations"]
LOMBARD["Lombard API LBTC attestations"]
end
subgraph APPS["Applications & Integrations"]
INTERNAL["Internal dApps"]
DAPPS["External Cross-chain dApps"]
OPS["Ops Message debugging, sending messages, manual execution"]
end
subgraph AI["AI Applications & Agents"]
CLAUDE_APPS["Claude Apps Claude Desktop, Claude Code"]
IDE["AI-Powered IDEs Cursor, VS Code"]
AGENTS["Agent Frameworks OpenAI Agents SDK, LangChain, CrewAI, AutoGPT"]
end
%% CLI and MCP depend on SDK
CLI -->|"uses"| SDK
MCP -->|"uses"| SDK
%% SDK interacts with infrastructure
SDK -->|"read/write transactions"| CONTRACTS
SDK -->|"read status, latency"| API
SDK -->|"read attestations"| CIRCLE
SDK -->|"read attestations"| LOMBARD
%% Applications use packages
INTERNAL -->|"npm install"| SDK
DAPPS -->|"npm install"| SDK
OPS -->|"npm install"| SDK
OPS -->|"npx / npm global install"| CLI
%% AI Applications use MCP Server
CLAUDE_APPS -->|"MCP protocol"| MCP
IDE -->|"MCP protocol"| MCP
AGENTS -->|"MCP protocol"| MCP
%% Styling
classDef npmStyle fill:#E3ECFF,stroke:#0847F7,stroke-width:2px,color:#0B101C
classDef sdkStyle fill:#8AA6F9,stroke:#0847F7,stroke-width:2px,color:#0B101C
classDef cliStyle fill:#8AA6F9,stroke:#0847F7,stroke-width:2px,color:#0B101C
classDef mcpStyle fill:#C5B4E3,stroke:#7C3AED,stroke-width:2px,color:#0B101C
classDef infraStyle fill:#F8FAFF,stroke:#0847F7,stroke-width:2px,color:#0B101C
classDef externalStyle fill:#FFF5E6,stroke:#E67E22,stroke-width:2px,color:#0B101C
classDef appStyle fill:#F2EBE0,stroke:#217B71,stroke-width:2px,color:#0B101C
classDef aiStyle fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#0B101C
class NPM npmStyle
class SDK,CLI sdkStyle
class MCP mcpStyle
class INFRA,CONTRACTS,API infraStyle
class EXTERNAL_API,CIRCLE,LOMBARD externalStyle
class APPS,INTERNAL,DAPPS,OPS appStyle
class AI,CLAUDE_APPS,IDE,AGENTS aiStyle
```
---
## SDK Exports (@chainlink/ccip-sdk)
### Classes (6)
- `AptosChain`
- `EVMChain`
- `SolanaChain`
- `SuiChain`
- `TONChain`
- `CCIPError (+ subclasses)`
### Functions (19)
- `calculateManualExecProof()`
- `discoverOffRamp()`
- `decodeExtraArgs()`
- `encodeExtraArgs()`
- `estimateReceiveExecution()`
- `decodeMessage()`
- `getMessagesForSender()`
- `sourceToDestTokenAddresses()`
- `bigIntReplacer()`
- `bigIntReviver()`
- `bytesToBuffer()`
- `decodeAddress()`
- `getDataBytes()`
- `isSupportedTxHash()`
- `networkInfo()`
- `withRetry()`
- `getCCIPExplorerLinks()`
- `getCCIPExplorerUrl()`
- `supportedChains()`
### Types (29)
- `CCIPAPIClient`
- `DEFAULT_API_BASE_URL`
- `DEFAULT_API_RETRY_CONFIG`
- `CCIPVersion`
- `ExecutionState`
- `IntentStatus`
- `MessageStatus`
- `CCIP_EXPLORER_BASE_URL`
- `APICCIPRequestMetadata`
- `APIErrorResponse`
- `CCIPAPIClientContext`
- `LaneLatencyResponse`
- `ApiRetryConfig`
- `Chain`
- `ChainContext`
- `ChainGetter`
- `ChainStatic`
- `GetBalanceOpts`
- `LogFilter`
- `RateLimiterState`
- `RegistryTokenConfig`
- `TokenInfo`
- `TokenPoolConfig`
- `TokenPoolRemote`
- `WithRetryConfig`
- `UnsignedAptosTx`
- `UnsignedEVMTx`
- `UnsignedSolanaTx`
- `UnsignedTONTx`
### Enums (2)
- `ChainFamily`
- `NetworkType`
---
## Chain Methods (Full Signatures)
Methods available on chain instances (EVMChain, SolanaChain, AptosChain, SuiChain, TONChain):
### `[abstract] getBlockTimestamp(block: number | 'finalized'): Promise`
### `[abstract] getTransaction(hash: string): Promise`
### `async waitFinalized({
request: { log, tx },
finality = 'finalized',
cancel$,
}: {
request: SetOptional<
PickDeep<
CCIPRequest,
| `log.${'address' | 'blockNumber' | 'transactionHash' | 'topics' | 'tx.timestamp'}`
| 'tx.timestamp'
>,
'tx'
>
finality?: number | 'finalized'
cancel$?: Promise
}): Promise`
### `[abstract] getLogs(opts: LogFilter): AsyncIterableIterator`
### `async getMessagesInTx(tx: string | ChainTransaction): Promise`
### `async getMessageById(messageId: string,
_opts?: { page?: number; onRamp?: string },): Promise`
### `[abstract] typeAndVersion(address: string,): Promise<[type: string, version: string, typeAndVersion: string, suffix?: string]>`
### `[abstract] getRouterForOnRamp(onRamp: string, destChainSelector: bigint): Promise`
### `[abstract] getRouterForOffRamp(offRamp: string, sourceChainSelector: bigint): Promise`
### `[abstract] getNativeTokenForRouter(router: string): Promise`
### `[abstract] getOffRampsForRouter(router: string, sourceChainSelector: bigint): Promise`
### `[abstract] getOnRampForRouter(router: string, destChainSelector: bigint): Promise`
### `[abstract] getOnRampForOffRamp(offRamp: string, sourceChainSelector: bigint): Promise`
### `[abstract] getCommitStoreForOffRamp(offRamp: string): Promise`
### `[abstract] getTokenForTokenPool(tokenPool: string): Promise`
### `[abstract] getTokenInfo(token: string): Promise`
### `[abstract] getBalance(opts: GetBalanceOpts): Promise`
### `[abstract] getTokenAdminRegistryFor(address: string): Promise`
### `[abstract] getFee(opts: Omit): Promise`
### `[abstract] generateUnsignedSendMessage(opts: SendMessageOpts & {
/** Sender address (address of wallet which will send the message): void`
### `[abstract] sendMessage(opts: SendMessageOpts & {
/** Signer instance (chain-dependent): void`
### `[abstract] getOffchainTokenData(request: CCIPRequest): Promise`
### `[abstract] generateUnsignedExecuteReport(opts: ExecuteReportOpts & {
/** address which will be used to send the report tx */
payer: string
},): Promise`
### `[abstract] executeReport(opts: ExecuteReportOpts & {
// Signer instance (chain-dependent): void`
### `async getCommitReport({
commitStore,
request,
...hints
}: {
/** address of commitStore (OffRamp in \>=v1.6): void`
### `async getLaneLatency(destChainSelector: bigint): Promise`
### `async getExecutionReceiptInTx(tx: string | ChainTransaction): Promise`
### `[abstract] getSupportedTokens(address: string, opts?: { page?: number }): Promise`
### `[abstract] getRegistryTokenConfig(registry: string, token: string): Promise`
### `[abstract] getTokenPoolConfig(tokenPool: string): Promise`
### `[abstract] getTokenPoolRemotes(tokenPool: string,
remoteChainSelector?: bigint,): Promise>`
### `async getTokenPoolRemote(tokenPool: string,
remoteChainSelector: bigint,): Promise`
### `[abstract] getFeeTokens(router: string): Promise>`
### `fromUrl(url: string, ctx?: ChainContext): Promise>`
### `decodeMessage(log: Pick): CCIPMessage | undefined`
### `decodeExtraArgs(extraArgs: BytesLike,): | (EVMExtraArgsV1 &`
### `encodeExtraArgs(extraArgs: ExtraArgs): string`
### `decodeCommits(log: Pick, lane?: Lane): CommitReport[] | undefined`
### `decodeReceipt(log: Pick): ExecutionReceipt | undefined`
### `getAddress(bytes: BytesLike): string`
### `isTxHash(v: unknown): v is string`
### `getDestLeafHasher(lane: Lane, ctx?: WithLogger): LeafHasher`
### `buildMessageForDest(message: MessageInput): AnyMessage`
---
## CLI Commands (7)
### `laneLatency ` (aliases: latency)
Query real-time lane latency between source and destination chains
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--api-url` | - | No | Custom CCIP API URL (defaults to api.ccip.chain.link) |
### `manualExec ` (aliases: manual-exec)
Execute manually pending or failed messages
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--log-index` | - | No | Log index of message to execute (if more than one in request tx) |
| `--gas-limit` | `-L, compute-units` | No | Override gas limit or compute units for receivers callback (0 keeps original) |
| `--tokens-gas-limit` | - | No | Override gas limit for tokens releaseOrMint calls (0 keeps original) |
| `--estimate-gas-limit` | - | No | Estimate gas limit for receivers callback; argument is a % margin to add to the estimate |
| `--wallet` | `-w` | No | Wallet to send transactions with; pass `ledger[:index_or_derivation]` to use Ledger USB hardware wallet, or private key in `USER_KEY` environment variable |
| `--force-buffer` | - | No | Forces the usage of buffering for Solana execution. |
| `--force-lookup-table` | - | No | Forces the creation & usage of an ad-hoc lookup table for Solana execution. |
| `--clear-leftover-accounts` | - | No | Clears buffers (if a previous attempt was aborted) or any ALT owned by this sender. |
| `--receiver-object-ids` | - | No | Receiver object IDs for Sui execution (if executing on Sui destination) |
| `--sender-queue` | - | No | Execute all messages in sender queue, starting with the provided tx |
| `--exec-failed` | - | No | Whether to re-execute failed messages (instead of just non-executed) in sender queue |
### `parse ` (aliases: parseBytes, parse-bytes, parseData, parse-data, )
Try to parse and print errors, revert reasons or function call or event data
### `send`
Send a CCIP message from source to destination chain
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--source` | `-s` | Yes | Source chain: chainId, selector, or name |
| `--dest` | `-d` | Yes | Destination chain: chainId, selector, or name |
| `--router` | `-r` | Yes | Router contract address on source |
| `--receiver` | `-to` | No | Receiver address on destination; defaults to sender if same chain family |
| `--data` | - | No | Data payload to send (non-hex will be UTF-8 encoded) |
| `--gas-limit` | `-L, compute-units` | No | Gas limit for receiver callback; defaults to ramp config |
| `--estimate-gas-limit` | - | No | Estimate gas limit with % margin (e.g., 10 for +10%) |
| `--allow-out-of-order-exec` | `-ooo` | No | Allow out-of-order execution (v1.5+ lanes) |
| `--fee-token` | - | No | Fee token address or symbol (default: native) |
| `--transfer-tokens` | `-t` | No | Token amounts to transfer: token=amount |
| `--wallet` | `-w` | No | Wallet: ledger[:index] or private key |
| `--token-receiver` | - | No | Solana token receiver (if different from program receiver) |
| `--account` | `-receiver-object-id` | No | Solana accounts (append =rw for writable) or Sui object IDs |
| `--only-get-fee` | - | No | Print fee and exit |
| `--only-estimate` | - | No | Print gas estimate and exit |
| `--approve-max` | - | No | Approve max token amount instead of exact |
| `--wait` | - | No | Wait for execution on destination |
### `show `
Show details of a CCIP request
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--log-index` | - | No | Pre-select a message request by logIndex, if more than one in tx; by default, a selection menu is shown |
| `--id-from-source` | - | No | Search by messageId instead of txHash; requires `[onRamp@]sourceNetwork` (onRamp address may be required in some chains) |
| `--wait` | - | No | Wait for (first) execution |
### `getSupportedTokens` (aliases: get-supported-tokens)
List supported tokens in a given Router/OnRamp/TokenAdminRegistry, and/or show info about token/pool
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--network` | `-n` | Yes | Source network: chainId or name (e.g., ethereum-mainnet) |
| `--address` | `-a` | Yes | Router/OnRamp/TokenAdminRegistry/TokenPool contract address |
| `--token` | `-t` | No | Token address to query (pre-selects from list if address is a registry) |
| `--fee-tokens` | - | No | List fee tokens instead of transferable tokens |
### `token`
Query token balance for an address
| Option | Alias | Required | Description |
|--------|-------|----------|-------------|
| `--network` | `-n` | Yes | Network: chainId or name (e.g., ethereum-mainnet, solana-devnet) |
| `--holder` | `-H` | Yes | Wallet address to query balance for |
| `--token` | `-t` | No | Token address (omit for native token balance) |
---
## REST API Endpoints (7)
Base URL: `https://api.ccip.chain.link`
### `GET /messages/{messageId}`
**Summary:** Retrieve a single message
**Description:** Retrieve the current status and details of a CCIP cross-chain message.
**Use Cases:**
- Get complete message details
- Monitor message status from source to destination chain
- Verify successful execution on destination chain
- Check manual execution eligibility for messages
**How to obtain the messageId:**
- From a `ccipSend()` transaction log on the source chain
- Using the [`/messages`](#model-MessageSearchResult) search endpoint to find messages by sender, receiver, or chain
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `messageId` | path | string | Yes | The unique identifier of the message (64-character hex string with 0x prefix) |
**Responses:**
- `200`: The request was successful. Returns a [`Message`](#model-Message) object.
- `400`: Bad request - Invalid message ID format. Returns an [`Error`](#model-Error) object.
- `404`: Message not found. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `GET /messages`
**Summary:** Retrieve multiple messages with filtering
**Description:** Search and filter CCIP messages with cursor-based pagination.
Results are ordered by send time (most recent first).
**Use Cases:**
- Search messages by sender or receiver address
- Filter messages by source or destination chain
- Find messages ready for manual execution
- Look up messages by source transaction hash
**Search Parameter Constraints**
- You can use either cursor OR filter parameters (sender, receiver, sourceChainSelector, destChainSelector, readyForManualExecOnly, sourceTransactionHash), but NOT both simultaneously.
- limit can always be specified regardless of whether you're using cursor or filters.
- Violating constraints will return a 400 Bad Request.
**Usage Examples:**
- Initial filtered search: `/messages?sender=0x123...&limit=50`
- Next page with cursor: `/messages?cursor=WyJuYXR1cmFsIiwxMjM0NV0=&limit=20`
- Invalid (returns 400): `/messages?sender=0x123...&cursor=WyJuYXR1cmFsIiwxMjM0NV0=`
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `limit` | query | integer | No | Maximum number of messages to return per page (default 100, max 1000). Can be used with either cursor or filters. |
| `cursor` | query | string | No | Pagination cursor returned from previous response (for fetching next page).
When using cursor, do not provide any filter parameters.
Providing both will result in a 400 Bad Request.
|
| `sender` | query | string | No | Filter messages by sender address.
|
| `receiver` | query | string | No | Filter messages by receiver address.
|
| `sourceChainSelector` | query | string | No | Filter messages by source chain selector.
This is a uint64 value represented as a string.
For the complete list of chain selectors, see: [CCIP Directory](https://docs.chain.link/ccip/directory)
|
| `destChainSelector` | query | string | No | Filter messages by destination chain selector.
This is a uint64 value represented as a string.
For the complete list of chain selectors, see: [CCIP Directory](https://docs.chain.link/ccip/directory)
|
| `readyForManualExecOnly` | query | boolean | No | Filter to only messages ready for manual execution. When set to `true`, returns only messages
that are ready for manual execution. When set to `false` or omitted, returns all messages without filtering.
|
| `sourceTransactionHash` | query | string | No | Filter messages by source transaction hash. Format depends on source chain family.
|
**Responses:**
- `200`: The request was successful. Returns an array of [`MessageSearchResult`](#model-MessageSearchResult) objects with pagination metadata.
- `400`: Bad request - Invalid parameter format or constraint violation. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `GET /lanes/latency`
**Summary:** Retrieve lane latency
**Description:** Get the 90th percentile (p90) message delivery latency for a CCIP lane.
**Use Cases:**
- Estimate transfer times for UI display
- Monitor lane health and performance
**Note:** Latency is returned in milliseconds.
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `sourceChainSelector` | query | string | Yes | The CCIP chain selector identifier for the source network.
This is a uint64 value represented as a string.
For the complete list of chain selectors, see: [CCIP Directory](https://docs.chain.link/ccip/directory)
|
| `destChainSelector` | query | string | Yes | The CCIP chain selector identifier for the destination network.
This is a uint64 value represented as a string.
For the complete list of chain selectors, see: [CCIP Directory](https://docs.chain.link/ccip/directory)
|
**Responses:**
- `200`: The request was successful. Returns a [`LaneLatency`](#model-LaneLatency) object.
- `400`: Bad request - Missing or invalid parameters. Returns an [`Error`](#model-Error) object.
- `404`: Lane not found. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `GET /verifiers`
**Summary:** Retrieve available verifiers
**Description:** Get a list of all available CCIP verifiers and their metadata.
**Use Cases:**
- Display verifier options in UI
- Get verifier metadata
**Responses:**
- `200`: The request was successful. Returns a [`VerifiersResponse`](#model-VerifiersResponse) object containing the list of verifiers.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `POST /intents/quotes`
**Summary:** Create quote for intent
**Description:** Create a quote for a cross-chain swap or bridge operation.
Returns executable transaction data that can be submitted on-chain.
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `x-api-key` | header | string | No | API key to validate caller. This is not entirely public yet.
This may be required on some routes for some time.
|
**Request Body:** `IntentQuoteRequest`
**Responses:**
- `200`: Quote generated successfully. Returns an [`IntentQuoteResponse`](#model-IntentQuoteResponse) object.
- `400`: Invalid request parameters. Returns an [`Error`](#model-Error) object.
- `401`: Unauthorized - Invalid or missing API key. Returns an [`Error`](#model-Error) object.
- `404`: No route available for the requested chain/token pair. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `GET /intents/tx/{txHash}`
**Summary:** Get all intent statuses for a transaction
**Description:** Retrieve the status of all intents created in a specific transaction.
Supports batched intents where multiple intents are created in a single transaction.
This endpoint can be used to obtain intent IDs after initiating intent transactions.
Please favour using `/intents/id/{intentId}` to query intent status after obtaining the intent ID.
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `x-api-key` | header | string | No | API key to validate caller. This is not entirely public yet.
This may be required on some routes for some time.
|
| `txHash` | path | string | Yes | Intent creation transaction hash |
**Responses:**
- `200`: Intent statuses retrieved successfully. Returns an array of [`IntentStatusResponse`](#model-IntentStatusResponse) objects.
- `401`: Unauthorized - Invalid or missing API key. Returns an [`Error`](#model-Error) object.
- `404`: Transaction not found. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
### `GET /intents/id/{intentId}`
**Summary:** Get intent status by ID
**Description:** Retrieve the status of a specific intent by its intentId.
**Important**: Use the `intentId` returned by `/intents/tx/{txHash}`. Intent IDs
are provider-prefixed (e.g., `EC-...` or `EO-...`). Raw `0x...` transaction hashes
are not valid intent IDs - use `/intents/tx/{txHash}` to look up by transaction hash.
**Parameters:**
| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `x-api-key` | header | string | No | API key to validate caller. This is not entirely public yet.
This may be required on some routes for some time.
|
| `intentId` | path | string | Yes | Unique intent identifier returned by `/intents/tx/{txHash}`.
Must be a provider-prefixed ID (e.g., `EC-...` or `EO-...`), not a raw `0x...` hash.
|
**Responses:**
- `200`: Intent status retrieved successfully. Returns an [`IntentStatusResponse`](#model-IntentStatusResponse) object.
- `401`: Unauthorized - Invalid or missing API key. Returns an [`Error`](#model-Error) object.
- `404`: Intent not found. Returns an [`Error`](#model-Error) object.
- `500`: Internal server error. Returns an [`Error`](#model-Error) object.
---
## Documentation Links
### SDK Guides
- [Browser Setup](https://docs.chain.link/ccip/tools/sdk/guides/browser-setup)
- [Error Handling](https://docs.chain.link/ccip/tools/sdk/guides/error-handling)
- [Error Reference](https://docs.chain.link/ccip/tools/sdk/guides/error-reference)
- [Manual Execution](https://docs.chain.link/ccip/tools/sdk/guides/manual-execution)
- [Multi-Chain](https://docs.chain.link/ccip/tools/sdk/guides/multi-chain)
- [Querying Data](https://docs.chain.link/ccip/tools/sdk/guides/querying-data)
- [Sending Messages](https://docs.chain.link/ccip/tools/sdk/guides/sending-messages)
- [Token Pools](https://docs.chain.link/ccip/tools/sdk/guides/token-pools)
- [Tracking Messages](https://docs.chain.link/ccip/tools/sdk/guides/tracking-messages)
- [Viem Integration](https://docs.chain.link/ccip/tools/sdk/guides/viem-integration)
### CLI
- [Configuration](https://docs.chain.link/ccip/tools/cli/configuration)
- [CCIP CLI](https://docs.chain.link/ccip/tools/cli/index)
- [laneLatency](https://docs.chain.link/ccip/tools/cli/lane-latency)
- [manualExec](https://docs.chain.link/ccip/tools/cli/manual-exec)
- [parse](https://docs.chain.link/ccip/tools/cli/parse)
- [send](https://docs.chain.link/ccip/tools/cli/send)
- [show](https://docs.chain.link/ccip/tools/cli/show)
- [getSupportedTokens](https://docs.chain.link/ccip/tools/cli/supported-tokens)
- [token](https://docs.chain.link/ccip/tools/cli/token)
- [Troubleshooting](https://docs.chain.link/ccip/tools/cli/troubleshooting)
### CLI Guides
- [Transfer Data](https://docs.chain.link/ccip/tools/cli/guides/data-transfer-workflow)
- [Debugging Failed Messages](https://docs.chain.link/ccip/tools/cli/guides/debugging-workflow)
- [Token Transfer](https://docs.chain.link/ccip/tools/cli/guides/token-transfer-workflow)
- [Transfer Tokens and Data](https://docs.chain.link/ccip/tools/cli/guides/tokens-and-data-workflow)
---
## Quick Links
- **GitHub:** https://github.com/smartcontractkit/ccip-tools-ts
- **npm (SDK):** https://www.npmjs.com/package/@chainlink/ccip-sdk
- **npm (CLI):** https://www.npmjs.com/package/@chainlink/ccip-cli
- **CCIP Explorer:** https://ccip.chain.link
- **API Documentation:** https://api.ccip.chain.link/api-docs
- **CCIP Protocol Docs:** https://docs.chain.link/ccip
- **Full CCIP LLM Context:** https://docs.chain.link/ccip/llms-full.txt