@openhands/extensions 0.8.0 → 0.10.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/deprecation-check.yml +25 -0
- package/.release-please-manifest.json +1 -1
- package/README.md +3 -2
- package/automations/catalog/jira-issue-to-pr.json +14 -0
- package/automations/index.js +2 -0
- package/integrations/README.md +25 -0
- package/integrations/catalog/atlassian.json +91 -3
- package/integrations/catalog/datadog.json +33 -2
- package/integrations/catalog/github.json +20 -0
- package/integrations/catalog/microsoft-outlook.json +13 -0
- package/integrations/catalog/microsoft-teams.json +13 -0
- package/integrations/catalog/notion.json +13 -0
- package/integrations/catalog/onedrive.json +13 -0
- package/integrations/catalog/sharepoint.json +13 -0
- package/integrations/catalog/slack.json +14 -0
- package/integrations/catalog/superhuman-mail.json +36 -0
- package/integrations/catalog/vanta.json +55 -0
- package/integrations/catalog-index.js +73 -69
- package/integrations/catalog.schema.json +70 -3
- package/integrations/index.d.ts +49 -3
- package/marketplaces/openhands-extensions.json +10 -0
- package/package.json +1 -1
- package/plugins/cobol-modernization/skills/build-setup/SKILL.md +1 -0
- package/plugins/cobol-modernization/skills/cobol-modernization/SKILL.md +9 -0
- package/plugins/migration-scoring/skills/migration-scoring/SKILL.md +11 -0
- package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +2 -0
- package/plugins/openhands/SKILL.md +7 -0
- package/plugins/release-notes/SKILL.md +9 -0
- package/pyproject.toml +6 -1
- package/python/openhands_extensions/__init__.py +38 -0
- package/python/openhands_extensions/_version.py +2 -2
- package/python/openhands_extensions/deprecation.py +159 -0
- package/python/openhands_extensions/integration_models.py +233 -0
- package/python/openhands_extensions/integrations.py +59 -4
- package/scripts/build-skills-catalog.mjs +1 -1
- package/scripts/check_deprecations.py +488 -0
- package/skills/add-skill/SKILL.md +2 -0
- package/skills/azure-devops/SKILL.md +12 -1
- package/skills/bitbucket-cloud/SKILL.md +11 -0
- package/skills/code-review/SKILL.md +1 -0
- package/skills/datadog/SKILL.md +3 -1
- package/skills/datadog/references/windows.md +45 -0
- package/skills/discord/SKILL.md +2 -0
- package/skills/docker/SKILL.md +5 -1
- package/skills/github/SKILL.md +3 -1
- package/skills/github/references/windows.md +48 -0
- package/skills/github-pr-review/SKILL.md +1 -0
- package/skills/github-pr-review/references/windows.md +47 -0
- package/skills/github-pr-reviewer/SKILL.md +1 -0
- package/skills/github-pr-reviewer/references/windows.md +61 -0
- package/skills/github-repo-monitor/SKILL.md +1 -0
- package/skills/github-repo-monitor/references/windows.md +61 -0
- package/skills/gitlab/SKILL.md +3 -1
- package/skills/incident-retrospective/SKILL.md +2 -0
- package/skills/index.js +36 -30
- package/skills/iterate/SKILL.md +1 -0
- package/skills/iterate/references/windows.md +41 -0
- package/skills/jira-issue-to-pr/.plugin/plugin.json +19 -0
- package/skills/jira-issue-to-pr/README.md +56 -0
- package/skills/jira-issue-to-pr/SKILL.md +216 -0
- package/skills/jira-issue-to-pr/references/setup.md +170 -0
- package/skills/jira-issue-to-pr/scripts/main.py +341 -0
- package/skills/jupyter/SKILL.md +7 -1
- package/skills/kubernetes/SKILL.md +2 -1
- package/skills/kubernetes/references/windows.md +38 -0
- package/skills/linear/SKILL.md +2 -0
- package/skills/linear/references/windows.md +29 -0
- package/skills/linear-triage/SKILL.md +2 -0
- package/skills/notion/SKILL.md +2 -0
- package/skills/notion/references/windows.md +43 -0
- package/skills/openhands-api/SKILL.md +1 -0
- package/skills/openhands-api/references/windows.md +44 -0
- package/skills/openhands-automation/SKILL.md +1 -0
- package/skills/openhands-automation/references/custom-automation.md +20 -0
- package/skills/openhands-automation/references/windows.md +57 -0
- package/skills/pdflatex/SKILL.md +3 -1
- package/skills/research-brief/SKILL.md +2 -0
- package/skills/skill-creator/SKILL.md +1 -0
- package/skills/skill-creator/references/windows.md +30 -0
- package/skills/slack-channel-monitor/SKILL.md +1 -0
- package/skills/slack-channel-monitor/references/windows.md +64 -0
- package/skills/slack-standup-digest/SKILL.md +2 -0
- package/skills/spark-version-upgrade/SKILL.md +2 -1
- package/skills/ssh/SKILL.md +2 -1
- package/skills/ssh/references/windows.md +59 -0
- package/skills/swift-linux/SKILL.md +2 -1
- package/skills/vercel/SKILL.md +5 -0
- package/tests/test_catalog_schema.py +58 -0
- package/tests/test_catalogs.py +6 -1
- package/tests/test_deprecations.py +136 -0
- package/tests/test_integration_catalog_in_sync.py +118 -7
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Deprecation deadlines
|
|
2
|
+
|
|
3
|
+
# release-please opens its release PR with the OpenHands GitHub App token, so
|
|
4
|
+
# this pull_request workflow also runs against the generated version bump.
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["**"]
|
|
8
|
+
push:
|
|
9
|
+
branches: ["main", "master"]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout repository
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install uv
|
|
19
|
+
uses: astral-sh/setup-uv@v7
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Verify deprecation deadlines
|
|
25
|
+
run: uv run python scripts/check_deprecations.py
|
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ The JS and Python versions are kept in lock-step by `release-please` and guarded
|
|
|
87
87
|
## Extensions Catalog
|
|
88
88
|
|
|
89
89
|
<!-- BEGIN AUTO-GENERATED CATALOG -->
|
|
90
|
-
This repository contains **2 marketplace(s)** with **
|
|
90
|
+
This repository contains **2 marketplace(s)** with **62 extensions** (52 skills, 10 plugins).
|
|
91
91
|
|
|
92
92
|
### large-codebase
|
|
93
93
|
|
|
@@ -106,7 +106,7 @@ OpenHands skills for interacting, improving, and refactoring large codebases
|
|
|
106
106
|
|
|
107
107
|
Official skills and plugins for OpenHands — the open-source AI software engineer.
|
|
108
108
|
|
|
109
|
-
**
|
|
109
|
+
**58 extensions** (50 skills, 8 plugins)
|
|
110
110
|
|
|
111
111
|
| Name | Type | Description | Commands |
|
|
112
112
|
|------|------|-------------|----------|
|
|
@@ -137,6 +137,7 @@ Official skills and plugins for OpenHands — the open-source AI software engine
|
|
|
137
137
|
| gitlab | skill | Interact with GitLab repositories, merge requests, and APIs using the GITLAB_TOKEN environment variable. Use when wor... | — |
|
|
138
138
|
| incident-retrospective | skill | Create an automation that drafts incident retrospectives by gathering incident-channel messages from Slack, collectin... | `/incident-retro:setup` |
|
|
139
139
|
| iterate | skill | Iterate on a GitHub pull request — drive it through CI, code review, and QA until merge-ready. Monitors state, fixes ... | `/iterate`, `/verify`, `/babysit` |
|
|
140
|
+
| jira-issue-to-pr | skill | Deploy a cron-based OpenHands automation that watches a Jira Cloud project for issues labeled with a configurable lab... | — |
|
|
140
141
|
| jupyter | skill | Read, modify, execute, and convert Jupyter notebooks programmatically. Use when working with .ipynb files for data sc... | — |
|
|
141
142
|
| kubernetes | skill | Set up and manage local Kubernetes clusters using KIND (Kubernetes IN Docker). Use when testing Kubernetes applicatio... | — |
|
|
142
143
|
| learn-from-code-review | skill | Distill code review feedback from GitHub PRs into reusable skills and guidelines. Use when users ask to learn from co... | `/learn-from-reviews` |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "jira-issue-to-pr",
|
|
3
|
+
"name": "Jira issue to GitHub PR",
|
|
4
|
+
"category": "Project management",
|
|
5
|
+
"description": "Watch a Jira Cloud project for issues with a configurable label and automatically open a GitHub pull request for each new issue found. The target GitHub repo is read from the ticket body - no repo parameter required at deploy time.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"jira",
|
|
8
|
+
"github"
|
|
9
|
+
],
|
|
10
|
+
"popularityRank": 85,
|
|
11
|
+
"estimatedSetupMinutes": 5,
|
|
12
|
+
"prompt": "Set up a Jira automation to create pull requests",
|
|
13
|
+
"exampleImplementation": "Trigger: cron polling (e.g. every 5 minutes)\nRequired secrets: Jira API token, GitHub personal access token (repo + workflow scope)\n\n1. Collect Jira base URL, email, API token secret name, label to watch, and cron schedule from the user. No GitHub repo is needed at deploy time - each ticket must include the target repo (owner/repo) in its body.\n2. Poll POST /rest/api/3/search/jql on the Jira Cloud instance to find open issues carrying the configured label.\n3. Deduplicate against a KV-store-backed set of already-processed issue keys so re-runs never create duplicate PRs.\n4. For each new issue, start an independent OpenHands agent conversation that extracts the GitHub repo from the ticket body, clones it, creates a branch named after the Jira key, implements or scaffolds the requested change, and opens a pull request.\n5. Immediately after the conversation is created, post a Jira comment on the issue: 'I'm on it: <conversation URL>'.\n6. Persist the processed issue key immediately after dispatching so the next poll skips it."
|
|
14
|
+
}
|
package/automations/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import slack_channel_monitor from "./catalog/slack-channel-monitor.json" with {
|
|
|
5
5
|
import linear_triage_assistant from "./catalog/linear-triage-assistant.json" with { type: "json" };
|
|
6
6
|
import research_brief_writer from "./catalog/research-brief-writer.json" with { type: "json" };
|
|
7
7
|
import incident_retrospective_drafter from "./catalog/incident-retrospective-drafter.json" with { type: "json" };
|
|
8
|
+
import jira_issue_to_pr from "./catalog/jira-issue-to-pr.json" with { type: "json" };
|
|
8
9
|
|
|
9
10
|
export const AUTOMATION_CATALOG = [
|
|
10
11
|
github_pr_reviewer,
|
|
@@ -14,5 +15,6 @@ export const AUTOMATION_CATALOG = [
|
|
|
14
15
|
linear_triage_assistant,
|
|
15
16
|
research_brief_writer,
|
|
16
17
|
incident_retrospective_drafter,
|
|
18
|
+
jira_issue_to_pr,
|
|
17
19
|
];
|
|
18
20
|
export default AUTOMATION_CATALOG;
|
package/integrations/README.md
CHANGED
|
@@ -18,6 +18,31 @@ integrations so clients can consume one source of truth.
|
|
|
18
18
|
Each integration carries its OAuth/MCP connection data directly. Do not add a
|
|
19
19
|
separate provider catalog or per-language provider data.
|
|
20
20
|
|
|
21
|
+
Every entry must include `docsUrl`. Marketplace input fields must explicitly
|
|
22
|
+
declare both their `type` and whether they are `required`, rather than relying
|
|
23
|
+
on client defaults. When connection metadata includes an `identityMapping`, it
|
|
24
|
+
must also identify the external principal. These requirements keep catalogs
|
|
25
|
+
actionable and prevent clients from guessing security- or UX-relevant defaults.
|
|
26
|
+
|
|
27
|
+
Connection options may also carry an optional `connectionModel`. This metadata
|
|
28
|
+
lets consumers distinguish the authenticated principal from the external
|
|
29
|
+
resource the credential can reach:
|
|
30
|
+
|
|
31
|
+
- `principalType` describes who or what authenticated.
|
|
32
|
+
- `credentialScope` describes the provider boundary enforced by the credential.
|
|
33
|
+
- `resourceType` and `resourceCardinality` describe whether the grant represents
|
|
34
|
+
one workspace/site/tenant or can enumerate several.
|
|
35
|
+
- `selectionMode` tells clients whether the resource is known during auth,
|
|
36
|
+
selected immediately after auth, or supplied at runtime.
|
|
37
|
+
- `identityMapping` contains constrained dot paths for identity values returned
|
|
38
|
+
by OAuth, access-token claims, or a provider identity endpoint.
|
|
39
|
+
- `resourceDiscovery` describes a read-only endpoint used to enumerate resources
|
|
40
|
+
when one grant covers several of them.
|
|
41
|
+
|
|
42
|
+
These fields are descriptive; they never broaden the scopes enforced by the
|
|
43
|
+
provider credential. Consumers must not claim resource-level isolation when a
|
|
44
|
+
provider token is only account- or tenant-scoped.
|
|
45
|
+
|
|
21
46
|
Consumers should use the read functions exported by the package:
|
|
22
47
|
|
|
23
48
|
```js
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "atlassian",
|
|
3
3
|
"name": "Atlassian (Jira & Confluence)",
|
|
4
|
-
"description": "Search Jira issues and Confluence pages
|
|
5
|
-
"
|
|
4
|
+
"description": "Search Jira issues, manage tickets, and read Confluence pages from your agent.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Project management",
|
|
7
|
+
"Documentation"
|
|
8
|
+
],
|
|
9
|
+
"appUrl": "https://www.atlassian.com",
|
|
10
|
+
"docsUrl": "https://mcp-atlassian.soomiles.com/docs/installation",
|
|
6
11
|
"iconBg": "#0052CC",
|
|
7
12
|
"logoUrl": "https://cdn.simpleicons.org/atlassian/FFFFFF",
|
|
8
13
|
"keywords": [
|
|
@@ -10,12 +15,28 @@
|
|
|
10
15
|
"confluence",
|
|
11
16
|
"tickets",
|
|
12
17
|
"wiki",
|
|
13
|
-
"issues"
|
|
18
|
+
"issues",
|
|
19
|
+
"sprint"
|
|
14
20
|
],
|
|
21
|
+
"popularityRank": 88,
|
|
22
|
+
"installHint": "Paste your Jira and/or Confluence URL and API token. The mcp-atlassian package runs via uvx - no install needed.",
|
|
15
23
|
"connectionOptions": [
|
|
16
24
|
{
|
|
17
25
|
"id": "oauth",
|
|
18
26
|
"provider": "mcp",
|
|
27
|
+
"connectionModel": {
|
|
28
|
+
"principalType": "user",
|
|
29
|
+
"credentialScope": "account",
|
|
30
|
+
"resourceType": "site",
|
|
31
|
+
"resourceCardinality": "many",
|
|
32
|
+
"selectionMode": "post_auth",
|
|
33
|
+
"resourceDiscovery": {
|
|
34
|
+
"endpoint": "https://api.atlassian.com/oauth/token/accessible-resources",
|
|
35
|
+
"externalResourceIdPath": "id",
|
|
36
|
+
"resourceNamePath": "name",
|
|
37
|
+
"resourceUrlPath": "url"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
19
40
|
"transport": {
|
|
20
41
|
"kind": "shttp",
|
|
21
42
|
"url": "https://mcp.atlassian.com/v1/mcp"
|
|
@@ -23,6 +44,73 @@
|
|
|
23
44
|
"auth": {
|
|
24
45
|
"strategy": "oauth2"
|
|
25
46
|
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "api",
|
|
50
|
+
"provider": "mcp",
|
|
51
|
+
"transport": {
|
|
52
|
+
"kind": "stdio",
|
|
53
|
+
"serverName": "mcp-atlassian",
|
|
54
|
+
"command": "uvx",
|
|
55
|
+
"args": [
|
|
56
|
+
"mcp-atlassian"
|
|
57
|
+
],
|
|
58
|
+
"envFields": [
|
|
59
|
+
{
|
|
60
|
+
"key": "JIRA_URL",
|
|
61
|
+
"label": "Jira URL",
|
|
62
|
+
"type": "text",
|
|
63
|
+
"placeholder": "https://your-company.atlassian.net",
|
|
64
|
+
"required": false,
|
|
65
|
+
"helperText": "Your Atlassian Jira base URL. Omit if using Confluence only."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"key": "JIRA_USERNAME",
|
|
69
|
+
"label": "Jira username (email)",
|
|
70
|
+
"type": "text",
|
|
71
|
+
"placeholder": "your.email@company.com",
|
|
72
|
+
"required": false,
|
|
73
|
+
"helperText": "Email address linked to your Atlassian account."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"key": "JIRA_API_TOKEN",
|
|
77
|
+
"label": "Jira API token",
|
|
78
|
+
"type": "password",
|
|
79
|
+
"placeholder": "ATATT...",
|
|
80
|
+
"required": false,
|
|
81
|
+
"helperText": "Atlassian API token for Jira. Required when JIRA_URL is set.",
|
|
82
|
+
"helperLink": "https://id.atlassian.com/manage-profile/security/api-tokens"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"key": "CONFLUENCE_URL",
|
|
86
|
+
"label": "Confluence URL",
|
|
87
|
+
"type": "text",
|
|
88
|
+
"placeholder": "https://your-company.atlassian.net/wiki",
|
|
89
|
+
"required": false,
|
|
90
|
+
"helperText": "Your Atlassian Confluence base URL. Omit if using Jira only."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"key": "CONFLUENCE_USERNAME",
|
|
94
|
+
"label": "Confluence username (email)",
|
|
95
|
+
"type": "text",
|
|
96
|
+
"placeholder": "your.email@company.com",
|
|
97
|
+
"required": false,
|
|
98
|
+
"helperText": "Email address linked to your Atlassian account."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"key": "CONFLUENCE_API_TOKEN",
|
|
102
|
+
"label": "Confluence API token",
|
|
103
|
+
"type": "password",
|
|
104
|
+
"placeholder": "ATATT...",
|
|
105
|
+
"required": false,
|
|
106
|
+
"helperText": "Atlassian API token for Confluence. Required when CONFLUENCE_URL is set.",
|
|
107
|
+
"helperLink": "https://id.atlassian.com/manage-profile/security/api-tokens"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
"auth": {
|
|
112
|
+
"strategy": "api_key"
|
|
113
|
+
}
|
|
26
114
|
}
|
|
27
115
|
]
|
|
28
116
|
}
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
],
|
|
9
9
|
"appUrl": "https://www.datadoghq.com",
|
|
10
10
|
"docsUrl": "https://docs.datadoghq.com/bits_ai/mcp_server/setup/",
|
|
11
|
-
"notes": "Uses Datadog's official hosted MCP server. The default
|
|
11
|
+
"notes": "Uses Datadog's official hosted MCP server. The MCP endpoint host is site-specific: use https://mcp.<site>.datadoghq.com/v1/mcp for your Datadog site (e.g. mcp.us5.datadoghq.com for US5). The default URL below targets US1 and can be edited in the install dialog.",
|
|
12
12
|
"popularityRank": 35,
|
|
13
|
+
"installHint": "The Datadog MCP URL is site-specific. Edit the URL to https://mcp.<site>.datadoghq.com/v1/mcp for your Datadog site (for example https://mcp.us5.datadoghq.com/v1/mcp for US5, https://mcp.eu.datadoghq.com/v1/mcp for EU). Find your site at Organization Settings → Site in Datadog.",
|
|
13
14
|
"connectionOptions": [
|
|
14
15
|
{
|
|
15
16
|
"id": "oauth",
|
|
@@ -27,7 +28,37 @@
|
|
|
27
28
|
},
|
|
28
29
|
"transport": {
|
|
29
30
|
"kind": "shttp",
|
|
30
|
-
"url": "https://mcp.datadoghq.com/
|
|
31
|
+
"url": "https://mcp.datadoghq.com/v1/mcp"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "api",
|
|
36
|
+
"provider": "mcp",
|
|
37
|
+
"auth": {
|
|
38
|
+
"strategy": "none"
|
|
39
|
+
},
|
|
40
|
+
"transport": {
|
|
41
|
+
"kind": "shttp",
|
|
42
|
+
"url": "https://mcp.datadoghq.com/v1/mcp",
|
|
43
|
+
"urlEditable": true,
|
|
44
|
+
"headerFields": [
|
|
45
|
+
{
|
|
46
|
+
"key": "DD-API-KEY",
|
|
47
|
+
"label": "Datadog API key",
|
|
48
|
+
"type": "password",
|
|
49
|
+
"required": true,
|
|
50
|
+
"placeholder": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
51
|
+
"helperText": "Created in Datadog under Organization Settings → API Keys. Used to authenticate to the Datadog MCP server. See the [setup docs](https://docs.datadoghq.com/mcp_server/setup/?tab=other#authentication)."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"key": "DD-APPLICATION-KEY",
|
|
55
|
+
"label": "Datadog Application key",
|
|
56
|
+
"type": "password",
|
|
57
|
+
"required": true,
|
|
58
|
+
"placeholder": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
59
|
+
"helperText": "Created in Datadog under Organization Settings → Application Keys. Grants the MCP server access to your Datadog data. See the [setup docs](https://docs.datadoghq.com/mcp_server/setup/?tab=other#authentication)."
|
|
60
|
+
}
|
|
61
|
+
]
|
|
31
62
|
}
|
|
32
63
|
}
|
|
33
64
|
]
|
|
@@ -14,6 +14,26 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "mcp",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "account",
|
|
20
|
+
"resourceType": "organization",
|
|
21
|
+
"resourceCardinality": "many",
|
|
22
|
+
"selectionMode": "post_auth",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "identity_api",
|
|
25
|
+
"endpoint": "https://api.github.com/user",
|
|
26
|
+
"externalPrincipalIdPath": "id",
|
|
27
|
+
"resourceNamePath": "login",
|
|
28
|
+
"resourceUrlPath": "html_url"
|
|
29
|
+
},
|
|
30
|
+
"resourceDiscovery": {
|
|
31
|
+
"endpoint": "https://api.github.com/user/orgs",
|
|
32
|
+
"externalResourceIdPath": "id",
|
|
33
|
+
"resourceNamePath": "login",
|
|
34
|
+
"resourceUrlPath": "html_url"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
17
37
|
"auth": {
|
|
18
38
|
"strategy": "oauth2",
|
|
19
39
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -13,6 +13,19 @@
|
|
|
13
13
|
{
|
|
14
14
|
"id": "oauth",
|
|
15
15
|
"provider": "http",
|
|
16
|
+
"connectionModel": {
|
|
17
|
+
"principalType": "user",
|
|
18
|
+
"credentialScope": "resource",
|
|
19
|
+
"resourceType": "workspace",
|
|
20
|
+
"resourceCardinality": "one",
|
|
21
|
+
"selectionMode": "automatic",
|
|
22
|
+
"identityMapping": {
|
|
23
|
+
"source": "oauth_token_response",
|
|
24
|
+
"externalPrincipalIdPath": "owner.user.id",
|
|
25
|
+
"externalResourceIdPath": "workspace_id",
|
|
26
|
+
"resourceNamePath": "workspace_name"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
16
29
|
"auth": {
|
|
17
30
|
"strategy": "oauth2",
|
|
18
31
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -14,6 +14,20 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "mcp",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "resource",
|
|
20
|
+
"resourceType": "workspace",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "oauth_token_response",
|
|
25
|
+
"externalPrincipalIdPath": "authed_user.id",
|
|
26
|
+
"externalTenantIdPath": "enterprise.id",
|
|
27
|
+
"externalResourceIdPath": "team.id",
|
|
28
|
+
"resourceNamePath": "team.name"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
17
31
|
"auth": {
|
|
18
32
|
"strategy": "oauth2",
|
|
19
33
|
"oauth": {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "superhuman-mail",
|
|
3
|
+
"name": "Superhuman Mail",
|
|
4
|
+
"description": "Search, read, draft, and send email via Superhuman's hosted MCP server.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Communication",
|
|
7
|
+
"Email"
|
|
8
|
+
],
|
|
9
|
+
"appUrl": "https://superhuman.com",
|
|
10
|
+
"docsUrl": "https://github.com/superhuman/mcp-mail",
|
|
11
|
+
"notes": "OAuth is handled by the Superhuman MCP server itself (mcp-remote). No client credentials required.",
|
|
12
|
+
"connectionOptions": [
|
|
13
|
+
{
|
|
14
|
+
"id": "oauth",
|
|
15
|
+
"provider": "mcp",
|
|
16
|
+
"transport": {
|
|
17
|
+
"kind": "shttp",
|
|
18
|
+
"url": "https://mcp.mail.superhuman.com/mcp"
|
|
19
|
+
},
|
|
20
|
+
"auth": {
|
|
21
|
+
"strategy": "oauth2",
|
|
22
|
+
"oauth": {
|
|
23
|
+
"clientAuthentication": "none"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"iconBg": "#FF5C28",
|
|
29
|
+
"logoUrl": "https://cdn.simpleicons.org/superhuman/FFFFFF",
|
|
30
|
+
"keywords": [
|
|
31
|
+
"email",
|
|
32
|
+
"mail",
|
|
33
|
+
"superhuman",
|
|
34
|
+
"inbox"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vanta",
|
|
3
|
+
"name": "Vanta",
|
|
4
|
+
"description": "Query Vanta compliance controls, tests, evidence, risks, and vulnerabilities from the agent.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Security",
|
|
7
|
+
"Compliance"
|
|
8
|
+
],
|
|
9
|
+
"appUrl": "https://www.vanta.com",
|
|
10
|
+
"docsUrl": "https://developer.vanta.com/docs/vanta-mcp",
|
|
11
|
+
"notes": "Vanta's hosted remote MCP server (beta, requires a Vanta Admin role). Regional endpoints: US https://mcp.vanta.com/mcp, EU https://mcp.eu.vanta.com/mcp, AUS https://mcp.aus.vanta.com/mcp. Authentication is OAuth only - no API keys.",
|
|
12
|
+
"popularityRank": 64,
|
|
13
|
+
"connectionOptions": [
|
|
14
|
+
{
|
|
15
|
+
"id": "oauth",
|
|
16
|
+
"provider": "mcp",
|
|
17
|
+
"auth": {
|
|
18
|
+
"strategy": "oauth2",
|
|
19
|
+
"oauth": {
|
|
20
|
+
"authorizationUrl": "https://app.vanta.com/oauth/authorize",
|
|
21
|
+
"tokenUrl": "https://api.vanta.com/oauth/token",
|
|
22
|
+
"registrationUrl": "https://api.vanta.com/oauth/register",
|
|
23
|
+
"scopes": [
|
|
24
|
+
"mcp-api.all:read"
|
|
25
|
+
],
|
|
26
|
+
"optionalScopes": [
|
|
27
|
+
"mcp-api.all:write"
|
|
28
|
+
],
|
|
29
|
+
"pkce": true,
|
|
30
|
+
"clientAuthentication": "none",
|
|
31
|
+
"additionalAuthorizationParams": {
|
|
32
|
+
"resource": "https://mcp.vanta.com"
|
|
33
|
+
},
|
|
34
|
+
"additionalTokenParams": {
|
|
35
|
+
"resource": "https://mcp.vanta.com"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"transport": {
|
|
40
|
+
"kind": "shttp",
|
|
41
|
+
"url": "https://mcp.vanta.com/mcp"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"iconBg": "#003D2B",
|
|
46
|
+
"keywords": [
|
|
47
|
+
"compliance",
|
|
48
|
+
"soc2",
|
|
49
|
+
"security",
|
|
50
|
+
"audit",
|
|
51
|
+
"risk",
|
|
52
|
+
"vanta"
|
|
53
|
+
],
|
|
54
|
+
"installHint": "Connect via the OAuth MCP option. After connecting, complete the OAuth flow in your browser as a Vanta Admin. EU tenants should use https://mcp.eu.vanta.com/mcp and AUS tenants https://mcp.aus.vanta.com/mcp as the transport URL. The legacy local server @vantasdk/vanta-mcp-server is deprecated - prefer the hosted remote server."
|
|
55
|
+
}
|