This is an automated email from the ASF dual-hosted git repository.

hsluoyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/casbin-gateway.git

commit 9409d7e4052be405a70dc5860a0d09fb677a1ee7
Author: Yang Luo <[email protected]>
AuthorDate: Sun Sep 6 15:39:41 2026 +0800

    feat(connections): fill out storage with S3, rclone and Cloud Storage
---
 README.md                                       |  2 +-
 README_zh.md                                    |  2 +-
 connector/connectors/gcs.json                   | 32 +++++++++++++++
 connector/connectors/rclone.json                | 45 +++++++++++++++++++++
 connector/connectors/s3.json                    | 53 +++++++++++++++++++++++++
 docs/user-manual/en/2-agents/2.5-connections.md |  2 +-
 docs/user-manual/zh/2-agents/2.5-connections.md |  2 +-
 web/src/locales/zh/data.json                    | 15 +++++++
 8 files changed, 149 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index a0ae9aa..c8d6e05 100644
--- a/README.md
+++ b/README.md
@@ -198,7 +198,7 @@ The password behind that account is `admin` / `123`, and it 
only matters if you
 - **[Say what each agent may do](#what-each-agent-is-allowed-to-do)** — around 
forty switches per agent, in groups, over its tools, models and providers, 
enforced by Casbin on every request it relays.
 - **[Know what every agent spent, even off 
Gateway](#what-the-agents-spend-including-what-never-went-through-gateway)** — 
read straight from the agents' own transcripts.
 - **[Compare and copy skills, MCP servers and prompts across 
agents](#what-to-do-next)** — every agent's install list in one table.
-- **[Connect an application once, for every 
agent](docs/user-manual/en/2-agents/2.5-connections.md)** — 42 of them: GitHub, 
Slack, Lark, DingTalk, Notion, Figma, Sentry, Kubernetes, Stripe, mail, a 
browser and the rest. The credential stays in Gateway rather than in each 
agent's config file, every call through it is checked against that agent's 
permissions, and testing one gives you a switch per tool.
+- **[Connect an application once, for every 
agent](docs/user-manual/en/2-agents/2.5-connections.md)** — 45 of them: GitHub, 
Slack, Lark, DingTalk, Notion, Figma, Sentry, Kubernetes, Stripe, mail, a 
browser and the rest. The credential stays in Gateway rather than in each 
agent's config file, every call through it is checked against that agent's 
permissions, and testing one gives you a switch per tool.
 
 ## Using it
 
diff --git a/README_zh.md b/README_zh.md
index 19d6f25..d6c5939 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -196,7 +196,7 @@ Gateway 会在自己的窗口里打开 —— 不用登录:它只服务本机
 - **[规定每个 Agent 能做什么](#每个-agent-能做什么)** —— 每个 Agent 
四十来个开关,分组管理,覆盖工具、模型和供应商,每个转发的请求都由 Casbin 判定。
 - **[统计每个 Agent 花了多少,包括没走 Gateway 的部分](#每个-agent-花了多少包括没走-gateway-的那部分)** —— 
直接读 Agent 自己写的会话记录。
 - **[跨 Agent 对比、复制技能 / MCP / 提示词](#接下来做什么)** —— 一张表看到所有 Agent 装了什么。
-- **[一次连接一个应用,所有 Agent 都能用](docs/user-manual/zh/2-agents/2.5-connections.md)** 
—— 42 个:GitHub、Slack、飞书、钉钉、Notion、Figma、Sentry、Kubernetes、Stripe、邮箱、浏览器等。凭据留在 
Gateway 而不是散在每个 Agent 的配置文件里,经过它的每次调用都会按该 Agent 的权限校验,测试一次还能得到每个工具的独立开关。
+- **[一次连接一个应用,所有 Agent 都能用](docs/user-manual/zh/2-agents/2.5-connections.md)** 
—— 45 个:GitHub、Slack、飞书、钉钉、Notion、Figma、Sentry、Kubernetes、Stripe、邮箱、浏览器等。凭据留在 
Gateway 而不是散在每个 Agent 的配置文件里,经过它的每次调用都会按该 Agent 的权限校验,测试一次还能得到每个工具的独立开关。
 
 ## 使用
 
diff --git a/connector/connectors/gcs.json b/connector/connectors/gcs.json
new file mode 100644
index 0000000..707248a
--- /dev/null
+++ b/connector/connectors/gcs.json
@@ -0,0 +1,32 @@
+{
+  "id": "gcs",
+  "displayName": "Google Cloud Storage",
+  "category": "storage",
+  "icon": "cloud.google.com",
+  "description": "Lists buckets and reads objects in Google Cloud Storage. It 
signs in with the gcloud credentials already on this machine, so there is no 
key to paste.",
+  "docsUrl": "https://github.com/googleapis/nodejs-storage";,
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "project",
+        "label": "Project ID",
+        "placeholder": "my-gcp-project",
+        "help": "Run gcloud auth application-default login first; this 
connector uses those credentials.",
+        "required": true
+      }
+    ]
+  },
+  "server": {
+    "name": "gcs",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "@google-cloud/storage-mcp"
+    ],
+    "env": {
+      "GOOGLE_CLOUD_PROJECT": "${project}"
+    }
+  }
+}
diff --git a/connector/connectors/rclone.json b/connector/connectors/rclone.json
new file mode 100644
index 0000000..7d7550a
--- /dev/null
+++ b/connector/connectors/rclone.json
@@ -0,0 +1,45 @@
+{
+  "id": "rclone",
+  "displayName": "Cloud drives",
+  "category": "storage",
+  "icon": "rclone.org",
+  "description": "Reaches whatever rclone reaches: Google Drive, OneDrive, 
Dropbox, WebDAV, SFTP and seventy more. Needs rclone running its own daemon on 
this machine, which is what the address below points at.",
+  "docsUrl": "https://github.com/steipete/rclone-mcp";,
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "url",
+        "label": "Daemon address",
+        "placeholder": "http://localhost:5572";,
+        "help": "Start it with: rclone rcd --rc-user=<user> --rc-pass=<pass>",
+        "required": true
+      },
+      {
+        "key": "user",
+        "label": "Daemon user",
+        "required": true
+      },
+      {
+        "key": "pass",
+        "label": "Daemon password",
+        "secret": true,
+        "required": true
+      }
+    ]
+  },
+  "server": {
+    "name": "rclone",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "rclone-mcp"
+    ],
+    "env": {
+      "RCLONE_URL": "${url}",
+      "RCLONE_USER": "${user}",
+      "RCLONE_PASS": "${pass}"
+    }
+  }
+}
diff --git a/connector/connectors/s3.json b/connector/connectors/s3.json
new file mode 100644
index 0000000..36e7e2c
--- /dev/null
+++ b/connector/connectors/s3.json
@@ -0,0 +1,53 @@
+{
+  "id": "s3",
+  "displayName": "Object storage",
+  "category": "storage",
+  "icon": "min.io",
+  "description": "Lists buckets, reads and writes objects on anything that 
speaks S3: AWS, Aliyun OSS, Tencent COS, Cloudflare R2, Backblaze B2 and 
MinIO.",
+  "docsUrl": "https://github.com/samuraikun/s3-mcp-server";,
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "endpoint",
+        "label": "Endpoint",
+        "placeholder": "https://oss-cn-hangzhou.aliyuncs.com";,
+        "help": "The service's own address. For AWS itself, the regional S3 
endpoint.",
+        "required": true
+      },
+      {
+        "key": "region",
+        "label": "Region",
+        "placeholder": "auto",
+        "required": true
+      },
+      {
+        "key": "accessKeyId",
+        "label": "Access key ID",
+        "secret": true,
+        "required": true
+      },
+      {
+        "key": "secretAccessKey",
+        "label": "Secret access key",
+        "secret": true,
+        "required": true
+      }
+    ]
+  },
+  "server": {
+    "name": "s3",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "s3-mcp-server"
+    ],
+    "env": {
+      "S3_ENDPOINT": "${endpoint}",
+      "S3_REGION": "${region}",
+      "S3_ACCESS_KEY_ID": "${accessKeyId}",
+      "S3_SECRET_ACCESS_KEY": "${secretAccessKey}"
+    }
+  }
+}
diff --git a/docs/user-manual/en/2-agents/2.5-connections.md 
b/docs/user-manual/en/2-agents/2.5-connections.md
index c6fbdd9..44aee4c 100644
--- a/docs/user-manual/en/2-agents/2.5-connections.md
+++ b/docs/user-manual/en/2-agents/2.5-connections.md
@@ -1,6 +1,6 @@
 # 2.5 Connections
 
