Main class that interacts with the Nevermined payments API. Use Payments.getInstance for server-side usage or Payments.getBrowserInstance for browser usage.

Remarks

This API requires a Nevermined API Key, which can be obtained by logging in to the Nevermined App.

The library provides methods to manage AI Agents, Plans & process AI Agent Requests.

Each of these functionalities is encapsulated in its own API class:

  • plans: Manages AI Plans, including registration and ordering and retrieving plan details.
  • agents: Handles AI Agents, including registration of AI Agents and access token generation.
  • requests: Manages requests received by AI Agents, including validation and tracking.
  • observability: Provides observability and logging utilities for AI Agents with Helicone integration

Hierarchy

  • BasePaymentsAPI
    • Payments

Constructors

  • Initializes the Payments class.

    Parameters

    • options: PaymentOptions

      The options to initialize the payments class.

    • isBrowserInstance: boolean = true

      Whether this instance is for browser usage.

    Returns Payments

Properties

_a2aRegistry?: ClientRegistry
_mcpIntegration?: {
    attach: ((server) => {
        registerPrompt<TArgs>(name, config, handler, options?): void;
        registerResource(name, template, config, handler, options?): void;
        registerTool<TArgs>(name, config, handler, options?): void;
    });
    authenticateMeta: ((extra, options?, method) => Promise<AuthResult>);
    configure: ((options) => void);
    createApp: ((options) => Application);
    createRouter: ((options) => Router);
    getConfig: (() => ExtendedMcpConfig);
    registerPrompt: (<Args>(name, config, handler, options?) => void);
    registerResource: ((name, uriOrTemplate, config, handler, options?) => void);
    registerTool: (<Args>(name, config, handler, options?) => void);
    start: ((config) => Promise<McpServerResult>);
    startServer: ((options) => Promise<HttpServerResult>);
    stop: (() => Promise<void>);
    withPaywall: {
        <TArgs>(handler, options): ((args, extra?) => Promise<any>);
        <TArgs>(handler): ((args, extra?) => Promise<any>);
        (handler, options): ((uri, variables, extra?) => Promise<any>);
    };
}

Cached MCP integration to preserve configuration (e.g., agentId, serverName) across multiple getter accesses. This ensures callers do not need to retain a reference to a previously configured instance.

