关于 Indie Alternatives
Indie Alternatives 为 AI 助手提供独立开发者产品目录,用于寻找知名软件的替代品;也会匿名记录未满足的需求,供开发者查看。
主要功能
- 01按需求搜索独立产品目录
- 02按类别、价格和平台筛选
- 03获取产品详情
- 04匿名记录并汇总未满足需求
- 05支持 MCP、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(网页 / 桌面) | 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 替代品?” 或 “有没有能把屏幕截图转换成精美社交媒体图片的工具?”
开发者:免费提交你的产品。
所有集成方式
一个代码库,支持所有集成方式:
| 集成方式 | 端点 / 入口 | 适用对象 |
|---|---|---|
| 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(开发者模式 / apps)、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 上构建的 Agent |
| 命令行工具 | indie-alternatives search "…" | 任何能运行 shell 命令的 Agent |
https://indiealternatives.dev/llms.txt 为能读取网页的 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、身份证号和银行卡号、@用户名、即时通讯账号,以及“我的名字是……”均会替换为
[email]、[phone]之类的占位符。 - 工具说明会要求 AI 先用通用方式改写需求;如果用户拒绝,则不要记录。
- 本地安装(
npx indie-alternatives-mcp、命令行工具)会从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,启用 developer mode → Create,URL 为 https://indiealternatives.dev/mcp,认证选择 "None" |
| Claude(网页端 / 桌面端) | Settings → Connectors → Add custom connector,URL 为 https://indiealternatives.dev/mcp |
| Cursor / VS Code / Windsurf / Gemini CLI | 使用 "url": "https://indiealternatives.dev/mcp" 替代 command + args(VS Code 还需要 "type": "http") |
| Le Chat、Copilot Studio 等 | 在其连接器 / MCP 设置中添加相同的 URL |
4. 不支持 MCP 的平台:导入 OpenAPI
Custom 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):添加 OpenAPI 工具,并使用相同的 URL。
5. 自建 Agent:函数调用定义
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。当模型返回工具调用时,向 https://indiealternatives.dev/api/call/{tool_name} 发送 POST 请求,并将结果传回模型。
示例(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,因此任何能够运行 shell 命令的 Agent 都可以使用它。
配置(环境变量)
| 变量 | 默认值 | 说明 |
|---|---|---|
CATALOG_FILE | 捆绑的 data/products.json | 目录 JSON 文件路径(可用逗号分隔多个路径) |
CATALOG_URL | 本地安装:https://indiealternatives.dev/catalog.json | 远程目录 JSON URL(缓存 10 分钟,可用逗号分隔多个 URL);可与 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() 方法)。存储需求的方式也一样:实现 NeedStore(append() / list()),例如使用 Postgres 或 Supabase。
NEEDS_WEBHOOK_URL 每次请求都会接收一条记录:
{ "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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。