> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flowstep.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP 认证

> Flowstep MCP 如何认证客户端：OAuth 2.1 PKCE 流程和账户创建。

`/mcp` 端点需要将 Supabase `access_token` 作为 Bearer 令牌传递。大多数 MCP 客户端通过 OAuth 2.1 PKCE 流程自动获取。您也可以手动提供令牌用于测试。

## OAuth 2.1 PKCE 流程

Flowstep 在 `https://api.flowstep.ai` 实现了完整的 OAuth 2.1 授权服务器。MCP 客户端会自动发现并完成该流程：它们为您打开浏览器窗口以登录，然后在后台处理令牌交换。

### 支持的登录方法

`/oauth/authorize` 处的授权页面支持：

* **Email/password**（电子邮件/密码） — 任何设置了密码的 Flowstep 账户
* **Google SSO** — 通过 Supabase 社交认证重定向，自动返回到客户端

### claude.ai 连接器用户的账户创建

OAuth 登录页面不包含注册表单。如果您通过 claude.ai 的自定义连接器连接且还没有 Flowstep 账户，请先在 [app.flowstep.ai](https://app.flowstep.ai) 创建一个账户，然后返回连接器设置进行身份验证。

## Cookie 后备方案

如果不存在 `Authorization` 标头，中间件会回退到基于 cookie 的 Supabase 会话。这在从具有活跃 Flowstep 会话的浏览器直接访问 `/mcp` 时有效。MCP 客户端始终使用 Bearer 路径。

## 手动令牌（测试）

要在没有客户端 OAuth 流程的情况下直接调用端点：

1. 在浏览器中登录 [app.flowstep.ai](https://app.flowstep.ai)
2. 打开 DevTools → Console，运行：

```javascript theme={"system"}
const pairs = document.cookie.split("; ").map((c) => {
  const i = c.indexOf("=");
  return [c.slice(0, i), c.slice(i + 1)];
});
const authPairs = pairs
  .filter(([k]) => /^sb-.+-auth-token(\.\d+)?$/.test(k))
  .sort(([a], [b]) => a.localeCompare(b));
const raw = authPairs.map(([, v]) => decodeURIComponent(v)).join("");
const session = JSON.parse(
  raw.startsWith("base64-") ? atob(raw.slice(7)) : raw,
);
console.log(session.access_token);
```

3. 将令牌作为标头传递：

```bash theme={"system"}
curl -X POST https://api.flowstep.ai/mcp \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

<Warning>
  MCP 会话持续 30 天 — 服务器透明地刷新底层令牌，因此使用 OAuth 流程的客户端在正常使用中不需要重新身份验证。像上面那样手动提取的令牌仍在约 1 小时后过期；它仅用于快速测试。
</Warning>