-**Connections** is a catalogue of 42 applications an agent can work across — 
GitHub and GitLab, Slack, Lark, DingTalk and WeCom, Notion, Figma, Sentry, 
Kubernetes, MongoDB and the SQL databases, mail over IMAP and SMTP, Stripe and 
Alipay, Firecrawl and Tavily, the Amap and Baidu map services, a browser, a 
folder on this machine, and more. Connect one here, tick the agents that should 
have it, and Gateway writes it into each of their configuration files.
+**Connections** is a catalogue of 45 applications an agent can work across — 
GitHub and GitLab, Slack, Lark, DingTalk and WeCom, Notion, Figma, Sentry, 
Kubernetes, MongoDB and the SQL databases, mail over IMAP and SMTP, Stripe and 
Alipay, Firecrawl and Tavily, the Amap and Baidu map services, a browser, 
object storage and the cloud drives rclone reaches, a folder on this machine, 
and more. Connect one here, tick the agents that should have it, and Gateway 
writes it into each of their con [...]
 
 A connection is an MCP server with its credential kept in Gateway rather than 
in every agent's file.
 
diff --git a/docs/user-manual/zh/2-agents/2.5-connections.md 
b/docs/user-manual/zh/2-agents/2.5-connections.md
index 64db4df..1c39799 100644
--- a/docs/user-manual/zh/2-agents/2.5-connections.md
+++ b/docs/user-manual/zh/2-agents/2.5-connections.md
@@ -1,6 +1,6 @@
 # 2.5 连接
 
