npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

qr-mcp-service

v2.3.0

Published

Model Context Protocol (MCP) service for QR code generation with stdio transport

Readme

QR Service

A Model Context Protocol (MCP) service implementation that can be used by AI models to generate QR codes. Now supports Server-Sent Events (SSE) for real-time web integration.

Features

  • QR code generation tool for AI models
  • MCP protocol compliant server
  • NEW MCP over Server-Sent Events (SSE) transport protocol
  • RESTful API endpoint
  • Easy deployment
  • Interactive web example

Getting Started

Prerequisites

  • Node.js (version 14 or higher)
  • npm

Installation

npm install

Running Locally

MCP Mode (Original)

npm start

MCP SSE Mode (New - MCP over SSE transport)

npm run dev-mcp-sse

Production MCP SSE Mode

npm run build-mcp-sse
npm run start-mcp-sse

SSE Mode (New - for web applications)

npm run dev-sse

Production SSE Mode

npm run build-sse
npm run start-sse

The service will be available at http://localhost:7997

Development Mode

npm run dev
npm run dev-sse

Running with npx (if installed globally or linked locally)

npx qr-service

Or if linked locally:

qr-service

MCP Endpoint

  • POST /mcp - Main MCP endpoint for AI model communication

MCP SSE Transport Endpoints

  • GET /mcp/sse - SSE endpoint for receiving MCP responses (establish connection)
  • POST /mcp/send - Send MCP requests (include X-Session-ID header)
  • GET / - Server information and usage instructions

SSE Endpoints

  • GET /events - Server-Sent Events endpoint for real-time updates
  • GET /example - Interactive web example with SSE integration
  • POST /mcp - Same MCP endpoint compatible with SSE mode

API Endpoints

  • GET / - Service information
  • GET /health - Health check endpoint

MCP over SSE Integration

The new MCP SSE transport allows MCP clients to communicate via Server-Sent Events instead of stdio:

Usage Pattern

  1. Establish SSE Connection:

    const sessionId = 'client-session-123';
    const eventSource = new EventSource('/mcp/sse', {
      headers: { 'X-Session-ID': sessionId }
    });
       
    eventSource.onmessage = function(event) {
      const mcpMessage = JSON.parse(event.data);
      console.log('MCP Response:', mcpMessage);
    };
  2. Send MCP Requests:

    async function sendMcpRequest(request) {
      const response = await fetch('/mcp/send', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'X-Session-ID': sessionId
        },
        body: JSON.stringify(request)
      });
      return await response.json();
    }
       
    // Example: List available tools
    sendMcpRequest({
      jsonrpc: '2.0',
      id: 1,
      method: 'tools/list'
    });
  3. Generate QR Code:

    sendMcpRequest({
      jsonrpc: '2.0',
      id: 2,
      method: 'tools/call',
      params: {
        name: 'generate_qr_code',
        arguments: {
          url: 'https://example.com',
          size: 200
        }
      }
    });

MCP SSE Client Example

See mcp-sse-client-example.html for a complete working example of an MCP client using SSE transport.

Web Integration with SSE

The traditional SSE mode allows easy integration with web applications:

HTML Example

<!DOCTYPE html>
<html>
<head>
    <title>QR Code Generator</title>
</head>
<body>
    <div id="qr-result"></div>
    <div id="events"></div>
    
    <script>
        // Connect to SSE stream
        const eventSource = new EventSource('/events');
        
        eventSource.onmessage = function(event) {
            const data = JSON.parse(event.data);
            if (data.type === 'qr_generated') {
                document.getElementById('qr-result').innerHTML = 
                    '<img src="' + data.data + '" alt="QR Code">';
            }
        };
        
        // Generate QR code
        async function generateQR(url, size) {
            const response = await fetch('/mcp', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    jsonrpc: '2.0',
                    id: Date.now(),
                    method: 'tools/call',
                    params: {
                        name: 'generate_qr_code',
                        arguments: { url, size }
                    }
                })
            });
            return await response.json();
        }
    </script>
</body>
</html>

MCP Tools

generate_qr_code

Generates a QR code for a given URL.

Parameters:

  • url (string, required): The URL to encode in the QR code
  • size (integer, optional): Size of the QR code image (default: 200)

Example usage:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "tools/call",
  "params": {
    "name": "generate_qr_code",
    "arguments": {
      "url": "https://www.baidu.com",
      "size": 300
    }
  }
}

Deployment

To deploy this service publicly:

  1. Choose a hosting platform (cloud server, Heroku, Vercel, etc.)
  2. Install Node.js on the server
  3. Copy the project files to the server
  4. Run npm install to install dependencies
  5. Configure firewall to allow traffic on port 7997 (or your chosen port)
  6. For MCP mode: Start the service with npm start
  7. For SSE/Web mode: Start the service with npm run build-sse && npm run start-sse
  8. (Optional) Set up a reverse proxy like Nginx for production use
  9. (Optional) Configure a domain name pointing to your server

Environment Variables

  • PORT - Server port (default: 7997)
  • MCP_DEBUG - Enable MCP debug logging
  • SSE_DEBUG - Enable SSE debug logging

CORS Support

The SSE server includes CORS headers for cross-origin requests, making it easy to embed in any web application.