Type declaration

  • attach: ((server) => {
        registerPrompt<TArgs>(name, config, handler, options?): void;
        registerResource(name, template, config, handler, options?): void;
        registerTool<TArgs>(name, config, handler, options?): void;
    })
      • (server): {
            registerPrompt<TArgs>(name, config, handler, options?): void;
            registerResource(name, template, config, handler, options?): void;
            registerTool<TArgs>(name, config, handler, options?): void;
        }
      • Attach paywall protection to an MCP server. Returns a registrar with protected register methods.

        Parameters

        • server: {
              registerPrompt: ((name, config, handler) => void);
              registerResource: ((name, template, config, handler) => void);
              registerTool: ((name, config, handler) => void);
          }

          The MCP server instance

          • registerPrompt: ((name, config, handler) => void)
              • (name, config, handler): void
              • Parameters

                • name: string
                • config: any
                • handler: any

                Returns void

          • registerResource: ((name, template, config, handler) => void)
              • (name, template, config, handler): void
              • Parameters

                • name: string
                • template: any
                • config: any
                • handler: any

                Returns void

          • registerTool: ((name, config, handler) => void)
              • (name, config, handler): void
              • Parameters

                • name: string
                • config: any
                • handler: any

                Returns void

        Returns {
            registerPrompt<TArgs>(name, config, handler, options?): void;
            registerResource(name, template, config, handler, options?): void;
            registerTool<TArgs>(name, config, handler, options?): void;
        }

        Protected registrar

        • registerPrompt:function
          • Type Parameters

            • TArgs = any

            Parameters

            • name: string
            • config: any
            • handler: ((args, extra?, context?) => any)
                • (args, extra?, context?): any
                • Parameters

                  Returns any

            • Optional options: Omit<PromptOptions, "kind" | "name">

            Returns void

        • registerResource:function
          • Parameters

            • name: string
            • template: any
            • config: any
            • handler: ((uri, variables, extra?, context?) => any)
                • (uri, variables, extra?, context?): any
                • Parameters

                  • uri: URL
                  • variables: Record<string, string | string[]>
                  • Optional extra: any
                  • Optional context: PaywallContext

                  Returns any

            • Optional options: Omit<ResourceOptions, "kind" | "name">

            Returns void

        • registerTool:function
          • Type Parameters

            • TArgs = any

            Parameters

            • name: string
            • config: any
            • handler: ((args, extra?, context?) => any)
                • (args, extra?, context?): any
                • Parameters

                  Returns any

            • Optional options: Omit<ToolOptions, "kind" | "name">

            Returns void

  • authenticateMeta: ((extra, options?, method) => Promise<AuthResult>)
      • (extra, options?, method): Promise<AuthResult>
      • Authenticate meta MCP operations (initialize, tools/list, etc.).

        Parameters

        • extra: any

          The extra parameter from MCP

        • options: {
              planId?: string;
          } = {}
          • Optional planId?: string
        • method: string

          The MCP method being called

        Returns Promise<AuthResult>

        Authentication result

  • configure: ((options) => void)
      • (options): void
      • Configure the MCP integration. This sets up the agent ID, server name, and optional HTTP settings.

        Parameters

        Returns void

        Example

        payments.mcp.configure({
        agentId: 'agent_123',
        serverName: 'my-mcp-server',
        baseUrl: 'http://localhost:5001',
        environment: 'staging_sandbox',
        tools: ['hello_world', 'weather']
        })
  • createApp: ((options) => Application)
      • (options): Application
      • Create an Express app pre-configured with OAuth discovery endpoints. Use this when you want more control over the app before starting.

        Note: Authentication is handled by withPaywall() on each tool, not by HTTP middleware.

        Parameters

        • options: Omit<CreateRouterOptions, "agentId"> & {
              agentId?: string;
          }

          App configuration

        Returns Application

        Configured Express app with OAuth endpoints

        Example

        const app = payments.mcp.createApp({
        baseUrl: 'http://localhost:5001',
        serverName: 'my-mcp-server'
        })

        // Add your MCP handler - auth via withPaywall() on each tool
        app.post('/mcp', mcpHandler)

        app.listen(5001)
  • createRouter: ((options) => Router)
      • (options): Router
      • Create an Express router with OAuth 2.1 endpoints. Use this when you already have an Express app and want to add OAuth support.

        Parameters

        • options: CreateRouterOptions

          Router configuration

        Returns Router

        Express Router

        Example

        const router = payments.mcp.createRouter({
        baseUrl: 'http://localhost:5001',
        serverName: 'my-mcp-server',
        tools: ['hello_world']
        })

        app.use(router)
  • getConfig: (() => ExtendedMcpConfig)
  • registerPrompt: (<Args>(name, config, handler, options?) => void)
      • <Args>(name, config, handler, options?): void
      • Register a prompt with the simplified API. Must be called before start(). Matches the signature of MCP SDK registerPrompt.

        Type Parameters

        • Args = any

        Parameters

        • name: string

          Prompt name

        • config: McpPromptConfig

          Prompt configuration

        • handler: PromptHandler<Args>

          Prompt handler function

        • Optional options: McpRegistrationOptions

          Registration options (credits, etc.)

        Returns void

  • registerResource: ((name, uriOrTemplate, config, handler, options?) => void)
      • (name, uriOrTemplate, config, handler, options?): void
      • Register a resource with the simplified API. Must be called before start().

        Parameters

        • name: string

          Resource name

        • uriOrTemplate: string

          Resource URI (string) or template

        • config: McpResourceConfig

          Resource metadata configuration

        • handler: ResourceHandler

          Resource handler function

        • Optional options: McpRegistrationOptions

          Registration options (credits, etc.)

        Returns void

  • registerTool: (<Args>(name, config, handler, options?) => void)
      • <Args>(name, config, handler, options?): void
      • Register a tool with the simplified API. Must be called before start().

        Type Parameters

        • Args = any

        Parameters

        • name: string

          Tool name

        • config: McpToolConfig

          Tool configuration

        • handler: ToolHandler<Args>

          Tool handler function

        • Optional options: McpRegistrationOptions

          Registration options (credits, etc.)

        Returns void

        Example

        payments.mcp.registerTool(
        'hello_world',
        {
        description: 'Returns a hello world message',
        inputSchema: { name: { type: 'string' } }
        },
        async (args: { name: string }, context?: ToolContext) => ({
        content: [{ type: 'text', text: `Hello, ${args.name}!` }]
        }),
        { credits: 1, onRedeemError: 'ignore' }
        )
  • start: ((config) => Promise<McpServerResult>)
      • (config): Promise<McpServerResult>
      • Start the MCP server with the simplified API. This creates and starts everything: McpServer, Express, OAuth endpoints, etc.

        Parameters

        • config: McpServerConfig

          Server configuration

        Returns Promise<McpServerResult>

        Server result with stop() method

        Example

        // Register tools first
        payments.mcp.registerTool('hello', { description: '...' }, handler)

        // Then start the server
        const { info, stop } = await payments.mcp.start({
        port: 5001,
        agentId: 'did:nv:...',
        serverName: 'my-mcp-server'
        })

        console.log(`Server running at ${info.baseUrl}`)

        // Later: stop gracefully
        await stop()
  • startServer: ((options) => Promise<HttpServerResult>)
      • (options): Promise<HttpServerResult>
      • Start a managed HTTP server with OAuth 2.1 support. This creates a complete Express server with all OAuth endpoints pre-configured.

        Parameters

        • options: StartServerOptions

          Server configuration

        Returns Promise<HttpServerResult>

        Server result with control methods

        Example

        const { baseUrl, stop } = await payments.mcp.startServer({
        port: 5001,
        serverName: 'my-mcp-server',
        tools: ['hello_world', 'weather']
        })

        console.log(`Server running at ${baseUrl}`)

        // Later: gracefully stop
        await stop()
  • stop: (() => Promise<void>)
      • (): Promise<void>
      • Stop the MCP server. This is a convenience method - you can also use the stop() from start()'s result.

        Returns Promise<void>

  • withPaywall: {
        <TArgs>(handler, options): ((args, extra?) => Promise<any>);
        <TArgs>(handler): ((args, extra?) => Promise<any>);
        (handler, options): ((uri, variables, extra?) => Promise<any>);
    }
      • <TArgs>(handler, options): ((args, extra?) => Promise<any>)
      • Wrap a handler with paywall protection. The wrapped handler will validate authentication and burn credits.

        Type Parameters

        • TArgs = any

        Parameters

        • handler: ((args, extra?, context?) => any)
            • (args, extra?, context?): any
            • Parameters

              Returns any

        • options: ToolOptions | PromptOptions

        Returns ((args, extra?) => Promise<any>)

          • (args, extra?): Promise<any>
          • Parameters

            • args: TArgs
            • Optional extra: any

            Returns Promise<any>

      • <TArgs>(handler): ((args, extra?) => Promise<any>)
      • Type Parameters

        • TArgs = any

        Parameters

        • handler: ((args, extra?, context?) => any)
            • (args, extra?, context?): any
            • Parameters

              Returns any

        Returns ((args, extra?) => Promise<any>)

          • (args, extra?): Promise<any>
          • Parameters

            • args: TArgs
            • Optional extra: any

            Returns Promise<any>

      • (handler, options): ((uri, variables, extra?) => Promise<any>)
      • Parameters

        • handler: ((uri, variables, extra?, context?) => any)
            • (uri, variables, extra?, context?): any
            • Parameters

              • uri: URL
              • variables: Record<string, string | string[]>
              • Optional extra: any
              • Optional context: PaywallContext

              Returns any

        • options: ResourceOptions

        Returns ((uri, variables, extra?) => Promise<any>)

          • (uri, variables, extra?): Promise<any>
          • Parameters

            • uri: URL
            • variables: Record<string, string | string[]>
            • Optional extra: any

            Returns Promise<any>

