@kadoa/mcp 0.5.13 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/index.js +16 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,16 +24,17 @@ claude mcp add kadoa --transport http https://mcp.kadoa.com/mcp
|
|
|
24
24
|
2. Enter the URL: `https://mcp.kadoa.com/mcp`
|
|
25
25
|
3. Sign in with your Kadoa account via OAuth
|
|
26
26
|
|
|
27
|
-
### Claude
|
|
27
|
+
### Claude service connector
|
|
28
28
|
|
|
29
|
-
A Kadoa workspace admin can generate
|
|
29
|
+
A Kadoa workspace admin can generate service connector credentials under **Workspace settings → MCP connector**. The generated OAuth client is fixed to that workspace's service account.
|
|
30
30
|
|
|
31
31
|
1. In Kadoa, select **Generate credentials** and copy the MCP URL, OAuth Client ID, and OAuth Client Secret. The secret is shown once.
|
|
32
32
|
2. In Claude organization **Admin settings → Connectors**, select **Add custom connector**.
|
|
33
|
-
3. Enter `https://mcp.kadoa.com/mcp` and paste the generated OAuth Client ID/Secret under Advanced settings.
|
|
34
|
-
4.
|
|
33
|
+
3. Enter `https://service.mcp.kadoa.com/mcp` and paste the generated OAuth Client ID/Secret under Advanced settings.
|
|
34
|
+
4. In the connector's tool settings, allow only the tools that organization members should use.
|
|
35
|
+
5. Organization members find the custom connector under **Settings → Connectors** and select **Connect**.
|
|
35
36
|
|
|
36
|
-
Members do not need Kadoa accounts. All actions are attributed to the shared Kadoa service account, and team switching is unavailable. To rotate access, rotate the secret in Kadoa, replace it in Claude, and reconnect. Revoking the connector stops access immediately.
|
|
37
|
+
The service connector uses a separate hostname from the personal connector at `https://mcp.kadoa.com/mcp`, so Claude users can configure both. Members do not need Kadoa accounts. All actions are attributed to the shared Kadoa service account, and team switching is unavailable. To rotate access, rotate the secret in Kadoa, replace it in Claude, and reconnect. Revoking the connector stops access immediately.
|
|
37
38
|
|
|
38
39
|
Do not paste a Kadoa workspace API key into Claude.
|
|
39
40
|
|
package/dist/index.js
CHANGED
|
@@ -53662,7 +53662,7 @@ var package_default;
|
|
|
53662
53662
|
var init_package = __esm(() => {
|
|
53663
53663
|
package_default = {
|
|
53664
53664
|
name: "@kadoa/mcp",
|
|
53665
|
-
version: "0.5.
|
|
53665
|
+
version: "0.5.14",
|
|
53666
53666
|
description: "Kadoa MCP Server — manage workflows from Claude Desktop, Cursor, and other MCP clients",
|
|
53667
53667
|
type: "module",
|
|
53668
53668
|
main: "dist/index.js",
|
|
@@ -57695,6 +57695,15 @@ var init_bearerAuth = __esm(() => {
|
|
|
57695
57695
|
init_errors4();
|
|
57696
57696
|
});
|
|
57697
57697
|
|
|
57698
|
+
// src/managed-connector-client.ts
|
|
57699
|
+
function isManagedConnectorClientId(clientId) {
|
|
57700
|
+
return MANAGED_CONNECTOR_CLIENT_ID_PREFIXES.some((prefix) => clientId.startsWith(prefix));
|
|
57701
|
+
}
|
|
57702
|
+
var MANAGED_CONNECTOR_CLIENT_ID_PREFIXES;
|
|
57703
|
+
var init_managed_connector_client = __esm(() => {
|
|
57704
|
+
MANAGED_CONNECTOR_CLIENT_ID_PREFIXES = ["kadoa_mcp_", "kadoa_claude_"];
|
|
57705
|
+
});
|
|
57706
|
+
|
|
57698
57707
|
// src/managed-connector-registry.ts
|
|
57699
57708
|
class ManagedConnectorRegistry {
|
|
57700
57709
|
baseUrl;
|
|
@@ -57894,7 +57903,7 @@ class KadoaOAuthProvider {
|
|
|
57894
57903
|
const thisProvider = this;
|
|
57895
57904
|
return {
|
|
57896
57905
|
async getClient(clientId) {
|
|
57897
|
-
if (clientId
|
|
57906
|
+
if (isManagedConnectorClientId(clientId)) {
|
|
57898
57907
|
const connector = await thisProvider.getManagedRegistry().get(clientId);
|
|
57899
57908
|
if (!connector)
|
|
57900
57909
|
return;
|
|
@@ -58834,6 +58843,7 @@ function escapeHtml(str) {
|
|
|
58834
58843
|
var TEAM_SELECTION_TTL, ACCESS_TOKEN_TTL;
|
|
58835
58844
|
var init_auth2 = __esm(() => {
|
|
58836
58845
|
init_errors4();
|
|
58846
|
+
init_managed_connector_client();
|
|
58837
58847
|
init_managed_connector_registry();
|
|
58838
58848
|
TEAM_SELECTION_TTL = 10 * 60 * 1000;
|
|
58839
58849
|
ACCESS_TOKEN_TTL = 7 * 24 * 3600;
|
|
@@ -58954,7 +58964,7 @@ function managedTokenHandler(options) {
|
|
|
58954
58964
|
return async (req, res, next) => {
|
|
58955
58965
|
const body = req.body ?? {};
|
|
58956
58966
|
const clientId = typeof body.client_id === "string" ? body.client_id : "";
|
|
58957
|
-
if (!clientId
|
|
58967
|
+
if (!isManagedConnectorClientId(clientId)) {
|
|
58958
58968
|
next();
|
|
58959
58969
|
return;
|
|
58960
58970
|
}
|
|
@@ -59001,6 +59011,7 @@ function managedTokenHandler(options) {
|
|
|
59001
59011
|
}
|
|
59002
59012
|
var init_managed_token_handler = __esm(() => {
|
|
59003
59013
|
init_errors4();
|
|
59014
|
+
init_managed_connector_client();
|
|
59004
59015
|
init_managed_connector_registry();
|
|
59005
59016
|
});
|
|
59006
59017
|
|
|
@@ -59064,7 +59075,7 @@ async function startHttpServer(options) {
|
|
|
59064
59075
|
limit: 50,
|
|
59065
59076
|
standardHeaders: true,
|
|
59066
59077
|
legacyHeaders: false,
|
|
59067
|
-
skip: (req) => !String(req.body?.client_id ?? "")
|
|
59078
|
+
skip: (req) => !isManagedConnectorClientId(String(req.body?.client_id ?? "")),
|
|
59068
59079
|
message: {
|
|
59069
59080
|
error: "too_many_requests",
|
|
59070
59081
|
error_description: "Too many managed connector token requests"
|
|
@@ -59229,6 +59240,7 @@ var init_http2 = __esm(async () => {
|
|
|
59229
59240
|
init_auth2();
|
|
59230
59241
|
init_redis_store();
|
|
59231
59242
|
init_client2();
|
|
59243
|
+
init_managed_connector_client();
|
|
59232
59244
|
init_managed_connector_registry();
|
|
59233
59245
|
init_managed_token_handler();
|
|
59234
59246
|
await init_src();
|