mcpField
I
Indie Alternatives

Indie Alternatives

远程服务
indiealternatives.dev搜索与检索0今天更新

关于 Indie Alternatives

Indie Alternatives 为 AI 助手提供独立开发者产品目录,用于寻找知名软件的替代品;也会匿名记录未满足的需求,供开发者查看。

主要功能

  1. 01按需求搜索独立产品目录
  2. 02按类别、价格和平台筛选
  3. 03获取产品详情
  4. 04匿名记录并汇总未满足需求
  5. 05支持 MCP、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(网页 / 桌面)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 替代品?” 或 “有没有能把屏幕截图转换成精美社交媒体图片的工具?”

开发者:免费提交你的产品。

所有集成方式

一个代码库,支持所有集成方式:

集成方式端点 / 入口适用对象
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(开发者模式 / apps)、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 上构建的 Agent
命令行工具indie-alternatives search "…"任何能运行 shell 命令的 Agent

https://indiealternatives.dev/llms.txt 为能读取网页的 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、身份证号和银行卡号、@用户名、即时通讯账号,以及“我的名字是……”均会替换为 [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 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,启用 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 / 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() 方法)。存储需求的方式也一样:实现 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。