mcpField
A
Appqr

Appqr

ローカル
github.com/harishakumarnビジネス・マーケティング019 週間前に更新

Appqr について

Appqrは、iOSとAndroidのユーザーを各アプリストアへ振り分けるQRコードを作成するコマンドラインツール兼Node.jsパッケージです。開発者はリダイレクト用ファイルを変更せずにキャンペーン別のコードを作成でき、MCPサーバー経由で対応エージェントから操作できます。

主な機能

  1. 01端末に応じたApp Store・Google Playへの転送
  2. 02キャンペーン用QR画像の生成
  3. 03iOSとAndroidで別々の計測パラメーター
  4. 04ストアURLの検証
  5. 05コマンドライン、Node.jsパッケージ、MCPツール

活用シーン

  1. 01両ストアで配信するアプリ向けの共通QRコード作成
  2. 02キャンペーンごとのQR画像作成
  3. 03MCP対応エージェントからのQRファイル生成

MCP 対応

内蔵MCPサーバーは、初期設定、キャンペーンQR生成、ストアURL検証のツールを対応するAIエージェントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"appqr": {
"command": "npx",
"args": [
"-y",
"appqr"
]
}
}
}
起動コマンドnpx -y appqr

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmappqr

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

AppQR

QR コードは 1 つだけ。デバイスを検出し、ユーザーを適切なストアへ誘導します。

npm version npm downloads license node MCP


アプリを作成し、両方のストアで公開しました。ランディングページ、名刺、プレスキットで使える QR コードが 1 つ必要です。この用途に対応する他のツールは、どれも月額サブスクリプション料金がかかります。AppQR は無料で、マシン上で動作し、ずっと使えます。

npx appqr setup \
  --ios "https://apps.apple.com/app/id123456789" \
  --android "https://play.google.com/store/apps/details?id=com.myapp" \
  --url "https://myapp.com/go"
✓ redirect.html  →  ./appqr-output/redirect.html
✓ qr.png         →  ./appqr-output/qr.png

→ Upload redirect.html to your site at: https://myapp.com/go
→ Done! For future campaigns, run: appqr campaign

仕組み

Scan QR
  ↓
Phone opens: myapp.com/go?d=eyJpb3MiOiJodHRw...
  ↓
redirect.html detects device (client-side JS, no server)
  ↓
iOS user  → App Store
Android   → Google Play

QR コードは、両方のストアの URL を URL 自体に Base64 形式で埋め込みます。redirect.html はデコードしてリダイレクトするだけの小さな汎用ファイルです。キャンペーンデータは一切含まず、変更する必要もありません。新しいキャンペーンごとに、新しい QR 画像を生成するだけです。

**リダイレクトの経路に AppQR のサーバーが介在することはありません。**すべて開発者自身のウェブサイト上で動作します。


インストール

npm install -g appqr

インストールせずに実行することもできます。

npx appqr setup ...

使い方

ステップ 1 — セットアップ(アプリごとに 1 回)
appqr setup \
  --ios "https://apps.apple.com/app/id123456789" \
  --android "https://play.google.com/store/apps/details?id=com.myapp" \
  --url "https://myapp.com/go"

最初の QR コードでキャンペーン追跡を有効にする場合:

appqr setup \
  --ios "https://apps.apple.com/app/id123456789" \
  --android "https://play.google.com/store/apps/details?id=com.myapp" \
  --url "https://myapp.com/go" \
  --ios-params "ct=launch&pt=12345&mt=8" \
  --android-params "utm_source=launch&utm_campaign=v1&utm_medium=organic" \
  --output ./public/go

redirect.html をサイトにアップロードします。アップロードするファイルはこれだけです。以後、変更する必要はありません。


ステップ 2 — 新しいキャンペーン QR(必要なだけ何度でも)
appqr campaign \
  --ios "https://apps.apple.com/app/id123456789" \
  --android "https://play.google.com/store/apps/details?id=com.myapp" \
  --url "https://myapp.com/go" \
  --ios-params "ct=instagram_launch&pt=12345&mt=8" \
  --android-params "utm_source=instagram&utm_campaign=launch&utm_medium=paid" \
  --output ./qrs/instagram
✓ qr.png  →  ./qrs/instagram/qr.png

iOS URL:     https://apps.apple.com/app/id123456789?ct=instagram_launch&pt=12345&mt=8
Android URL: https://play.google.com/store/apps/details?id=com.myapp&utm_source=instagram...

No file upload needed — redirect.html already handles this.

アップロードも、ウェブサイトの変更も必要ありません。キャンペーンごとに新しい QR 画像を用意するだけです。


キャンペーンパラメーターの形式を表示
appqr params

Node.js パッケージとして使う

import { setup, campaign } from 'appqr'

// First time setup
const result = await setup({
  ios: 'https://apps.apple.com/app/id123456789',
  android: 'https://play.google.com/store/apps/details?id=com.myapp',
  hostedUrl: 'https://myapp.com/go',
  iosParams: 'ct=launch&pt=12345&mt=8',
  androidParams: 'utm_source=launch&utm_campaign=v1&utm_medium=organic',
  outputPath: './public/go'
})
// → result.redirectPath  upload this once
// → result.qrPath        use this as your QR image

// Campaign QR — no upload needed
const qr = await campaign({
  ios: 'https://apps.apple.com/app/id123456789',
  android: 'https://play.google.com/store/apps/details?id=com.myapp',
  hostedUrl: 'https://myapp.com/go',
  iosParams: 'ct=instagram_launch&pt=12345&mt=8',
  androidParams: 'utm_source=instagram&utm_campaign=launch&utm_medium=paid',
  outputPath: './qrs/instagram'
})
// → qr.qrPath  your campaign QR image

