get_hip4_instruments
Retrieve all HIP-4 outcome-market instruments with one row per side. Use this to discover valid HIP-4 symbols for trading.
Instructions
List all available HIP-4 outcome-market instruments (one row per side, e.g. '0', '1'). HIP-4 coins use the bare numeric format '<10*outcome_id + side>' (legacy '#0' / '%230' forms also accepted). Use this to discover valid HIP-4 symbols.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| records | Yes | Array of result records | |
| count | Yes | Total number of records in the full result set | |
| nextCursor | No | Cursor for next page, if more results available |
Implementation Reference
- src/index.ts:1562-1571 (handler)The tool handler for 'get_hip4_instruments'. It is registered via registerTool with no input params, uses ListOutputSchema for output, and calls hip4Request('/instruments') to fetch the list of HIP-4 outcome-market instruments from the 0xArchive API.
registerTool( "get_hip4_instruments", "List all available HIP-4 outcome-market instruments (one row per side, e.g. '0', '1'). HIP-4 coins use the bare numeric format '<10*outcome_id + side>' (legacy '#0' / '%230' forms also accepted). Use this to discover valid HIP-4 symbols.", {}, ListOutputSchema, async () => { const result = await hip4Request("/instruments"); return formatResponse(result.data); } ); - src/index.ts:1562-1571 (registration)Registration of the tool via the registerTool helper, which wraps server.registerTool from the MCP SDK. The tool name is 'get_hip4_instruments', has no input schema, and uses ListOutputSchema.
registerTool( "get_hip4_instruments", "List all available HIP-4 outcome-market instruments (one row per side, e.g. '0', '1'). HIP-4 coins use the bare numeric format '<10*outcome_id + side>' (legacy '#0' / '%230' forms also accepted). Use this to discover valid HIP-4 symbols.", {}, ListOutputSchema, async () => { const result = await hip4Request("/instruments"); return formatResponse(result.data); } ); - src/index.ts:1487-1537 (helper)The hip4Request helper function that makes HTTP GET requests to the 0xArchive REST API with the X-API-Key header. It handles query parameter construction, error parsing, and response extraction (data + pagination cursor). The tool calls hip4Request('/instruments') to fetch instrument data.
async function hip4Request( path: string, query?: Record<string, unknown> ): Promise<{ data: unknown; nextCursor?: string }> { const url = new URL(`${HIP4_BASE_PATH}${path}`, HIP4_BASE_URL); if (query) { for (const [k, v] of Object.entries(query)) { if (v === undefined || v === null) continue; url.searchParams.set(k, String(v)); } } const headers: Record<string, string> = { "Content-Type": "application/json", "User-Agent": "0xarchive-mcp/1.9.0", }; if (apiKey) headers["X-API-Key"] = apiKey; const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), 60000); try { const response = await fetch(url.toString(), { method: "GET", headers, signal: controller.signal, }); const text = await response.text(); let body: any; try { body = text ? JSON.parse(text) : null; } catch { body = text; } if (!response.ok) { const requestId = response.headers.get("x-request-id") || body?.meta?.requestId; const message = (body && (body.error?.message || body.error || body.message)) || `HTTP ${response.status}`; throw new OxArchiveError(message, response.status, requestId ?? undefined); } if (body && typeof body === "object" && "data" in body) { return { data: body.data, nextCursor: body.meta?.nextCursor, }; } return { data: body }; } finally { clearTimeout(timeout); } }