You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@casbin.apache.org by hs...@apache.org on 2026/09/05 16:50:30 UTC

(casbin-gateway) branch master updated: feat(connections): add Slack, DingTalk, WeCom, mail, and Lark by sign-in

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


The following commit(s) were added to refs/heads/master by this push:
     new 8ee717e  feat(connections): add Slack, DingTalk, WeCom, mail, and Lark by sign-in
8ee717e is described below

commit 8ee717e89f2f96a2e921bba5dd02c3bc957516cf
Author: Yang Luo <hs...@gmail.com>
AuthorDate: Sun Sep 6 00:50:19 2026 +0800

    feat(connections): add Slack, DingTalk, WeCom, mail, and Lark by sign-in
---
 README.md                              |  2 +-
 README_zh.md                           |  2 +-
 connector/connectors/dingtalk.json     | 40 +++++++++++++++++++++
 connector/connectors/email.json        | 64 ++++++++++++++++++++++++++++++++++
 connector/connectors/feishu-oauth.json | 47 +++++++++++++++++++++++++
 connector/connectors/resend.json       | 40 +++++++++++++++++++++
 connector/connectors/slack.json        | 36 +++++++++++++++++++
 connector/connectors/wecom.json        | 33 ++++++++++++++++++
 8 files changed, 262 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 6afbed6..e1b22ff 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)** — 36 of them: GitHub, Notion, Lark, Figma, Sentry, Kubernetes, Stripe, 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)** — 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.
 
 ## Using it
 
diff --git a/README_zh.md b/README_zh.md
index 2886e74..8b988de 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)** —— 36 个:GitHub、Notion、飞书、Figma、Sentry、Kubernetes、Stripe、浏览器等。凭据留在 Gateway 而不是散在每个 Agent 的配置文件里,经过它的每次调用都会按该 Agent 的权限校验,测试一次还能得到每个工具的独立开关。
+- **[一次连接一个应用,所有 Agent 都能用](docs/user-manual/zh/2-agents/2.5-connections.md)** —— 42 个:GitHub、Slack、飞书、钉钉、Notion、Figma、Sentry、Kubernetes、Stripe、邮箱、浏览器等。凭据留在 Gateway 而不是散在每个 Agent 的配置文件里,经过它的每次调用都会按该 Agent 的权限校验,测试一次还能得到每个工具的独立开关。
 
 ## 使用
 
