qrcode-pub-mcp
# qrcode-pub-mcp
š¤ **Built by the makers of [Agent!](https://github.com/AgentiLoop/Agent)**, an autonomous macOS agent. š [agentiloop.ai](https://agentiloop.ai)
MCP server for [QRCode.Pub](https://qrcode.pub/?ref=github-mcp) tools, runnable with one command and no API key:
| Tool | What it does | Price |
|---|---|---|
| `qr_code` | QR code image (PNG or SVG) for any text or link ā returned inline plus a stable image URL | free |
| `page_to_markdown` | Fetch a public web page ā title, description, clean Markdown, links (deterministic, no model call) | $0.01 USDC via x402 |
| `page_metadata` | Page metadata: title, description, canonical, language, OpenGraph/Twitter cards, icons, JSON-LD | $0.005 USDC via x402 |
| `host_file` | Upload a file (⤠5 MB: png, jpeg, webp, gif, pdf, json, txt, md, csv) ā public URL `https://qrcode.pub/f/<id>` for 30 days | $0.01 USDC via x402 |
This package is a dependency-free **stdio bridge** (Node 18+, ~60 lines) to the hosted Streamable-HTTP server at `https://qrcode.pub/mcp`. Clients that speak Streamable HTTP natively can skip the bridge and use that URL directly.
## Install
```bash
npx -y github:AgentiLoop/qrcode-pub-mcp # runs the stdio bridge
```
### Claude Code
```bash
claude mcp add qrcode-pub -- npx -y github:AgentiLoop/qrcode-pub-mcp
# or, no bridge:
claude mcp add --transport http qrcode-pub https://qrcode.pub/mcp
```
### Claude Desktop / Cursor / Windsurf / Cline (stdio)
```json
{
"mcpServers": {
"qrcode-pub": {
"command": "npx",
"args": ["-y", "github:AgentiLoop/qrcode-pub-mcp"]
}
}
}
```
### Cursor / VS Code / any Streamable-HTTP client (no bridge)
```json
{
"mcpServers": {
"qrcode-pub": { "type": "http", "url": "https://qrcode.pub/mcp" }
}
}
```
### Verify
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y github:AgentiLoop/qrcode-pub-mcp
```
## Paid tools and x402
The three paid tools cost cents, paid in USDC with the open [x402](https://x402.org) protocol (v2, scheme `exact`) on **Base** (`eip155:8453`) or **Solana** mainnet. No account, no key, no subscription:
1. Call the tool without `payment` ā the result is `isError: true` with `structuredContent.paymentRequired` (the full x402 `accepts` list: network, asset, amount, `payTo`).
2. Sign one entry with any x402 client (e.g. `@x402/fetch`, `x402-axios`, or the agent's own wallet) and call the tool again with the base64 payment payload as `payment`.
3. The server verifies and settles through the facilitator and returns the result; a 4xx answer is never charged.
The same endpoints are plain HTTP for agents that prefer `fetch` + x402 middleware: `GET /x402/extract?url=ā¦`, `GET /x402/meta?url=ā¦`, `POST /x402/store`. Catalog: `https://qrcode.pub/x402`, OpenAPI: `https://qrcode.pub/openapi.json`.
## Environment
| Variable | Default | Purpose |
|---|---|---|
| `QRCODE_PUB_MCP_URL` | `https://qrcode.pub/mcp` | remote endpoint |
| `QRCODE_PUB_MCP_TIMEOUT_MS` | `60000` | per-request timeout |
## Links
- Docs: https://qrcode.pub/qr-code-api?ref=github-mcp#mcp
- Official MCP registry entry: `pub.qrcode/tools`
- Free QR image API (no MCP needed): `https://qrcode.pub/api/qr?data=https://example.com&size=300`
- Agent skills for the same tools: https://github.com/AgentiLoop/skills
## License
MIT ā the bridge is open source; the hosted service terms are at https://qrcode.pub/.
TDQS
Scored across 4 tools
qr_code and host_file are clearly distinct, and page_to_markdown vs page_metadata differ by output (clean Markdown vs structured metadata/OG tags). The two page-fetching tools overlap in the fetch step and could be momentarily confused, but their return contracts are different enough to guide selection.
All names use snake_case (qr_code, page_to_markdown, page_metadata, host_file), which is consistent. The verb/noun style varies a bit (noun-only qr_code, noun_to_noun page_to_markdown, verb_noun host_file), but each name is readable and predictable.
Four tools is a compact, well-scoped set for a QR generation plus file-hosting/page-fetching utility. Slightly thin, but each tool earns its place and nothing looks redundant.
Generation (qr_code), fetching (page_to_markdown, page_metadata) and upload (host_file) are covered, but host_file returns a delete token with no corresponding delete tool, leaving a dead end for cleanup. No QR decoding or content-size/format management operations either.