accountAddress: string
agents: AgentsAPI
appId?: string
contracts: ContractsAPI
environment: EnvironmentInfo
environmentName: EnvironmentName
facilitator: FacilitatorAPI
heliconeApiKey: string
isBrowserInstance: boolean = true
nvmApiKey: string
observability: ObservabilityAPI
organizations: OrganizationsAPI
plans: PlansAPI
query: AIQueryApi
requests: AgentRequestsAPI
returnUrl: string
version?: string
x402: X402TokenAPI
a2a: {
    buildPaymentAgentCard: ((baseCard, paymentMetadata) => AgentCard);
} = ...

Static A2A helpers and utilities. Example: Payments.a2a.buildPaymentAgentCard(...)

Type declaration

  • buildPaymentAgentCard: ((baseCard, paymentMetadata) => AgentCard)
      • (baseCard, paymentMetadata): AgentCard
      • Builds an AgentCard with payment/pricing metadata in the capabilities.extensions field.

        This function takes a base agent card and payment metadata, then creates a new agent card that includes the payment information in a standardized extension. The payment extension follows the A2A standard for extensibility and uses the URI 'urn:nevermined:payment' to identify payment-related capabilities.

        The resulting agent card can be used with the PaymentsA2AServer to provide payment-enabled A2A agent functionality.

        Parameters

        • baseCard: AgentCard

          The base AgentCard (without payment info)

        • paymentMetadata: PaymentAgentCardMetadata

          The payment/pricing metadata to include

        Returns AgentCard

        The AgentCard with payment info in capabilities.extensions

        Example

        const baseCard: AgentCard = {
        name: 'My AI Assistant',
        description: 'An AI assistant that helps with various tasks',
        capabilities: {
        tools: ['text-generation', 'image-analysis'],
        extensions: []
        }
        }

        const paymentMetadata: PaymentAgentCardMetadata = {
        paymentType: 'fixed',
        credits: 10,
        agentId: 'agent-123',
        planId: 'plan-456',
        costDescription: '10 credits per request'
        }

        const paymentCard = buildPaymentAgentCard(baseCard, paymentMetadata)

        // Use with PaymentsA2AServer
        PaymentsA2AServer.start({
        agentCard: paymentCard,
        executor: new MyExecutor(),
        paymentsService: payments,
        port: 41242
        })

