Skip to main content

Using with AI

The fastest way to get an AI coding agent productive on a Pipes SDK project is to install the official Pipes SDK Agent Skill:
The skill activates automatically on tasks like “create an indexer for Uniswap V3 swaps” or “my indexer is syncing slowly, help me optimize it”. It covers scaffolding, runtime error diagnosis, sync tuning, and data-quality checks. Pair the skill with one or both MCP servers so the agent can read live data and look things up:
  • Portal MCP server — 29 tools for querying blocks, transactions, logs, instructions, and analytics across 225+ datasets. No API key.
  • Documentation MCP server — search and retrieve these docs from inside the agent.
If you’d rather feed docs into a model directly, the static llms.txt (index) and llms-full.txt (full content) files are kept in sync with the site. See the AI Development overview for the full menu.

Scaffolding with Pipes CLI

pipes-cli is a work in progress.
In a few minutes, you’ll have a running pipe that indexes Orca Whirlpool swap instructions on Solana mainnet into a local PostgreSQL database.

Prerequisites

  • Node.js 22.15+
  • pnpm
  • Docker (for the bundled PostgreSQL container)

Initialize the project

Run the CLI in the directory where you want the project folder to land:
The CLI prompts for the project folder name, package manager (please stick to pnpm for now), sink (please use ClickHouse or Postgres), network type, network, and template; then installs dependencies and writes a runnable project. You can supply a JSON config instead of filling the prompts manually. Here’s the configuration for Orca Whirlpool swap instructions mentioned above:
--config also accepts a path to a JSON file. To inspect the full config schema run

Run the pipeline

The generated project ships with a docker-compose.yml that brings up the sink database and the pipeline together:
For an iterative dev loop, run the database in Docker and the pipeline locally:
Either way, rows start landing in the orca_whirlpool_swap table within a minute.

What was generated

The project layout:
The pipe lives in src/index.ts. The decoder block defines what to extract + a light transform:
The decoder asks the Portal for swap instructions on the Orca Whirlpool program. enrichEvents (from src/utils/) reshapes each decoded instruction into a row matching the Drizzle table. See the Pipe anatomy and Handling instructions guides for more info on instructionDecoder(). The main() function wires the decoder to a drizzleTarget:
The id is a per-pipeline identifier — keep it stable so the target’s cursor survives restarts. See solanaPortalSource for the full source API and Pipe anatomy for how the pieces fit together.

Other examples

The tokenBalances template indexes pre/post token balances directly from blocks — no program ID needed. The generated pipe uses solanaQuery() instead of an instruction decoder.
The CLI ships one built-in SVM template — tokenBalances — plus the open-ended custom template shown at the top of the page.