One command for Claude Code, Cursor, Codex, Windsurf and other agents — installs from the upstream repo (current HEAD; it ships 8 skills — pick orquestra-mcp-tools when prompted).
Drop the mirrored SKILL.md into your skills directory. Global (all projects):
Or scoped to the current project:
The skill is mirrored as plain markdown — tell your agent:
Or have the skills CLI generate a one-shot prompt (pipe it straight into your agent):
Or pull the raw file into a terminal session:
Copy the skill directory straight from GitHub:
Skill contents
Orquestra MCP — Tool Reference
MCP server: https://api.orquestra.dev/mcp
All tools accept and return JSON. projectId is the Orquestra internal ID returned
by search_programs (NOT the Solana program address).
1. search_programs
Find Solana programs by name, keyword, or on-chain program ID.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
query | string | ✅ | Program name, keyword, or base58 program address |
limit | number | ❌ | Max results (default: 10) |
Example
search_programs({ query: "marinade" })
search_programs({ query: "JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB" })
Returns — list of matches, each with:
id— Orquestra projectId (use this in all other tools)name— program nameprogram_id— on-chain Solana addressdescription— protocol summary
2. list_instructions
List all instructions a program exposes — names, arguments, and required accounts.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID from search_programs |
Returns — Markdown table per instruction:
- Instruction name
- Args:
name, type - Accounts:
name, writable flag, signer flag
3. build_instruction
Build an unsigned Solana transaction. Returns base64-encoded wire transaction.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID |
instructionName | string | ✅ | Exact instruction name (case-sensitive) |
accounts | object | ✅ | Map of accountName → base58 pubkey |
args | object | ✅ | Map of argName → value (types must match IDL) |
feePayer | string | ✅ | Base58 pubkey of fee payer wallet |
network | string | ❌ | "mainnet-beta" (default) | "devnet" |
Returns
transaction— base64-encoded unsigned wire transactionriskLevel—"LOW"|"MEDIUM"|"HIGH"riskReasons— string[] explaining the riskestimatedFee— lamportsaccounts— resolved account list with pubkeys + flags
Errors
- Missing required account → error names the exact missing field
- Wrong arg type → error names field + expected type
- Program not found → use
search_programsfirst
4. simulate_instruction
Preflight a transaction against the Solana RPC. Decodes Anchor errors. Never signs.
Inputs — same as build_instruction (projectId, instructionName, accounts, args, feePayer, network)
Returns
success— booleancomputeUnitsConsumed— numberdecodedError—{ name, code, msg }if Anchor error foundlogs— last RPC log lineserr— raw RPC error on failure
When to use: always run between build_instruction and signing. Catches wrong
accounts, missing seeds, and logic errors before touching the wallet.
5. list_pda_accounts
List all PDA-derivable account types for a program and their seed schemas.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID |
Returns — per PDA account:
- Account type name
- Seeds:
name,kind(const|account|arg),type
6. derive_pda
Derive the address of a PDA from its seeds.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID |
accountType | string | ✅ | Account type name from list_pda_accounts |
seeds | object | ✅ | Map of seedName → value (pubkey strings, numbers, etc.) |
network | string | ❌ | "mainnet-beta" | "devnet" |
Returns
address— derived base58 PDA addressbump— canonical bump seed (0–255)
7. read_llms_txt
Fetch the full AI-optimized Markdown documentation for a program.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID |
Returns — full Markdown document structured for LLM context windows:
- Instruction tables (name, args, accounts)
- Account type descriptions
- Error code reference
Use this to ground any AI with accurate program context before building transactions.
8. get_ai_analysis
Fetch Orquestra’s AI-generated analysis of a Solana program.
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | ✅ | Orquestra project ID |
Returns
- Protocol description
- Category tags
- Risk notes
- Usage statistics (if available)
Common Mistakes
| Mistake | Fix |
|---|---|
Passing Solana program address as projectId | Use search_programs first — projectId ≠ program address |
| Guessing instruction name | Use list_instructions — names are case-sensitive |
Missing account in build_instruction | Use list_pda_accounts + derive_pda to resolve |
simulate_instruction fails with Anchor error | Read decodedError.msg — it names the exact constraint violation |
| Wrong arg type (e.g. string instead of u64) | Check IDL type from list_instructions |