mcpField
I
Indie Alternatives

Indie Alternatives

リモート
indiealternatives.dev検索0今日更新
リポジトリ公式サイト

Indie Alternatives について

Indie Alternativesは、AIアシスタント向けにインディー製品のカタログを提供し、大手ソフトウェアの代替品を探せます。未充足のニーズも匿名で記録し、開発者が確認できます。

主な機能

  1. 01ニーズに応じた製品カタログ検索
  2. 02カテゴリ、価格、プラットフォームで絞り込み
  3. 03製品の詳細情報取得
  4. 04未充足ニーズの匿名記録と集計
  5. 05MCP、REST、関数呼び出し、CLIに対応

活用シーン

  1. 01特定製品のインディー製代替品を探す
  2. 02作業内容から適切なツールを見つける
  3. 03該当製品がない場合にニーズを記録する

MCP 対応

MCP サーバーは、製品検索、詳細取得、未充足ニーズの記録と一覧表示のツールを提供します。ホスト型 HTTP とローカル stdio で接続できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://indiealternatives.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

インディーの代替製品

English | 中文 · indiealternatives.dev · 製品を掲載する

あらゆる AI アシスタントから使える、大手ソフトウェアに対するインディー製の代替製品です。

  1. ユーザーが「X を実現できるツールはありますか?」や「Typeform の代替製品は何ですか?」と尋ねると、AI がインディー開発者が作った製品のカタログを検索し、最適な候補をおすすめします。
  2. 適した製品がない場合、そのニーズは匿名で記録されるため、インディー開発者はまだ存在しない、人々が求めているものを把握できます。

クイックスタート

この MCP サーバーの URL を AI アシスタントに追加します。インストールも API キーも不要です。

https://indiealternatives.dev/mcp
クライアント方法
ChatGPTSettings → Apps & Connectors → Advanced → Developer mode → Create → URL を貼り付け、認証は「None」
Claude(Web/デスクトップ)Settings → Connectors → Add custom connector → URL を貼り付け
Claude Codeclaude 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/mcpChatGPT(開発者モード/アプリ)、Claude カスタムコネクター、Le Chat、Copilot Studio、およびリモート MCP に対応する上記すべてのクライアント
REST + OpenAPIhttps://indiealternatives.dev/openapi.jsonカスタム GPT(GPT Actions)、Gemini / Vertex AI、Dify、n8n、Zapier、LangChain、…
関数呼び出しhttps://indiealternatives.dev/functions.json?format=…OpenAI / Anthropic / Gemini API 上で動作する独自のエージェント
CLIindie-alternatives search "…"シェルコマンドを実行できるあらゆるエージェント

https://indiealternatives.dev/llms.txt では、Web ページを読み取る AI 向けにサービスを説明しています。

ツール

ツールREST機能
search_toolsGET /api/search?query=…カタログを使って、あらゆる言語のニーズに合う製品を検索します。カテゴリー、料金、プラットフォームによるフィルターも任意で指定できます。matched: false は適した製品が見つからなかったことを意味します。
get_tool_detailsGET /api/products/{id}製品の詳細な説明を取得します。
log_unmet_needPOST /api/needs満たされていないニーズを匿名で記録します。
list_unmet_needsGET /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 Desktopclaude_desktop_config.json を編集し(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)、設定を貼り付けて再起動します
Claude Codeclaude 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 CodeMCP 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"]
Zedsettings.json 内の context_servers
LM StudioProgram → 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 クライアント

クライアント方法
ChatGPTSettings → 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 CLIcommand + 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 / HOST8787 / 0.0.0.0HTTP リッスンアドレス
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

コメント

MCP は初めてですか?

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

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