TypeScript の型定義がすべて含まれています。@types/appqr は必要ありません。


MCP — AI エージェント向け(Claude、Cursor、Copilot)

AppQR には MCP(Model Context Protocol)サーバーが組み込まれています。MCP に対応した AI エージェントは、CLI の知識や手作業なしで、ネイティブにスマート QR コードを生成できます。

Claude Desktop に追加
{
  "mcpServers": {
    "appqr": {
      "command": "npx",
      "args": ["appqr", "mcp"]
    }
  }
}
Cursor に追加
{
  "mcpServers": {
    "appqr": {
      "command": "npx",
      "args": ["appqr", "mcp"]
    }
  }
}

接続すると、エージェントに次のように依頼できます。

「アプリ用のスマート QR コードを生成してください。App Store:apps.apple.com/app/id123。Play Store:play.google.com/store/apps/details?id=com.app。myapp.com/go にホストしてください。」

エージェントは appqr_setup または appqr_campaign を直接呼び出し、ファイルパスを受け取ります。

公開される MCP ツール
ツール説明
appqr_setup初回セットアップ — redirect.html と qr.png を生成
appqr_campaign新しいキャンペーン QR — qr.png のみを生成
appqr_validate生成前にストア URL を検証

キャンペーンパラメーターの形式

Apple App Store
パラメーター内容必須例
ctキャンペーントークン — 任意のラベル推奨ct=instagram_launch
ptプロバイダートークン — 数値の Apple ID推奨pt=12345
mtメディアタイプ — アプリの場合は常に 8はいmt=8
--ios-params "ct=instagram_launch&pt=12345&mt=8"
Google Play(標準 UTM)
パラメーター内容必須例
utm_sourceトラフィックソースはいutm_source=instagram
utm_mediumマーケティングメディアはいutm_medium=paid
utm_campaignキャンペーン名はいutm_campaign=launch
utm_content特定の広告またはクリエイティブいいえutm_content=banner_v1
utm_term検索広告のキーワードいいえutm_term=todo+app
--android-params "utm_source=instagram&utm_campaign=launch&utm_medium=paid"

Bitly / QR Tiger / Branch を使わない理由

その他AppQR
iOS / Android を判別するスマートリダイレクト✓ 有料✓ 無料
料金$15–40/月無料
サービス終了後も QR が使える✗✓ いつでも使える
キャンペーン追跡パラメーター✓ 有料✓ 無料
Apple と Google それぞれのパラメーター✗ まれ✓ 対応
エージェント / CLI との親和性✗✓ 対応
MCP サーバー✗✓ 対応
キャンペーンデータが相手のサーバーに保存される✓ 常に✗ されない

リポジトリ構成

appqr/
├── public/
│   ├── index.html        # Landing page
│   └── llms.txt          # AI agent discovery
├── api/
│   └── ping.js           # Telemetry (Vercel serverless)
├── cli/
│   ├── bin/appqr.js      # CLI entry point
│   ├── src/
│   │   ├── core.js       # Core logic
│   │   ├── mcp.mjs       # MCP server
│   │   ├── telemetry.js  # Anonymous counters
│   │   ├── index.js      # npm package exports
│   │   └── index.d.ts    # TypeScript types
│   └── package.json
├── vercel.json
└── README.md             # This file

Web バックエンドをデプロイする(Vercel + Supabase)

Web バックエンドはランディングページをホストし、匿名の使用状況テレメトリーを収集します(インストール数、使用回数、エージェントと人間の内訳 — 個人データは含まれません)。

1. Vercel にデプロイする
git clone https://github.com/harishakumarn/appqr
cd appqr
vercel deploy

または、Vercel ダッシュボードから接続します。リポジトリをインポートして、ワンクリックでデプロイできます。

2. Supabase をセットアップする(任意 — テレメトリー用)

Supabase プロジェクトで次の SQL を実行します。

create table counters (
  id integer primary key default 1,
  installs bigint default 0,
  setups bigint default 0,
  human_runs bigint default 0,
  agent_runs bigint default 0,
  qrs_generated bigint default 0,
  constraint single_row check (id = 1)
);

insert into counters (id) values (1);

create or replace function increment_counter(col_name text)
returns void as $$
begin
  execute format(
    'update counters set %I = %I + 1 where id = 1',
    col_name, col_name
  );
end;
$$ language plpgsql;

Vercel の環境変数に追加します。

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
3. テレメトリー URL を更新する

cli/src/telemetry.js で、TELEMETRY_URL を Vercel のデプロイ URL に置き換えます。

4. npm に公開する
cd cli
npm publish

プライバシーとテレメトリー

AppQR は実行ごとに匿名の ping を 1 回送信します。URL、キャンペーンデータ、ストアのリンク、個人情報、デバイス識別子は一切収集されません。

追跡されるのは、次のいずれかのカウンターの増分のみです。 installed、setup、human_run、agent_run、qr_generated

今後ずっとオプトアウトするには:

echo 'export APPQR_NO_TELEMETRY=1' >> ~/.zshrc

または、実行ごとにオプトアウトするには:

APPQR_NO_TELEMETRY=1 appqr setup ...

貢献

プルリクエストを歓迎します。コードベースは意図的に小さくしてあり、コアロジックは 200 行未満です。

git clone https://github.com/harishakumarn/appqr
cd appqr/cli
npm install
node bin/appqr.js setup --help

ライセンス

MIT © AppQR Contributors

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。