Accessors

  • get a2a(): {
        getClient: ((options) => Promise<PaymentsClient>);
        start: ((options) => PaymentsA2AServerResult);
    }
  • Exposes A2A server and client registry methods. The client registry is initialized only if getClient is called.

    Returns {
        getClient: ((options) => Promise<PaymentsClient>);
        start: ((options) => PaymentsA2AServerResult);
    }

    • getClient: ((options) => Promise<PaymentsClient>)

      Gets (or creates) a RegisteredPaymentsClient for the given alias. The registry is initialized only on first use.

        • (options): Promise<PaymentsClient>
        • Parameters

          • options: any

            ClientRegistryOptions.

          Returns Promise<PaymentsClient>

    • start: ((options) => PaymentsA2AServerResult)

      Starts the A2A server with payment integration.

        • (options): PaymentsA2AServerResult
        • Parameters

          • options: Omit<PaymentsA2AServerOptions, "paymentsService">

            Server options.

          Returns PaymentsA2AServerResult

  • get isLoggedIn(): boolean
  • Checks if a user is logged in.

    Returns boolean

    True if the user is logged in.

    Example

    payments.isLoggedIn
    
  • get mcp(): {
        attach: ((server) => {
            registerPrompt<TArgs>(name, config, handler, options?): void;
            registerResource(name, template, config, handler, options?): void;
            registerTool<TArgs>(name, config, handler, options?): void;
        });
        authenticateMeta: ((extra, options?, method) => Promise<AuthResult>);
        configure: ((options) => void);
        createApp: ((options) => Application);
        createRouter: ((options) => Router);
        getConfig: (() => ExtendedMcpConfig);
        registerPrompt: (<Args>(name, config, handler, options?) => void);
        registerResource: ((name, uriOrTemplate, config, handler, options?) => void);
        registerTool: (<Args>(name, config, handler, options?) => void);
        start: ((config) => Promise<McpServerResult>);
        startServer: ((options) => Promise<HttpServerResult>);
        stop: (() => Promise<void>);
        withPaywall: {
            <TArgs>(handler, options): ((args, extra?) => Promise<any>);
            <TArgs>(handler): ((args, extra?) => Promise<any>);
            (handler, options): ((uri, variables, extra?) => Promise<any>);
        };
    }
  • Returns the MCP integration API. The instance is memoized so that configuration set via configure({ agentId, serverName }) persists across calls.

    Returns {
        attach: ((server) => {
            registerPrompt<TArgs>(name, config, handler, options?): void;
            registerResource(name, template, config, handler, options?): void;
            registerTool<TArgs>(name, config, handler, options?): void;
        });
        authenticateMeta: ((extra, options?, method) => Promise<AuthResult>);
        configure: ((options) => void);
        createApp: ((options) => Application);
        createRouter: ((options) => Router);
        getConfig: (() => ExtendedMcpConfig);
        registerPrompt: (<Args>(name, config, handler, options?) => void);
        registerResource: ((name, uriOrTemplate, config, handler, options?) => void);
        registerTool: (<Args>(name, config, handler, options?) => void);
        start: ((config) => Promise<McpServerResult>);
        startServer: ((options) => Promise<HttpServerResult>);
        stop: (() => Promise<void>);
        withPaywall: {
            <TArgs>(handler, options): ((args, extra?) => Promise<any>);
            <TArgs>(handler): ((args, extra?) => Promise<any>);
            (handler, options): ((uri, variables, extra?) => Promise<any>);
        };
    }

    • attach: ((server) => {
          registerPrompt<TArgs>(name, config, handler, options?): void;
          registerResource(name, template, config, handler, options?): void;
          registerTool<TArgs>(name, config, handler, options?): void;
      })
        • (server): {
              registerPrompt<TArgs>(name, config, handler, options?): void;
              registerResource(name, template, config, handler, options?): void;
              registerTool<TArgs>(name, config, handler, options?): void;
          }
        • Attach paywall protection to an MCP server. Returns a registrar with protected register methods.

          Parameters

          • server: {
                registerPrompt: ((name, config, handler) => void);
                registerResource: ((name, template, config, handler) => void);
                registerTool: ((name, config, handler) => void);
            }

            The MCP server instance

            • registerPrompt: ((name, config, handler) => void)
                • (name, config, handler): void
                • Parameters

                  • name: string
                  • config: any
                  • handler: any

                  Returns void

            • registerResource: ((name, template, config, handler) => void)
                • (name, template, config, handler): void
                • Parameters

                  • name: string
                  • template: any
                  • config: any
                  • handler: any

                  Returns void

            • registerTool: ((name, config, handler) => void)
                • (name, config, handler): void
                • Parameters

                  • name: string
                  • config: any
                  • handler: any

                  Returns void

          Returns {
              registerPrompt<TArgs>(name, config, handler, options?): void;
              registerResource(name, template, config, handler, options?): void;
              registerTool<TArgs>(name, config, handler, options?): void;
          }

          Protected registrar

          • registerPrompt:function
            • Type Parameters

              • TArgs = any

              Parameters

              • name: string
              • config: any
              • handler: ((args, extra?, context?) => any)
                  • (args, extra?, context?): any
                  • Parameters

                    Returns any

              • Optional options: Omit<PromptOptions, "kind" | "name">

              Returns void

          • registerResource:function
            • Parameters

              • name: string
              • template: any
              • config: any
              • handler: ((uri, variables, extra?, context?) => any)
                  • (uri, variables, extra?, context?): any
                  • Parameters

                    • uri: URL
                    • variables: Record<string, string | string[]>
                    • Optional extra: any
                    • Optional context: PaywallContext

                    Returns any

              • Optional options: Omit<ResourceOptions, "kind" | "name">

              Returns void

          • registerTool:function
            • Type Parameters

              • TArgs = any

              Parameters

              • name: string
              • config: any
              • handler: ((args, extra?, context?) => any)
                  • (args, extra?, context?): any
                  • Parameters

                    Returns any

              • Optional options: Omit<ToolOptions, "kind" | "name">

              Returns void

    • authenticateMeta: ((extra, options?, method) => Promise<AuthResult>)
        • (extra, options?, method): Promise<AuthResult>
        • Authenticate meta MCP operations (initialize, tools/list, etc.).

          Parameters

          • extra: any

            The extra parameter from MCP

          • options: {
                planId?: string;
            } = {}
            • Optional planId?: string
          • method: string

            The MCP method being called

          Returns Promise<AuthResult>

          Authentication result

    • configure: ((options) => void)
        • (options): void
        • Configure the MCP integration. This sets up the agent ID, server name, and optional HTTP settings.

          Parameters

          Returns void

          Example

          payments.mcp.configure({
          agentId: 'agent_123',
          serverName: 'my-mcp-server',
          baseUrl: 'http://localhost:5001',
          environment: 'staging_sandbox',
          tools: ['hello_world', 'weather']
          })
    • createApp: ((options) => Application)
        • (options): Application
        • Create an Express app pre-configured with OAuth discovery endpoints. Use this when you want more control over the app before starting.

          Note: Authentication is handled by withPaywall() on each tool, not by HTTP middleware.

          Parameters

          • options: Omit<CreateRouterOptions, "agentId"> & {
                agentId?: string;
            }

            App configuration

          Returns Application

          Configured Express app with OAuth endpoints

          Example

          const app = payments.mcp.createApp({
          baseUrl: 'http://localhost:5001',
          serverName: 'my-mcp-server'
          })

          // Add your MCP handler - auth via withPaywall() on each tool
          app.post('/mcp', mcpHandler)

          app.listen(5001)
    • createRouter: ((options) => Router)
        • (options): Router
        • Create an Express router with OAuth 2.1 endpoints. Use this when you already have an Express app and want to add OAuth support.

          Parameters

          • options: CreateRouterOptions

            Router configuration

          Returns Router

          Express Router

          Example

          const router = payments.mcp.createRouter({
          baseUrl: 'http://localhost:5001',
          serverName: 'my-mcp-server',
          tools: ['hello_world']
          })

          app.use(router)
    • getConfig: (() => ExtendedMcpConfig)
    • registerPrompt: (<Args>(name, config, handler, options?) => void)
        • <Args>(name, config, handler, options?): void
        • Register a prompt with the simplified API. Must be called before start(). Matches the signature of MCP SDK registerPrompt.

          Type Parameters

          • Args = any

          Parameters

          • name: string

            Prompt name

          • config: McpPromptConfig

            Prompt configuration

          • handler: PromptHandler<Args>

            Prompt handler function

          • Optional options: McpRegistrationOptions

            Registration options (credits, etc.)

          Returns void

    • registerResource: ((name, uriOrTemplate, config, handler, options?) => void)
        • (name, uriOrTemplate, config, handler, options?): void
        • Register a resource with the simplified API. Must be called before start().

          Parameters

          • name: string

            Resource name

          • uriOrTemplate: string

            Resource URI (string) or template

          • config: McpResourceConfig

            Resource metadata configuration

          • handler: ResourceHandler

            Resource handler function

          • Optional options: McpRegistrationOptions

            Registration options (credits, etc.)

          Returns void

    • registerTool: (<Args>(name, config, handler, options?) => void)
        • <Args>(name, config, handler, options?): void
        • Register a tool with the simplified API. Must be called before start().

          Type Parameters

          • Args = any

          Parameters

          • name: string

            Tool name

          • config: McpToolConfig

            Tool configuration

          • handler: ToolHandler<Args>

            Tool handler function

          • Optional options: McpRegistrationOptions

            Registration options (credits, etc.)

          Returns void

          Example

          payments.mcp.registerTool(
          'hello_world',
          {
          description: 'Returns a hello world message',
          inputSchema: { name: { type: 'string' } }
          },
          async (args: { name: string }, context?: ToolContext) => ({
          content: [{ type: 'text', text: `Hello, ${args.name}!` }]
          }),
          { credits: 1, onRedeemError: 'ignore' }
          )
    • start: ((config) => Promise<McpServerResult>)
        • (config): Promise<McpServerResult>
        • Start the MCP server with the simplified API. This creates and starts everything: McpServer, Express, OAuth endpoints, etc.

          Parameters

          • config: McpServerConfig

            Server configuration

          Returns Promise<McpServerResult>

          Server result with stop() method

          Example

          // Register tools first
          payments.mcp.registerTool('hello', { description: '...' }, handler)

          // Then start the server
          const { info, stop } = await payments.mcp.start({
          port: 5001,
          agentId: 'did:nv:...',
          serverName: 'my-mcp-server'
          })

          console.log(`Server running at ${info.baseUrl}`)

          // Later: stop gracefully
          await stop()
    • startServer: ((options) => Promise<HttpServerResult>)
        • (options): Promise<HttpServerResult>
        • Start a managed HTTP server with OAuth 2.1 support. This creates a complete Express server with all OAuth endpoints pre-configured.

          Parameters

          • options: StartServerOptions

            Server configuration

          Returns Promise<HttpServerResult>

          Server result with control methods

          Example

          const { baseUrl, stop } = await payments.mcp.startServer({
          port: 5001,
          serverName: 'my-mcp-server',
          tools: ['hello_world', 'weather']
          })

          console.log(`Server running at ${baseUrl}`)

          // Later: gracefully stop
          await stop()
    • stop: (() => Promise<void>)
        • (): Promise<void>
        • Stop the MCP server. This is a convenience method - you can also use the stop() from start()'s result.

          Returns Promise<void>

    • withPaywall: {
          <TArgs>(handler, options): ((args, extra?) => Promise<any>);
          <TArgs>(handler): ((args, extra?) => Promise<any>);
          (handler, options): ((uri, variables, extra?) => Promise<any>);
      }
        • <TArgs>(handler, options): ((args, extra?) => Promise<any>)
        • Wrap a handler with paywall protection. The wrapped handler will validate authentication and burn credits.

          Type Parameters

          • TArgs = any

          Parameters

          • handler: ((args, extra?, context?) => any)
              • (args, extra?, context?): any
              • Parameters

                Returns any

          • options: ToolOptions | PromptOptions

          Returns ((args, extra?) => Promise<any>)

            • (args, extra?): Promise<any>
            • Parameters

              • args: TArgs
              • Optional extra: any

              Returns Promise<any>

        • <TArgs>(handler): ((args, extra?) => Promise<any>)
        • Type Parameters

          • TArgs = any

          Parameters

          • handler: ((args, extra?, context?) => any)
              • (args, extra?, context?): any
              • Parameters

                Returns any

          Returns ((args, extra?) => Promise<any>)

            • (args, extra?): Promise<any>
            • Parameters

              • args: TArgs
              • Optional extra: any

              Returns Promise<any>

        • (handler, options): ((uri, variables, extra?) => Promise<any>)
        • Parameters

          • handler: ((uri, variables, extra?, context?) => any)
              • (uri, variables, extra?, context?): any
              • Parameters

                • uri: URL
                • variables: Record<string, string | string[]>
                • Optional extra: any
                • Optional context: PaywallContext

                Returns any

          • options: ResourceOptions

          Returns ((uri, variables, extra?) => Promise<any>)

            • (uri, variables, extra?): Promise<any>
            • Parameters

              • uri: URL
              • variables: Record<string, string | string[]>
              • Optional extra: any

              Returns Promise<any>

