@openhands/extensions 0.0.1-alpha
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/LICENSE +21 -0
- package/MIGRATION.md +62 -0
- package/README.md +160 -0
- package/automations/README.md +15 -0
- package/automations/catalog/github-pr-reviewer.json +13 -0
- package/automations/catalog/github-repo-monitor.json +11 -0
- package/automations/catalog/incident-retrospective-drafter.json +15 -0
- package/automations/catalog/linear-triage-assistant.json +13 -0
- package/automations/catalog/research-brief-writer.json +14 -0
- package/automations/catalog/slack-channel-monitor.json +11 -0
- package/automations/catalog/slack-standup-digest.json +13 -0
- package/automations/index.d.ts +14 -0
- package/automations/index.js +18 -0
- package/index.d.ts +17 -0
- package/index.js +2 -0
- package/integrations/README.md +39 -0
- package/integrations/catalog/airtable.json +44 -0
- package/integrations/catalog/apify.json +43 -0
- package/integrations/catalog/atlassian.json +31 -0
- package/integrations/catalog/brave-search.json +43 -0
- package/integrations/catalog/browser-mcp.json +34 -0
- package/integrations/catalog/clickhouse.json +56 -0
- package/integrations/catalog/cloudflare-bindings.json +32 -0
- package/integrations/catalog/cloudflare-browser-rendering.json +30 -0
- package/integrations/catalog/cloudflare-builds.json +31 -0
- package/integrations/catalog/cloudflare-docs.json +30 -0
- package/integrations/catalog/cloudflare-observability.json +31 -0
- package/integrations/catalog/deepwiki.json +32 -0
- package/integrations/catalog/elevenlabs.json +42 -0
- package/integrations/catalog/everything.json +32 -0
- package/integrations/catalog/exa.json +43 -0
- package/integrations/catalog/fetch.json +32 -0
- package/integrations/catalog/figma.json +44 -0
- package/integrations/catalog/filesystem.json +44 -0
- package/integrations/catalog/firecrawl.json +43 -0
- package/integrations/catalog/git.json +45 -0
- package/integrations/catalog/github.json +51 -0
- package/integrations/catalog/huggingface.json +32 -0
- package/integrations/catalog/kagi.json +42 -0
- package/integrations/catalog/linear.json +32 -0
- package/integrations/catalog/memory.json +33 -0
- package/integrations/catalog/mongodb.json +43 -0
- package/integrations/catalog/neon.json +44 -0
- package/integrations/catalog/notion.json +46 -0
- package/integrations/catalog/obsidian.json +43 -0
- package/integrations/catalog/paypal.json +29 -0
- package/integrations/catalog/playwright.json +34 -0
- package/integrations/catalog/redis.json +46 -0
- package/integrations/catalog/resend.json +49 -0
- package/integrations/catalog/sentry.json +30 -0
- package/integrations/catalog/sequential-thinking.json +32 -0
- package/integrations/catalog/slack.json +52 -0
- package/integrations/catalog/stripe.json +30 -0
- package/integrations/catalog/supabase.json +43 -0
- package/integrations/catalog/tavily.json +46 -0
- package/integrations/catalog/time.json +31 -0
- package/integrations/index.d.ts +167 -0
- package/integrations/index.js +212 -0
- package/integrations/logos.d.ts +5 -0
- package/integrations/logos.js +94 -0
- package/integrations/oauth-provider-catalog.js +553 -0
- package/integrations/oauth-provider-registration-defaults.js +610 -0
- package/package.json +56 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 OpenHands
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/MIGRATION.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Migration Guide
|
|
2
|
+
|
|
3
|
+
## MCP catalog to integration catalog
|
|
4
|
+
|
|
5
|
+
This package version is still `0.0.0`, and the MCP catalog was an experimental
|
|
6
|
+
pre-release API. This migration intentionally removes the old MCP-only export
|
|
7
|
+
paths and names instead of keeping deprecated aliases.
|
|
8
|
+
|
|
9
|
+
### Import paths and symbols
|
|
10
|
+
|
|
11
|
+
Before:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import { MCP_CATALOG } from "@openhands/extensions/mcps";
|
|
15
|
+
import { MCP_LOGOS } from "@openhands/extensions/mcps/logos";
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
After:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
import { INTEGRATION_CATALOG } from "@openhands/extensions/integrations";
|
|
22
|
+
import { INTEGRATION_LOGOS } from "@openhands/extensions/integrations/logos";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
TypeScript consumers should replace `McpCatalogEntry` with
|
|
26
|
+
`IntegrationCatalogEntry`.
|
|
27
|
+
|
|
28
|
+
### Catalog entries
|
|
29
|
+
|
|
30
|
+
Before, MCP entries exposed a single `template`:
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const template = entry.template;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
After, integrations expose one or more `connectionOptions`:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
const option =
|
|
40
|
+
entry.connectionOptions.find(
|
|
41
|
+
(candidate) => candidate.id === entry.defaultConnectionOptionId,
|
|
42
|
+
) ?? entry.connectionOptions[0];
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
MCP-backed options use `provider: "mcp"` and include their transport details.
|
|
46
|
+
Other integration types can use the same catalog entry shape without pretending
|
|
47
|
+
to be MCP servers.
|
|
48
|
+
|
|
49
|
+
### Automation entries
|
|
50
|
+
|
|
51
|
+
Automation templates now refer to integrations, not MCP-only records:
|
|
52
|
+
|
|
53
|
+
```diff
|
|
54
|
+
- requiredMcpIds
|
|
55
|
+
+ requiredIntegrationIds
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Deprecation timeline
|
|
59
|
+
|
|
60
|
+
There is no deprecation window for the old `mcps` exports. They were removed in
|
|
61
|
+
this PR because downstream consumers are being updated in the same coordinated
|
|
62
|
+
change and the API had not been treated as stable.
|
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# OpenHands Extensions
|
|
2
|
+
|
|
3
|
+
This repository is the **public extensions registry** for [OpenHands](https://github.com/OpenHands/OpenHands).
|
|
4
|
+
It contains reusable, shareable skills and plugins that customize agent behavior.
|
|
5
|
+
|
|
6
|
+
- Skills overview docs: https://docs.openhands.dev/overview/skills
|
|
7
|
+
- SDK skill guide: https://docs.openhands.dev/sdk/guides/skill
|
|
8
|
+
|
|
9
|
+
## Repository Layout
|
|
10
|
+
|
|
11
|
+
### Skills
|
|
12
|
+
|
|
13
|
+
Skills are Markdown-based guidelines that provide domain-specific knowledge and instructions.
|
|
14
|
+
They live under `skills/`, **one directory per skill**:
|
|
15
|
+
|
|
16
|
+
- `skills/<skill-name>/SKILL.md` — the skill definition (AgentSkills-style progressive disclosure)
|
|
17
|
+
- `skills/<skill-name>/README.md` — optional human-facing notes/examples
|
|
18
|
+
|
|
19
|
+
Browse the catalog in [`skills/`](skills/).
|
|
20
|
+
|
|
21
|
+
### Plugins
|
|
22
|
+
|
|
23
|
+
Plugins are extensions with executable code components (hooks, scripts).
|
|
24
|
+
They live under `plugins/`, **one directory per plugin**:
|
|
25
|
+
|
|
26
|
+
- `plugins/<plugin-name>/SKILL.md` — the plugin definition
|
|
27
|
+
- `plugins/<plugin-name>/hooks/` — lifecycle hooks
|
|
28
|
+
- `plugins/<plugin-name>/scripts/` — utility scripts
|
|
29
|
+
|
|
30
|
+
Browse available plugins in [`plugins/`](plugins/).
|
|
31
|
+
|
|
32
|
+
### NPM Package
|
|
33
|
+
|
|
34
|
+
This repository also publishes catalog data through the `@openhands/extensions` package. It requires Node.js 18.20.0 or newer because the catalog entry points import JSON modules with import attributes.
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
import { AUTOMATION_CATALOG, INTEGRATION_CATALOG } from "@openhands/extensions";
|
|
38
|
+
import { INTEGRATION_CATALOG as MCP_MARKETPLACE } from "@openhands/extensions/integrations";
|
|
39
|
+
import { AUTOMATION_CATALOG as RECOMMENDED_AUTOMATIONS } from "@openhands/extensions/automations";
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
React logo components are isolated behind a separate export so data-only consumers do not need React peer dependencies:
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
import { INTEGRATION_LOGOS } from "@openhands/extensions/integrations/logos";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
See [`integrations/README.md`](integrations/README.md), [`automations/README.md`](automations/README.md), and [`MIGRATION.md`](MIGRATION.md) for catalog-specific details.
|
|
49
|
+
|
|
50
|
+
## Extensions Catalog
|
|
51
|
+
|
|
52
|
+
<!-- BEGIN AUTO-GENERATED CATALOG -->
|
|
53
|
+
This repository contains **2 marketplace(s)** with **56 extensions** (46 skills, 10 plugins).
|
|
54
|
+
|
|
55
|
+
### large-codebase
|
|
56
|
+
|
|
57
|
+
OpenHands skills for interacting, improving, and refactoring large codebases
|
|
58
|
+
|
|
59
|
+
**4 extensions** (2 skills, 2 plugins)
|
|
60
|
+
|
|
61
|
+
| Name | Type | Description | Commands |
|
|
62
|
+
|------|------|-------------|----------|
|
|
63
|
+
| add-javadoc | skill | Add comprehensive JavaDoc documentation to Java classes and methods. Use when documenting Java code, adding API docum... | — |
|
|
64
|
+
| cobol-modernization | plugin | End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration wi... | — |
|
|
65
|
+
| migration-scoring | plugin | Evaluate code migration quality with coverage, correctness, and style scoring. Generates executive reports with actio... | — |
|
|
66
|
+
| spark-version-upgrade | skill | Upgrade Apache Spark applications between major versions (2.x→3.x, 3.x→4.x). Covers build files, deprecated APIs, con... | — |
|
|
67
|
+
|
|
68
|
+
### openhands-extensions
|
|
69
|
+
|
|
70
|
+
Official skills and plugins for OpenHands — the open-source AI software engineer.
|
|
71
|
+
|
|
72
|
+
**52 extensions** (44 skills, 8 plugins)
|
|
73
|
+
|
|
74
|
+
| Name | Type | Description | Commands |
|
|
75
|
+
|------|------|-------------|----------|
|
|
76
|
+
| add-skill | skill | Add (import) an OpenHands skill from a GitHub repository into the current workspace. | — |
|
|
77
|
+
| agent-creator | skill | Create file-based sub-agents as Markdown files — no Python code required. Guides the user through a structured interv... | `/agent-creator` |
|
|
78
|
+
| agent-memory | skill | Persist and retrieve repository-specific knowledge using AGENTS.md files. Use when you want to save important informa... | `/remember` |
|
|
79
|
+
| agent-sdk-builder | skill | Guided workflow for building custom AI agents using the OpenHands Software Agent SDK. Use when you want to create a n... | `/agent-builder` |
|
|
80
|
+
| azure-devops | skill | Interact with Azure DevOps repositories, pull requests, and APIs using the AZURE_DEVOPS_TOKEN environment variable. U... | — |
|
|
81
|
+
| bitbucket | skill | Interact with Bitbucket repositories and pull requests using the BITBUCKET_TOKEN environment variable. Use when worki... | — |
|
|
82
|
+
| city-weather | plugin | Get current weather, time, and precipitation forecast for any city using the free Open-Meteo API. Provides slash comm... | — |
|
|
83
|
+
| code-review | skill | Rigorous code review focusing on data structures, simplicity, security, pragmatism, and risk/safety evaluation. Provi... | `/codereview`, `/codereview-roasted` |
|
|
84
|
+
| code-simplifier | skill | Simplifies and refines code across three dimensions - code reuse, code quality, and efficiency - while preserving all... | `/simplify` |
|
|
85
|
+
| datadog | skill | Query and analyze Datadog logs, metrics, APM traces, and monitors using the Datadog API. Use when debugging productio... | — |
|
|
86
|
+
| deno | skill | Common project operations using Deno (tasks, run/test/lint/fmt, and dependency management). | — |
|
|
87
|
+
| discord | skill | Build and automate Discord integrations (bots, webhooks, slash commands, and REST API workflows). Use when the user m... | — |
|
|
88
|
+
| docker | skill | Run Docker commands within a container environment, including starting the Docker daemon and managing containers. Use... | — |
|
|
89
|
+
| evidence-based-citations | skill | Back factual claims and field values with official, verifiable sources. Use when the user asks to fill fields, answer... | — |
|
|
90
|
+
| flarglebargle | skill | A test skill that responds to the magic word 'flarglebargle' with a compliment. Use for testing skill activation and ... | — |
|
|
91
|
+
| frontend-design | skill | Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks ... | — |
|
|
92
|
+
| github | skill | Interact with GitHub repositories, pull requests, issues, and workflows using the GITHUB_TOKEN environment variable a... | — |
|
|
93
|
+
| github-pr-review | skill | Post structured PR reviews to GitHub with inline comments/suggestions in a single API call. | `/github-pr-review` |
|
|
94
|
+
| github-pr-reviewer | skill | Create an automation that reviews GitHub pull requests when they are opened or updated. Inspects the diff, changed fi... | `/pr-reviewer:setup` |
|
|
95
|
+
| github-repo-monitor | skill | Create a cron automation that polls a GitHub repository for issue and PR comments containing a configurable trigger p... | `/github-monitor:poll` |
|
|
96
|
+
| gitlab | skill | Interact with GitLab repositories, merge requests, and APIs using the GITLAB_TOKEN environment variable. Use when wor... | — |
|
|
97
|
+
| incident-retrospective | skill | Create an automation that drafts incident retrospectives by gathering incident-channel messages from Slack, collectin... | `/incident-retro:setup` |
|
|
98
|
+
| 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` |
|
|
99
|
+
| jupyter | skill | Read, modify, execute, and convert Jupyter notebooks programmatically. Use when working with .ipynb files for data sc... | — |
|
|
100
|
+
| kubernetes | skill | Set up and manage local Kubernetes clusters using KIND (Kubernetes IN Docker). Use when testing Kubernetes applicatio... | — |
|
|
101
|
+
| 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` |
|
|
102
|
+
| linear | skill | Interact with Linear project management - query issues, update status, create tickets using the Linear GraphQL API. | — |
|
|
103
|
+
| linear-triage | skill | Create an automation that triages new Linear issues by inspecting title, description, team, and recent related issues... | `/linear-triage:setup` |
|
|
104
|
+
| magic-test | plugin | A simple test plugin for verifying plugin loading. Triggers on magic words (alakazam, abracadabra) and returns a spec... | — |
|
|
105
|
+
| notion | skill | Create, search, and update Notion pages/databases using the Notion API. Use for documenting work, generating runbooks... | — |
|
|
106
|
+
| npm | skill | Handle npm package installation in non-interactive environments by piping confirmations. Use when installing Node.js ... | — |
|
|
107
|
+
| onboarding | plugin | Assess repository agent-readiness across five pillars, propose high-impact fixes, and generate repo-specific AGENTS.m... | — |
|
|
108
|
+
| openhands | plugin | Unified OpenHands plugin — bundles Cloud CLI, REST API (openhands-api), and Automations (openhands-automation) into a... | `/openhands-cloud` |
|
|
109
|
+
| openhands-api | skill | Use the OpenHands Cloud REST API (V1) to create and manage app conversations, including multi-conversation delegation... | — |
|
|
110
|
+
| openhands-automation | skill | Create and manage OpenHands automations - scheduled tasks that run in sandboxes. Use the prompt preset to create auto... | `/automation:create` |
|
|
111
|
+
| openhands-sdk | skill | Reference skill for the OpenHands Software Agent SDK - build AI agents with custom tools, LLM configuration, conversa... | `/sdk` |
|
|
112
|
+
| pdflatex | skill | Install and use pdflatex to compile LaTeX documents into PDFs on Linux. Use when generating academic papers, research... | — |
|
|
113
|
+
| pr-review | plugin | Automated PR code review — analyzes diffs and posts inline review comments via the GitHub API. | — |
|
|
114
|
+
| prd | skill | Generate a Product Requirements Document (PRD) for a new feature through an interactive clarifying-question workflow.... | `/prd` |
|
|
115
|
+
| qa-changes | plugin | Validate pull request changes by actually running the code — setting up the environment, exercising changed behavior,... | — |
|
|
116
|
+
| release-notes | plugin | Generate consistent, well-structured release notes from git history. Produces categorized changelog with breaking cha... | `/release-notes` |
|
|
117
|
+
| research-brief | skill | Create a recurring automation that researches a topic using Tavily web search and publishes a structured brief to Not... | `/research-brief:setup` |
|
|
118
|
+
| security | skill | Security best practices for secure coding, authentication, authorization, and data protection. Use when developing fe... | — |
|
|
119
|
+
| skill-creator | skill | Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an ex... | — |
|
|
120
|
+
| slack-channel-monitor | skill | Create a cron automation that polls up to 10 Slack channels every minute and starts an OpenHands conversation when a ... | `/slack-monitor:poll` |
|
|
121
|
+
| slack-standup-digest | skill | Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since... | `/standup-digest:setup` |
|
|
122
|
+
| ssh | skill | Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers.... | — |
|
|
123
|
+
| swift-linux | skill | Install and configure Swift programming language on Debian Linux for server-side development. Use when building Swift... | — |
|
|
124
|
+
| theme-factory | skill | Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc.... | — |
|
|
125
|
+
| uv | skill | Common project, dependency, and environment operations using uv. | — |
|
|
126
|
+
| vercel | skill | Deploy and manage applications on Vercel, including preview deployments and deployment protection. | — |
|
|
127
|
+
| vulnerability-remediation | plugin | Automated security vulnerability scanning and AI-powered remediation. Scans repositories, skips when no issues found,... | — |
|
|
128
|
+
<!-- END AUTO-GENERATED CATALOG -->
|
|
129
|
+
|
|
130
|
+
## Contributing
|
|
131
|
+
|
|
132
|
+
### Adding a Skill
|
|
133
|
+
|
|
134
|
+
1. Fork this repository
|
|
135
|
+
2. Create a new directory: `skills/<your-skill-name>/`
|
|
136
|
+
3. Add `skills/<your-skill-name>/SKILL.md`
|
|
137
|
+
4. (Optional) Add `README.md`, `references/`, `scripts/`, etc.
|
|
138
|
+
5. Submit a pull request
|
|
139
|
+
|
|
140
|
+
### Adding a Plugin
|
|
141
|
+
|
|
142
|
+
1. Fork this repository
|
|
143
|
+
2. Create a new directory: `plugins/<your-plugin-name>/`
|
|
144
|
+
3. Add `plugins/<your-plugin-name>/SKILL.md`
|
|
145
|
+
4. Add `hooks/` and/or `scripts/` directories with your executable code
|
|
146
|
+
5. Submit a pull request
|
|
147
|
+
|
|
148
|
+
## Agent Instructions
|
|
149
|
+
|
|
150
|
+
See [`AGENTS.md`](AGENTS.md) for the rules agents should follow when editing/adding skills and plugins.
|
|
151
|
+
|
|
152
|
+
<hr>
|
|
153
|
+
|
|
154
|
+
### Thank You to Our Contributors
|
|
155
|
+
|
|
156
|
+
<p align="center">
|
|
157
|
+
<a href="https://github.com/OpenHands/extensions/graphs/contributors">
|
|
158
|
+
<img src="https://assets.openhands.dev/readme/openhands-extensions-contributors.svg" />
|
|
159
|
+
</a>
|
|
160
|
+
</p>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Automation catalog
|
|
2
|
+
|
|
3
|
+
This directory contains recommended OpenHands automation templates.
|
|
4
|
+
|
|
5
|
+
- `catalog/*.json` contains one source file per recommended automation.
|
|
6
|
+
- `index.js` assembles and exports the catalog for Node.js and bundlers.
|
|
7
|
+
- `index.d.ts` contains the public TypeScript shape.
|
|
8
|
+
|
|
9
|
+
Consumers can import the package export:
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
import { AUTOMATION_CATALOG } from "@openhands/extensions/automations";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Each automation references required integrations by ID. Those IDs should match entries in `integrations/catalog/*.json`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "github-pr-reviewer",
|
|
3
|
+
"name": "GitHub PR review copilot",
|
|
4
|
+
"category": "Code review",
|
|
5
|
+
"description": "Watch pull requests, inspect the diff, and leave a concise review with risks and suggested follow-ups.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"github"
|
|
8
|
+
],
|
|
9
|
+
"popularityRank": 100,
|
|
10
|
+
"estimatedSetupMinutes": 4,
|
|
11
|
+
"prompt": "/pr-reviewer:setup",
|
|
12
|
+
"exampleImplementation": "Trigger: github.pull_request.opened and github.pull_request.synchronize\nRequired MCP: GitHub\n\n1. Read repository, pull_request, and sender from the event payload.\n2. Fetch the PR diff and related comments through the GitHub MCP.\n3. Run a review rubric focused on bugs, security, tests, and maintainability.\n4. TODO: decide whether to publish inline comments, a summary comment, or a draft artifact.\n5. Post or save the review with links back to the exact files and lines."
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "github-repo-monitor",
|
|
3
|
+
"name": "GitHub repository monitor",
|
|
4
|
+
"category": "Developer tools",
|
|
5
|
+
"description": "Watch a repository for @OpenHands mentions in issues and PR comments, start a conversation, and post the agent's reply back to GitHub.",
|
|
6
|
+
"requiredIntegrationIds": ["github"],
|
|
7
|
+
"popularityRank": 98,
|
|
8
|
+
"estimatedSetupMinutes": 5,
|
|
9
|
+
"prompt": "/github-monitor:poll",
|
|
10
|
+
"exampleImplementation": "Trigger: cron, every minute (configurable)\nRequired secret: GITHUB_TOKEN\n\n1. Poll GitHub for new issue and PR comments since the last run.\n2. Match comments containing the trigger phrase (case-insensitive, default: @OpenHands).\n3. Post an acknowledgment comment with a link to the new OpenHands conversation.\n4. Forward follow-up replies in the same thread to the running conversation.\n5. Post the agent's final response back to GitHub when the conversation completes."
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "incident-retrospective-drafter",
|
|
3
|
+
"name": "Incident retrospective drafter",
|
|
4
|
+
"category": "Reliability",
|
|
5
|
+
"description": "Collect incident chatter and issue updates, then draft a timeline and follow-up checklist.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"slack",
|
|
8
|
+
"linear",
|
|
9
|
+
"notion"
|
|
10
|
+
],
|
|
11
|
+
"popularityRank": 78,
|
|
12
|
+
"estimatedSetupMinutes": 8,
|
|
13
|
+
"prompt": "/incident-retro:setup",
|
|
14
|
+
"exampleImplementation": "Trigger: manual, cron, or incident label added\nRequired MCPs: Slack, Linear, Notion\n\n1. Gather incident messages, timestamps, and linked issue references.\n2. Pull Linear follow-up tickets, owners, and status.\n3. TODO: define the incident identifier format and approved Notion template.\n4. Build a timeline, impact summary, root-cause hypotheses, and action items.\n5. Publish a draft retrospective and notify the incident owner."
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "linear-triage-assistant",
|
|
3
|
+
"name": "Linear issue triage assistant",
|
|
4
|
+
"category": "Project management",
|
|
5
|
+
"description": "Classify new Linear issues, suggest labels, find duplicates, and ask clarifying questions.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"linear"
|
|
8
|
+
],
|
|
9
|
+
"popularityRank": 90,
|
|
10
|
+
"estimatedSetupMinutes": 3,
|
|
11
|
+
"prompt": "/linear-triage:setup",
|
|
12
|
+
"exampleImplementation": "Trigger: linear Issue create\nRequired MCP: Linear\n\n1. Load the new issue, team context, project, labels, and recent similar issues.\n2. Score priority and classify the request as bug, feature, support, or chore.\n3. TODO: map local team labels and priority conventions.\n4. Add a triage comment with rationale and suggested next actions.\n5. Optionally update labels, priority, and assignee."
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "research-brief-writer",
|
|
3
|
+
"name": "Research brief writer",
|
|
4
|
+
"category": "Research",
|
|
5
|
+
"description": "Monitor a topic, gather sources from the web, and publish a short brief for your team.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"tavily",
|
|
8
|
+
"notion"
|
|
9
|
+
],
|
|
10
|
+
"popularityRank": 84,
|
|
11
|
+
"estimatedSetupMinutes": 7,
|
|
12
|
+
"prompt": "/research-brief:setup",
|
|
13
|
+
"exampleImplementation": "Trigger: cron, weekly or daily\nRequired MCPs: Tavily, Notion\n\n1. Run focused Tavily searches for configured topics and competitors.\n2. Deduplicate sources and rank them by freshness and authority.\n3. TODO: confirm citation format and destination Notion database schema.\n4. Write an executive summary, implications, and recommended actions.\n5. Create or update a Notion page with citations and source links."
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "slack-channel-monitor",
|
|
3
|
+
"name": "Slack channel monitor",
|
|
4
|
+
"category": "Team communication",
|
|
5
|
+
"description": "Watch Slack channels for @openhands mentions, open a conversation with the message context, and reply in the thread when the agent finishes.",
|
|
6
|
+
"requiredIntegrationIds": ["slack"],
|
|
7
|
+
"popularityRank": 92,
|
|
8
|
+
"estimatedSetupMinutes": 7,
|
|
9
|
+
"prompt": "/slack-monitor:poll",
|
|
10
|
+
"exampleImplementation": "Trigger: cron, every minute\nRequired secret: SLACK_BOT_TOKEN or SLACK_USER_TOKEN\n\n1. Poll up to 10 configured Slack channels for new messages since the last run.\n2. Match messages containing the trigger phrase (default: @openhands).\n3. React with 👀 and start an OpenHands conversation with the message and recent channel context.\n4. Post a thread reply with a link to the conversation.\n5. Forward subsequent thread replies to the running conversation and post the agent's response when done."
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "slack-standup-digest",
|
|
3
|
+
"name": "Slack standup digest",
|
|
4
|
+
"category": "Team updates",
|
|
5
|
+
"description": "Summarize yesterday\u2019s Slack activity into an async standup note with blockers, decisions, and owners.",
|
|
6
|
+
"requiredIntegrationIds": [
|
|
7
|
+
"slack"
|
|
8
|
+
],
|
|
9
|
+
"popularityRank": 94,
|
|
10
|
+
"estimatedSetupMinutes": 5,
|
|
11
|
+
"prompt": "/standup-digest:setup",
|
|
12
|
+
"exampleImplementation": "Trigger: cron, weekday mornings\nRequired MCP: Slack\n\n1. Search configured channels for messages since the last digest window.\n2. Cluster updates into shipped work, active work, blockers, and decisions.\n3. TODO: choose a safe allowlist for channels and whether DMs are excluded.\n4. Draft a Slack message with owners, links, and unanswered questions.\n5. Optionally post to the configured standup channel."
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface RecommendedAutomation {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
category: string;
|
|
5
|
+
description: string;
|
|
6
|
+
prompt: string;
|
|
7
|
+
exampleImplementation: string;
|
|
8
|
+
requiredIntegrationIds: string[];
|
|
9
|
+
popularityRank: number;
|
|
10
|
+
estimatedSetupMinutes: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const AUTOMATION_CATALOG: RecommendedAutomation[];
|
|
14
|
+
export default AUTOMATION_CATALOG;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import github_pr_reviewer from "./catalog/github-pr-reviewer.json" with { type: "json" };
|
|
2
|
+
import github_repo_monitor from "./catalog/github-repo-monitor.json" with { type: "json" };
|
|
3
|
+
import slack_standup_digest from "./catalog/slack-standup-digest.json" with { type: "json" };
|
|
4
|
+
import slack_channel_monitor from "./catalog/slack-channel-monitor.json" with { type: "json" };
|
|
5
|
+
import linear_triage_assistant from "./catalog/linear-triage-assistant.json" with { type: "json" };
|
|
6
|
+
import research_brief_writer from "./catalog/research-brief-writer.json" with { type: "json" };
|
|
7
|
+
import incident_retrospective_drafter from "./catalog/incident-retrospective-drafter.json" with { type: "json" };
|
|
8
|
+
|
|
9
|
+
export const AUTOMATION_CATALOG = [
|
|
10
|
+
github_pr_reviewer,
|
|
11
|
+
github_repo_monitor,
|
|
12
|
+
slack_standup_digest,
|
|
13
|
+
slack_channel_monitor,
|
|
14
|
+
linear_triage_assistant,
|
|
15
|
+
research_brief_writer,
|
|
16
|
+
incident_retrospective_drafter,
|
|
17
|
+
];
|
|
18
|
+
export default AUTOMATION_CATALOG;
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export {
|
|
2
|
+
INTEGRATION_CATALOG,
|
|
3
|
+
type IntegrationAuthConfig,
|
|
4
|
+
type IntegrationAuthStrategy,
|
|
5
|
+
type IntegrationCatalogEntry,
|
|
6
|
+
type IntegrationConnectionOption,
|
|
7
|
+
type IntegrationHttpConfig,
|
|
8
|
+
type IntegrationOAuthConfig,
|
|
9
|
+
type IntegrationProvider,
|
|
10
|
+
type IntegrationTransport,
|
|
11
|
+
type MarketplaceField,
|
|
12
|
+
type MarketplaceFieldType,
|
|
13
|
+
type OAuthProviderCatalogOption,
|
|
14
|
+
type OAuthProviderRegistrationDefaults,
|
|
15
|
+
} from "./integrations/index.js";
|
|
16
|
+
export { AUTOMATION_CATALOG } from "./automations/index.js";
|
|
17
|
+
export type { RecommendedAutomation } from "./automations/index.js";
|
package/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Integration catalog
|
|
2
|
+
|
|
3
|
+
This directory contains curated integration metadata for OpenHands clients.
|
|
4
|
+
Most current entries are MCP-backed, but the schema also supports HTTP/OpenAPI
|
|
5
|
+
integrations so clients can consume one source of truth.
|
|
6
|
+
|
|
7
|
+
- `catalog/*.json` contains one source file per direct integration entry.
|
|
8
|
+
- `index.js` assembles and exports the catalog for Node.js and bundlers.
|
|
9
|
+
- `index.d.ts` contains the public TypeScript shape.
|
|
10
|
+
|
|
11
|
+
Consumers can import the package export:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import { INTEGRATION_CATALOG } from "@openhands/extensions/integrations";
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Migration from the MCP catalog
|
|
18
|
+
|
|
19
|
+
This catalog replaces the experimental `@openhands/extensions/mcps` export.
|
|
20
|
+
The MCP-only `mcps/` directory has been renamed to `integrations/`, and the
|
|
21
|
+
old package exports were removed rather than kept as aliases.
|
|
22
|
+
|
|
23
|
+
- Import `INTEGRATION_CATALOG` from `@openhands/extensions/integrations`
|
|
24
|
+
instead of `MCP_CATALOG` from `@openhands/extensions/mcps`.
|
|
25
|
+
- Import logo mappings from `@openhands/extensions/integrations/logos`
|
|
26
|
+
instead of `@openhands/extensions/mcps/logos`.
|
|
27
|
+
- Use `IntegrationCatalogEntry` instead of `McpCatalogEntry`.
|
|
28
|
+
- Read MCP configuration from `entry.connectionOptions[]`. Direct MCP entries
|
|
29
|
+
have `provider: "mcp"` and a `transport`; entries may expose multiple
|
|
30
|
+
options such as `id: "oauth"` for a hosted OAuth MCP endpoint and `id:
|
|
31
|
+
"api"` for an API-key or stdio fallback.
|
|
32
|
+
- Use `entry.defaultConnectionOptionId` to choose the preferred option.
|
|
33
|
+
- Automation catalog entries now use `requiredIntegrationIds` instead of
|
|
34
|
+
`requiredMcpIds`.
|
|
35
|
+
|
|
36
|
+
The `mcps` API was intentionally broken because it was pre-release and had not
|
|
37
|
+
been adopted as a stable public surface.
|
|
38
|
+
|
|
39
|
+
The catalog intentionally stores only serializable data. Client applications are responsible for mapping entries to UI-specific icons or styling.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "airtable",
|
|
3
|
+
"name": "Airtable",
|
|
4
|
+
"description": "List bases, query records, and update fields across your Airtable workspace.",
|
|
5
|
+
"docsUrl": "https://github.com/domdomegg/airtable-mcp-server",
|
|
6
|
+
"iconBg": "#FCB400",
|
|
7
|
+
"iconColor": "var(--oh-surface-deep)",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"spreadsheet",
|
|
10
|
+
"database",
|
|
11
|
+
"records",
|
|
12
|
+
"bases"
|
|
13
|
+
],
|
|
14
|
+
"kind": "mcp",
|
|
15
|
+
"defaultConnectionOptionId": "api",
|
|
16
|
+
"connectionOptions": [
|
|
17
|
+
{
|
|
18
|
+
"id": "api",
|
|
19
|
+
"provider": "mcp",
|
|
20
|
+
"transport": {
|
|
21
|
+
"kind": "stdio",
|
|
22
|
+
"serverName": "airtable",
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": [
|
|
25
|
+
"-y",
|
|
26
|
+
"airtable-mcp-server"
|
|
27
|
+
],
|
|
28
|
+
"envFields": [
|
|
29
|
+
{
|
|
30
|
+
"key": "AIRTABLE_API_KEY",
|
|
31
|
+
"label": "Airtable personal access token",
|
|
32
|
+
"type": "password",
|
|
33
|
+
"required": true,
|
|
34
|
+
"helperText": "Personal access token from your Airtable account.",
|
|
35
|
+
"helperLink": "https://airtable.com/create/tokens"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"auth": {
|
|
40
|
+
"strategy": "api_key"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "apify",
|
|
3
|
+
"name": "Apify Actors",
|
|
4
|
+
"description": "Run any of Apify's 5,000+ Actors (scrapers, automations) from the agent.",
|
|
5
|
+
"docsUrl": "https://docs.apify.com/platform/integrations/mcp",
|
|
6
|
+
"iconBg": "#10b981",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"scraping",
|
|
9
|
+
"automation",
|
|
10
|
+
"crawl",
|
|
11
|
+
"actors"
|
|
12
|
+
],
|
|
13
|
+
"kind": "mcp",
|
|
14
|
+
"defaultConnectionOptionId": "api",
|
|
15
|
+
"connectionOptions": [
|
|
16
|
+
{
|
|
17
|
+
"id": "api",
|
|
18
|
+
"provider": "mcp",
|
|
19
|
+
"transport": {
|
|
20
|
+
"kind": "stdio",
|
|
21
|
+
"serverName": "apify",
|
|
22
|
+
"command": "npx",
|
|
23
|
+
"args": [
|
|
24
|
+
"-y",
|
|
25
|
+
"@apify/actors-mcp-server"
|
|
26
|
+
],
|
|
27
|
+
"envFields": [
|
|
28
|
+
{
|
|
29
|
+
"key": "APIFY_TOKEN",
|
|
30
|
+
"label": "Apify token",
|
|
31
|
+
"type": "password",
|
|
32
|
+
"required": true,
|
|
33
|
+
"helperText": "API token from your Apify account settings.",
|
|
34
|
+
"helperLink": "https://console.apify.com/account/integrations"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"auth": {
|
|
39
|
+
"strategy": "api_key"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "atlassian",
|
|
3
|
+
"name": "Atlassian (Jira & Confluence)",
|
|
4
|
+
"description": "Search Jira issues and Confluence pages via Atlassian's hosted MCP server.",
|
|
5
|
+
"docsUrl": "https://www.atlassian.com/platform/remote-mcp-server",
|
|
6
|
+
"iconBg": "#0052CC",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"jira",
|
|
9
|
+
"confluence",
|
|
10
|
+
"tickets",
|
|
11
|
+
"wiki",
|
|
12
|
+
"issues"
|
|
13
|
+
],
|
|
14
|
+
"kind": "mcp",
|
|
15
|
+
"defaultConnectionOptionId": "none",
|
|
16
|
+
"connectionOptions": [
|
|
17
|
+
{
|
|
18
|
+
"id": "none",
|
|
19
|
+
"provider": "mcp",
|
|
20
|
+
"transport": {
|
|
21
|
+
"kind": "sse",
|
|
22
|
+
"url": "https://mcp.atlassian.com/v1/sse",
|
|
23
|
+
"apiKeyOptional": true
|
|
24
|
+
},
|
|
25
|
+
"auth": {
|
|
26
|
+
"strategy": "none",
|
|
27
|
+
"apiKeyOptional": true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "brave-search",
|
|
3
|
+
"name": "Brave Search",
|
|
4
|
+
"description": "Privacy-first web and local search using the Brave Search API.",
|
|
5
|
+
"docsUrl": "https://github.com/brave/brave-search-mcp-server",
|
|
6
|
+
"iconBg": "#FB542B",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"search",
|
|
9
|
+
"web"
|
|
10
|
+
],
|
|
11
|
+
"kind": "mcp",
|
|
12
|
+
"defaultConnectionOptionId": "api",
|
|
13
|
+
"connectionOptions": [
|
|
14
|
+
{
|
|
15
|
+
"id": "api",
|
|
16
|
+
"provider": "mcp",
|
|
17
|
+
"transport": {
|
|
18
|
+
"kind": "stdio",
|
|
19
|
+
"serverName": "brave_search",
|
|
20
|
+
"command": "npx",
|
|
21
|
+
"args": [
|
|
22
|
+
"-y",
|
|
23
|
+
"@brave/brave-search-mcp-server",
|
|
24
|
+
"--transport",
|
|
25
|
+
"stdio"
|
|
26
|
+
],
|
|
27
|
+
"envFields": [
|
|
28
|
+
{
|
|
29
|
+
"key": "BRAVE_API_KEY",
|
|
30
|
+
"label": "Brave API key",
|
|
31
|
+
"type": "password",
|
|
32
|
+
"required": true,
|
|
33
|
+
"helperText": "API key from the Brave Search API portal.",
|
|
34
|
+
"helperLink": "https://api-dashboard.search.brave.com/app/keys"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"auth": {
|
|
39
|
+
"strategy": "api_key"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|