Skip to main content
Glama

Bitcoin SV MCP Server

by b-open-io
brcs.ts15.8 kB
import { type McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js"; /** * BRC Categories for organizing the Bitcoin Request for Comments specifications */ export enum BRCCategory { Wallet = "wallet", Transactions = "transactions", Scripts = "scripts", Tokens = "tokens", Overlays = "overlays", Payments = "payments", PeerToPeer = "peer-to-peer", KeyDerivation = "key-derivation", Outpoints = "outpoints", Opinions = "opinions", StateMachines = "state-machines", Apps = "apps", } /** * Interface defining a BRC document */ interface BRCDocument { number: string; title: string; category: BRCCategory; } /** * Register all BRC-related resources with the MCP server * @param server The MCP server instance */ export function registerBRCsResources(server: McpServer): void { // Register BRCs repository main README server.resource( "brcs_readme", "https://raw.githubusercontent.com/bitcoin-sv/BRCs/master/README.md", { title: "Bitcoin SV BRCs Overview", description: "Overview of all Bitcoin SV protocol specifications in the BRCs repository", }, async (uri) => { const resp = await fetch(uri.href); const text = await resp.text(); return { contents: [ { uri: uri.href, text, }, ], }; }, ); // Register SUMMARY file which has the ToC server.resource( "brcs_summary", "https://raw.githubusercontent.com/bitcoin-sv/BRCs/master/SUMMARY.md", { title: "Bitcoin SV BRCs Summary", description: "Table of contents for all Bitcoin SV BRCs", }, async (uri) => { const resp = await fetch(uri.href); const text = await resp.text(); return { contents: [ { uri: uri.href, text, }, ], }; }, ); // Add a dynamic BRC specification resource for any BRC by path server.resource( "brc_spec", new ResourceTemplate("brc://{category}/{brcNumber}", { list: undefined }), { title: "Bitcoin SV BRC Specification", description: "Access specific BRC specifications by category and number", }, async (uri, { category, brcNumber }) => { const path = `${category}/${brcNumber}.md`; const resp = await fetch( `https://raw.githubusercontent.com/bitcoin-sv/BRCs/master/${path}`, ); if (!resp.ok) { throw new Error(`BRC specification not found: ${path}`); } const text = await resp.text(); return { contents: [ { uri: uri.href, text, }, ], }; }, ); // Register individual BRCs registerAllBRCs(server); } /** * Register all BRC specifications from the master list */ function registerAllBRCs(server: McpServer): void { // Complete list of BRCs from the README.md const brcs: BRCDocument[] = [ { number: "0", title: "Banana-Powered Bitcoin Wallet Control Protocol", category: BRCCategory.Wallet, }, { number: "1", title: "Transaction Creation", category: BRCCategory.Wallet, }, { number: "2", title: "Data Encryption and Decryption", category: BRCCategory.Wallet, }, { number: "3", title: "Digital Signature Creation and Verification", category: BRCCategory.Wallet, }, { number: "4", title: "Input Redemption", category: BRCCategory.Wallet }, { number: "5", title: "HTTP Wallet Communications Substrate", category: BRCCategory.Wallet, }, { number: "6", title: "XDM Wallet Communications Substrate", category: BRCCategory.Wallet, }, { number: "7", title: "Window Wallet Communication Substrate", category: BRCCategory.Wallet, }, { number: "8", title: "Everett-style Transaction Envelopes", category: BRCCategory.Transactions, }, { number: "9", title: "Simplified Payment Verification", category: BRCCategory.Transactions, }, { number: "10", title: "Merkle proof standardised format", category: BRCCategory.Transactions, }, { number: "11", title: "TSC Proof Format with Heights", category: BRCCategory.Transactions, }, { number: "12", title: "Raw Transaction Format", category: BRCCategory.Transactions, }, { number: "13", title: "TXO Transaction Object Format", category: BRCCategory.Transactions, }, { number: "14", title: "Bitcoin Script Binary, Hex and ASM Formats", category: BRCCategory.Scripts, }, { number: "15", title: "Bitcoin Script Assembly Language", category: BRCCategory.Scripts, }, { number: "16", title: "Pay to Public Key Hash", category: BRCCategory.Scripts, }, { number: "17", title: "Pay to R Puzzle Hash", category: BRCCategory.Scripts, }, { number: "18", title: "Pay to False Return", category: BRCCategory.Scripts, }, { number: "19", title: "Pay to True Return", category: BRCCategory.Scripts, }, { number: "20", title: "There is no BRC-20", category: BRCCategory.Tokens }, { number: "21", title: "Push TX", category: BRCCategory.Scripts }, { number: "22", title: "Overlay Network Data Synchronization", category: BRCCategory.Overlays, }, { number: "23", title: "Confederacy Host Interconnect Protocol (CHIP)", category: BRCCategory.Overlays, }, { number: "24", title: "Overlay Network Lookup Services", category: BRCCategory.Overlays, }, { number: "25", title: "Confederacy Lookup Availability Protocol (CLAP)", category: BRCCategory.Overlays, }, { number: "26", title: "Universal Hash Resolution Protocol", category: BRCCategory.Overlays, }, { number: "27", title: "Direct Payment Protocol (DPP)", category: BRCCategory.Payments, }, { number: "28", title: "Paymail Payment Destinations", category: BRCCategory.Payments, }, { number: "29", title: "Simple Authenticated BSV P2PKH Payment Protocol", category: BRCCategory.Payments, }, { number: "30", title: "Transaction Extended Format (EF)", category: BRCCategory.Transactions, }, { number: "31", title: "Authrite Mutual Authentication", category: BRCCategory.PeerToPeer, }, { number: "32", title: "BIP32 Key Derivation Scheme", category: BRCCategory.KeyDerivation, }, { number: "33", title: "PeerServ Message Relay Interface", category: BRCCategory.PeerToPeer, }, { number: "34", title: "PeerServ Host Interconnect Protocol", category: BRCCategory.PeerToPeer, }, // #35 is unused { number: "36", title: "Format for Bitcoin Outpoints", category: BRCCategory.Outpoints, }, { number: "37", title: "Spending Instructions Extension for UTXO Storage Format", category: BRCCategory.Outpoints, }, // 38, 39, 40 are placeholders in the README { number: "41", title: "PacketPay HTTP Payment Mechanism", category: BRCCategory.Payments, }, { number: "42", title: "BSV Key Derivation Scheme (BKDS)", category: BRCCategory.KeyDerivation, }, { number: "43", title: "Security Levels, Protocol IDs, Key IDs and Counterparties", category: BRCCategory.KeyDerivation, }, { number: "44", title: "Admin-reserved and Prohibited Key Derivation Protocols", category: BRCCategory.KeyDerivation, }, { number: "45", title: "Definition of UTXOs as Bitcoin Tokens", category: BRCCategory.Tokens, }, { number: "46", title: "Wallet Transaction Output Tracking (Output Baskets)", category: BRCCategory.Wallet, }, { number: "47", title: "Bare Multi-Signature", category: BRCCategory.Scripts, }, { number: "48", title: "Pay to Push Drop", category: BRCCategory.Scripts }, { number: "49", title: "Users should never see an address", category: BRCCategory.Opinions, }, { number: "50", title: "Submitting Received Payments to a Wallet", category: BRCCategory.Wallet, }, { number: "51", title: "List of user experiences", category: BRCCategory.Opinions, }, { number: "52", title: "Identity Certificates", category: BRCCategory.PeerToPeer, }, { number: "53", title: "Certificate Creation and Revelation", category: BRCCategory.Wallet, }, { number: "54", title: "Hybrid Payment Mode for DPP", category: BRCCategory.Payments, }, { number: "55", title: "HTTPS Transport Mechanism for DPP", category: BRCCategory.Payments, }, { number: "56", title: "Unified Abstract Wallet-to-Application Messaging Layer", category: BRCCategory.Wallet, }, { number: "57", title: "Legitimate Uses for mAPI", category: BRCCategory.Opinions, }, { number: "58", title: "Merkle Path JSON format", category: BRCCategory.Transactions, }, { number: "59", title: "Security and Scalability Benefits of UTXO-based Overlay Networks", category: BRCCategory.Opinions, }, { number: "60", title: "Simplifying State Machine Event Chains in Bitcoin", category: BRCCategory.StateMachines, }, { number: "61", title: "Compound Merkle Path Format", category: BRCCategory.Transactions, }, { number: "62", title: "Background Evaluation Extended Format (BEEF) Transactions", category: BRCCategory.Transactions, }, { number: "63", title: "Genealogical Identity Protocol", category: BRCCategory.PeerToPeer, }, { number: "64", title: "Overlay Network Transaction History Tracking", category: BRCCategory.Overlays, }, { number: "65", title: "Transaction Labels and List Actions", category: BRCCategory.Wallet, }, { number: "66", title: "Output Basket Removal and Certificate Deletion", category: BRCCategory.Wallet, }, { number: "67", title: "Simplified Payment Verification", category: BRCCategory.Transactions, }, { number: "68", title: "Publishing Trust Anchor Details at an Internet Domain", category: BRCCategory.PeerToPeer, }, { number: "69", title: "Revealing Key Linkages", category: BRCCategory.KeyDerivation, }, { number: "70", title: "Paymail BEEF Transaction", category: BRCCategory.Payments, }, { number: "71", title: "Merkle Path Binary Format", category: BRCCategory.Transactions, }, { number: "72", title: "Protecting BRC-69 Key Linkage Information in Transit", category: BRCCategory.KeyDerivation, }, { number: "73", title: "Group Permissions for App Access", category: BRCCategory.Wallet, }, { number: "74", title: "BSV Unified Merkle Path (BUMP) Format", category: BRCCategory.Transactions, }, { number: "75", title: "Mnemonic For Master Private Key", category: BRCCategory.KeyDerivation, }, { number: "76", title: "Graph Aware Sync Protocol", category: BRCCategory.Transactions, }, { number: "77", title: "Message Signature Creation and Verification", category: BRCCategory.PeerToPeer, }, { number: "78", title: "Serialization Format for Portable Encrypted Messages", category: BRCCategory.PeerToPeer, }, { number: "79", title: "Token Exchange Protocol for UTXO-based Overlay Networks", category: BRCCategory.Tokens, }, { number: "80", title: "Improving on MLD for BSV Multicast Services", category: BRCCategory.Opinions, }, { number: "81", title: "Private Overlays with P2PKH Transactions", category: BRCCategory.Overlays, }, { number: "82", title: "Defining a Scalable IPv6 Multicast Protocol for Blockchain Transaction Broadcast", category: BRCCategory.PeerToPeer, }, { number: "83", title: "Scalable Transaction Processing in the BSV Network", category: BRCCategory.Transactions, }, { number: "84", title: "Linked Key Derivation Scheme", category: BRCCategory.KeyDerivation, }, { number: "85", title: "Proven Identity Key Exchange (PIKE)", category: BRCCategory.PeerToPeer, }, { number: "86", title: "Bidirectionally Authenticated Derivation of Privacy Restricted Type 42 Keys", category: BRCCategory.KeyDerivation, }, { number: "87", title: "Standardized Naming Conventions for BRC-22 Topic Managers and BRC-24 Lookup Services", category: BRCCategory.Overlays, }, { number: "88", title: "Overlay Services Synchronization Architecture", category: BRCCategory.Overlays, }, { number: "89", title: "Web 3.0 Standard (at a high level)", category: BRCCategory.Opinions, }, { number: "90", title: "Thoughts on the Mandala Network", category: BRCCategory.Opinions, }, { number: "91", title: "Outputs, Overlays, and Scripts in the Mandala Network", category: BRCCategory.Opinions, }, { number: "92", title: "Mandala Token Protocol", category: BRCCategory.Tokens, }, { number: "93", title: "Limitations of BRC-69 Key Linkage Revelation", category: BRCCategory.KeyDerivation, }, { number: "94", title: "Verifiable Revelation of Shared Secrets Using Schnorr Protocol", category: BRCCategory.KeyDerivation, }, { number: "95", title: "Atomic BEEF Transactions", category: BRCCategory.Transactions, }, { number: "96", title: "BEEF V2 Txid Only Extension", category: BRCCategory.Transactions, }, { number: "97", title: "Extensible Proof-Type Format for Specific Key Linkage Claims", category: BRCCategory.Wallet, }, { number: "98", title: "P Protocols: Allowing future wallet protocol permission schemes", category: BRCCategory.Wallet, }, { number: "99", title: "P Baskets: Allowing Future Wallet Basket and Digital Asset Permission Schemes", category: BRCCategory.Wallet, }, { number: "100", title: "Unified, Vendor-Neutral, Unchanging, and Open BSV Blockchain Standard Wallet-to-Application Interface", category: BRCCategory.Wallet, }, { number: "101", title: "Diverse Facilitators and URL Protocols for SHIP and SLAP Overlay Advertisements", category: BRCCategory.Overlays, }, { number: "102", title: "The deployment-info.json Specification", category: BRCCategory.Apps, }, { number: "103", title: "Peer-to-Peer Mutual Authentication and Certificate Exchange Protocol", category: BRCCategory.PeerToPeer, }, { number: "104", title: "HTTP Transport for BRC-103 Mutual Authentication", category: BRCCategory.PeerToPeer, }, { number: "105", title: "HTTP Service Monetization Framework", category: BRCCategory.Payments, }, ]; // Register each BRC for (const brc of brcs) { // Format the BRC number with leading zeros for consistency in resource IDs const paddedNumber = brc.number.padStart(4, "0"); // Use a shorter resource ID that includes a relevant key from the title const titleKeywords = brc.title.replace(/[^a-zA-Z0-9 ]/g, "").split(" "); const keyword = titleKeywords.find( (word) => word.length > 3 && ![ "with", "from", "that", "this", "your", "when", "then", "them", "they", "bitcoin", ].includes(word.toLowerCase()), ) || titleKeywords[0] || "brc"; // Create a descriptive resource ID const resourceId = `brc_${paddedNumber}_${keyword.toLowerCase()}`; // Build the URL to the BRC file const url = `https://raw.githubusercontent.com/bitcoin-sv/BRCs/master/${brc.category}/${brc.number.padStart(4, "0")}.md`; server.resource( resourceId, url, { title: `BRC-${brc.number}: ${brc.title}`, description: `Bitcoin SV BRC-${brc.number}: ${brc.title}`, }, async (uri) => { const resp = await fetch(uri.href); if (!resp.ok) { throw new Error(`BRC-${brc.number} not found at ${uri.href}`); } const text = await resp.text(); return { contents: [ { uri: uri.href, text, }, ], }; }, ); } }

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