From 656a0292ae0515cf6ed53099251e9443a7ffd359 Mon Sep 17 00:00:00 2001 From: Anton Pidkuiko MacBook Date: Thu, 15 Jan 2026 11:36:21 +0000 Subject: [PATCH] feat: add QR Code to README gallery + rename to QR Code Server - Add grid-cell.png screenshot for README gallery - Rename 'QR Server' to 'QR Code Server' everywhere - Add QR Code (Python) entry to examples table in README --- README.md | 4 ++-- examples/qr-server/README.md | 2 +- examples/qr-server/grid-cell.png | Bin 0 -> 40202 bytes examples/qr-server/server.py | 4 ++-- tests/e2e/servers.spec.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 examples/qr-server/grid-cell.png diff --git a/README.md b/README.md index d9a2406..6057fe1 100644 --- a/README.md +++ b/README.md @@ -67,8 +67,8 @@ Or edit your `package.json` manually: | [**Scenario Modeler**](examples/scenario-modeler-server) | [**Budget Allocator**](examples/budget-allocator-server) | [**Customer Segmentation**](examples/customer-segmentation-server) | | [![System Monitor](examples/system-monitor-server/grid-cell.png "Real-time OS metrics")](examples/system-monitor-server) | [![Transcript](examples/transcript-server/grid-cell.png "Live speech transcription")](examples/transcript-server) | [![Video Resource](examples/video-resource-server/grid-cell.png "Binary video via MCP resources")](examples/video-resource-server) | | [**System Monitor**](examples/system-monitor-server) | [**Transcript**](examples/transcript-server) | [**Video Resource**](examples/video-resource-server) | -| [![PDF Server](examples/pdf-server/grid-cell.png "Interactive PDF viewer with chunked loading")](examples/pdf-server) | | | -| [**PDF Server**](examples/pdf-server) | | | +| [![PDF Server](examples/pdf-server/grid-cell.png "Interactive PDF viewer with chunked loading")](examples/pdf-server) | [![QR Code](examples/qr-server/grid-cell.png "QR code generator")](examples/qr-server) | | +| [**PDF Server**](examples/pdf-server) | [**QR Code (Python)**](examples/qr-server) | | ### Starter Templates diff --git a/examples/qr-server/README.md b/examples/qr-server/README.md index 11f6a4c..e98016e 100644 --- a/examples/qr-server/README.md +++ b/examples/qr-server/README.md @@ -24,7 +24,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh ```bash # Run server (HTTP mode) - uv handles dependencies automatically uv run server.py -# → QR Server listening on http://localhost:3108/mcp +# → QR Code Server listening on http://localhost:3108/mcp ``` ## Usage diff --git a/examples/qr-server/grid-cell.png b/examples/qr-server/grid-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..0d54384ba17fd108beca2bb1ea5407a9266fd39d GIT binary patch literal 40202 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 literal 0 HcmV?d00001 diff --git a/examples/qr-server/server.py b/examples/qr-server/server.py index e5455bd..f6618c0 100755 --- a/examples/qr-server/server.py +++ b/examples/qr-server/server.py @@ -27,7 +27,7 @@ WIDGET_URI = "ui://qr-server/widget.html" HOST = os.environ.get("HOST", "0.0.0.0") # 0.0.0.0 for Docker compatibility PORT = int(os.environ.get("PORT", "3108")) -mcp = FastMCP("QR Server", port=PORT, stateless_http=True) +mcp = FastMCP("QR Code Server", port=PORT, stateless_http=True) @mcp.tool(meta={"ui/resourceUri": WIDGET_URI}) @@ -132,5 +132,5 @@ if __name__ == "__main__": allow_methods=["*"], allow_headers=["*"], ) - print(f"QR Server listening on http://{HOST}:{PORT}/mcp") + print(f"QR Code Server listening on http://{HOST}:{PORT}/mcp") uvicorn.run(app, host=HOST, port=PORT) diff --git a/tests/e2e/servers.spec.ts b/tests/e2e/servers.spec.ts index 4b5b06d..6ee31df 100644 --- a/tests/e2e/servers.spec.ts +++ b/tests/e2e/servers.spec.ts @@ -49,7 +49,7 @@ const SERVERS = [ { key: "customer-segmentation", name: "Customer Segmentation Server" }, { key: "map-server", name: "CesiumJS Map Server" }, { key: "pdf-server", name: "PDF Server" }, - { key: "qr-server", name: "QR Server" }, + { key: "qr-server", name: "QR Code Server" }, { key: "scenario-modeler", name: "SaaS Scenario Modeler" }, { key: "shadertoy", name: "ShaderToy Server" }, { key: "sheet-music", name: "Sheet Music Server" },