-**连接**是一份收录了42个应用的目录——GitHub与GitLab、Slack、飞书、钉钉与企业微信、Notion、Figma、Sentry、Kubernetes、MongoDB与各类SQL数据库、走IMAP/SMTP的邮箱、Stripe与支付宝、Firecrawl与Tavily、高德与百度地图、浏览器、本机的某个目录,还有更多。在这里连一次,勾上该拥有它的Agent,Gateway会把它写进这些Agent各自的配置文件。
+**连接**是一份收录了45个应用的目录——GitHub与GitLab、Slack、飞书、钉钉与企业微信、Notion、Figma、Sentry、Kubernetes、MongoDB与各类SQL数据库、走IMAP/SMTP的邮箱、Stripe与支付宝、Firecrawl与Tavily、高德与百度地图、浏览器、对象存储和rclone能连的各类网盘、本机的某个目录,还有更多。在这里连一次,勾上该拥有它的Agent,Gateway会把它写进这些Agent各自的配置文件。
 
 一个连接就是一个MCP服务器,只不过凭据留在Gateway里,而不是留在每个Agent的文件里。
 
diff --git a/web/src/locales/zh/data.json b/web/src/locales/zh/data.json
index 758219b..7a47f8f 100644
--- a/web/src/locales/zh/data.json
+++ b/web/src/locales/zh/data.json
@@ -911,6 +911,7 @@
     "API URL": "API地址",
     "API key": "API Key",
     "API token": "API令牌",
+    "Access key ID": "Access Key ID",
     "Account email": "账号邮箱",
     "Add a group robot in WeCom and copy the address it gives you.": 
"在企业微信群里添加群机器人,把它给出的地址复制过来。",
     "Alipay": "支付宝",
@@ -938,6 +939,7 @@
     "China Railway 12306": "12306火车票",
     "Client ID": "Client ID",
     "Client secret": "Client Secret",
+    "Cloud drives": "网盘",
     "CloudBase": "腾讯云开发",
     "Cluster URL": "集群地址",
     "Connect": "连接",
@@ -947,6 +949,9 @@
     "Create an internal integration in Notion, then share with it the pages it 
may read.": "在Notion开发者后台建一个internal integration,再把允许它读取的页面共享给它。",
     "Create and manage Redis and Vector databases on Upstash, and read what 
they hold.": "在Upstash上创建和管理Redis与Vector数据库,并读取里面的数据。",
     "Create payments, check their status and issue refunds through your own 
Alipay merchant application.": "通过你自己的支付宝商户应用发起支付、查询支付状态、发起退款。",
+    "Daemon address": "守护进程地址",
+    "Daemon password": "守护进程密码",
+    "Daemon user": "守护进程用户名",
     "Development": "开发工具",
     "DingTalk": "钉钉",
     "Directory to allow": "允许访问的目录",
@@ -956,6 +961,7 @@
     "Drive a browser: open pages, click, fill forms, take screenshots, and 
