Skip to main content
Glama

Bitcoin SV MCP Server

by b-open-io
junglebus.ts5.57 kB
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; // Main JungleBus API documentation URL const JUNGLEBUS_DOCS_URL = "https://junglebus.gorillapool.io/docs/"; /** * Manually structured JungleBus API documentation * Provides a clean summary of key JungleBus API endpoints and functionality */ export function getJungleBusDocumentation(): string { return `# JungleBus API Documentation ## Overview JungleBus is a transaction monitoring service for Bitcoin SV that allows applications to subscribe to transaction events and filter them based on specific criteria. The API provides both subscription and querying capabilities. ## API Endpoints ### Base URL \`\`\` https://junglebus.gorillapool.io/v1 \`\`\` ### Transaction API #### Get Transaction by ID \`\`\` GET /transaction/get/{txid} \`\`\` Returns detailed information about a specific transaction, including: - Transaction data (hex format) - Block information (hash, height, time) - Input and output details - Address information #### Get Transactions by Block Hash \`\`\` GET /block/{blockhash}/transactions \`\`\` Returns all transactions within a specific block. ### Subscription API #### Create Subscription \`\`\` POST /subscribe \`\`\` Create a new subscription to monitor transactions based on filtering criteria. Example request body: \`\`\`json { "callback": "https://your-callback-url.com", "fromBlock": 0, "query": { "find": { "out.tape.cell.s": "BEEF" } } } \`\`\` #### Delete Subscription \`\`\` DELETE /subscribe/{id} \`\`\` Deletes an existing subscription. ### Network API #### Get Network Info \`\`\` GET /network/info \`\`\` Returns current blockchain network information, including block height and other statistics. ## Client Implementations ### TypeScript Client Installation: \`\`\`bash $ npm install @gorillapool/js-junglebus \`\`\` Usage: \`\`\`javascript import { JungleBusClient } from '@gorillapool/js-junglebus'; const server = "junglebus.gorillapool.io"; const jungleBusClient = new JungleBusClient(server, { onConnected(ctx) { // add your own code here console.log(ctx); }, onConnecting(ctx) { // add your own code here console.log(ctx); }, onDisconnected(ctx) { // add your own code here console.log(ctx); }, onError(ctx) { // add your own code here console.error(ctx); } }); // create subscriptions in the dashboard of the JungleBus website const subId = "...."; // fill in the ID for the subscription const fromBlock = 750000; const subscription = jungleBusClient.Subscribe( subId, fromBlock, onPublish(tx) => { // add your own code here console.log(tx); }, onStatus(ctx) => { // add your own code here console.log(ctx); }, onError(ctx) => { // add your own code here console.log(ctx); }, onMempool(tx) => { // add your own code here console.log(tx); } ); // For lite mode (transaction hash and block height only) await client.Subscribe("a5e2fa655c41753331539a2a86546bf9335ff6d9b7a512dc9acddb00ab9985c0", 1550000, onPublish, onStatus, onError, onMempool, true); \`\`\` ### Go Client Installation: \`\`\`bash go get github.com/GorillaPool/go-junglebus \`\`\` Usage: \`\`\`go package main import ( "context" "log" "sync" "github.com/GorillaPool/go-junglebus" "github.com/GorillaPool/go-junglebus/models" ) func main() { wg := &sync.WaitGroup{} junglebusClient, err := junglebus.New( junglebus.WithHTTP("https://junglebus.gorillapool.io"), ) if err != nil { log.Fatalln(err.Error()) } subscriptionID := "..." // fill in the ID for the subscription fromBlock := uint64(750000) eventHandler := junglebus.EventHandler{ // do not set this function to leave out mined transactions OnTransaction: func(tx *models.TransactionResponse) { log.Printf("[TX]: %d: %v", tx.BlockHeight, tx.Id) }, // do not set this function to leave out mempool transactions OnMempool: func(tx *models.TransactionResponse) { log.Printf("[MEMPOOL TX]: %v", tx.Id) }, OnStatus: func(status *models.ControlResponse) { log.Printf("[STATUS]: %v", status) }, OnError: func(err error) { log.Printf("[ERROR]: %v", err) }, } var subscription *junglebus.Subscription if subscription, err = junglebusClient.Subscribe(context.Background(), subscriptionID, fromBlock, eventHandler); err != nil { log.Printf("ERROR: failed getting subscription %s", err.Error()) } // For lite mode if subscription, err := junglebusClient.SubscribeWithQueue(context.Background(), subscriptionID, fromBlock, 0, eventHandler, &junglebus.SubscribeOptions{ QueueSize: 100000, LiteMode: true, }); err != nil { log.Printf("ERROR: failed getting subscription %s", err.Error()) } wg.Add(1) wg.Wait() } \`\`\` ## Further Reading For complete API documentation, visit [JungleBus Docs](${JUNGLEBUS_DOCS_URL}) `; } /** * Register the JungleBus API documentation resource with the MCP server * @param server The MCP server instance */ export function registerJungleBusResource(server: McpServer): void { server.resource( "junglebus-api-docs", JUNGLEBUS_DOCS_URL, { title: "JungleBus API Documentation", description: "API documentation for JungleBus, a transaction monitoring service for Bitcoin SV", }, async (uri) => { const documentationContent = getJungleBusDocumentation(); return { contents: [ { uri: uri.href, text: documentationContent, }, ], }; }, ); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/b-open-io/bsv-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server