diff --git a/connector/connectors/dingtalk.json b/connector/connectors/dingtalk.json
new file mode 100644
index 0000000..d8fe0a7
--- /dev/null
+++ b/connector/connectors/dingtalk.json
@@ -0,0 +1,40 @@
+{
+  "id": "dingtalk",
+  "displayName": "DingTalk",
+  "category": "office",
+  "icon": "dingtalk.com",
+  "description": "Reads the contact directory and calendars of a DingTalk organisation through your own self-built application.",
+  "docsUrl": "https://github.com/wangyanmao/dingtalk-mcp",
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "clientId",
+        "label": "AppKey",
+        "help": "From your self-built app on the DingTalk open platform, where it is also called the Client ID.",
+        "required": true
+      },
+      {
+        "key": "clientSecret",
+        "label": "AppSecret",
+        "secret": true,
+        "required": true
+      }
+    ],
+    "registerUrl": "https://open-dev.dingtalk.com/"
+  },
+  "server": {
+    "name": "dingtalk",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "dingtalk-mcp"
+    ],
+    "env": {
+      "DINGTALK_Client_ID": "${clientId}",
+      "DINGTALK_Client_Secret": "${clientSecret}",
+      "ACTIVE_PROFILES": "dingtalk-contacts,dingtalk-calendar"
+    }
+  }
+}
diff --git a/connector/connectors/email.json b/connector/connectors/email.json
new file mode 100644
index 0000000..98913e8
--- /dev/null
+++ b/connector/connectors/email.json
@@ -0,0 +1,64 @@
+{
+  "id": "email",
+  "displayName": "Email",
+  "category": "mail",
+  "icon": "gnome.org",
+  "description": "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.",
+  "docsUrl": "https://github.com/Cactusinhand/mcp_server_email",
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "address",
+        "label": "Email address",
+        "placeholder": "you@example.com",
+        "required": true
+      },
+      {
+        "key": "password",
+        "label": "App password",
+        "help": "Not the password you sign in with: create an app password in your mail account's security settings.",
+        "secret": true,
+        "required": true
+      },
+      {
+        "key": "imapHost",
+        "label": "IMAP host",
+        "placeholder": "imap.example.com",
+        "help": "Only needed when the address alone is not enough to find the server."
+      },
+      {
+        "key": "imapPort",
+        "label": "IMAP port",
+        "placeholder": "993"
+      },
+      {
+        "key": "smtpHost",
+        "label": "SMTP host",
+        "placeholder": "smtp.example.com"
+      },
+      {
+        "key": "smtpPort",
+        "label": "SMTP port",
+        "placeholder": "465"
+      }
+    ]
+  },
+  "server": {
+    "name": "email",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "email-mcp-server"
+    ],
+    "env": {
+      "EMAIL_ADDRESS": "${address}",
+      "EMAIL_PASSWORD": "${password}",
+      "IMAP_HOST": "${imapHost}",
+      "IMAP_PORT": "${imapPort}",
+      "SMTP_HOST": "${smtpHost}",
+      "SMTP_PORT": "${smtpPort}"
+    }
+  }
+}
diff --git a/connector/connectors/feishu-oauth.json b/connector/connectors/feishu-oauth.json
new file mode 100644
index 0000000..e41c8ed
--- /dev/null
+++ b/connector/connectors/feishu-oauth.json
@@ -0,0 +1,47 @@
+{
+  "id": "feishu-oauth",
+  "displayName": "Lark (sign-in)",
+  "category": "office",
+  "icon": "feishu.cn",
+  "description": "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.",
+  "docsUrl": "https://open.feishu.cn/document/authentication-management/access-token/get-user-access-token",
+  "auth": {
+    "kind": "oauth2",
+    "fields": [
+      {
+        "key": "clientId",
+        "label": "App ID",
+        "placeholder": "cli_...",
+        "help": "From your own self-built app on the Lark open platform.",
+        "required": true
+      },
+      {
+        "key": "clientSecret",
+        "label": "App secret",
+        "secret": true,
+        "required": true
+      }
+    ],
+    "authorizeUrl": "https://open.feishu.cn/open-apis/authen/v1/authorize",
+    "tokenUrl": "https://open.feishu.cn/open-apis/authen/v2/oauth/token",
+    "registerUrl": "https://open.feishu.cn/app"
+  },
+  "server": {
+    "name": "feishu-oauth",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "@larksuiteoapi/lark-mcp",
+      "mcp",
+      "-a",
+      "${clientId}",
+      "-s",
+      "${clientSecret}",
+      "-u",
+      "${accessToken}",
+      "--token-mode",
+      "user_access_token"
+    ]
+  }
+}
diff --git a/connector/connectors/resend.json b/connector/connectors/resend.json
new file mode 100644
index 0000000..e859e3a
--- /dev/null
+++ b/connector/connectors/resend.json
@@ -0,0 +1,40 @@
+{
+  "id": "resend",
+  "displayName": "Resend",
+  "category": "mail",
+  "icon": "resend.com",
+  "description": "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.",
+  "docsUrl": "https://resend.com/docs/mcp-server",
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "apiKey",
+        "label": "API key",
+        "placeholder": "re_...",
+        "secret": true,
+        "required": true
+      },
+      {
+        "key": "sender",
+        "label": "Sender address",
+        "placeholder": "onboarding@resend.dev",
+        "help": "A verified address on your Resend account. Leave it blank to name one per message."
+      }
+    ],
+    "registerUrl": "https://resend.com/api-keys"
+  },
+  "server": {
+    "name": "resend",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "resend-mcp"
+    ],
+    "env": {
+      "RESEND_API_KEY": "${apiKey}",
+      "SENDER_EMAIL_ADDRESS": "${sender}"
+    }
+  }
+}
diff --git a/connector/connectors/slack.json b/connector/connectors/slack.json
new file mode 100644
index 0000000..a49ed12
--- /dev/null
+++ b/connector/connectors/slack.json
@@ -0,0 +1,36 @@
+{
+  "id": "slack",
+  "displayName": "Slack",
+  "category": "office",
+  "icon": "slack.com",
+  "description": "Read channels and threads, search the history and post messages in a Slack workspace.",
+  "docsUrl": "https://github.com/korotovsky/slack-mcp-server",
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "token",
+        "label": "User OAuth token",
+        "placeholder": "xoxp-...",
+        "help": "From a Slack app installed in the workspace, under OAuth & Permissions.",
+        "secret": true,
+        "required": true
+      }
+    ],
+    "registerUrl": "https://api.slack.com/apps"
+  },
+  "server": {
+    "name": "slack",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "slack-mcp-server@latest",
+      "--transport",
+      "stdio"
+    ],
+    "env": {
+      "SLACK_MCP_XOXP_TOKEN": "${token}"
+    }
+  }
+}
diff --git a/connector/connectors/wecom.json b/connector/connectors/wecom.json
new file mode 100644
index 0000000..8acc701
--- /dev/null
+++ b/connector/connectors/wecom.json
@@ -0,0 +1,33 @@
+{
+  "id": "wecom",
+  "displayName": "WeCom robot",
+  "category": "office",
+  "icon": "work.weixin.qq.com",
+  "description": "Posts messages into a WeCom group through its own robot webhook: a build result, an alert, a summary at the end of a run.",
+  "docsUrl": "https://github.com/gwoo1225/wecom-mcp",
+  "auth": {
+    "kind": "token",
+    "fields": [
+      {
+        "key": "webhookUrl",
+        "label": "Robot webhook URL",
+        "placeholder": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...",
+        "help": "Add a group robot in WeCom and copy the address it gives you.",
+        "secret": true,
+        "required": true
+      }
+    ]
+  },
+  "server": {
+    "name": "wecom",
+    "transport": "stdio",
+    "command": "npx",
+    "args": [
+      "-y",
+      "wecom-mcp"
+    ],
+    "env": {
+      "WECOM_WEBHOOK_URL": "${webhookUrl}"
+    }
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@casbin.apache.org
For additional commands, e-mail: commits-help@casbin.apache.org