read the console and network, for end-to-end tests and scraping.": 
"让Agent操作浏览器:打开页面、点击、填表单、截图、读取控制台和网络请求,用于端到端测试和网页取数。",
     "Email": "邮箱",
     "Email address": "邮箱地址",
+    "Endpoint": "Endpoint",
     "Explore collections, run queries and read indexes and schemas on a 
MongoDB deployment, without leaving the editor.": 
"在编辑器里就能浏览MongoDB的集合、执行查询、查看索引和结构。",
     "Failed": "写入失败",
     "Figma, Settings, Security, Personal access tokens. Read-only file access 
is enough.": "Figma→Settings→Security→Personal access tokens。只读的文件权限就够了。",
@@ -990,6 +996,8 @@
     "Lark (sign-in)": "飞书(登录授权)",
     "Last tested": "上次测试于{time}",
     "Life": "生活服务",
+    "Lists buckets and reads objects in Google Cloud Storage. It signs in with 
the gcloud credentials already on this machine, so there is no key to paste.": 
"列出并读取Google Cloud Storage里的Bucket和对象。它用本机已有的gcloud凭据登录,不需要粘贴任何密钥。",
+    "Lists buckets, reads and writes objects on anything that speaks S3: AWS, 
Aliyun OSS, Tencent COS, Cloudflare R2, Backblaze B2 and MinIO.": 
"在任何支持S3协议的存储上列出Bucket、读写对象:AWS、阿里云OSS、腾讯云COS、Cloudflare R2、Backblaze 
B2和MinIO。",
     "Loading": "加载中...",
     "Local files": "本地文件",
     "Looks up Wikipedia articles and the images in them, so a question of fact 
is answered from the encyclopedia rather than from memory.": 
"查询维基百科的词条和其中的配图,事实性问题从百科里找答案,而不是靠模型记忆。",
@@ -1005,6 +1013,7 @@
     "Not the password you sign in with: create an app password in your mail 
account's security settings.": "不是你登录用的密码:请在邮箱的安全设置里生成一个应用专用密码。",
     "Not written_other": "有{{count}}个Agent没能写入。",
     "Nothing matches": "没有匹配「{query}」的应用。",
+    "Object storage": "对象存储",
     "Office": "办公协同",
     "One connection for PostgreSQL, MySQL, MariaDB, SQL Server and SQLite: 
read the schema, run queries, explain a plan.": 
"一个连接覆盖PostgreSQL、MySQL、MariaDB、SQL Server和SQLite:读表结构、跑查询、看执行计划。",
     "Only needed when the address alone is not enough to find the server.": 
"只有在光凭邮箱地址找不到服务器时才需要填。",
@@ -1016,6 +1025,7 @@
     "Posts messages into a WeCom group through its own robot webhook: a build 
result, an alert, a summary at the end of a run.": 
"通过群机器人的webhook往企业微信群里发消息:构建结果、告警,或者一轮跑完的总结。",
     "Professional": "专业服务",
     "Project ID": "项目ID",
+    "Reaches whatever rclone reaches: Google Drive, OneDrive, Dropbox, WebDAV, 
SFTP and seventy more. Needs rclone running its own daemon on this machine, 
which is what the address below points at.": "rclone能连的它都能连:Google 
Drive、OneDrive、Dropbox、WebDAV、SFTP等七十多种。需要本机先把rclone的守护进程跑起来,下面填的就是它的地址。",
     "Read and organise pages, databases and wikis: find a document, take stock 
of a project, and write the conclusion back.": 
"读取和整理页面、数据库与知识库:查找文档、梳理项目状态,并把结论写回页面。",
     "Read and write customers, products, prices, invoices and payments, so an 
agent can work against your billing without a dashboard.": 
"读写客户、商品、价格、账单和支付,让Agent不用打开后台就能处理你的计费。",
     "Read and write projects, issues, merge requests and pipelines on GitLab, 
self-hosted instances included.": "读写GitLab的项目、issue、合并请求和流水线,自建实例同样支持。",
@@ -1027,9 +1037,11 @@
     "Reads and sends mail over IMAP and SMTP, so it works with Gmail, Outlook, 
QQ, 163 and anything self-hosted without registering an application anywhere.": 
"通过IMAP和SMTP收发邮件,Gmail、Outlook、QQ邮箱、163和自建邮箱都能用,不需要去任何平台注册应用。",
     "Reads the contact directory and calendars of a DingTalk organisation 
