Skip to main content
Glama

createKeypair

Generate a new Nostr keypair for secure authentication and interaction with the decentralized social network, with options to output keys in hex, npub, or both formats.

Instructions

Generate a new Nostr keypair

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
formatNoFormat to return keys in: hex only, npub only, or bothboth

Implementation Reference

  • Core handler function that generates a new Nostr keypair using generateKeypair from 'snstr' library and returns keys in specified format (hex, npub/nsec, or both).
    export async function createKeypair(
      format: "both" | "hex" | "npub" = "both"
    ): Promise<{ publicKey?: string, privateKey?: string, npub?: string, nsec?: string }> {
      try {
        // Generate a new keypair
        const keys = await generateKeypair();
        
        const result: { publicKey?: string, privateKey?: string, npub?: string, nsec?: string } = {};
        
        if (format === "hex" || format === "both") {
          result.publicKey = keys.publicKey;
          result.privateKey = keys.privateKey;
        }
        
        if (format === "npub" || format === "both") {
          result.npub = encodePublicKey(keys.publicKey);
          result.nsec = encodePrivateKey(keys.privateKey);
        }
        
        return result;
      } catch (error) {
        throw new Error(`Failed to generate keypair: ${error instanceof Error ? error.message : "Unknown error"}`);
      }
    }
  • index.ts:1156-1202 (registration)
    MCP server registration of the 'createKeypair' tool, which calls the core handler and formats the MCP response.
    server.tool(
      "createKeypair",
      "Generate a new Nostr keypair",
      createKeypairToolConfig,
      async ({ format }) => {
        try {
          const result = await createKeypair(format);
          
          let response = "New Nostr keypair generated:\n\n";
          
          if (result.publicKey) {
            response += `Public Key (hex): ${result.publicKey}\n`;
          }
          if (result.privateKey) {
            response += `Private Key (hex): ${result.privateKey}\n`;
          }
          if (result.npub) {
            response += `Public Key (npub): ${result.npub}\n`;
          }
          if (result.nsec) {
            response += `Private Key (nsec): ${result.nsec}\n`;
          }
          
          response += "\n⚠️ IMPORTANT: Store your private key securely! This is the only copy and cannot be recovered if lost.";
          
          return {
            content: [
              {
                type: "text",
                text: response,
              },
            ],
          };
        } catch (error) {
          console.error("Error in createKeypair tool:", error);
          
          return {
            content: [
              {
                type: "text",
                text: `Error generating keypair: ${error instanceof Error ? error.message : "Unknown error"}`,
              },
            ],
          };
        }
      },
    );
  • Zod schema defining the input parameters for the createKeypair tool.
    // Schema for createKeypair tool
    export const createKeypairToolConfig = {
      format: z.enum(["both", "hex", "npub"]).default("both").describe("Format to return keys in: hex only, npub only, or both"),
    };

Latest Blog Posts

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/AustinKelsay/nostr-mcp-server'

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