Methods

  • Initiates the connect flow. The user's browser will be redirected to the Nevermined App login page.

    Returns void

    Remarks

    This is a browser-only function.

    Example

    payments.connect()
    
  • It returns the account address associated with the NVM API Key used to initialize the Payments Library instance.

    Returns undefined | string

    The account address extracted from the NVM API Key

  • Internal

    Returns the HTTP options required to query the backend.

    Parameters

    • method: string

      HTTP method.

    • Optional body: any

      Optional request body.

    Returns any

    HTTP options object.

  • Internal

    Get HTTP options for public backend requests (no authorization header). Converts body keys from snake_case to camelCase for consistency.

    Parameters

    • method: string

      HTTP method

    • Optional body: any

      Optional request body (keys will be converted to camelCase)

    Returns {
        body?: string;
        headers: {
            Accept: string;
            Content-Type: string;
        };
        method: string;
    }

    HTTP options object

    • Optional body?: string
    • headers: {
          Accept: string;
          Content-Type: string;
      }
      • Accept: string
      • Content-Type: string
    • method: string
  • Logs out the user by removing the NVM API key.

    Returns void

    Remarks

    This is a browser-only function.

    Example

    payments.logout()
    
  • Parses the NVM API Key to extract the account address.

    Returns {
        accountAddress: string;
        heliconeApiKey: string;
    }

    • accountAddress: string
    • heliconeApiKey: string

    Throws

    PaymentsError if the API key is invalid.

  • Get an instance of the Payments class for browser usage.

    Parameters

    Returns Payments

    An instance of Payments

    Remarks

    This is a browser-only function.

    Example

    const payments = Payments.getBrowserInstance({
    returnUrl: 'https://mysite.example',
    environment: 'sandbox',
    appId: 'my-app-id',
    version: '1.0.0'
    })

    Throws

    PaymentsError if returnUrl is missing.

  • Get an instance of the Payments class for server-side usage.

    Parameters

    Returns Payments

    An instance of Payments

    Example

    const payments = Payments.getInstance({
    nvmApiKey: 'your-nvm-api-key',
    environment: 'sandbox'
    })

    Throws

    PaymentsError if nvmApiKey is missing.