through your own self-built application.": "通过你自己的企业自建应用读取钉钉组织的通讯录和日程。",
     "Recipes and a plan for the week from the HowToCook cookbook: pick by 
ingredients, by how many people, or let it decide.": 
"来自《程序员做饭指南》的菜谱和一周搭配:按食材挑、按人数挑,或者让它替你决定。",
+    "Region": "区域",
     "Retesting": "正在测试{count}个连接,每个测完后它的工具清单会随之更新。",
     "Robot webhook URL": "群机器人Webhook地址",
     "Run any of Apify's scrapers and automations, so a page that needs a real 
browser and a proxy is somebody else's problem.": 
"调用Apify上的各种爬虫和自动化脚本,需要真实浏览器和代理才能抓的页面交给它们去处理。",
+    "Run gcloud auth application-default login first; this connector uses 
those credentials.": "先执行gcloud auth application-default login,这个连接器用的就是那份凭据。",
     "Run test": "测试",
     "Runs commands and edits files anywhere on this machine. Powerful enough 
to be worth being deliberate about: give it its own switches rather than 
leaving it open.": "在本机任意位置执行命令和编辑文件。能力很大,值得单独对待:给它逐个工具设开关,别整个放开。",
     "SMTP host": "SMTP服务器",
@@ -1042,6 +1054,7 @@
     "Search places, plan routes, check the weather and turn an address into 
coordinates, over Baidu's map data.": "基于百度地图数据搜索地点、规划路线、查询天气,以及把地址转成坐标。",
     "Searches Airbnb listings and reads one in detail: price, rules, reviews 
and what is nearby.": "搜索Airbnb房源并查看单个房源的详情:价格、入住规则、评价,以及周边有什么。",
     "Searches videos and pulls their subtitles, transcript, audio or the file 
itself, through yt-dlp. Needs yt-dlp installed on this machine.": 
"通过yt-dlp搜索视频,并取回字幕、文字稿、音频或视频本身。需要本机已安装yt-dlp。",
+    "Secret access key": "Secret Access Key",
     "Secret key": "密钥",
     "Sender address": "发件人地址",
     "Sends mail through Resend: a report at the end of a run, an alert, 
anything an agent should put in somebody's inbox rather than in a log.": 
"通过Resend发信:跑完一轮的报告、一条告警,以及任何该进别人收件箱而不是日志的内容。",
@@ -1049,6 +1062,7 @@
     "Sequential Thinking": "逐步思考",
     "Server-side AK": "服务端AK",
     "Settings, Developer settings, Personal access tokens. Grant the scopes 
you want the agent to have, and no more.": "在Settings→Developer 
settings→Personal access tokens生成,只勾选你愿意让Agent拥有的权限。",
+    "Start it with: rclone rcd --rc-user=<user> --rc-pass=<pass>": 
"用这条命令启动它:rclone rcd --rc-user=<用户名> --rc-pass=<密码>",
     "Start with a read-only user. The agent can do whatever this account 
can.": "先从只读账号开始。这个账号能做什么,Agent就能做什么。",
     "Storage": "网盘存储",
     "Taken out": "已移出",
@@ -1064,6 +1078,7 @@
     "The database this connection may reach. Point it at a replica or a 
read-only user first.": "这条连接能访问的数据库。建议先指向从库或只读账号。",
     "The same GitHub access, granted by signing in instead of pasting a token. 
The application is one you register yourself, so the grant and its audit trail 
stay in your own organisation.": 
"同样是访问GitHub,但通过登录授权而不是粘贴令牌。应用是你自己注册的,授权记录和审计轨迹都留在你自己的组织里。",
     "The same Lark access, granted by signing in rather than by handing over 
the application secret. What the agent may reach is what you may reach, not 
everything the app was approved for.": 
"同样是访问飞书,但通过登录授权而不是交出应用密钥。Agent能碰到的范围是「你」能碰到的范围,而不是这个应用被批准的全部权限。",
+    "The service's own address. For AWS itself, the regional S3 endpoint.": 
"存储服务自己的地址。用AWS的话,填对应区域的S3 endpoint。",
     "Tool count_other": "{{count}}个工具",
     "Turns data into a chart image: lines, bars, pies, maps and a couple of 
dozen more, without a plotting library in the project.": 
"把数据画成图:折线、柱状、饼图、地图等二十多种,项目里不用引入任何绘图库。",
     "Unverified": "未验证",


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to