get_transaction
Retrieve detailed information about a Bitcoin transaction by providing its unique transaction ID using the Bitcoin MCP Server tool.
Instructions
Get transaction details
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| txid | Yes | Transaction ID |
Implementation Reference
- src/server/tools.ts:163-188 (handler)The MCP tool handler for 'get_transaction' that validates input schema, fetches transaction via BitcoinService, and returns formatted text response.export async function handleGetTransaction( bitcoinService: BitcoinService, args: unknown ) { const result = GetTransactionSchema.safeParse(args); if (!result.success) { throw new McpError( ErrorCode.InvalidParams, `Invalid parameters: ${result.error.message}` ); } const tx = await bitcoinService.getTransaction(result.data.txid); return { content: [ { type: "text", text: `Transaction details:\nTXID: ${tx.txid}\nStatus: ${ tx.status.confirmed ? "Confirmed" : "Unconfirmed" }\nBlock Height: ${tx.status.blockHeight || "Pending"}\nFee: ${ tx.fee } sats`, }, ] as TextContent[], }; }
- src/types.ts:126-128 (schema)Zod input validation schema for get_transaction tool requiring a 64-char txid.export const GetTransactionSchema = z.object({ txid: z.string().length(64, "Invalid transaction ID"), });
- src/server/base.ts:152-161 (registration)Tool registration in listTools handler defining name, description, and input schema for get_transaction.name: "get_transaction", description: "Get transaction details", inputSchema: { type: "object", properties: { txid: { type: "string", description: "Transaction ID" }, }, required: ["txid"], }, } as Tool,
- src/server/base.ts:212-214 (registration)Dispatch case in callToolRequest handler that routes get_transaction calls to the specific handler function.case "get_transaction": { return handleGetTransaction(this.bitcoinService, args); }
- src/services/bitcoin.ts:212-257 (helper)Core service method that queries Blockstream API for transaction details and maps to structured TransactionInfo.async getTransaction(txid: string): Promise<TransactionInfo> { try { const response = await fetch(`${this.apiBase}/tx/${txid}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const tx = (await response.json()) as any; return { txid: tx.txid, version: tx.version, locktime: tx.locktime, size: tx.size, weight: tx.weight, fee: tx.fee, status: { confirmed: tx.status.confirmed, blockHeight: tx.status.block_height, blockHash: tx.status.block_hash, blockTime: tx.status.block_time, }, inputs: tx.vin.map((input: any) => ({ txid: input.txid, vout: input.vout, sequence: input.sequence, prevout: input.prevout ? { value: input.prevout.value, scriptPubKey: input.prevout.scriptpubkey, address: input.prevout.scriptpubkey_address, } : undefined, })), outputs: tx.vout.map((output: any) => ({ value: output.value, scriptPubKey: output.scriptpubkey, address: output.scriptpubkey_address, })), }; } catch (error) { logger.error({ error, txid }, "Failed to get transaction"); throw new BitcoinError( "Failed to get transaction", BitcoinErrorCode.BLOCKCHAIN_ERROR ); } }