Indie Alternatives について
Indie Alternativesは、AIアシスタント向けにインディー製品のカタログを提供し、大手ソフトウェアの代替品を探せます。未充足のニーズも匿名で記録し、開発者が確認できます。
主な機能
- 01ニーズに応じた製品カタログ検索
- 02カテゴリ、価格、プラットフォームで絞り込み
- 03製品の詳細情報取得
- 04未充足ニーズの匿名記録と集計
- 05MCP、REST、関数呼び出し、CLIに対応
活用シーン
- 01特定製品のインディー製代替品を探す
- 02作業内容から適切なツールを見つける
- 03該当製品がない場合にニーズを記録する
MCP 対応
MCP サーバーは、製品検索、詳細取得、未充足ニーズの記録と一覧表示のツールを提供します。ホスト型 HTTP とローカル stdio で接続できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://indiealternatives.dev/mcpclaude mcp add --transport http wudao0123-indie-alternatives https://indiealternatives.dev/mcp{"mcpServers":{"wudao0123-indie-alternatives":{"type":"http","url":"https://indiealternatives.dev/mcp"}}}Cursor で開く{"servers":{"wudao0123-indie-alternatives":{"type":"http","url":"https://indiealternatives.dev/mcp"}}}VS Code で開く{"mcpServers":{"wudao0123-indie-alternatives":{"type":"http","url":"https://indiealternatives.dev/mcp"}}}{"mcpServers":{"wudao0123-indie-alternatives":{"serverUrl":"https://indiealternatives.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
インディーの代替製品
English | 中文 · indiealternatives.dev · 製品を掲載する
あらゆる AI アシスタントから使える、大手ソフトウェアに対するインディー製の代替製品です。
- ユーザーが「X を実現できるツールはありますか?」や「Typeform の代替製品は何ですか?」と尋ねると、AI がインディー開発者が作った製品のカタログを検索し、最適な候補をおすすめします。
- 適した製品がない場合、そのニーズは匿名で記録されるため、インディー開発者はまだ存在しない、人々が求めているものを把握できます。
クイックスタート
この MCP サーバーの URL を AI アシスタントに追加します。インストールも API キーも不要です。
https://indiealternatives.dev/mcp
| クライアント | 方法 |
|---|---|
| ChatGPT | Settings → Apps & Connectors → Advanced → Developer mode → Create → URL を貼り付け、認証は「None」 |
| Claude(Web/デスクトップ) | Settings → Connectors → Add custom connector → URL を貼り付け |
| Claude Code | claude mcp add --transport http indie-alternatives https://indiealternatives.dev/mcp |
| Cursor / Windsurf / Gemini CLI | { "mcpServers": { "indie-alternatives": { "url": "https://indiealternatives.dev/mcp" } } } |
| VS Code | .vscode/mcp.json に { "servers": { "indie-alternatives": { "type": "http", "url": "https://indiealternatives.dev/mcp" } } } を記述 |
次のように質問してください:「Typeform に代わるおすすめの製品はありますか?」、または*「スクリーンショットを見栄えのよいソーシャル画像に変換するツールはありますか?」*
開発者の方へ:無料で製品を掲載する。
すべての連携方式
1 つのコードベースで、あらゆる連携方式に対応しています。
| 連携 | エンドポイント/エントリーポイント | 対応クライアント |
|---|---|---|
| MCP(ローカル stdio) | node dist/src/stdio.js(クローンから実行。npm パッケージは近日公開予定) | Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot、Cline、Gemini CLI、Codex CLI、Zed、LM Studio、… |
| MCP(リモート HTTP) | https://indiealternatives.dev/mcp | ChatGPT(開発者モード/アプリ)、Claude カスタムコネクター、Le Chat、Copilot Studio、およびリモート MCP に対応する上記すべてのクライアント |
| REST + OpenAPI | https://indiealternatives.dev/openapi.json | カスタム GPT(GPT Actions)、Gemini / Vertex AI、Dify、n8n、Zapier、LangChain、… |
| 関数呼び出し | https://indiealternatives.dev/functions.json?format=… | OpenAI / Anthropic / Gemini API 上で動作する独自のエージェント |
| CLI | indie-alternatives search "…" | シェルコマンドを実行できるあらゆるエージェント |
https://indiealternatives.dev/llms.txt では、Web ページを読み取る AI 向けにサービスを説明しています。
ツール
| ツール | REST | 機能 |
|---|---|---|
search_tools | GET /api/search?query=… | カタログを使って、あらゆる言語のニーズに合う製品を検索します。カテゴリー、料金、プラットフォームによるフィルターも任意で指定できます。matched: false は適した製品が見つからなかったことを意味します。 |
get_tool_details | GET /api/products/{id} | 製品の詳細な説明を取得します。 |
log_unmet_need | POST /api/needs | 満たされていないニーズを匿名で記録します。 |
list_unmet_needs | GET /api/needs | 集計されたニーズを、リクエスト数の多い順に表示します(HIDE_NEEDS_LIST=1 で非表示にできます)。 |
すべてのツールは、リクエスト本文に引数を指定して POST /api/call/{tool_name} から呼び出すこともできます。
このサービスは AI に利用方法を伝えます(MCP の instructions、OpenAPI の info.description、llms.txt)。検索するタイミング、記録するタイミング、記録前に個人情報を削除する方法などを案内します。
プライバシー
- レコードに含まれるのは、ランダムな ID、ニーズのテキスト、任意のドメイン/プラットフォーム/予算、日付(日単位のみ)、類似するニーズをグループ化するためのフィンガープリント のみ です。
- 保存されない情報:ユーザーの身元、会話内容、IP、User-Agent、正確なタイムスタンプ。HTTP サーバーはアクセスログを保持しません。
- 書き込み前に、サーバー側でも再度データをマスキングします。メールアドレス、電話番号、リンク、IP、ID 番号やカード番号、@ユーザー名、メッセンジャー ID、「私の名前は……です」などは、
[email]や[phone]のようなプレースホルダーに置き換えられます。 - ツールの説明では、AI にニーズをまず一般化して言い換えるよう求め、ユーザーが拒否した場合は記録しないよう指示しています。
- ローカルインストール(
npx indie-alternatives-mcp、CLI)は、最新のカタログをhttps://indiealternatives.dev/catalog.jsonから読み込み(失敗した場合は同梱のコピーを使用)、満たされなかったニーズをhttps://indiealternatives.dev/api/needsに送信するため、すべてのインストールからのニーズがメーカー向けに集約されます。送信されるのは、マスキング済みのニーズ項目のみです。すべてのデータをお使いのマシン内に保持するには、INDIE_ALT_OFFLINE=1を設定してください。 - ホスト型サービスの利用統計は、日ごとのカウンターのみです(例:「今日の検索数」「一致するものがなかった検索数」「クライアント X からの接続数」)。ユーザー単位やリクエスト単位のデータは保存されません。
- メーカーが送信フォームで任意に入力した連絡先メールアドレスは非公開で保管され、審査にのみ使用されます。
インストール
Node.js 18 以降。
npm install
npm run build
npm test
1. ローカルの MCP クライアント(自分で実行)
ほとんどの方には、上記のホスト型 URL の利用をおすすめします。クローンからローカルで実行する場合(npm install && npm run build)、ほぼすべての MCP クライアントで同じ設定を使いますが、設定ファイルの場所は異なります。npm パッケージ(npx -y indie-alternatives-mcp)は近日公開予定です。
{
"mcpServers": {
"indie-alternatives": {
"command": "node",
"args": ["/absolute/path/indie-alternatives/dist/src/stdio.js"]
}
}
}
(npm パッケージの公開後は、"command": "npx", "args": ["-y", "indie-alternatives-mcp"] を使用してください。)
| クライアント | 方法 |
|---|---|
| Claude Desktop | claude_desktop_config.json を編集し(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)、設定を貼り付けて再起動します |
| Claude Code | claude mcp add indie-alternatives -- node /absolute/path/indie-alternatives/dist/src/stdio.js |
| Cursor | プロジェクト内の .cursor/mcp.json または ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| VS Code(GitHub Copilot) | .vscode/mcp.json:mcpServers を servers に変更し、"type": "stdio" を追加します |
| Cline / Roo Code | MCP Servers パネル → Configure |
| Gemini CLI | ~/.gemini/settings.json |
| Codex CLI | ~/.codex/config.toml:[mcp_servers.indie-alternatives]command = "node"args = ["/absolute/path/indie-alternatives/dist/src/stdio.js"] |
| Zed | settings.json 内の context_servers |
| LM Studio | Program → Install → Edit mcp.json |
設定ファイルの場所は頻繁に変わるため、各クライアントのドキュメントを確認してください。
すべてのローカルインストールからニーズを一か所に集めるには、"env": { "NEEDS_WEBHOOK_URL": "https://indiealternatives.dev/api/needs" } を追加してください。
2. リモートサーバーをデプロイする
Cloudflare Workers + D1(indiealternatives.dev の実行環境)
npx wrangler login
npx wrangler d1 create indie-alternatives # copy the database_id into wrangler.jsonc
npm run db:migrate # create the tables in D1
npx wrangler secret put ADMIN_TOKEN # a long random string, for the review API
npm run deploy
アクセスログを保持しないという約束を守るため、wrangler.jsonc では Workers Logs を無効にしています。独自ドメインで配信するには、そのドメインを Cloudflare DNS に追加し、wrangler.jsonc の routes のコメントを解除してください。
ローカル開発(Cloudflare アカウントは不要):npm run db:migrate:local && npm run dev:worker(.dev.vars に ADMIN_TOKEN=… を設定してください)。
Node / Docker(セルフホスト)
PORT=8787 PUBLIC_URL=https://your-domain DATABASE_FILE=./data.db ADMIN_TOKEN=… npm run start:http
DATABASE_FILE(node:sqlite を使用する SQLite、Node 22.5 以降)を設定すると、メーカーからの投稿、審査 API、統計が有効になります。設定しない場合、ニーズは JSONL ファイルに保存されます。Docker を使う場合:
docker build -t indie-alternatives .
docker run -d -p 8787:8787 -e PUBLIC_URL=https://your-domain -e ADMIN_TOKEN=… -v indie-alternatives-data:/data indie-alternatives
ローカルでテストするには、ngrok http 8787 または cloudflared tunnel --url http://localhost:8787 を実行すると、一時的な HTTPS URL が取得できます。
/healthz は {"ok": true} を返すはずです。
メーカー:掲載申請と審査
メーカーは /submit(HTML フォーム)または POST /api/submissions(JSON:name、url、tagline、任意の description、categories、tags、pricing、platforms、maker、contact)から申請します。申請は審査待ちとなり、重複やすでに掲載されている URL は却下されます。承認後、製品はすぐに検索可能になり、メーカーは /badge.svg でバッジを表示できます。
審査 API(Authorization: Bearer $ADMIN_TOKEN):
curl -H "authorization: Bearer $ADMIN_TOKEN" https://indiealternatives.dev/api/admin/submissions # ?status=pending|approved|rejected|all
curl -X POST -H "authorization: Bearer $ADMIN_TOKEN" -H "content-type: application/json" \
-d '{"tags":["typeform alternative","online form"]}' https://indiealternatives.dev/api/admin/submissions/<id>/approve # body: optional field fixes
curl -X POST -H "authorization: Bearer $ADMIN_TOKEN" -d '{"note":"not indie"}' https://indiealternatives.dev/api/admin/submissions/<id>/reject
curl -X DELETE -H "authorization: Bearer $ADMIN_TOKEN" https://indiealternatives.dev/api/admin/products/<id>
curl -H "authorization: Bearer $ADMIN_TOKEN" "https://indiealternatives.dev/api/admin/stats?days=30" # anonymous daily counters
curl -H "authorization: Bearer $ADMIN_TOKEN" https://indiealternatives.dev/api/admin/needs # all unmet needs, grouped
ホームページには、最も多くリクエストされた未対応のニーズが公開表示されますが、3 回以上リクエストされたニーズのみが対象です。
3. リモート MCP クライアント
| クライアント | 方法 |
|---|---|
| ChatGPT | Settings → Apps & Connectors → Advanced で開発者モードを有効にする → Create を選択し、URL に https://indiealternatives.dev/mcp、認証に「None」を指定します |
| Claude(Web /デスクトップ) | Settings → Connectors → Add custom connector を選択し、URL に https://indiealternatives.dev/mcp を指定します |
| Cursor / VS Code / Windsurf / Gemini CLI | command + args の代わりに "url": "https://indiealternatives.dev/mcp" を使用します(VS Code では "type": "http" も必要です) |
| Le Chat、Copilot Studio、… | コネクター / MCP の設定に同じ URL を追加します |
4. MCP に対応していないプラットフォーム:OpenAPI をインポートする
カスタム GPT(GPT Actions):GPT を作成 → Configure → Create new action → URL からインポート:https://indiealternatives.dev/openapi.json。認証は「None」(または MCP_AUTH_TOKEN を設定している場合は「API Key / Bearer」)にします。GPT の指示に次を追加します。
ユーザーが何かに使えるツールがあるか尋ねた場合、まず search_tools を呼び出してください。条件に合うものがなければ、個人情報をすべて削除したうえで、匿名でニーズを記録するために log_unmet_need を呼び出してください。
Dify:Tools → Custom → Create custom tool → https://indiealternatives.dev/openapi.json をインポートします。
n8n / Zapier /その他:HTTP ノードで REST エンドポイントを呼び出すか、OpenAPI 仕様をインポートします。
Gemini(Vertex AI Agent Builder):同じ URL を使って OpenAPI ツールを追加します。
5. 独自のエージェント:関数呼び出しの定義
curl https://indiealternatives.dev/functions.json?format=openai # OpenAI Chat Completions tools
curl https://indiealternatives.dev/functions.json?format=openai-responses # OpenAI Responses API tools
curl https://indiealternatives.dev/functions.json?format=anthropic # Claude Messages API tools
curl https://indiealternatives.dev/functions.json?format=gemini # Gemini functionDeclarations
これらは、OpenAI 互換のモデル API でも使用できます。モデルがツール呼び出しを返したら、引数を POST で https://indiealternatives.dev/api/call/{tool_name} に送信し、結果をモデルに返します。
例(Python、OpenAI 形式):
import json, requests
from openai import OpenAI
BASE = "https://indiealternatives.dev"
tools = requests.get(f"{BASE}/functions.json?format=openai").json()
client = OpenAI()
messages = [{"role": "user", "content": "Is there a tool that adds nice backgrounds to screenshots?"}]
while True:
msg = client.chat.completions.create(model="gpt-5", messages=messages, tools=tools).choices[0].message
messages.append(msg)
if not msg.tool_calls:
print(msg.content)
break
for call in msg.tool_calls:
result = requests.post(f"{BASE}/api/call/{call.function.name}", json=json.loads(call.function.arguments)).json()
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
6. CLI
npm link # optional: install indie-alternatives as a global command
indie-alternatives search "add a nice background to screenshots"
indie-alternatives details shottr
indie-alternatives log "turn meeting recordings into notes with action items"
indie-alternatives needs
出力は JSON なので、シェルコマンドを実行するエージェントであれば使用できます。
設定(環境変数)
| 変数 | デフォルト値 | 説明 |
|---|---|---|
CATALOG_FILE | 同梱の data/products.json | カタログ JSON ファイルのパス。カンマ区切りで複数指定できます |
CATALOG_URL | ローカルインストール:https://indiealternatives.dev/catalog.json | リモートカタログ JSON の URL。10 分間キャッシュされます。カンマ区切りで複数指定でき、CATALOG_FILE と併用できます |
NEEDS_FILE | ~/.indie-alternatives/needs.jsonl | 匿名のニーズの書き込み先(データベースを使用しない場合) |
NEEDS_WEBHOOK_URL | ローカルインストール:https://indiealternatives.dev/api/needs | 多数のインストール環境からニーズを集約するため、すべてのニーズをここにも POST します |
INDIE_ALT_OFFLINE | — | 1 にすると、ローカルインストールでは同梱のカタログのみを使用し、ニーズをどこにも送信しません |
DATABASE_FILE | — | Node HTTP サーバー:ニーズ、統計、申請、承認済み製品を保存する SQLite ファイル |
ADMIN_TOKEN | — | /api/admin/* の審査 / 統計 API を有効にします |
HIDE_NEEDS_LIST | — | 1 にすると list_unmet_needs を無効にします(公開環境での使用を推奨) |
PORT / HOST | 8787 / 0.0.0.0 | HTTP リッスンアドレス |
PUBLIC_URL | ヘッダーから推定 | OpenAPI と llms.txt で使用する公開ベース URL。リバースプロキシの背後で使用する場合は設定してください |
MCP_AUTH_TOKEN | — | /mcp と /api/* で Authorization: Bearer <token> を必須にします。ドキュメント(/openapi.json、/functions.json、/llms.txt)は公開されたままです。ChatGPT コネクターは固定トークンを送信できないため、ChatGPT では未設定のままにしてください |
独自のカタログを用意する
data/products.json は、indiealternatives.dev で提供されているカタログです(1,500 件以上のプロダクト)。独自のディレクトリを運用するには、次の要素を含む配列(または { "products": [...] })に置き換えます。
{
"id": "unique-id",
"name": "Product name",
"url": "https://...",
"tagline": "One-line pitch",
"description": "Longer description",
"categories": ["Category"],
"tags": ["keywords drive matching", "add synonyms", "in any language"],
"pricing": "free | freemium | paid | commission",
"platforms": ["web", "macos", "windows", "linux", "ios", "android", "self-hosted"],
"maker": "optional: who made it"
}
データベースまたは別の API を使うには、src/types.ts で CatalogSource(単一の load() メソッド)を実装します。ニーズの保存も同様に、Postgres や Supabase などを使って NeedStore(append() / list())を実装します。
NEEDS_WEBHOOK_URL には、リクエストごとに 1 件のレコードが送信されます。
{ "id": "…", "need": "auto-generate subtitles for videos", "category": "Video", "day": "2026-11-05", "fingerprint": "373ca764a387d209" }
マッチングの仕組み
外部サービスは使わず、すべてローカルで動作します。ラテン文字のテキストは単語に分割され、CJK テキストはバイグラムに分割されます。不要語(「is there a tool」「recommend」)は除外され、プロダクトは名前 > タグ > キャッチフレーズ > カテゴリー > 説明の重み付けでスコアリングされます。matched は、クエリの意味のある部分の 60% 以上がカバーされている場合に必要です。大規模なカタログでは、src/search.ts をベクトル検索に置き換えてください。インターフェースはそのまま使用できます。
レイアウト
src/
core.ts tool definitions and implementation (shared by every integration)
server.ts MCP server
stdio.ts local MCP entry
app.ts HTTP app on web-standard Request/Response: /mcp, /api/*, docs, pages, submissions, admin
http.ts Node HTTP entry (adapts node:http to app.ts)
worker.ts Cloudflare Workers entry (D1 storage)
pages.ts home page, submission form, badge
rest.ts OpenAPI, function calling and llms.txt generation
catalog.ts runtime-neutral catalog helpers
sql.ts D1 / SQLite stores (needs, stats, submissions, products)
sqlite-node.ts node:sqlite adapter
cli.ts CLI entry
search.ts scoring
text.ts tokenizer (Latin + CJK)
privacy.ts redaction and need fingerprints
sources.ts catalog sources and need stores (file, URL, webhook)
migrations/ D1 schema
wrangler.jsonc Cloudflare Workers config
data/products.json sample catalog
test/ tests
Dockerfile container build
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。