One’s Vibe

Blog · 2026 年 7 月 17 日

避免获客的盲区:你的下一位用户可能不是人

我们做过的每一种界面——GUI、CLI、API——都默认对面是人。如今 AI agent 是一类新用户,也是一条新的分发渠道,可只有 1.4% 的在线 AI 产品真正能被它调用。MCP 是第一扇为它而开的门,而开这扇门,几乎是一句话的事。

一位新用户在敲门

自我们开始做软件起,做的一切都是给人用的。桌面 GUI 是为眼睛和鼠标准备的;命令行和 API 是为读过文档的开发者准备的;连 SDK 也默认屏幕另一头坐着一个人,在琢磨着名字和参数。

如今来了一类全新的用户:AI agent。它不看你的界面,不读你的文档,也从不提工单。但它替一个真人完成任务——而在完成的那一刻,它会选择用哪个工具。谁为这位新用户把路铺好,谁就拿到一条新的分发渠道。这是新的 SEO,新的 App Store 货架。而大多数开发者还没注意到它。

门,一直是为人开的

把各种界面按"离 agent 有多近"排一排,一条清晰的谱系就出来了。

GUI 最远。agent 要用它,得先"看"——把页面截图、理解像素、猜该点哪里(这就是 computer use)。勉强能用:慢、脆,下一次改版就断。

CLI 近一点。它是文本,机器最爱。这正是命令行一直是脚本和自动化基石的原因——也是今天,它悄悄成为 agent 一块垫脚石的原因。但 CLI 仍是为人类脚本作者设计的:agent 得解析 --help、推断每个参数的含义、还得自己判断哪些操作危险。它是个过渡形态——比 GUI 友好,但不是终点。

API / SDK 更近。它结构化了。但文档在别处,而认证、限流、副作用、业务规则,全是"只有人类开发者才被默认知道"的不成文约定。

这些界面,每一个都是为人做的。agent 能让它们转起来,却没法让它们好用

MCP:第一扇为 agent 而开的门

MCP(模型上下文协议)是第一个为这位新用户设计的界面。它不是在你的 CLI 外面再糊一层壳,而是一个标准,让你的软件自我描述:我提供这些工具、每个参数是什么类型什么含义、什么时候该用。agent 不用读手册、不用猜——你的 server 直接把这份"契约"递到它手上。

MCP 架在你已有的 API 或 CLI 之上,给 agent 一条快速、可靠、并且——如果实现得当——安全的路,去使用你造的东西。安全,是因为决定暴露哪些能力、边界画在哪,而不是把一个自由的 agent 丢进你的整个界面。(得当很重要:一个权限过大的工具、一个没设防的输入,本身就是风险。)

通往你 app 的两条路

agent 接入一个 web app 有两条路,而这两条路的差别,正是全文的要点。

Browser-use 让 agent 像人一样操作你的界面——它看、它想、它点。通用,而且进步很快。但它也慢、脆、任何布局改动都会打断它、容易点错,还会被页面本身的提示注入攻击。

MCP 让 agent 直接调用你的能力——快、准,而且按你的规矩来。

一个是 agent 在为别人造的门前摸索,一个是你把钥匙递到它手里。Browser-use 是通用的兜底,MCP 是你主动打开的正门。

蓝海就在此刻

接下来这部分,是大多数开发者将来会后悔错过的。我们最近把画廊里每一个在线产品都测了一遍——2,614 个 AI 构建的 web app——看它们声明了哪些机器接口。大约三分之一已经带了 llms.txt,所以 agent 能它们;只有 1.4% 暴露了可调用的 MCP 端点,所以 agent 能驱动它们。

可读,让你被找到;可调用,让你被使用。这两个数字之间的差距,就是一片开阔水域。今天加一个 MCP 端点,就像 2005 年加一张 sitemap——一个趁早做的小动作,会随着这条渠道长大而复利。

这是一句话的事

最妙的是:如果你已经有那个函数,把它暴露出去几乎不费事。整件事大概就长这样——

```ts import { createMcpHandler } from "mcp-handler"; import { z } from "zod";

const handler = createMcpHandler((server) => { server.registerTool( "search_products", { description: "Search live products similar to an idea.", inputSchema: { query: z.string(), limit: z.number().optional() }, }, async ({ query, limit }) => { const results = await yourExistingSearch(query, limit ?? 8); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }, ); });

export { handler as GET, handler as POST }; ```

就这样。你不过是把一个早就写好的函数包了一层。我们自己的 MCP server——那个让任何编程 agent 都能检索 2,600+ 在线产品的服务——大约一小时就搭好了。真正的功夫在 description 和那份类型化的 schema:正是它们,把一个私有函数变成 agent 能发现、能正确调用的东西。

不只是 web

这一切不止于 web app。移动 app 的功能,几乎总也由一个服务端撑着——所以同一招照样适用:把那个后端的能力用 MCP 暴露出去,不管有没有人在手机上打开你的 app,它都对 agent 可达。在 AI 时代,只交付一块给人看的屏幕,等于只交付了半个产品。另一半,是你为那位"不是人"的用户打开的门。

编辑
编辑 · One's Vibe
“One's vibe, another's poison” —— 君子和而不同

评论

Sign in 后加入讨论。