@openhands/extensions 0.5.0 → 0.7.0
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/.github/workflows/pypi-publish.yml +104 -0
- package/.github/workflows/tests.yml +6 -0
- package/.release-please-manifest.json +1 -1
- package/AGENTS.md +1 -1
- package/README.md +34 -4
- package/integrations/README.md +25 -9
- package/integrations/catalog/airtable.json +16 -10
- package/integrations/catalog/apify.json +0 -2
- package/integrations/catalog/asana.json +33 -0
- package/integrations/catalog/atlassian.json +5 -8
- package/integrations/catalog/bitbucket.json +34 -0
- package/integrations/catalog/box.json +34 -0
- package/integrations/catalog/brave-search.json +1 -2
- package/integrations/catalog/browser-mcp.json +0 -3
- package/integrations/catalog/canva.json +31 -0
- package/integrations/catalog/clickhouse.json +1 -2
- package/integrations/catalog/cloudflare-bindings.json +5 -8
- package/integrations/catalog/cloudflare-browser-rendering.json +5 -8
- package/integrations/catalog/cloudflare-builds.json +6 -9
- package/integrations/catalog/cloudflare-docs.json +4 -7
- package/integrations/catalog/cloudflare-observability.json +5 -8
- package/integrations/catalog/confluence.json +33 -0
- package/integrations/catalog/datadog.json +34 -0
- package/integrations/catalog/deepwiki.json +3 -7
- package/integrations/catalog/discord.json +34 -0
- package/integrations/catalog/elevenlabs.json +27 -28
- package/integrations/catalog/everything.json +0 -2
- package/integrations/catalog/exa.json +0 -2
- package/integrations/catalog/fetch.json +0 -2
- package/integrations/catalog/figma.json +35 -9
- package/integrations/catalog/filesystem.json +0 -3
- package/integrations/catalog/firecrawl.json +0 -2
- package/integrations/catalog/git.json +0 -3
- package/integrations/catalog/github.json +34 -10
- package/integrations/catalog/gmail.json +33 -0
- package/integrations/catalog/google-calendar.json +33 -0
- package/integrations/catalog/google-docs.json +33 -0
- package/integrations/catalog/google-drive.json +33 -0
- package/integrations/catalog/google-sheets.json +33 -0
- package/integrations/catalog/hubspot.json +34 -0
- package/integrations/catalog/huggingface.json +1 -2
- package/integrations/catalog/intercom.json +34 -0
- package/integrations/catalog/jira.json +33 -0
- package/integrations/catalog/kagi.json +2 -3
- package/integrations/catalog/linear.json +24 -16
- package/integrations/catalog/memory.json +0 -2
- package/integrations/catalog/microsoft-outlook.json +33 -0
- package/integrations/catalog/microsoft-teams.json +33 -0
- package/integrations/catalog/miro.json +42 -0
- package/integrations/catalog/monday.json +42 -0
- package/integrations/catalog/mongodb.json +1 -2
- package/integrations/catalog/neon.json +0 -2
- package/integrations/catalog/netlify.json +33 -0
- package/integrations/catalog/notion.json +30 -10
- package/integrations/catalog/obsidian.json +1 -3
- package/integrations/catalog/okta.json +33 -0
- package/integrations/catalog/onedrive.json +33 -0
- package/integrations/catalog/ordinal.json +33 -0
- package/integrations/catalog/paypal.json +5 -8
- package/integrations/catalog/playwright.json +0 -2
- package/integrations/catalog/posthog.json +38 -0
- package/integrations/catalog/quickbooks.json +86 -0
- package/integrations/catalog/redis.json +1 -3
- package/integrations/catalog/resend.json +1 -2
- package/integrations/catalog/salesforce.json +44 -0
- package/integrations/catalog/sentry.json +47 -14
- package/integrations/catalog/sequential-thinking.json +0 -2
- package/integrations/catalog/sharepoint.json +33 -0
- package/integrations/catalog/slack.json +49 -10
- package/integrations/catalog/stripe.json +39 -14
- package/integrations/catalog/supabase.json +31 -9
- package/integrations/catalog/tavily.json +0 -2
- package/integrations/catalog/time.json +0 -2
- package/integrations/catalog/trello.json +34 -0
- package/integrations/catalog/vercel.json +33 -0
- package/integrations/catalog/webflow.json +34 -0
- package/integrations/catalog/xero.json +33 -0
- package/integrations/catalog/zoom.json +33 -0
- package/integrations/catalog-index.js +151 -0
- package/integrations/catalog.schema.json +255 -0
- package/integrations/index.d.ts +49 -69
- package/integrations/index.js +36 -206
- package/marketplaces/openhands-extensions.json +40 -2
- package/package.json +4 -7
- package/plugins/cobol-modernization/README.md +3 -3
- package/plugins/cobol-modernization/skills/{cobol-modernization-overview → cobol-modernization}/SKILL.md +1 -1
- package/plugins/magic-test/skills/magic-word/SKILL.md +1 -0
- package/plugins/migration-scoring/README.md +1 -1
- package/plugins/pr-review/scripts/prompt.py +1 -1
- package/pyproject.toml +18 -3
- package/python/openhands_extensions/__init__.py +24 -0
- package/python/openhands_extensions/_version.py +25 -0
- package/python/openhands_extensions/integrations.py +92 -0
- package/release-please-config.json +2 -1
- package/scripts/build-integration-catalog.mjs +45 -0
- package/skills/agent-canvas-environment/.plugin/plugin.json +19 -0
- package/skills/agent-canvas-environment/README.md +5 -0
- package/skills/agent-canvas-environment/SKILL.md +202 -0
- package/skills/bitbucket/README.md +23 -40
- package/skills/bitbucket/SKILL.md +43 -31
- package/skills/bitbucket-cloud/.plugin/plugin.json +18 -0
- package/skills/bitbucket-cloud/README.md +15 -0
- package/skills/bitbucket-cloud/SKILL.md +46 -0
- package/skills/bitbucket-data-center/.plugin/plugin.json +19 -0
- package/skills/bitbucket-data-center/README.md +20 -0
- package/skills/bitbucket-data-center/SKILL.md +53 -0
- package/skills/code-review/SKILL.md +1 -1
- package/skills/code-review/references/supply-chain-security.md +2 -2
- package/skills/github-pr-reviewer/references/state-schema.md +18 -4
- package/skills/github-pr-reviewer/scripts/main.py +66 -12
- package/skills/github-repo-monitor/references/state-schema.md +11 -4
- package/skills/github-repo-monitor/scripts/main.py +67 -19
- package/skills/github-repo-monitor/tests/test_main.py +67 -8
- package/skills/index.js +34 -8
- package/skills/openhands-api/README.md +5 -1
- package/skills/openhands-api/SKILL.md +74 -5
- package/skills/openhands-automation/SKILL.md +3 -1
- package/skills/openhands-automation/references/custom-automation.md +166 -0
- package/skills/openhands-sdk/SKILL.md +8 -3
- package/skills/slack-channel-monitor/README.md +3 -3
- package/skills/slack-channel-monitor/SKILL.md +3 -2
- package/skills/slack-channel-monitor/references/state-schema.md +11 -4
- package/skills/slack-channel-monitor/scripts/main.py +111 -41
- package/tests/test_catalog_schema.py +47 -0
- package/tests/test_catalogs.py +47 -3
- package/tests/test_integration_catalog_in_sync.py +252 -0
- package/tests/test_slack_channel_monitor.py +142 -0
- package/tests/test_version_alignment.py +64 -0
- package/integrations/logos.d.ts +0 -5
- package/integrations/logos.js +0 -94
- package/integrations/oauth-provider-catalog.js +0 -553
- package/integrations/oauth-provider-registration-defaults.js +0 -610
- /package/plugins/cobol-modernization/skills/{mainfraime-removal → mainframe-removal}/SKILL.md +0 -0
- /package/plugins/cobol-modernization/skills/{mainfraime-removal → mainframe-removal}/references/cics-transformation-examples.md +0 -0
- /package/plugins/migration-scoring/skills/{migration-scoring-overview → migration-scoring}/SKILL.md +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "zoom",
|
|
3
|
+
"name": "Zoom",
|
|
4
|
+
"description": "Meetings, recordings, webinars, and scheduling operations.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Meetings",
|
|
7
|
+
"Calendar"
|
|
8
|
+
],
|
|
9
|
+
"appUrl": "https://zoom.us",
|
|
10
|
+
"docsUrl": "https://developers.zoom.us/docs/integrations/oauth/",
|
|
11
|
+
"notes": "Frequently requested for scheduling and meeting summaries.",
|
|
12
|
+
"popularityRank": 31,
|
|
13
|
+
"connectionOptions": [
|
|
14
|
+
{
|
|
15
|
+
"id": "oauth",
|
|
16
|
+
"provider": "http",
|
|
17
|
+
"auth": {
|
|
18
|
+
"strategy": "oauth2",
|
|
19
|
+
"oauth": {
|
|
20
|
+
"authorizationUrl": "https://zoom.us/oauth/authorize",
|
|
21
|
+
"tokenUrl": "https://zoom.us/oauth/token",
|
|
22
|
+
"scopes": [
|
|
23
|
+
"meeting:read:user"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"http": {
|
|
28
|
+
"apiBaseUrl": "https://api.zoom.us/v2",
|
|
29
|
+
"openApiUrl": "https://api.apis.guru/v2/specs/zoom.us/2.0.0/openapi.json"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// This file is auto-generated by scripts/build-integration-catalog.mjs.
|
|
2
|
+
// Do not edit it manually. To update it after changing integrations/catalog/*.json,
|
|
3
|
+
// run: npm run build:integrations
|
|
4
|
+
|
|
5
|
+
import entry0 from "./catalog/github.json" with { type: "json" };
|
|
6
|
+
import entry1 from "./catalog/slack.json" with { type: "json" };
|
|
7
|
+
import entry2 from "./catalog/tavily.json" with { type: "json" };
|
|
8
|
+
import entry3 from "./catalog/linear.json" with { type: "json" };
|
|
9
|
+
import entry4 from "./catalog/notion.json" with { type: "json" };
|
|
10
|
+
import entry5 from "./catalog/ordinal.json" with { type: "json" };
|
|
11
|
+
import entry6 from "./catalog/elevenlabs.json" with { type: "json" };
|
|
12
|
+
import entry7 from "./catalog/bitbucket.json" with { type: "json" };
|
|
13
|
+
import entry8 from "./catalog/xero.json" with { type: "json" };
|
|
14
|
+
import entry9 from "./catalog/quickbooks.json" with { type: "json" };
|
|
15
|
+
import entry10 from "./catalog/okta.json" with { type: "json" };
|
|
16
|
+
import entry11 from "./catalog/netlify.json" with { type: "json" };
|
|
17
|
+
import entry12 from "./catalog/vercel.json" with { type: "json" };
|
|
18
|
+
import entry13 from "./catalog/supabase.json" with { type: "json" };
|
|
19
|
+
import entry14 from "./catalog/posthog.json" with { type: "json" };
|
|
20
|
+
import entry15 from "./catalog/sentry.json" with { type: "json" };
|
|
21
|
+
import entry16 from "./catalog/datadog.json" with { type: "json" };
|
|
22
|
+
import entry17 from "./catalog/canva.json" with { type: "json" };
|
|
23
|
+
import entry18 from "./catalog/miro.json" with { type: "json" };
|
|
24
|
+
import entry19 from "./catalog/webflow.json" with { type: "json" };
|
|
25
|
+
import entry20 from "./catalog/zoom.json" with { type: "json" };
|
|
26
|
+
import entry21 from "./catalog/discord.json" with { type: "json" };
|
|
27
|
+
import entry22 from "./catalog/stripe.json" with { type: "json" };
|
|
28
|
+
import entry23 from "./catalog/intercom.json" with { type: "json" };
|
|
29
|
+
import entry24 from "./catalog/hubspot.json" with { type: "json" };
|
|
30
|
+
import entry25 from "./catalog/salesforce.json" with { type: "json" };
|
|
31
|
+
import entry26 from "./catalog/sharepoint.json" with { type: "json" };
|
|
32
|
+
import entry27 from "./catalog/onedrive.json" with { type: "json" };
|
|
33
|
+
import entry28 from "./catalog/microsoft-teams.json" with { type: "json" };
|
|
34
|
+
import entry29 from "./catalog/microsoft-outlook.json" with { type: "json" };
|
|
35
|
+
import entry30 from "./catalog/box.json" with { type: "json" };
|
|
36
|
+
import entry31 from "./catalog/airtable.json" with { type: "json" };
|
|
37
|
+
import entry32 from "./catalog/monday.json" with { type: "json" };
|
|
38
|
+
import entry33 from "./catalog/trello.json" with { type: "json" };
|
|
39
|
+
import entry34 from "./catalog/asana.json" with { type: "json" };
|
|
40
|
+
import entry35 from "./catalog/confluence.json" with { type: "json" };
|
|
41
|
+
import entry36 from "./catalog/jira.json" with { type: "json" };
|
|
42
|
+
import entry37 from "./catalog/google-calendar.json" with { type: "json" };
|
|
43
|
+
import entry38 from "./catalog/gmail.json" with { type: "json" };
|
|
44
|
+
import entry39 from "./catalog/google-sheets.json" with { type: "json" };
|
|
45
|
+
import entry40 from "./catalog/google-drive.json" with { type: "json" };
|
|
46
|
+
import entry41 from "./catalog/figma.json" with { type: "json" };
|
|
47
|
+
import entry42 from "./catalog/google-docs.json" with { type: "json" };
|
|
48
|
+
import entry43 from "./catalog/apify.json" with { type: "json" };
|
|
49
|
+
import entry44 from "./catalog/atlassian.json" with { type: "json" };
|
|
50
|
+
import entry45 from "./catalog/brave-search.json" with { type: "json" };
|
|
51
|
+
import entry46 from "./catalog/browser-mcp.json" with { type: "json" };
|
|
52
|
+
import entry47 from "./catalog/clickhouse.json" with { type: "json" };
|
|
53
|
+
import entry48 from "./catalog/cloudflare-bindings.json" with { type: "json" };
|
|
54
|
+
import entry49 from "./catalog/cloudflare-browser-rendering.json" with { type: "json" };
|
|
55
|
+
import entry50 from "./catalog/cloudflare-builds.json" with { type: "json" };
|
|
56
|
+
import entry51 from "./catalog/cloudflare-docs.json" with { type: "json" };
|
|
57
|
+
import entry52 from "./catalog/cloudflare-observability.json" with { type: "json" };
|
|
58
|
+
import entry53 from "./catalog/deepwiki.json" with { type: "json" };
|
|
59
|
+
import entry54 from "./catalog/everything.json" with { type: "json" };
|
|
60
|
+
import entry55 from "./catalog/exa.json" with { type: "json" };
|
|
61
|
+
import entry56 from "./catalog/fetch.json" with { type: "json" };
|
|
62
|
+
import entry57 from "./catalog/filesystem.json" with { type: "json" };
|
|
63
|
+
import entry58 from "./catalog/firecrawl.json" with { type: "json" };
|
|
64
|
+
import entry59 from "./catalog/git.json" with { type: "json" };
|
|
65
|
+
import entry60 from "./catalog/huggingface.json" with { type: "json" };
|
|
66
|
+
import entry61 from "./catalog/kagi.json" with { type: "json" };
|
|
67
|
+
import entry62 from "./catalog/memory.json" with { type: "json" };
|
|
68
|
+
import entry63 from "./catalog/mongodb.json" with { type: "json" };
|
|
69
|
+
import entry64 from "./catalog/neon.json" with { type: "json" };
|
|
70
|
+
import entry65 from "./catalog/obsidian.json" with { type: "json" };
|
|
71
|
+
import entry66 from "./catalog/paypal.json" with { type: "json" };
|
|
72
|
+
import entry67 from "./catalog/playwright.json" with { type: "json" };
|
|
73
|
+
import entry68 from "./catalog/redis.json" with { type: "json" };
|
|
74
|
+
import entry69 from "./catalog/resend.json" with { type: "json" };
|
|
75
|
+
import entry70 from "./catalog/sequential-thinking.json" with { type: "json" };
|
|
76
|
+
import entry71 from "./catalog/time.json" with { type: "json" };
|
|
77
|
+
|
|
78
|
+
export const INTEGRATION_CATALOG_ENTRIES = [
|
|
79
|
+
entry0,
|
|
80
|
+
entry1,
|
|
81
|
+
entry2,
|
|
82
|
+
entry3,
|
|
83
|
+
entry4,
|
|
84
|
+
entry5,
|
|
85
|
+
entry6,
|
|
86
|
+
entry7,
|
|
87
|
+
entry8,
|
|
88
|
+
entry9,
|
|
89
|
+
entry10,
|
|
90
|
+
entry11,
|
|
91
|
+
entry12,
|
|
92
|
+
entry13,
|
|
93
|
+
entry14,
|
|
94
|
+
entry15,
|
|
95
|
+
entry16,
|
|
96
|
+
entry17,
|
|
97
|
+
entry18,
|
|
98
|
+
entry19,
|
|
99
|
+
entry20,
|
|
100
|
+
entry21,
|
|
101
|
+
entry22,
|
|
102
|
+
entry23,
|
|
103
|
+
entry24,
|
|
104
|
+
entry25,
|
|
105
|
+
entry26,
|
|
106
|
+
entry27,
|
|
107
|
+
entry28,
|
|
108
|
+
entry29,
|
|
109
|
+
entry30,
|
|
110
|
+
entry31,
|
|
111
|
+
entry32,
|
|
112
|
+
entry33,
|
|
113
|
+
entry34,
|
|
114
|
+
entry35,
|
|
115
|
+
entry36,
|
|
116
|
+
entry37,
|
|
117
|
+
entry38,
|
|
118
|
+
entry39,
|
|
119
|
+
entry40,
|
|
120
|
+
entry41,
|
|
121
|
+
entry42,
|
|
122
|
+
entry43,
|
|
123
|
+
entry44,
|
|
124
|
+
entry45,
|
|
125
|
+
entry46,
|
|
126
|
+
entry47,
|
|
127
|
+
entry48,
|
|
128
|
+
entry49,
|
|
129
|
+
entry50,
|
|
130
|
+
entry51,
|
|
131
|
+
entry52,
|
|
132
|
+
entry53,
|
|
133
|
+
entry54,
|
|
134
|
+
entry55,
|
|
135
|
+
entry56,
|
|
136
|
+
entry57,
|
|
137
|
+
entry58,
|
|
138
|
+
entry59,
|
|
139
|
+
entry60,
|
|
140
|
+
entry61,
|
|
141
|
+
entry62,
|
|
142
|
+
entry63,
|
|
143
|
+
entry64,
|
|
144
|
+
entry65,
|
|
145
|
+
entry66,
|
|
146
|
+
entry67,
|
|
147
|
+
entry68,
|
|
148
|
+
entry69,
|
|
149
|
+
entry70,
|
|
150
|
+
entry71,
|
|
151
|
+
];
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/OpenHands/extensions/integrations/catalog.schema.json",
|
|
4
|
+
"title": "IntegrationCatalogEntry",
|
|
5
|
+
"description": "Strict schema for integrations/catalog/*.json. Mirrors integrations/index.d.ts and encodes the cross-field connectability rules the catalog contract depends on.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["id", "name", "description", "connectionOptions"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": { "type": "string", "minLength": 1 },
|
|
11
|
+
"name": { "type": "string", "minLength": 1 },
|
|
12
|
+
"description": { "type": "string", "minLength": 1 },
|
|
13
|
+
"categories": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"minItems": 1,
|
|
16
|
+
"items": { "type": "string", "minLength": 1 },
|
|
17
|
+
"uniqueItems": true
|
|
18
|
+
},
|
|
19
|
+
"appUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
20
|
+
"docsUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
21
|
+
"notes": { "type": "string", "minLength": 1 },
|
|
22
|
+
"iconBg": { "type": "string", "minLength": 1 },
|
|
23
|
+
"iconColor": { "type": "string", "minLength": 1 },
|
|
24
|
+
"logoUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
25
|
+
"keywords": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"items": { "type": "string", "minLength": 1 },
|
|
28
|
+
"uniqueItems": true
|
|
29
|
+
},
|
|
30
|
+
"popularityRank": { "type": "integer", "minimum": 0 },
|
|
31
|
+
"installHint": { "type": "string", "minLength": 1 },
|
|
32
|
+
"connectionOptions": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"minItems": 1,
|
|
35
|
+
"items": { "$ref": "#/$defs/connectionOption" }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"$defs": {
|
|
39
|
+
"marketplaceField": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["key", "label"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"key": { "type": "string", "minLength": 1 },
|
|
45
|
+
"label": { "type": "string", "minLength": 1 },
|
|
46
|
+
"type": { "enum": ["text", "password"] },
|
|
47
|
+
"placeholder": { "type": "string" },
|
|
48
|
+
"helperText": { "type": "string" },
|
|
49
|
+
"helperLink": { "type": "string", "pattern": "^https://" },
|
|
50
|
+
"required": { "type": "boolean" }
|
|
51
|
+
},
|
|
52
|
+
"allOf": [
|
|
53
|
+
{
|
|
54
|
+
"if": { "properties": { "type": { "const": "password" } } },
|
|
55
|
+
"then": {
|
|
56
|
+
"required": ["helperText"],
|
|
57
|
+
"properties": { "helperText": { "minLength": 1 } }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"oauthConfig": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": false,
|
|
65
|
+
"properties": {
|
|
66
|
+
"authorizationUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
67
|
+
"tokenUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
68
|
+
"scopes": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": { "type": "string", "minLength": 1 }
|
|
71
|
+
},
|
|
72
|
+
"optionalScopes": {
|
|
73
|
+
"type": "array",
|
|
74
|
+
"items": { "type": "string", "minLength": 1 }
|
|
75
|
+
},
|
|
76
|
+
"toolScopes": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": { "type": "string", "minLength": 1 }
|
|
79
|
+
},
|
|
80
|
+
"scopeSeparator": { "enum": ["space", "comma"] },
|
|
81
|
+
"pkce": { "type": "boolean" },
|
|
82
|
+
"clientAuthentication": { "enum": ["basic", "body", "none"] },
|
|
83
|
+
"registrationUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
84
|
+
"additionalAuthorizationParams": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": { "type": "string" }
|
|
87
|
+
},
|
|
88
|
+
"additionalTokenParams": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"additionalProperties": { "type": "string" }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"authConfig": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": false,
|
|
97
|
+
"required": ["strategy"],
|
|
98
|
+
"properties": {
|
|
99
|
+
"strategy": { "enum": ["none", "api_key", "bearer", "basic", "oauth2"] },
|
|
100
|
+
"authModes": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": { "enum": ["none", "api_key", "bearer", "basic", "oauth2"] },
|
|
103
|
+
"minItems": 1
|
|
104
|
+
},
|
|
105
|
+
"credentialLabel": { "type": "string", "minLength": 1 },
|
|
106
|
+
"credentialPlaceholder": { "type": "string", "minLength": 1 },
|
|
107
|
+
"credentialHelp": { "type": "string", "minLength": 1 },
|
|
108
|
+
"credentialSecretName": { "type": "string", "minLength": 1 },
|
|
109
|
+
"saveCredentialAsSecretByDefault": { "type": "boolean" },
|
|
110
|
+
"apiKeyHeaderName": { "type": "string", "minLength": 1 },
|
|
111
|
+
"apiKeyOptional": { "type": "boolean" },
|
|
112
|
+
"oauth": { "$ref": "#/$defs/oauthConfig" }
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"httpConfig": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"properties": {
|
|
119
|
+
"apiBaseUrl": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
120
|
+
"openApiUrl": { "type": "string", "pattern": "^https://", "minLength": 8 }
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"transport": {
|
|
124
|
+
"oneOf": [
|
|
125
|
+
{
|
|
126
|
+
"type": "object",
|
|
127
|
+
"additionalProperties": false,
|
|
128
|
+
"required": ["kind", "url"],
|
|
129
|
+
"properties": {
|
|
130
|
+
"kind": { "const": "shttp" },
|
|
131
|
+
"url": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
132
|
+
"apiKeyOptional": { "type": "boolean" },
|
|
133
|
+
"headerFields": {
|
|
134
|
+
"type": "array",
|
|
135
|
+
"items": { "$ref": "#/$defs/marketplaceField" }
|
|
136
|
+
},
|
|
137
|
+
"urlEditable": { "type": "boolean" }
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"type": "object",
|
|
142
|
+
"additionalProperties": false,
|
|
143
|
+
"required": ["kind", "url"],
|
|
144
|
+
"properties": {
|
|
145
|
+
"kind": { "const": "sse" },
|
|
146
|
+
"url": { "type": "string", "pattern": "^https://", "minLength": 8 },
|
|
147
|
+
"apiKeyOptional": { "type": "boolean" },
|
|
148
|
+
"headerFields": {
|
|
149
|
+
"type": "array",
|
|
150
|
+
"items": { "$ref": "#/$defs/marketplaceField" }
|
|
151
|
+
},
|
|
152
|
+
"urlEditable": { "type": "boolean" }
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"type": "object",
|
|
157
|
+
"additionalProperties": false,
|
|
158
|
+
"required": ["kind", "serverName", "command", "args"],
|
|
159
|
+
"properties": {
|
|
160
|
+
"kind": { "const": "stdio" },
|
|
161
|
+
"serverName": { "type": "string", "minLength": 1 },
|
|
162
|
+
"command": { "type": "string", "minLength": 1 },
|
|
163
|
+
"args": {
|
|
164
|
+
"type": "array",
|
|
165
|
+
"items": { "type": "string" },
|
|
166
|
+
"minItems": 0
|
|
167
|
+
},
|
|
168
|
+
"envFields": {
|
|
169
|
+
"type": "array",
|
|
170
|
+
"items": { "$ref": "#/$defs/marketplaceField" }
|
|
171
|
+
},
|
|
172
|
+
"argFields": {
|
|
173
|
+
"type": "array",
|
|
174
|
+
"items": { "$ref": "#/$defs/marketplaceField" }
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
"connectionOption": {
|
|
181
|
+
"type": "object",
|
|
182
|
+
"additionalProperties": false,
|
|
183
|
+
"required": ["id", "provider", "auth"],
|
|
184
|
+
"properties": {
|
|
185
|
+
"id": { "type": "string", "minLength": 1 },
|
|
186
|
+
"provider": { "enum": ["mcp", "http"] },
|
|
187
|
+
"transport": { "$ref": "#/$defs/transport" },
|
|
188
|
+
"http": { "$ref": "#/$defs/httpConfig" },
|
|
189
|
+
"auth": { "$ref": "#/$defs/authConfig" }
|
|
190
|
+
},
|
|
191
|
+
"allOf": [
|
|
192
|
+
{
|
|
193
|
+
"if": { "properties": { "provider": { "const": "mcp" } } },
|
|
194
|
+
"then": {
|
|
195
|
+
"required": ["transport"],
|
|
196
|
+
"not": { "required": ["http"] }
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"if": { "properties": { "provider": { "const": "http" } } },
|
|
201
|
+
"then": {
|
|
202
|
+
"required": ["http"],
|
|
203
|
+
"not": { "required": ["transport"] },
|
|
204
|
+
"properties": {
|
|
205
|
+
"http": {
|
|
206
|
+
"required": ["apiBaseUrl", "openApiUrl"],
|
|
207
|
+
"properties": {
|
|
208
|
+
"apiBaseUrl": { "type": "string", "minLength": 8 },
|
|
209
|
+
"openApiUrl": { "type": "string", "minLength": 8 }
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"if": {
|
|
217
|
+
"properties": {
|
|
218
|
+
"provider": { "const": "http" },
|
|
219
|
+
"auth": { "properties": { "strategy": { "const": "api_key" } } }
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
"then": {
|
|
223
|
+
"properties": {
|
|
224
|
+
"auth": { "required": ["apiKeyHeaderName"] }
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"if": {
|
|
230
|
+
"properties": {
|
|
231
|
+
"provider": { "const": "http" },
|
|
232
|
+
"auth": { "properties": { "strategy": { "const": "oauth2" } } }
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"then": {
|
|
236
|
+
"properties": {
|
|
237
|
+
"auth": {
|
|
238
|
+
"required": ["oauth"],
|
|
239
|
+
"properties": {
|
|
240
|
+
"oauth": {
|
|
241
|
+
"required": ["authorizationUrl", "tokenUrl"],
|
|
242
|
+
"properties": {
|
|
243
|
+
"authorizationUrl": { "type": "string", "minLength": 8 },
|
|
244
|
+
"tokenUrl": { "type": "string", "minLength": 8 }
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
package/integrations/index.d.ts
CHANGED
|
@@ -15,11 +15,35 @@ export type IntegrationTransport =
|
|
|
15
15
|
kind: "shttp";
|
|
16
16
|
url: string;
|
|
17
17
|
apiKeyOptional?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Named request headers the user must supply (e.g. Datadog's
|
|
20
|
+
* `DD-API-KEY` / `DD-APPLICATION-KEY`). Values are sent verbatim as
|
|
21
|
+
* headers on every MCP request. The direct analog of stdio's
|
|
22
|
+
* `envFields`: each entry renders one input in the install modal,
|
|
23
|
+
* `type: "password"` entries are secret-saved by default, and
|
|
24
|
+
* `required` entries are validated before submit. Composes with the
|
|
25
|
+
* `api_key`/`bearer`/`basic` auth strategies (whose Bearer token is
|
|
26
|
+
* folded into `Authorization` separately); a header field with
|
|
27
|
+
* `key: "Authorization"` is redundant and should be avoided.
|
|
28
|
+
*/
|
|
29
|
+
headerFields?: MarketplaceField[];
|
|
30
|
+
/**
|
|
31
|
+
* When true, the install modal renders the URL as an editable input
|
|
32
|
+
* pre-filled with `url` instead of read-only. Use for servers whose
|
|
33
|
+
* host is region/account-specific (e.g. Datadog's
|
|
34
|
+
* `https://mcp.<site>.datadoghq.com/v1/mcp`); pair with the entry's
|
|
35
|
+
* `installHint` to tell users what to change.
|
|
36
|
+
*/
|
|
37
|
+
urlEditable?: boolean;
|
|
18
38
|
}
|
|
19
39
|
| {
|
|
20
40
|
kind: "sse";
|
|
21
41
|
url: string;
|
|
22
42
|
apiKeyOptional?: boolean;
|
|
43
|
+
/** See {@link IntegrationTransport} `shttp` `headerFields`. */
|
|
44
|
+
headerFields?: MarketplaceField[];
|
|
45
|
+
/** See {@link IntegrationTransport} `shttp` `urlEditable`. */
|
|
46
|
+
urlEditable?: boolean;
|
|
23
47
|
}
|
|
24
48
|
| {
|
|
25
49
|
kind: "stdio";
|
|
@@ -66,18 +90,9 @@ export interface IntegrationAuthConfig {
|
|
|
66
90
|
oauth?: IntegrationOAuthConfig;
|
|
67
91
|
}
|
|
68
92
|
|
|
69
|
-
export interface IntegrationHttpDefaultTool {
|
|
70
|
-
name: string;
|
|
71
|
-
description?: string;
|
|
72
|
-
method?: string;
|
|
73
|
-
path?: string;
|
|
74
|
-
scopes?: string[];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
93
|
export interface IntegrationHttpConfig {
|
|
78
94
|
apiBaseUrl?: string;
|
|
79
95
|
openApiUrl?: string;
|
|
80
|
-
defaultTool?: IntegrationHttpDefaultTool;
|
|
81
96
|
}
|
|
82
97
|
|
|
83
98
|
export interface IntegrationConnectionOption {
|
|
@@ -88,52 +103,9 @@ export interface IntegrationConnectionOption {
|
|
|
88
103
|
auth: IntegrationAuthConfig;
|
|
89
104
|
}
|
|
90
105
|
|
|
91
|
-
export interface OAuthProviderRegistrationDefaults {
|
|
92
|
-
provider?: IntegrationProvider;
|
|
93
|
-
authModes?: IntegrationAuthStrategy[];
|
|
94
|
-
authStrategy?: IntegrationAuthStrategy;
|
|
95
|
-
credentialLabel?: string;
|
|
96
|
-
credentialPlaceholder?: string;
|
|
97
|
-
credentialHelp?: string;
|
|
98
|
-
apiKeyHeaderName?: string;
|
|
99
|
-
apiBaseUrl?: string;
|
|
100
|
-
serverUrl?: string;
|
|
101
|
-
openApiUrl?: string;
|
|
102
|
-
authorizationUrl?: string;
|
|
103
|
-
tokenUrl?: string;
|
|
104
|
-
scopes?: string[];
|
|
105
|
-
optionalScopes?: string[];
|
|
106
|
-
toolScopes?: string[];
|
|
107
|
-
scopeSeparator?: "space" | "comma";
|
|
108
|
-
pkce?: boolean;
|
|
109
|
-
clientAuthentication?: "basic" | "body" | "none";
|
|
110
|
-
registrationUrl?: string;
|
|
111
|
-
additionalAuthorizationParams?: Record<string, string>;
|
|
112
|
-
additionalTokenParams?: Record<string, string>;
|
|
113
|
-
toolName?: string;
|
|
114
|
-
toolDescription?: string;
|
|
115
|
-
requestMethod?: string;
|
|
116
|
-
requestPath?: string;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export interface OAuthProviderCatalogOption {
|
|
120
|
-
slug: string;
|
|
121
|
-
name: string;
|
|
122
|
-
description: string;
|
|
123
|
-
categories: string[];
|
|
124
|
-
authStrategy: IntegrationAuthStrategy;
|
|
125
|
-
availability: "oauth_ready" | "manual_token" | "planned";
|
|
126
|
-
managedConnectorSlug?: string;
|
|
127
|
-
appUrl?: string;
|
|
128
|
-
docsUrl?: string;
|
|
129
|
-
notes: string;
|
|
130
|
-
popularityRank: number;
|
|
131
|
-
registrationDefaults?: OAuthProviderRegistrationDefaults;
|
|
132
|
-
}
|
|
133
106
|
|
|
134
107
|
export interface IntegrationCatalogEntry {
|
|
135
108
|
id: string;
|
|
136
|
-
kind: IntegrationProvider;
|
|
137
109
|
name: string;
|
|
138
110
|
description: string;
|
|
139
111
|
categories?: string[];
|
|
@@ -142,28 +114,36 @@ export interface IntegrationCatalogEntry {
|
|
|
142
114
|
notes?: string;
|
|
143
115
|
iconBg?: string;
|
|
144
116
|
iconColor?: string;
|
|
117
|
+
logoUrl?: string;
|
|
145
118
|
keywords?: string[];
|
|
146
119
|
popularityRank?: number;
|
|
147
|
-
runtimeAvailability?: "all" | "local";
|
|
148
|
-
catalogStatus?: "oauth_ready" | "manual_token" | "planned";
|
|
149
|
-
managedConnectorSlug?: string;
|
|
150
|
-
authStrategy?: IntegrationAuthStrategy;
|
|
151
120
|
installHint?: string;
|
|
152
|
-
defaultConnectionOptionId?: string;
|
|
153
121
|
connectionOptions: IntegrationConnectionOption[];
|
|
154
|
-
registrationDefaults?: OAuthProviderRegistrationDefaults;
|
|
155
122
|
}
|
|
156
123
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Filter for {@link listIntegrationCatalog}. Each dimension is tri-state:
|
|
126
|
+
* `true` keeps only entries that support that connector type, `false` keeps
|
|
127
|
+
* only entries that do not, and `undefined` leaves that dimension unfiltered.
|
|
128
|
+
*/
|
|
129
|
+
export interface IntegrationCatalogFilter {
|
|
130
|
+
/** Filter on whether the entry exposes at least one `mcp` connector. */
|
|
131
|
+
mcp?: boolean;
|
|
132
|
+
/** Filter on whether the entry exposes at least one `oauth2` connector. */
|
|
133
|
+
oauth?: boolean;
|
|
134
|
+
}
|
|
168
135
|
|
|
136
|
+
export const INTEGRATION_CATALOG: IntegrationCatalogEntry[];
|
|
137
|
+
/**
|
|
138
|
+
* Return the full integration catalog, optionally filtered by connector type.
|
|
139
|
+
* Reads the generated static import index over `integrations/catalog/<id>.json`.
|
|
140
|
+
* Returns an independent copy, matching the Python read API.
|
|
141
|
+
*/
|
|
142
|
+
export function listIntegrationCatalog(
|
|
143
|
+
filter?: IntegrationCatalogFilter,
|
|
144
|
+
): IntegrationCatalogEntry[];
|
|
145
|
+
/** Return one integration catalog entry by id as an independent copy. */
|
|
146
|
+
export function getIntegrationCatalogEntry(
|
|
147
|
+
id: string,
|
|
148
|
+
): IntegrationCatalogEntry | undefined;
|
|
169
149
|
export default INTEGRATION_CATALOG;
|