diff --git a/README.md b/README.md
index 546e0e8..bfee299 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ To use an existing database, set `DATABASE_URL` in `.env` and skip the Docker st
| Collaboration | [Notion](https://www.notion.com) · [Linear](https://linear.app) · [Atlassian](https://www.atlassian.com) (Jira, Confluence) · [ClickUp](https://clickup.com) · [monday.com](https://monday.com) · [Airtable](https://airtable.com) · [Todoist](https://todoist.com) · [Intercom](https://www.intercom.com) |
| Code & deploy | [GitHub](https://github.com) · [GitLab](https://gitlab.com) · [Vercel](https://vercel.com) · [Netlify](https://www.netlify.com) · [Cloudflare](https://www.cloudflare.com) |
| Databases | [Supabase](https://supabase.com) · [Neon](https://neon.com) · [Prisma](https://www.prisma.io) |
-| Monitoring & analytics | [Sentry](https://sentry.io) · [PostHog](https://posthog.com) |
+| Monitoring & analytics | [Sentry](https://sentry.io) · [PostHog](https://posthog.com) · [Google Search Console](https://search.google.com/search-console) · [Google Analytics](https://analytics.google.com) |
| Payments | [Stripe](https://stripe.com) · [PayPal](https://www.paypal.com) · [Square](https://squareup.com) |
| Design & websites | [Canva](https://www.canva.com) · [Miro](https://miro.com) · [Webflow](https://webflow.com) · [Wix](https://www.wix.com) |
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 3bcd845..405d90d 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -51,7 +51,7 @@ npm run dev # 或:make dev
| 协作与办公 | [Notion](https://www.notion.com) · [Linear](https://linear.app) · [Atlassian](https://www.atlassian.com)(Jira、Confluence)· [ClickUp](https://clickup.com) · [monday.com](https://monday.com) · [Airtable](https://airtable.com) · [Todoist](https://todoist.com) · [Intercom](https://www.intercom.com) |
| 代码与部署 | [GitHub](https://github.com) · [GitLab](https://gitlab.com) · [Vercel](https://vercel.com) · [Netlify](https://www.netlify.com) · [Cloudflare](https://www.cloudflare.com) |
| 数据库 | [Supabase](https://supabase.com) · [Neon](https://neon.com) · [Prisma](https://www.prisma.io) |
-| 监控与分析 | [Sentry](https://sentry.io) · [PostHog](https://posthog.com) |
+| 监控与分析 | [Sentry](https://sentry.io) · [PostHog](https://posthog.com) · [Google Search Console](https://search.google.com/search-console) · [Google Analytics](https://analytics.google.com) |
| 支付 | [Stripe](https://stripe.com) · [PayPal](https://www.paypal.com) · [Square](https://squareup.com) |
| 设计与建站 | [Canva](https://www.canva.com) · [Miro](https://miro.com) · [Webflow](https://webflow.com) · [Wix](https://www.wix.com) |
diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md
index 46c2ec4..d08ccfb 100644
--- a/THIRD_PARTY_NOTICES.md
+++ b/THIRD_PARTY_NOTICES.md
@@ -4,10 +4,10 @@ Connany source code is licensed under MIT. Third-party packages retain their own
## Connector marks
-All connector names and logos (Notion, GitHub, Linear, Sentry, PostHog, Atlassian, Vercel, Supabase, Neon, Netlify, GitLab, Cloudflare, Prisma, Stripe, PayPal, Square, ClickUp, monday.com, Airtable, Todoist, Miro, Canva, Intercom, Webflow and Wix) belong to their respective owners and are used to identify integrations. No affiliation or endorsement is implied. The Connany license does not grant rights to these trademarks.
+All connector names and logos (Notion, GitHub, Linear, Sentry, PostHog, Atlassian, Vercel, Supabase, Neon, Netlify, GitLab, Cloudflare, Prisma, Stripe, PayPal, Square, ClickUp, monday.com, Airtable, Todoist, Miro, Canva, Intercom, Webflow, Wix, Google Search Console and Google Analytics) belong to their respective owners and are used to identify integrations. No affiliation or endorsement is implied. The Connany license does not grant rights to these trademarks.
- Notion and GitHub SVG icons in `src/connectors/catalog.ts`: sourced from [LobeHub Icons](https://github.com/lobehub/lobe-icons), under the MIT license reproduced below.
-- Other connector SVG icons: sourced from [Simple Icons](https://simpleicons.org) (CC0 1.0). monday.com and Canva are not available there and use plain monograms.
+- Other connector SVG icons: sourced from [Simple Icons](https://simpleicons.org) (CC0 1.0). monday.com and Canva are not available there and use plain monograms. The Google Search Console mark is redrawn as a monochrome vector from Google's official logo.
- Linear SVG logomark: sourced from [Linear Brand Guidelines](https://linear.app/brand), `Linear-Brand-Assets.zip?v=3`, `logo-dark.svg`. It remains subject to Linear's brand usage terms.
## LobeHub Icons license
diff --git a/docs/agent-integration.md b/docs/agent-integration.md
index e695b2e..249db0c 100644
--- a/docs/agent-integration.md
+++ b/docs/agent-integration.md
@@ -295,7 +295,7 @@ SDK 会抛出 `ConnanyError`,带 `status`、`code`、`requestId` 和 `details`
所有连接器的工具都来自上游官方 MCP,名称格式为 `<连接器>.<官方工具名>`,参数以 `input_schema` 为准。
-接入方的代码对所有连接器都一样:用 `GET /v1/connectors` 拿到可连接的列表,授权、列出工具、调用工具的接口都不区分连接器。除下面三个之外,Sentry、PostHog、Atlassian、Vercel、Supabase、Neon、Netlify、GitLab、Cloudflare、Prisma、Stripe、PayPal、Square、ClickUp、monday.com、Airtable、Todoist、Miro、Canva、Intercom、Webflow、Wix 也都走各自的官方 MCP,工具名为 `<连接器>.<官方工具名>`。少数平台不提供用户信息,这类连接显示为「<平台> 账号」,`identity.unverified` 为 true,重新授权时无法确认是同一个账号,建议在界面上提示用户。
+接入方的代码对所有连接器都一样:用 `GET /v1/connectors` 拿到可连接的列表,授权、列出工具、调用工具的接口都不区分连接器。除下面三个之外,Sentry、PostHog、Atlassian、Vercel、Supabase、Neon、Netlify、GitLab、Cloudflare、Prisma、Stripe、PayPal、Square、ClickUp、monday.com、Airtable、Todoist、Miro、Canva、Intercom、Webflow、Wix 也都走各自的官方 MCP,工具名为 `<连接器>.<官方工具名>`。Google Search Console 和 Google Analytics 没有官方托管 MCP,工具由 Connany 内置(如 `google_search_console.query_search_analytics`、`google_analytics.run_report`),调用方式相同。少数平台不提供用户信息,这类连接显示为「<平台> 账号」,`identity.unverified` 为 true,重新授权时无法确认是同一个账号,建议在界面上提示用户。
### Notion
diff --git a/docs/connector-setup.md b/docs/connector-setup.md
index f8033c6..409cfa8 100644
--- a/docs/connector-setup.md
+++ b/docs/connector-setup.md
@@ -72,6 +72,36 @@ GitHub App 安装授权决定仓库范围;用户 OAuth 决定操作主体。Co
[官方文档](https://linear.app/docs/mcp)
+## Google Search Console / Google Analytics
+
+Google 不提供 Search Console 和 Analytics 的托管 MCP,也不支持动态客户端注册。这两个连接器由管理员在 Google Cloud 创建一个 OAuth 客户端,Connany 用用户的 token 直接调用 Google REST API,工具目录内置在 Connany 里,无需「同步工具目录」。两个连接器可以共用同一个 OAuth 客户端。
+
+1. 在 [Google Cloud 控制台](https://console.cloud.google.com/) 选择或新建项目,在「API 和服务 → 库」中启用:
+ - Search Console:**Google Search Console API**
+ - Analytics:**Google Analytics Data API** 和 **Google Analytics Admin API**
+2. 配置 OAuth 同意屏幕(Google Auth Platform):填写应用名称、支持邮箱和授权域名,在「数据访问」中添加 `openid`、`email`、`https://www.googleapis.com/auth/webmasters.readonly`、`https://www.googleapis.com/auth/analytics.readonly`。
+3. 在「凭据」创建 **Web 应用** 类型的 OAuth 客户端,「已获授权的重定向 URI」加入:
+ - `https://connect.example.com/oauth/google_search_console/callback`
+ - `https://connect.example.com/oauth/google_analytics/callback`
+4. 在管理后台「连接器 → Google Search Console / Google Analytics → 配置」填写 Client ID 和 Client Secret 并保存,然后在「连接测试」发起授权,试读数据会列出账号可访问的站点 / GA4 媒体资源。
+
+发布状态:
+
+- **测试中(Testing)**:只有加入「测试用户」的 Google 账号(最多 100 个)能授权,且 refresh token **7 天后失效**,用户需要重新授权。适合自测。
+- **正式版(In production)**:两个 scope 都是 Google 的敏感范围,对外开放前需要通过 Google 的应用验证(品牌信息、隐私政策、用途说明和演示视频),不需要安全评估。未验证时用户会看到「Google 尚未验证此应用」的提示。
+- **内部(Internal)**:仅限 Google Workspace 组织内的账号,无需验证,refresh token 不会 7 天过期。
+
+工具(全部只读):
+
+| 连接器 | 工具 |
+|---|---|
+| Google Search Console | `list_sites`、`query_search_analytics`(点击、展示、CTR、排名,可按查询词 / 页面 / 国家 / 设备 / 日期分组和过滤)、`list_sitemaps`、`inspect_url`(索引状态) |
+| Google Analytics | `list_account_summaries`、`get_property`、`get_metadata`(可用维度与指标,含自定义)、`run_report`、`run_realtime_report` |
+
+工具名为 `<连接器>.<工具>`,例如 `google_analytics.run_report`。返回结果整理为按维度、指标命名的行,数值指标转为数字;单次最多 1000 行,用 `start_row` / `offset` 翻页。Google 返回的错误说明(如 API 未启用、无权访问该媒体资源、指标名错误)会放在错误的 `details.upstream_message` 中,MCP 调用会直接展示给 agent。
+
+授权时请求 `access_type=offline` 和 `prompt=consent`,保证每次授权都拿到 refresh token。账号以 Google userinfo 的 `sub` 识别,显示为邮箱。断开连接会调用 `https://oauth2.googleapis.com/revoke` 撤销 refresh token。
+
## 其他官方托管 MCP 连接器
以下连接器和 Notion、Linear 一样走官方 MCP 授权:管理员在「连接器」点启用,Connany 自动完成 OAuth 客户端注册(动态客户端注册,RFC 7591),然后点「同步工具目录」用自己的账号授权一次。不需要去各平台申请应用或填写凭证。
@@ -110,7 +140,12 @@ curl -s https://mcp.example.com/.well-known/oauth-protected-resource/mcp
curl -s https://<授权服务器>/.well-known/oauth-authorization-server
```
-后台「连接器」、连接路由、工具校验、工具列表会自动出现新连接器,无需修改数据库。需要自定义 OAuth 的连接器(如 GitHub App)仍在 `ConnectorRuntime`(`src/connectors/index.ts`)中单独实现。
+没有托管 MCP 或不支持动态注册的服务(如 Google)使用 `auth: 'oauth'`:
+
+- `oauth`:`authorize`、`token`,可选 `revoke`(RFC 7009)、`userinfo`(OIDC,用 `sub` 或 `id` 识别账号)、`scope`、`authorizeParams`,以及后台配置弹框中的 `console`(创建客户端的链接和说明)。管理员在后台填写 Client ID / Secret。
+- `rest`:Connany 自己实现的工具,参考 `src/connectors/google.ts`:每个工具有 zod 参数、请求构造和可选的结果整理。工具名用 `<连接器>.<小写下划线>`,与 MCP 工具名规则一致。工具目录随代码发布,不写入 `connector_tools`。
+
+后台「连接器」、连接路由、工具校验、工具列表会自动出现新连接器,无需修改数据库。GitHub App 的安装流程仍在 `ConnectorRuntime`(`src/connectors/index.ts`)中单独实现。
升级到此版本需运行一次 `pnpm db:migrate`(`005_provider_catalog.sql` 移除数据库中写死的连接器名单约束)。
diff --git a/public/admin-i18n.js b/public/admin-i18n.js
index 52ea5c2..d33e84d 100644
--- a/public/admin-i18n.js
+++ b/public/admin-i18n.js
@@ -1,6 +1,6 @@
(() => {
const messages = {
- '总览':'Overview','协作与办公':'Collaboration','代码与部署':'Code & deploy','数据库':'Databases','监控与分析':'Monitoring & analytics','支付':'Payments','设计与建站':'Design & websites','全部':'All','全部分类':'All categories','启用状态':'Status','连接器分类':'Connector categories','搜索连接器':'Search connectors','没有匹配的连接器':'No matching connectors','连接器配置一次,工作空间里的所有项目共用。':'Configure connectors once; every project in the workspace uses them.','错误监控、Issue 与性能追踪':'Errors, issues and performance','产品分析、功能开关与会话回放':'Product analytics, feature flags and session replay','Jira 与 Confluence 的事项、页面与项目':'Jira and Confluence issues, pages and projects','项目、部署与日志':'Projects, deployments and logs','数据库、项目与 Edge Functions':'Databases, projects and Edge Functions','Serverless Postgres 数据库与分支':'Serverless Postgres databases and branches','站点、部署与环境变量':'Sites, deploys and environment variables','代码仓库、Issue 与合并请求':'Repositories, issues and merge requests','Workers、KV、R2 与 D1':'Workers, KV, R2 and D1','Prisma Postgres 数据库与迁移':'Prisma Postgres databases and migrations','支付、客户、订阅与账单':'Payments, customers, subscriptions and invoices','订单、发票与交易':'Orders, invoices and transactions','支付、订单、商品与客户':'Payments, orders, catalog and customers','任务、列表与文档':'Tasks, lists and docs','看板、项目与工作流':'Boards, projects and workflows','数据表、记录与工作区':'Bases, records and workspaces','任务、项目与提醒':'Tasks, projects and reminders','白板、便签与图表':'Boards, sticky notes and diagrams','设计、模板与素材':'Designs, templates and assets','客服会话、联系人与工单':'Conversations, contacts and tickets','站点、CMS 集合与页面':'Sites, CMS collections and pages','站点、商店与预约':'Sites, stores and bookings','注册':'Sign up','还没有账号?':'No account yet?','已有账号?':'Already have an account?','确认密码':'Confirm password','至少 8 个字符。':'At least 8 characters.','注册并进入工作台 →':'Sign up and open console →','开放注册':'Open registration','开启后,登录页显示「注册」入口,任何人都可以注册普通用户账号,各自拥有独立的工作空间。':'When on, the sign-in page shows a Sign up link and anyone can create a member account with its own workspace.','当前未开放注册,请联系管理员创建账号。':'Registration is closed. Ask an administrator to create an account.','注册请求过多,请在 15 分钟后重试。':'Too many sign-up attempts. Try again in 15 minutes.','该邮箱已注册,请直接登录。':'This email is already registered. Sign in instead.','两次输入的密码不一致。':'The passwords do not match.','MCP 接入':'MCP','登录并继续 →':'Sign in and continue →','注册并继续 →':'Sign up and continue →','授权访问':'Authorize access','请求访问你的 Connany 账号':'wants to access your Connany account','。':'.','查看可用的连接器和你已连接的账号':'See the available connectors and your connected accounts','生成连接链接,由你在浏览器中授权新账号':'Create links you open in your browser to connect new accounts','以你已连接的账号调用工具(会修改数据的操作由 agent 先向你确认)':'Call tools with your connected accounts (the agent confirms changes with you first)','授权后返回':'After you decide, you return to','。可随时在「MCP 接入」中撤销。':'. You can revoke access anytime under MCP.','拒绝':'Deny','允许':'Allow','无法授权':'Cannot authorize','授权请求缺少 client_id 或 redirect_uri。':'The authorization request is missing client_id or redirect_uri.','未知的客户端,请在 agent 中重新连接 Connany。':'Unknown client. Connect Connany again from your agent.','回调地址与客户端注册的不一致。':'The redirect URI does not match the client registration.','请回到 agent 重新发起连接。':'Go back to your agent and connect again.','授权不存在。':'Authorization not found.','在 Claude Code、Codex 等 agent 中添加 Connany,即可用你自己的账号使用所有连接器。':'Add Connany to agents such as Claude Code or Codex to use every connector with your own accounts.','1. 添加 MCP 服务':'1. Add the MCP server','首次使用时,agent 会打开浏览器让你登录 Connany 并授权。':'On first use, the agent opens your browser to sign in to Connany and approve access.','添加后在 Claude Code 中运行 /mcp,选择 connany 完成登录。':'Then run /mcp in Claude Code and choose connany to sign in.','其他客户端(Cursor 等)':'Other clients (Cursor, ...)','2. 安装 Skill(推荐)':'2. Install the skill (recommended)','Skill 告诉 agent 何时使用 Connany、如何引导你连接账号、调用前如何确认,回答更稳定。':'The skill tells the agent when to use Connany, how to guide you through connecting accounts and when to confirm before calling tools.','查看 SKILL.md ↗':'View SKILL.md ↗','3. 在对话中使用':'3. Use it in conversations','例如「看看我 Linear 里这周的 issue」「查一下 PostHog 昨天的活跃用户」。未连接的服务,agent 会给出连接链接;连接后的账号显示在「用户连接」的「个人 MCP」项目下。':'For example \\"show my Linear issues this week\\" or \\"how many active users did PostHog record yesterday\\". For services that are not connected yet, the agent gives you a link; connected accounts appear under User connections in the Personal MCP project.','当前可连接:':'Available now:','暂无可用连接器,请先在「连接器」中启用。':'No connectors available yet. Enable some under Connectors first.','已授权的客户端':'Authorized clients','客户端':'Client','授权时间(UTC+8)':'Authorized (UTC+8)','最近使用(UTC+8)':'Last used (UTC+8)','撤销':'Revoke','已撤销':'Revoked','还没有客户端授权。按上面的步骤在 agent 中添加 Connany。':'No clients authorized yet. Add Connany to an agent with the steps above.','该客户端将无法再通过 Connany 使用你的连接,需要重新登录授权。你已连接的账号不受影响。':'The client can no longer use your connections through Connany until you authorize it again. Your connected accounts are not affected.','个人 MCP':'Personal MCP','授权应用':'Authorized apps','通过 MCP 使用你的 Connany 账号的客户端,如 Claude Code、Codex。撤销后需重新登录授权,你已连接的账号不受影响。':'Clients that use your Connany account through MCP, such as Claude Code or Codex. After revoking, a client must sign in again; your connected accounts are not affected.','还没有客户端授权。在 Claude Code、Codex 等 agent 中添加 Connany 后会显示在这里。':'No clients authorized yet. They appear here after you add Connany to an agent such as Claude Code or Codex.','MCP 接入文档 ↗':'MCP setup guide ↗','登录':'Sign in','工作台':'Workbench','系统':'System','用户管理':'Users','系统管理员':'Administrator','普通用户':'Member','身份':'Role','身份已更新':'Role updated','重置密码':'Reset password','当前账号':'You','添加用户':'Add user','用户已添加':'User added','添加':'Add','初始密码':'Initial password','最近登录(UTC+8)':'Last sign-in (UTC+8)','密码已重置':'Password reset','系统管理员可以管理所有用户;普通用户可以使用工作台,看不到系统设置。':'Administrators manage all users. Members use the workbench and cannot see system settings.','8–256 个字符。保存后该用户的所有登录会话都会失效,需要用新密码重新登录。':'8–256 characters. Saving signs the user out of every session; they sign in again with the new password.','8–256 个字符。请通过安全渠道告知对方,对方可登录后在「设置 → 账户」中修改。':'8–256 characters. Share it through a secure channel; the user can change it under Settings → Account after signing in.','将同时删除该用户工作空间中的所有数据:项目、API Key、连接器配置和用户连接(会尝试撤销平台授权),无法恢复。操作记录会保留。':'This also deletes everything in the user’s workspace: projects, API keys, connector configuration and user connections (upstream grants are revoked where possible). This cannot be undone. Activity history is kept.','不能修改自己的身份。':'You cannot change your own role.','不能删除自己的账号。':'You cannot delete your own account.','至少需要保留一个系统管理员。':'At least one administrator must remain.','该邮箱已存在。':'A user with this email already exists.','用户不存在。':'User not found.','需要系统管理员权限。':'Administrator access is required.','工具目录':'Tool catalog','尚未同步':'Not synced yet','启用后可同步':'Enable to sync','文档':'Docs','Agent 接入指南':'Agent integration guide','Agent 接入指南 ↗':'Agent integration guide ↗','下载 Markdown':'Download Markdown','文档类型':'Document type','文档目录':'Contents','把「复制给开发 Agent」的内容交给负责开发的 agent,它包含服务地址、实现要求和下面的完整指南。API Key 请通过后端环境变量另行配置。':'Give the copied content to the agent doing the development. It includes the service URL, implementation requirements and the full guide below. Configure the API key separately through backend environment variables.','对话中调用':'In conversations, call',' 列出该连接可用的工具交给模型,再用 ':' to list the connection’s tools for the model, then ','列出该连接可用的工具交给模型,再用':'to list the connection’s tools for the model, then',' 执行模型选择的工具。':' to run the tool the model picks.','执行模型选择的工具。':'to run the tool the model picks.','工具目录:尚未同步':'Tool catalog: not synced yet','同步工具目录':'Sync tool catalog','重新同步':'Sync again','去授权':'Authorize','项目':'Projects','连接器凭证集中配置;每个项目独立接入,每位用户单独授权。':'Connector credentials are configured once; each project integrates separately and each user authorizes individually.','多个项目':'Multiple projects','连接器配置一次,所有项目共用;不同项目的用户与连接相互隔离。':'Connectors are configured once and shared by every project. Users and connections are isolated per project.','已启用连接器':'Enabled connectors','已启用项目':'Enabled projects','创建项目':'Create project','为每个 agent 产品创建项目,获取它的 API Key。':'Create a project for each agent product and get its API key.','提供服务地址、项目的 API Key 和文档,完成一次真实账号授权。':'Share the service URL, the project API key and the docs, then complete one real account authorization.','每个项目对应一个接入 Connany 的 agent 产品,拥有独立的 API Key 和用户连接。':'Each project is an agent product integrated with Connany, with its own API keys and user connections.','暂无项目':'No projects yet','创建后会生成第一个 API Key,仅显示一次。':'The first API key is issued on creation and shown only once.','管理':'Manage','重命名':'Rename','查看':'View','新建 API Key':'New API key','名称 / 前缀':'Name / prefix','创建时间(UTC+8)':'Created (UTC+8)','最后使用(UTC+8)':'Last used (UTC+8)','有效':'Active','吊销':'Revoke','未命名':'Unnamed','已吊销':'Revoked','轮换方式:新建 API Key,部署到 agent 后端后,再吊销旧 Key,期间两把 Key 同时有效。':'To rotate: create a new API key, deploy it to your agent backend, then revoke the old key. Both keys work in the meantime.','危险操作':'Danger zone','删除项目':'Delete project','备注名(可选)':'Label (optional)','例如 production、staging,便于区分。':'For example production or staging.','集中管理连接器凭证,为每个项目分发独立密钥,让用户授权自己的账号。':'Manage connector credentials centrally, issue separate keys to each project, and let users authorize their own accounts.','查看各个项目下用户授权的账号。断开连接会立即阻止 Connany 后续调用。':'View accounts users authorized in each project. Disconnecting immediately blocks further Connany calls.','全部连接器':'All connectors','全部项目':'All projects','项目 / 用户':'Project / user','连接器':'Connectors','暂无用户连接。把项目的 API Key 交给 agent,完成一次用户授权后会显示在这里。':'No user connections yet. Give the project API key to an agent; connections appear after a user authorizes.','使用项目的 API Key 验证授权与只读调用。建议创建测试专用项目,避免混入正式用户数据。':'Verify authorization and read-only calls with a project API key. Use a dedicated test project to keep production user data separate.','测试连接器':'Test connector','在「项目」中创建测试项目并保存 API Key。':'Create a test project under Projects and save its API key.','创建测试项目':'Create test project','吊销此 API Key?':'Revoke this API key?','这是最后一个有效 API Key,吊销后此项目将无法调用 Connany。':'This is the last active API key. After revoking it, this project can no longer call Connany.','使用此 Key 的请求会立即失败,请确认 agent 已切换到新 Key。':'Requests using this key fail immediately. Make sure the agent has switched to the new key.','停用后此项目的所有 API Key 都无法调用 Connany,用户连接保留。':'All API keys of this project stop working. User connections are retained.','在「项目」中为 agent 创建项目,安全发送生成的 API Key 给对应开发者。密钥只放在 agent 后端。':'Create a project for the agent under Projects and share the generated API key securely with its developer. Keep keys on the agent backend only.',',传入已认证用户的 external_user_id。':', passing the authenticated external_user_id.','同一套连接器可供多个项目使用。每个项目的 API Key 只能访问本项目的用户连接。':'One set of connectors serves many projects. A project API key can access only that project’s user connections.','Project 不存在。':'Project not found.','API Key 不存在。':'API key not found.','API 文档':'API Docs','连接器':'Connectors','管理工作台':'Console','管理导航':'Main navigation','设置':'Settings','退出登录':'Sign out','打开账号菜单':'Open account menu','用户':'User','账户':'Account','通用':'General','关于':'About','设置分类':'Settings sections','关闭设置':'Close settings',
+ '总览':'Overview','搜索表现、索引状态与站点地图':'Search performance, indexing and sitemaps','GA4 报表、实时数据与媒体资源':'GA4 reports, realtime data and properties','内置':'Built in','创建 Google OAuth 客户端 ↗':'Create Google OAuth client ↗','复制此地址到 OAuth 客户端的重定向 URI,需保持完全一致。':'Copy this exact URL into the redirect URIs of your OAuth client.','在 Google Cloud 项目中启用 Search Console API,创建「Web 应用」类型的 OAuth 客户端,并把下方回调地址加入「已获授权的重定向 URI」。':'Enable the Search Console API in a Google Cloud project, create a "Web application" OAuth client and add the callback URL below to its authorized redirect URIs.','在 Google Cloud 项目中启用 Google Analytics Data API 和 Google Analytics Admin API,创建「Web 应用」类型的 OAuth 客户端,并把下方回调地址加入「已获授权的重定向 URI」。':'Enable the Google Analytics Data API and Google Analytics Admin API in a Google Cloud project, create a "Web application" OAuth client and add the callback URL below to its authorized redirect URIs.','Google Search Console:列出可访问的站点;Google Analytics:列出账号与 GA4 媒体资源。':'Google Search Console: list accessible sites. Google Analytics: list accounts and GA4 properties.','协作与办公':'Collaboration','代码与部署':'Code & deploy','数据库':'Databases','监控与分析':'Monitoring & analytics','支付':'Payments','设计与建站':'Design & websites','全部':'All','全部分类':'All categories','启用状态':'Status','连接器分类':'Connector categories','搜索连接器':'Search connectors','没有匹配的连接器':'No matching connectors','连接器配置一次,工作空间里的所有项目共用。':'Configure connectors once; every project in the workspace uses them.','错误监控、Issue 与性能追踪':'Errors, issues and performance','产品分析、功能开关与会话回放':'Product analytics, feature flags and session replay','Jira 与 Confluence 的事项、页面与项目':'Jira and Confluence issues, pages and projects','项目、部署与日志':'Projects, deployments and logs','数据库、项目与 Edge Functions':'Databases, projects and Edge Functions','Serverless Postgres 数据库与分支':'Serverless Postgres databases and branches','站点、部署与环境变量':'Sites, deploys and environment variables','代码仓库、Issue 与合并请求':'Repositories, issues and merge requests','Workers、KV、R2 与 D1':'Workers, KV, R2 and D1','Prisma Postgres 数据库与迁移':'Prisma Postgres databases and migrations','支付、客户、订阅与账单':'Payments, customers, subscriptions and invoices','订单、发票与交易':'Orders, invoices and transactions','支付、订单、商品与客户':'Payments, orders, catalog and customers','任务、列表与文档':'Tasks, lists and docs','看板、项目与工作流':'Boards, projects and workflows','数据表、记录与工作区':'Bases, records and workspaces','任务、项目与提醒':'Tasks, projects and reminders','白板、便签与图表':'Boards, sticky notes and diagrams','设计、模板与素材':'Designs, templates and assets','客服会话、联系人与工单':'Conversations, contacts and tickets','站点、CMS 集合与页面':'Sites, CMS collections and pages','站点、商店与预约':'Sites, stores and bookings','注册':'Sign up','还没有账号?':'No account yet?','已有账号?':'Already have an account?','确认密码':'Confirm password','至少 8 个字符。':'At least 8 characters.','注册并进入工作台 →':'Sign up and open console →','开放注册':'Open registration','开启后,登录页显示「注册」入口,任何人都可以注册普通用户账号,各自拥有独立的工作空间。':'When on, the sign-in page shows a Sign up link and anyone can create a member account with its own workspace.','当前未开放注册,请联系管理员创建账号。':'Registration is closed. Ask an administrator to create an account.','注册请求过多,请在 15 分钟后重试。':'Too many sign-up attempts. Try again in 15 minutes.','该邮箱已注册,请直接登录。':'This email is already registered. Sign in instead.','两次输入的密码不一致。':'The passwords do not match.','MCP 接入':'MCP','登录并继续 →':'Sign in and continue →','注册并继续 →':'Sign up and continue →','授权访问':'Authorize access','请求访问你的 Connany 账号':'wants to access your Connany account','。':'.','查看可用的连接器和你已连接的账号':'See the available connectors and your connected accounts','生成连接链接,由你在浏览器中授权新账号':'Create links you open in your browser to connect new accounts','以你已连接的账号调用工具(会修改数据的操作由 agent 先向你确认)':'Call tools with your connected accounts (the agent confirms changes with you first)','授权后返回':'After you decide, you return to','。可随时在「MCP 接入」中撤销。':'. You can revoke access anytime under MCP.','拒绝':'Deny','允许':'Allow','无法授权':'Cannot authorize','授权请求缺少 client_id 或 redirect_uri。':'The authorization request is missing client_id or redirect_uri.','未知的客户端,请在 agent 中重新连接 Connany。':'Unknown client. Connect Connany again from your agent.','回调地址与客户端注册的不一致。':'The redirect URI does not match the client registration.','请回到 agent 重新发起连接。':'Go back to your agent and connect again.','授权不存在。':'Authorization not found.','在 Claude Code、Codex 等 agent 中添加 Connany,即可用你自己的账号使用所有连接器。':'Add Connany to agents such as Claude Code or Codex to use every connector with your own accounts.','1. 添加 MCP 服务':'1. Add the MCP server','首次使用时,agent 会打开浏览器让你登录 Connany 并授权。':'On first use, the agent opens your browser to sign in to Connany and approve access.','添加后在 Claude Code 中运行 /mcp,选择 connany 完成登录。':'Then run /mcp in Claude Code and choose connany to sign in.','其他客户端(Cursor 等)':'Other clients (Cursor, ...)','2. 安装 Skill(推荐)':'2. Install the skill (recommended)','Skill 告诉 agent 何时使用 Connany、如何引导你连接账号、调用前如何确认,回答更稳定。':'The skill tells the agent when to use Connany, how to guide you through connecting accounts and when to confirm before calling tools.','查看 SKILL.md ↗':'View SKILL.md ↗','3. 在对话中使用':'3. Use it in conversations','例如「看看我 Linear 里这周的 issue」「查一下 PostHog 昨天的活跃用户」。未连接的服务,agent 会给出连接链接;连接后的账号显示在「用户连接」的「个人 MCP」项目下。':'For example \\"show my Linear issues this week\\" or \\"how many active users did PostHog record yesterday\\". For services that are not connected yet, the agent gives you a link; connected accounts appear under User connections in the Personal MCP project.','当前可连接:':'Available now:','暂无可用连接器,请先在「连接器」中启用。':'No connectors available yet. Enable some under Connectors first.','已授权的客户端':'Authorized clients','客户端':'Client','授权时间(UTC+8)':'Authorized (UTC+8)','最近使用(UTC+8)':'Last used (UTC+8)','撤销':'Revoke','已撤销':'Revoked','还没有客户端授权。按上面的步骤在 agent 中添加 Connany。':'No clients authorized yet. Add Connany to an agent with the steps above.','该客户端将无法再通过 Connany 使用你的连接,需要重新登录授权。你已连接的账号不受影响。':'The client can no longer use your connections through Connany until you authorize it again. Your connected accounts are not affected.','个人 MCP':'Personal MCP','授权应用':'Authorized apps','通过 MCP 使用你的 Connany 账号的客户端,如 Claude Code、Codex。撤销后需重新登录授权,你已连接的账号不受影响。':'Clients that use your Connany account through MCP, such as Claude Code or Codex. After revoking, a client must sign in again; your connected accounts are not affected.','还没有客户端授权。在 Claude Code、Codex 等 agent 中添加 Connany 后会显示在这里。':'No clients authorized yet. They appear here after you add Connany to an agent such as Claude Code or Codex.','MCP 接入文档 ↗':'MCP setup guide ↗','登录':'Sign in','工作台':'Workbench','系统':'System','用户管理':'Users','系统管理员':'Administrator','普通用户':'Member','身份':'Role','身份已更新':'Role updated','重置密码':'Reset password','当前账号':'You','添加用户':'Add user','用户已添加':'User added','添加':'Add','初始密码':'Initial password','最近登录(UTC+8)':'Last sign-in (UTC+8)','密码已重置':'Password reset','系统管理员可以管理所有用户;普通用户可以使用工作台,看不到系统设置。':'Administrators manage all users. Members use the workbench and cannot see system settings.','8–256 个字符。保存后该用户的所有登录会话都会失效,需要用新密码重新登录。':'8–256 characters. Saving signs the user out of every session; they sign in again with the new password.','8–256 个字符。请通过安全渠道告知对方,对方可登录后在「设置 → 账户」中修改。':'8–256 characters. Share it through a secure channel; the user can change it under Settings → Account after signing in.','将同时删除该用户工作空间中的所有数据:项目、API Key、连接器配置和用户连接(会尝试撤销平台授权),无法恢复。操作记录会保留。':'This also deletes everything in the user’s workspace: projects, API keys, connector configuration and user connections (upstream grants are revoked where possible). This cannot be undone. Activity history is kept.','不能修改自己的身份。':'You cannot change your own role.','不能删除自己的账号。':'You cannot delete your own account.','至少需要保留一个系统管理员。':'At least one administrator must remain.','该邮箱已存在。':'A user with this email already exists.','用户不存在。':'User not found.','需要系统管理员权限。':'Administrator access is required.','工具目录':'Tool catalog','尚未同步':'Not synced yet','启用后可同步':'Enable to sync','文档':'Docs','Agent 接入指南':'Agent integration guide','Agent 接入指南 ↗':'Agent integration guide ↗','下载 Markdown':'Download Markdown','文档类型':'Document type','文档目录':'Contents','把「复制给开发 Agent」的内容交给负责开发的 agent,它包含服务地址、实现要求和下面的完整指南。API Key 请通过后端环境变量另行配置。':'Give the copied content to the agent doing the development. It includes the service URL, implementation requirements and the full guide below. Configure the API key separately through backend environment variables.','对话中调用':'In conversations, call',' 列出该连接可用的工具交给模型,再用 ':' to list the connection’s tools for the model, then ','列出该连接可用的工具交给模型,再用':'to list the connection’s tools for the model, then',' 执行模型选择的工具。':' to run the tool the model picks.','执行模型选择的工具。':'to run the tool the model picks.','工具目录:尚未同步':'Tool catalog: not synced yet','同步工具目录':'Sync tool catalog','重新同步':'Sync again','去授权':'Authorize','项目':'Projects','连接器凭证集中配置;每个项目独立接入,每位用户单独授权。':'Connector credentials are configured once; each project integrates separately and each user authorizes individually.','多个项目':'Multiple projects','连接器配置一次,所有项目共用;不同项目的用户与连接相互隔离。':'Connectors are configured once and shared by every project. Users and connections are isolated per project.','已启用连接器':'Enabled connectors','已启用项目':'Enabled projects','创建项目':'Create project','为每个 agent 产品创建项目,获取它的 API Key。':'Create a project for each agent product and get its API key.','提供服务地址、项目的 API Key 和文档,完成一次真实账号授权。':'Share the service URL, the project API key and the docs, then complete one real account authorization.','每个项目对应一个接入 Connany 的 agent 产品,拥有独立的 API Key 和用户连接。':'Each project is an agent product integrated with Connany, with its own API keys and user connections.','暂无项目':'No projects yet','创建后会生成第一个 API Key,仅显示一次。':'The first API key is issued on creation and shown only once.','管理':'Manage','重命名':'Rename','查看':'View','新建 API Key':'New API key','名称 / 前缀':'Name / prefix','创建时间(UTC+8)':'Created (UTC+8)','最后使用(UTC+8)':'Last used (UTC+8)','有效':'Active','吊销':'Revoke','未命名':'Unnamed','已吊销':'Revoked','轮换方式:新建 API Key,部署到 agent 后端后,再吊销旧 Key,期间两把 Key 同时有效。':'To rotate: create a new API key, deploy it to your agent backend, then revoke the old key. Both keys work in the meantime.','危险操作':'Danger zone','删除项目':'Delete project','备注名(可选)':'Label (optional)','例如 production、staging,便于区分。':'For example production or staging.','集中管理连接器凭证,为每个项目分发独立密钥,让用户授权自己的账号。':'Manage connector credentials centrally, issue separate keys to each project, and let users authorize their own accounts.','查看各个项目下用户授权的账号。断开连接会立即阻止 Connany 后续调用。':'View accounts users authorized in each project. Disconnecting immediately blocks further Connany calls.','全部连接器':'All connectors','全部项目':'All projects','项目 / 用户':'Project / user','连接器':'Connectors','暂无用户连接。把项目的 API Key 交给 agent,完成一次用户授权后会显示在这里。':'No user connections yet. Give the project API key to an agent; connections appear after a user authorizes.','使用项目的 API Key 验证授权与只读调用。建议创建测试专用项目,避免混入正式用户数据。':'Verify authorization and read-only calls with a project API key. Use a dedicated test project to keep production user data separate.','测试连接器':'Test connector','在「项目」中创建测试项目并保存 API Key。':'Create a test project under Projects and save its API key.','创建测试项目':'Create test project','吊销此 API Key?':'Revoke this API key?','这是最后一个有效 API Key,吊销后此项目将无法调用 Connany。':'This is the last active API key. After revoking it, this project can no longer call Connany.','使用此 Key 的请求会立即失败,请确认 agent 已切换到新 Key。':'Requests using this key fail immediately. Make sure the agent has switched to the new key.','停用后此项目的所有 API Key 都无法调用 Connany,用户连接保留。':'All API keys of this project stop working. User connections are retained.','在「项目」中为 agent 创建项目,安全发送生成的 API Key 给对应开发者。密钥只放在 agent 后端。':'Create a project for the agent under Projects and share the generated API key securely with its developer. Keep keys on the agent backend only.',',传入已认证用户的 external_user_id。':', passing the authenticated external_user_id.','同一套连接器可供多个项目使用。每个项目的 API Key 只能访问本项目的用户连接。':'One set of connectors serves many projects. A project API key can access only that project’s user connections.','Project 不存在。':'Project not found.','API Key 不存在。':'API key not found.','API 文档':'API Docs','连接器':'Connectors','管理工作台':'Console','管理导航':'Main navigation','设置':'Settings','退出登录':'Sign out','打开账号菜单':'Open account menu','用户':'User','账户':'Account','通用':'General','关于':'About','设置分类':'Settings sections','关闭设置':'Close settings',
'管理你的管理员账号和登录密码。':'Manage your administrator account and password.','管理员账号':'Administrator account','修改密码':'Change password','保存后会退出所有登录会话,请使用新密码重新登录。':'Saving signs you out of all sessions. Sign in again with your new password.','当前密码':'Current password','新密码':'New password','确认新密码':'Confirm new password','8–256 个字符。':'8–256 characters.','取消':'Cancel','保存密码':'Save password',
'外观与当前设备偏好设置。':'Appearance and preferences for this device.','主题':'Theme','选择控制台配色。跟随系统会使用操作系统设置。':'Choose a console theme. System follows your operating system settings.','浅色':'Light','深色':'Dark','跟随系统':'System','界面语言':'Language','选择控制台使用的界面语言。':'Choose the language used in the console.','Connany · Agent 连接器服务':'Connany · Connectors for agents','连接工具与用户数据':'Connect tools and user data','统一管理账号授权、连接与凭证,让 Agent 在用户授权范围内使用工具。':'Manage account authorization, connections and credentials so agents can use tools within each user’s permissions.','Agent 接入文档 ↗':'Agent integration guide ↗',
'确定':'Confirm','确认操作':'Confirm action','API Key':'API Key','仅显示一次,请立即保存。':'Shown only once. Save it now.','复制':'Copy','我已保存':'I have saved it','已复制':'Copied','已选中文本,请手动复制':'Text selected. Copy it manually.','已保存':'Saved','保存':'Save','创建':'Create','名称':'Name','状态':'Status','用户连接':'User connections','编辑':'Edit','轮换':'Rotate','停用':'Disable','启用':'Enable','删除':'Delete','暂停':'Pause','配置':'Configure','官网 ↗':'Website ↗','未启用':'Not enabled','已启用':'Enabled','已停用':'Disabled','已暂停':'Paused','已删除':'Deleted','创建 API Key':'Create API Key','暂无 API Key':'No API keys yet','下一页 →':'Next page →','旧版密钥':'Legacy key',
@@ -17,6 +17,7 @@
};
// Hong Kong Traditional Chinese. Strings that read the same in both scripts are left out.
const hongKong = {
+ '搜索表现、索引状态与站点地图':'搜尋表現、索引狀態與站點地圖','GA4 报表、实时数据与媒体资源':'GA4 報表、實時數據與媒體資源','内置':'內置','创建 Google OAuth 客户端 ↗':'建立 Google OAuth 客戶端 ↗','复制此地址到 OAuth 客户端的重定向 URI,需保持完全一致。':'複製此地址到 OAuth 客戶端的重定向 URI,需保持完全一致。','在 Google Cloud 项目中启用 Search Console API,创建「Web 应用」类型的 OAuth 客户端,并把下方回调地址加入「已获授权的重定向 URI」。':'在 Google Cloud 項目中啟用 Search Console API,建立「Web 應用」類型的 OAuth 客戶端,並把下方回調地址加入「已獲授權的重定向 URI」。','在 Google Cloud 项目中启用 Google Analytics Data API 和 Google Analytics Admin API,创建「Web 应用」类型的 OAuth 客户端,并把下方回调地址加入「已获授权的重定向 URI」。':'在 Google Cloud 項目中啟用 Google Analytics Data API 和 Google Analytics Admin API,建立「Web 應用」類型的 OAuth 客戶端,並把下方回調地址加入「已獲授權的重定向 URI」。','Google Search Console:列出可访问的站点;Google Analytics:列出账号与 GA4 媒体资源。':'Google Search Console:列出可訪問的站點;Google Analytics:列出帳戶與 GA4 媒體資源。',
'总览':'總覽','协作与办公':'協作與辦公','代码与部署':'程式碼與部署','数据库':'數據庫','监控与分析':'監控與分析','设计与建站':'設計與建站','全部分类':'全部分類','启用状态':'啟用狀態','连接器分类':'連接器分類','搜索连接器':'搜尋連接器','没有匹配的连接器':'沒有匹配的連接器','连接器配置一次,工作空间里的所有项目共用。':'連接器配置一次,工作空間裡的所有項目共用。','错误监控、Issue 与性能追踪':'錯誤監控、Issue 與效能追蹤','产品分析、功能开关与会话回放':'產品分析、功能開關與會話回放','Jira 与 Confluence 的事项、页面与项目':'Jira 與 Confluence 的事項、頁面與項目','项目、部署与日志':'項目、部署與日誌','数据库、项目与 Edge Functions':'數據庫、項目與 Edge Functions','Serverless Postgres 数据库与分支':'Serverless Postgres 數據庫與分支','站点、部署与环境变量':'站點、部署與環境變數','代码仓库、Issue 与合并请求':'程式碼倉庫、Issue 與合併請求','Workers、KV、R2 与 D1':'Workers、KV、R2 與 D1','Prisma Postgres 数据库与迁移':'Prisma Postgres 數據庫與遷移','支付、客户、订阅与账单':'支付、客戶、訂閱與帳單','订单、发票与交易':'訂單、發票與交易','支付、订单、商品与客户':'支付、訂單、商品與客戶','任务、列表与文档':'任務、列表與文件','看板、项目与工作流':'看板、項目與工作流','数据表、记录与工作区':'數據表、記錄與工作區','任务、项目与提醒':'任務、項目與提醒','白板、便签与图表':'白板、便籤與圖表','设计、模板与素材':'設計、模板與素材','客服会话、联系人与工单':'客服會話、聯絡人與工單','站点、CMS 集合与页面':'站點、CMS 集合與頁面','站点、商店与预约':'站點、商店與預約','注册':'註冊','还没有账号?':'還沒有帳戶?','已有账号?':'已有帳戶?','确认密码':'確認密碼','至少 8 个字符。':'至少 8 個字元。','注册并进入工作台 →':'註冊並進入工作台 →','开放注册':'開放註冊','开启后,登录页显示「注册」入口,任何人都可以注册普通用户账号,各自拥有独立的工作空间。':'開啟後,登入頁顯示「註冊」入口,任何人都可以註冊普通用戶帳戶,各自擁有獨立的工作空間。','当前未开放注册,请联系管理员创建账号。':'目前未開放註冊,請聯絡管理員建立帳戶。','注册请求过多,请在 15 分钟后重试。':'註冊請求過多,請在 15 分鐘後重試。','该邮箱已注册,请直接登录。':'該電郵已註冊,請直接登入。','两次输入的密码不一致。':'兩次輸入的密碼不一致。','登录并继续 →':'登入並繼續 →','注册并继续 →':'註冊並繼續 →','授权访问':'授權訪問','请求访问你的 Connany 账号':'請求訪問你的 Connany 帳戶','查看可用的连接器和你已连接的账号':'查看可用的連接器和你已連接的帳戶','生成连接链接,由你在浏览器中授权新账号':'生成連接連結,由你在瀏覽器中授權新帳戶','以你已连接的账号调用工具(会修改数据的操作由 agent 先向你确认)':'以你已連接的帳戶調用工具(會修改數據的操作由 agent 先向你確認)','授权后返回':'授權後返回','。可随时在「MCP 接入」中撤销。':'。可隨時在「MCP 接入」中撤銷。','拒绝':'拒絕','允许':'允許','无法授权':'無法授權','授权请求缺少 client_id 或 redirect_uri。':'授權請求缺少 client_id 或 redirect_uri。','未知的客户端,请在 agent 中重新连接 Connany。':'未知的客戶端,請在 agent 中重新連接 Connany。','回调地址与客户端注册的不一致。':'回調地址與客戶端註冊的不一致。','请回到 agent 重新发起连接。':'請回到 agent 重新發起連接。','授权不存在。':'授權不存在。','在 Claude Code、Codex 等 agent 中添加 Connany,即可用你自己的账号使用所有连接器。':'在 Claude Code、Codex 等 agent 中新增 Connany,即可用你自己的帳戶使用所有連接器。','1. 添加 MCP 服务':'1. 新增 MCP 服務','首次使用时,agent 会打开浏览器让你登录 Connany 并授权。':'首次使用時,agent 會開啟瀏覽器讓你登入 Connany 並授權。','添加后在 Claude Code 中运行 /mcp,选择 connany 完成登录。':'新增後在 Claude Code 中執行 /mcp,選擇 connany 完成登入。','其他客户端(Cursor 等)':'其他客戶端(Cursor 等)','2. 安装 Skill(推荐)':'2. 安裝 Skill(推薦)','Skill 告诉 agent 何时使用 Connany、如何引导你连接账号、调用前如何确认,回答更稳定。':'Skill 告訴 agent 何時使用 Connany、如何引導你連接帳戶、調用前如何確認,回答更穩定。','3. 在对话中使用':'3. 在對話中使用','例如「看看我 Linear 里这周的 issue」「查一下 PostHog 昨天的活跃用户」。未连接的服务,agent 会给出连接链接;连接后的账号显示在「用户连接」的「个人 MCP」项目下。':'例如「看看我 Linear 裡這週的 issue」「查一下 PostHog 昨天的活躍用戶」。未連接的服務,agent 會給出連接連結;連接後的帳戶顯示在「用戶連接」的「個人 MCP」項目下。','当前可连接:':'目前可連接:','暂无可用连接器,请先在「连接器」中启用。':'暫無可用連接器,請先在「連接器」中啟用。','已授权的客户端':'已授權的客戶端','客户端':'客戶端','授权时间(UTC+8)':'授權時間(UTC+8)','撤销':'撤銷','已撤销':'已撤銷','还没有客户端授权。按上面的步骤在 agent 中添加 Connany。':'還沒有客戶端授權。按上面的步驟在 agent 中新增 Connany。','该客户端将无法再通过 Connany 使用你的连接,需要重新登录授权。你已连接的账号不受影响。':'該客戶端將無法再透過 Connany 使用你的連接,需要重新登入授權。你已連接的帳戶不受影響。','个人 MCP':'個人 MCP','授权应用':'授權應用','通过 MCP 使用你的 Connany 账号的客户端,如 Claude Code、Codex。撤销后需重新登录授权,你已连接的账号不受影响。':'透過 MCP 使用你的 Connany 帳戶的客戶端,如 Claude Code、Codex。撤銷後需重新登入授權,你已連接的帳戶不受影響。','还没有客户端授权。在 Claude Code、Codex 等 agent 中添加 Connany 后会显示在这里。':'還沒有客戶端授權。在 Claude Code、Codex 等 agent 中新增 Connany 後會顯示在這裡。','MCP 接入文档 ↗':'MCP 接入文件 ↗','登录':'登入','系统':'系統','用户管理':'用戶管理','系统管理员':'系統管理員','普通用户':'普通用戶','重置密码':'重置密碼','当前账号':'目前帳戶','添加用户':'新增用戶','用户已添加':'用戶已新增','添加':'新增','初始密码':'初始密碼','最近登录(UTC+8)':'最近登入(UTC+8)','密码已重置':'密碼已重置','系统管理员可以管理所有用户;普通用户可以使用工作台,看不到系统设置。':'系統管理員可以管理所有用戶;普通用戶可以使用工作台,看不到系統設定。','8–256 个字符。保存后该用户的所有登录会话都会失效,需要用新密码重新登录。':'8–256 個字元。儲存後該用戶的所有登入會話都會失效,需要用新密碼重新登入。','8–256 个字符。请通过安全渠道告知对方,对方可登录后在「设置 → 账户」中修改。':'8–256 個字元。請透過安全渠道告知對方,對方可登入後在「設定 → 帳戶」中修改。','将同时删除该用户工作空间中的所有数据:项目、API Key、连接器配置和用户连接(会尝试撤销平台授权),无法恢复。操作记录会保留。':'將同時刪除該用戶工作空間中的所有數據:項目、API Key、連接器配置和用戶連接(會嘗試撤銷平台授權),無法恢復。操作記錄會保留。','不能删除自己的账号。':'不能刪除自己的帳戶。','至少需要保留一个系统管理员。':'至少需要保留一個系統管理員。','该邮箱已存在。':'該電郵已存在。','用户不存在。':'用戶不存在。','需要系统管理员权限。':'需要系統管理員權限。','工具目录':'工具目錄','启用后可同步':'啟用後可同步','文档':'文件','下载 Markdown':'下載 Markdown','文档类型':'文件類型','文档目录':'文件目錄','把「复制给开发 Agent」的内容交给负责开发的 agent,它包含服务地址、实现要求和下面的完整指南。API Key 请通过后端环境变量另行配置。':'把「複製給開發 Agent」的內容交給負責開發的 agent,它包含服務地址、實現要求和下面的完整指南。API Key 請透過後端環境變數另行配置。','对话中调用':'對話中調用',' 列出该连接可用的工具交给模型,再用 ':' 列出該連接可用的工具交給模型,再用 ','列出该连接可用的工具交给模型,再用':'列出該連接可用的工具交給模型,再用',' 执行模型选择的工具。':' 執行模型選擇的工具。','执行模型选择的工具。':'執行模型選擇的工具。','工具目录:尚未同步':'工具目錄:尚未同步','同步工具目录':'同步工具目錄','去授权':'去授權','项目':'項目','连接器凭证集中配置;每个项目独立接入,每位用户单独授权。':'連接器憑證集中配置;每個項目獨立接入,每位用戶單獨授權。','多个项目':'多個項目','连接器配置一次,所有项目共用;不同项目的用户与连接相互隔离。':'連接器配置一次,所有項目共用;不同項目的用戶與連接相互隔離。','已启用连接器':'已啟用連接器','已启用项目':'已啟用項目','创建项目':'建立項目','为每个 agent 产品创建项目,获取它的 API Key。':'為每個 agent 產品建立項目,取得它的 API Key。','提供服务地址、项目的 API Key 和文档,完成一次真实账号授权。':'提供服務地址、項目的 API Key 和文件,完成一次真實帳戶授權。','每个项目对应一个接入 Connany 的 agent 产品,拥有独立的 API Key 和用户连接。':'每個項目對應一個接入 Connany 的 agent 產品,擁有獨立的 API Key 和用戶連接。','暂无项目':'暫無項目','创建后会生成第一个 API Key,仅显示一次。':'建立後會生成第一個 API Key,僅顯示一次。','名称 / 前缀':'名稱 / 前綴','创建时间(UTC+8)':'建立時間(UTC+8)','最后使用(UTC+8)':'最後使用(UTC+8)','吊销':'吊銷','已吊销':'已吊銷','轮换方式:新建 API Key,部署到 agent 后端后,再吊销旧 Key,期间两把 Key 同时有效。':'輪換方式:新建 API Key,部署到 agent 後端後,再吊銷舊 Key,期間兩把 Key 同時有效。','危险操作':'危險操作','删除项目':'刪除項目','备注名(可选)':'備註名(可選)','例如 production、staging,便于区分。':'例如 production、staging,便於區分。','集中管理连接器凭证,为每个项目分发独立密钥,让用户授权自己的账号。':'集中管理連接器憑證,為每個項目分發獨立密鑰,讓用戶授權自己的帳戶。','查看各个项目下用户授权的账号。断开连接会立即阻止 Connany 后续调用。':'查看各個項目下用戶授權的帳戶。斷開連接會立即阻止 Connany 後續調用。','全部连接器':'全部連接器','全部项目':'全部項目','项目 / 用户':'項目 / 用戶','连接器':'連接器','暂无用户连接。把项目的 API Key 交给 agent,完成一次用户授权后会显示在这里。':'暫無用戶連接。把項目的 API Key 交給 agent,完成一次用戶授權後會顯示在這裡。','使用项目的 API Key 验证授权与只读调用。建议创建测试专用项目,避免混入正式用户数据。':'使用項目的 API Key 驗證授權與唯讀調用。建議建立測試專用項目,避免混入正式用戶數據。','测试连接器':'測試連接器','在「项目」中创建测试项目并保存 API Key。':'在「項目」中建立測試項目並儲存 API Key。','创建测试项目':'建立測試項目','吊销此 API Key?':'吊銷此 API Key?','这是最后一个有效 API Key,吊销后此项目将无法调用 Connany。':'這是最後一個有效 API Key,吊銷後此項目將無法調用 Connany。','使用此 Key 的请求会立即失败,请确认 agent 已切换到新 Key。':'使用此 Key 的請求會立即失敗,請確認 agent 已切換到新 Key。','停用后此项目的所有 API Key 都无法调用 Connany,用户连接保留。':'停用後此項目的所有 API Key 都無法調用 Connany,用戶連接保留。','在「项目」中为 agent 创建项目,安全发送生成的 API Key 给对应开发者。密钥只放在 agent 后端。':'在「項目」中為 agent 建立項目,安全發送生成的 API Key 給對應開發者。密鑰只放在 agent 後端。',',传入已认证用户的 external_user_id。':',傳入已認證用戶的 external_user_id。','同一套连接器可供多个项目使用。每个项目的 API Key 只能访问本项目的用户连接。':'同一套連接器可供多個項目使用。每個項目的 API Key 只能訪問本項目的用戶連接。','API 文档':'API 文件','连接器':'連接器','管理导航':'管理導航','设置':'設定','退出登录':'登出','打开账号菜单':'開啟帳戶選單','用户':'用戶','账户':'帳戶','关于':'關於','设置分类':'設定分類','关闭设置':'關閉設定',
'管理你的管理员账号和登录密码。':'管理你的管理員帳戶和登入密碼。','管理员账号':'管理員帳戶','修改密码':'修改密碼','保存后会退出所有登录会话,请使用新密码重新登录。':'儲存後會退出所有登入會話,請使用新密碼重新登入。','当前密码':'目前密碼','新密码':'新密碼','确认新密码':'確認新密碼','8–256 个字符。':'8–256 個字元。','保存密码':'儲存密碼',
'外观与当前设备偏好设置。':'外觀與目前裝置偏好設定。','主题':'主題','选择控制台配色。跟随系统会使用操作系统设置。':'選擇控制台配色。跟隨系統會使用作業系統設定。','浅色':'淺色','跟随系统':'跟隨系統','界面语言':'介面語言','选择控制台使用的界面语言。':'選擇控制台使用的介面語言。','Connany · Agent 连接器服务':'Connany · Agent 連接器服務','连接工具与用户数据':'連接工具與用戶數據','统一管理账号授权、连接与凭证,让 Agent 在用户授权范围内使用工具。':'統一管理帳戶授權、連接與憑證,讓 Agent 在用戶授權範圍內使用工具。','Agent 接入文档 ↗':'Agent 接入文件 ↗',
diff --git a/public/admin.js b/public/admin.js
index e200986..04092b7 100644
--- a/public/admin.js
+++ b/public/admin.js
@@ -197,6 +197,8 @@
const callTool = (tool,input) => request(`${toolsPath}/${encodeURIComponent(tool)}/call`,{external_user_id:user.value,input});
const listTools = () => request(`${toolsPath}?${new URLSearchParams({external_user_id:user.value,limit:'5'})}`);
let result;
+ // REST connectors read real data: the sites or properties the account can see.
+ const probes = {google_search_console:'google_search_console.list_sites',google_analytics:'google_analytics.list_account_summaries'};
if (connector.value === 'github') {
githubPanel.replaceChildren();
const installations = [];
@@ -228,6 +230,9 @@
const tools = await listTools();
result = {installations,tools};
status.textContent = installations.length ? '已获取组织列表,请选择组织试读。管理入口可能需要组织管理员权限。' : '账号已连接,尚未添加仓库。可以点击添加组织 / 仓库,完成后再次试读刷新列表。';
+ } else if (probes[connector.value]) {
+ result = await callTool(probes[connector.value],{});
+ status.textContent = '读取成功。空列表表示当前授权范围内没有可见数据。';
} else {
result = await listTools();
status.textContent = '读取成功。空列表表示当前授权范围内没有可见数据。';
diff --git a/sdk/client.ts b/sdk/client.ts
index b34f816..9d464da 100644
--- a/sdk/client.ts
+++ b/sdk/client.ts
@@ -1,7 +1,7 @@
/** Server-side SDK. Do not bundle the project key into a browser, mobile app or LLM prompt. */
/** Groups connectors for display: collaboration, development, data, analytics, payments, design. */
export type ConnectorCategory = 'collaboration' | 'development' | 'data' | 'analytics' | 'payments' | 'design';
-export type ConnectorName = 'notion' | 'github' | 'linear' | 'sentry' | 'posthog' | 'atlassian' | 'vercel' | 'supabase' | 'neon' | 'netlify' | 'gitlab' | 'cloudflare' | 'prisma' | 'stripe' | 'paypal' | 'square' | 'clickup' | 'monday' | 'airtable' | 'todoist' | 'miro' | 'canva' | 'intercom' | 'webflow' | 'wix';
+export type ConnectorName = 'notion' | 'github' | 'linear' | 'sentry' | 'posthog' | 'atlassian' | 'vercel' | 'supabase' | 'neon' | 'netlify' | 'gitlab' | 'cloudflare' | 'prisma' | 'stripe' | 'paypal' | 'square' | 'clickup' | 'monday' | 'airtable' | 'todoist' | 'miro' | 'canva' | 'intercom' | 'webflow' | 'wix' | 'google_search_console' | 'google_analytics';
export interface ConnectSession {
id: string; connector: ConnectorName; status: 'pending' | 'authorizing' | 'processing' | 'connected' | 'error' | 'expired';
expires_at: string; connect_url?: string; connection_id?: string | null; error_code?: string | null;
diff --git a/skills/connany/SKILL.md b/skills/connany/SKILL.md
index a26c598..9d81445 100644
--- a/skills/connany/SKILL.md
+++ b/skills/connany/SKILL.md
@@ -1,6 +1,6 @@
---
name: connany
-description: Use the user's own accounts in third-party services (Notion, Linear, GitHub, GitLab, Atlassian, Stripe, PayPal, Square, PostHog, Sentry, Vercel, Supabase, Airtable, Todoist, Canva, Miro and more) through Connany. Use when the user asks to look up, summarize or change data in one of these services, e.g. "what's in my Linear this week", "how many users did PostHog record yesterday", "create a Notion page".
+description: Use the user's own accounts in third-party services (Notion, Linear, GitHub, GitLab, Atlassian, Stripe, PayPal, Square, PostHog, Sentry, Vercel, Supabase, Airtable, Todoist, Canva, Miro, Google Search Console, Google Analytics and more) through Connany. Use when the user asks to look up, summarize or change data in one of these services, e.g. "what's in my Linear this week", "how many users did PostHog record yesterday", "top search queries in Search Console last week", "create a Notion page".
---
# Connany
diff --git a/src/admin/pages.ts b/src/admin/pages.ts
index 61eb876..03cc441 100644
--- a/src/admin/pages.ts
+++ b/src/admin/pages.ts
@@ -86,7 +86,13 @@ function githubCreationUrl(callbackUrl: string) {
}
function credentialDialog(p: ConnectorView) {
const id = `connector-${p.name}`;
- return ``;
+ const setup = connectorSpec(p.name).oauth?.console;
+ // GitHub Apps also need the slug for installation links; other OAuth clients only need the credentials.
+ const app = connectorSpec(p.name).auth === 'github_app'
+ ? `