qr-for-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # qr-for-agent
2
+
3
+ MCP server for dynamic QR codes — create, track, and update QR codes from any AI agent.
4
+
5
+ This is a lightweight [Model Context Protocol](https://modelcontextprotocol.io/) server that wraps the QR Agent Core API. It lets AI agents (Claude Desktop, Cursor, Windsurf, etc.) manage QR codes as native tools.
6
+
7
+ ## Quick Start
8
+
9
+ ```bash
10
+ npx qr-for-agent
11
+ ```
12
+
13
+ You need an API key. Set it via environment variable:
14
+
15
+ ```bash
16
+ API_KEY=your-key-here npx qr-for-agent
17
+ ```
18
+
19
+ ## Configuration
20
+
21
+ ### Claude Desktop
22
+
23
+ Add to your `claude_desktop_config.json`:
24
+
25
+ ```json
26
+ {
27
+ "mcpServers": {
28
+ "qr-for-agent": {
29
+ "command": "npx",
30
+ "args": ["-y", "qr-for-agent"],
31
+ "env": {
32
+ "API_KEY": "your-api-key",
33
+ "BASE_URL": "https://your-instance.example.com"
34
+ }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ ### Cursor
41
+
42
+ Add to `.cursor/mcp.json` in your project:
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "qr-for-agent": {
48
+ "command": "npx",
49
+ "args": ["-y", "qr-for-agent"],
50
+ "env": {
51
+ "API_KEY": "your-api-key",
52
+ "BASE_URL": "https://your-instance.example.com"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Environment Variables
60
+
61
+ | Variable | Required | Default | Description |
62
+ | ---------- | -------- | ------------------------ | ------------------------------- |
63
+ | `API_KEY` | Yes | — | Your QR Agent Core API key |
64
+ | `BASE_URL` | No | `http://localhost:3100` | URL of your QR Agent Core instance |
65
+
66
+ ## Tools
67
+
68
+ The server exposes 6 tools:
69
+
70
+ | Tool | Description |
71
+ | ----------------------- | --------------------------------------------------------------------------- |
72
+ | `create_qr_code` | Create a new dynamic QR code pointing to a target URL (SVG or PNG) |
73
+ | `get_qr_code` | Retrieve details of an existing QR code by short ID |
74
+ | `update_qr_destination`| Change where a QR code redirects — the image stays the same |
75
+ | `list_qr_codes` | List all QR codes with pagination |
76
+ | `delete_qr_code` | Permanently delete a QR code and its analytics |
77
+ | `get_qr_analytics` | Get scan count and recent scan events for a QR code |
78
+
79
+ ## How It Works
80
+
81
+ This MCP server is a thin HTTP client. It forwards tool calls to your QR Agent Core API server, which handles QR generation, storage, redirects, and analytics. The QR codes are "dynamic" — you can change the destination URL at any time without regenerating the QR image.
82
+
83
+ ## License
84
+
85
+ MIT
@@ -0,0 +1,7 @@
1
+ interface RequestOptions {
2
+ method?: string;
3
+ body?: unknown;
4
+ query?: Record<string, string | number>;
5
+ }
6
+ export declare function apiRequest(path: string, options?: RequestOptions): Promise<any>;
7
+ export {};
@@ -0,0 +1,28 @@
1
+ import dotenv from "dotenv";
2
+ dotenv.config();
3
+ const BASE_URL = process.env.BASE_URL || "http://localhost:3100";
4
+ const API_KEY = process.env.API_KEY || "";
5
+ export async function apiRequest(path, options = {}) {
6
+ const { method = "GET", body, query } = options;
7
+ let url = `${BASE_URL}${path}`;
8
+ if (query) {
9
+ const params = new URLSearchParams();
10
+ for (const [key, value] of Object.entries(query)) {
11
+ params.set(key, String(value));
12
+ }
13
+ url += `?${params.toString()}`;
14
+ }
15
+ const headers = {
16
+ "X-API-Key": API_KEY,
17
+ };
18
+ if (body) {
19
+ headers["Content-Type"] = "application/json";
20
+ }
21
+ const res = await fetch(url, {
22
+ method,
23
+ headers,
24
+ body: body ? JSON.stringify(body) : undefined,
25
+ });
26
+ return res.json();
27
+ }
28
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAC;AACjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AAQ1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,UAA0B,EAAE;IACzE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAEhD,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,WAAW,EAAE,OAAO;KACrB,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { tools } from "./tools.js";
5
+ /**
6
+ * Standalone MCP server for QR Agent Core.
7
+ *
8
+ * Run with: npx qr-for-agent
9
+ *
10
+ * This exposes all QR management tools via the Model Context Protocol,
11
+ * allowing agents like Claude to call them directly as tools
12
+ * rather than making HTTP requests.
13
+ */
14
+ const server = new McpServer({
15
+ name: "qr-for-agent",
16
+ version: "0.1.0",
17
+ });
18
+ // Register each tool from our definitions
19
+ for (const [name, tool] of Object.entries(tools)) {
20
+ server.tool(name, tool.description, tool.inputSchema.shape, async (input) => {
21
+ try {
22
+ const result = await tool.handler(input);
23
+ return {
24
+ content: [
25
+ {
26
+ type: "text",
27
+ text: JSON.stringify(result, null, 2),
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ return {
35
+ content: [
36
+ {
37
+ type: "text",
38
+ text: JSON.stringify({
39
+ error: message,
40
+ hint: "Check the input parameters and try again. Use list_qr_codes to verify available QR codes.",
41
+ }),
42
+ },
43
+ ],
44
+ isError: true,
45
+ };
46
+ }
47
+ });
48
+ }
49
+ async function main() {
50
+ const transport = new StdioServerTransport();
51
+ await server.connect(transport);
52
+ console.error("QR Agent Core MCP server running on stdio");
53
+ }
54
+ main().catch(console.error);
55
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,0CAA0C;AAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IACjD,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CAAC,KAAK,EACtB,KAAK,EAAE,KAA8B,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAY,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,OAAO;4BACd,IAAI,EAAE,2FAA2F;yBAClG,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * MCP tool definitions for QR Agent Core.
4
+ * Each tool calls the production HTTP API.
5
+ */
6
+ export declare const tools: {
7
+ create_qr_code: {
8
+ description: string;
9
+ inputSchema: z.ZodObject<{
10
+ target_url: z.ZodString;
11
+ label: z.ZodOptional<z.ZodString>;
12
+ format: z.ZodDefault<z.ZodEnum<{
13
+ svg: "svg";
14
+ png: "png";
15
+ }>>;
16
+ }, z.core.$strip>;
17
+ handler: (input: {
18
+ target_url: string;
19
+ label?: string;
20
+ format?: "svg" | "png";
21
+ }) => Promise<any>;
22
+ };
23
+ get_qr_code: {
24
+ description: string;
25
+ inputSchema: z.ZodObject<{
26
+ short_id: z.ZodString;
27
+ }, z.core.$strip>;
28
+ handler: (input: {
29
+ short_id: string;
30
+ }) => Promise<any>;
31
+ };
32
+ update_qr_destination: {
33
+ description: string;
34
+ inputSchema: z.ZodObject<{
35
+ short_id: z.ZodString;
36
+ target_url: z.ZodString;
37
+ label: z.ZodOptional<z.ZodString>;
38
+ }, z.core.$strip>;
39
+ handler: (input: {
40
+ short_id: string;
41
+ target_url: string;
42
+ label?: string;
43
+ }) => Promise<any>;
44
+ };
45
+ list_qr_codes: {
46
+ description: string;
47
+ inputSchema: z.ZodObject<{
48
+ limit: z.ZodDefault<z.ZodNumber>;
49
+ offset: z.ZodDefault<z.ZodNumber>;
50
+ }, z.core.$strip>;
51
+ handler: (input: {
52
+ limit: number;
53
+ offset: number;
54
+ }) => Promise<any>;
55
+ };
56
+ delete_qr_code: {
57
+ description: string;
58
+ inputSchema: z.ZodObject<{
59
+ short_id: z.ZodString;
60
+ }, z.core.$strip>;
61
+ handler: (input: {
62
+ short_id: string;
63
+ }) => Promise<any>;
64
+ };
65
+ get_qr_analytics: {
66
+ description: string;
67
+ inputSchema: z.ZodObject<{
68
+ short_id: z.ZodString;
69
+ }, z.core.$strip>;
70
+ handler: (input: {
71
+ short_id: string;
72
+ }) => Promise<any>;
73
+ };
74
+ };
package/dist/tools.js ADDED
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { apiRequest } from "./api-client.js";
3
+ /**
4
+ * MCP tool definitions for QR Agent Core.
5
+ * Each tool calls the production HTTP API.
6
+ */
7
+ export const tools = {
8
+ create_qr_code: {
9
+ description: "Create a new managed QR code. The QR code points to a short URL that redirects to your target URL. You can change the target URL later without regenerating the QR image. Returns the QR image data (SVG or PNG) and the short URL.",
10
+ inputSchema: z.object({
11
+ target_url: z
12
+ .string()
13
+ .url()
14
+ .describe("The destination URL the QR code should redirect to."),
15
+ label: z
16
+ .string()
17
+ .optional()
18
+ .describe("An optional label to identify this QR code."),
19
+ format: z
20
+ .enum(["svg", "png"])
21
+ .default("svg")
22
+ .describe('Image format. "svg" is recommended (smaller, scalable, text-parseable). Use "png" only if a bitmap is required.'),
23
+ }),
24
+ handler: async (input) => {
25
+ return apiRequest("/api/qr", { method: "POST", body: input });
26
+ },
27
+ },
28
+ get_qr_code: {
29
+ description: "Retrieve details of an existing QR code by its short ID. Returns the current target URL, metadata, and timestamps.",
30
+ inputSchema: z.object({
31
+ short_id: z.string().describe("The short ID of the QR code to look up."),
32
+ }),
33
+ handler: async (input) => {
34
+ return apiRequest(`/api/qr/${input.short_id}`);
35
+ },
36
+ },
37
+ update_qr_destination: {
38
+ description: "Change where an existing QR code redirects to. This is the key 'dynamic link' feature: the QR image stays the same, but scanning it will now go to the new URL. Ideal for updating campaigns, fixing broken links, or A/B testing.",
39
+ inputSchema: z.object({
40
+ short_id: z.string().describe("The short ID of the QR code to update."),
41
+ target_url: z
42
+ .string()
43
+ .url()
44
+ .describe("The new destination URL."),
45
+ label: z
46
+ .string()
47
+ .optional()
48
+ .describe("Optionally update the label too."),
49
+ }),
50
+ handler: async (input) => {
51
+ return apiRequest(`/api/qr/${input.short_id}`, {
52
+ method: "PATCH",
53
+ body: { target_url: input.target_url, label: input.label },
54
+ });
55
+ },
56
+ },
57
+ list_qr_codes: {
58
+ description: "List all managed QR codes with pagination. Returns short IDs, target URLs, labels, and timestamps. Use this to browse or search for existing QR codes.",
59
+ inputSchema: z.object({
60
+ limit: z.number().min(1).max(100).default(20).describe("Max results to return."),
61
+ offset: z.number().min(0).default(0).describe("Number of results to skip."),
62
+ }),
63
+ handler: async (input) => {
64
+ return apiRequest("/api/qr", { query: { limit: input.limit, offset: input.offset } });
65
+ },
66
+ },
67
+ delete_qr_code: {
68
+ description: "Permanently delete a QR code and all its scan analytics. The short URL will stop working immediately. This cannot be undone.",
69
+ inputSchema: z.object({
70
+ short_id: z.string().describe("The short ID of the QR code to delete."),
71
+ }),
72
+ handler: async (input) => {
73
+ return apiRequest(`/api/qr/${input.short_id}`, { method: "DELETE" });
74
+ },
75
+ },
76
+ get_qr_analytics: {
77
+ description: "Get scan analytics for a QR code. Returns total scan count and recent scan events with timestamps and user agents.",
78
+ inputSchema: z.object({
79
+ short_id: z.string().describe("The short ID of the QR code to get analytics for."),
80
+ }),
81
+ handler: async (input) => {
82
+ return apiRequest(`/api/analytics/${input.short_id}`);
83
+ },
84
+ },
85
+ };
86
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,cAAc,EAAE;QACd,WAAW,EACT,qOAAqO;QACvO,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,CAAC,qDAAqD,CAAC;YAClE,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBACpB,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,iHAAiH,CAClH;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAqE,EAAE,EAAE;YACvF,OAAO,UAAU,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;KACF;IAED,WAAW,EAAE;QACX,WAAW,EACT,oHAAoH;QACtH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACzE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA2B,EAAE,EAAE;YAC7C,OAAO,UAAU,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;KACF;IAED,qBAAqB,EAAE;QACrB,WAAW,EACT,oOAAoO;QACtO,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACvE,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,CAAC,0BAA0B,CAAC;YACvC,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;SAChD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA+D,EAAE,EAAE;YACjF,OAAO,UAAU,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,EAAE;gBAC7C,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;KACF;IAED,aAAa,EAAE;QACb,WAAW,EACT,wJAAwJ;QAC1J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SAC5E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAwC,EAAE,EAAE;YAC1D,OAAO,UAAU,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;KACF;IAED,cAAc,EAAE;QACd,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACxE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA2B,EAAE,EAAE;YAC7C,OAAO,UAAU,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvE,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EACT,oHAAoH;QACtH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SACnF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA2B,EAAE,EAAE;YAC7C,OAAO,UAAU,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;KACF;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "qr-for-agent",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for dynamic QR codes — create, track, and update QR codes from any AI agent",
5
+ "type": "module",
6
+ "bin": {
7
+ "qr-for-agent": "dist/server.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "prepublishOnly": "tsc"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "qr-code",
20
+ "ai-agent",
21
+ "dynamic-qr",
22
+ "model-context-protocol",
23
+ "claude",
24
+ "cursor"
25
+ ],
26
+ "license": "MIT",
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.26.0",
32
+ "zod": "^4.3.6",
33
+ "dotenv": "^17.3.1"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^5.9.3"
37
+ }
38
+ }