Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@
{
"name": "keeperhub",
"source": "./plugins/keeperhub",
"description": "Manage KeeperHub workflows, execute automations, and browse templates from Claude Code. Connects to KeeperHub's remote MCP server with OAuth browser authentication.",
"description": "Build and manage automation workflows from Claude Code. Monitor smart contracts, track on-chain events, configure scheduled tasks, and connect notifications across Discord, Telegram, email, and webhooks. Connects to KeeperHub's remote MCP server with OAuth browser authentication.",
"version": "3.0.0",
"author": {
"name": "KeeperHub"
"name": "KeeperHub",
"email": "support@keeperhub.com",
"url": "https://keeperhub.com"
},
"homepage": "https://app.keeperhub.com",
"repository": "https://github.com/KeeperHub/claude-plugins",
Expand All @@ -26,7 +28,7 @@
"workflow",
"automation",
"web3",
"blockchain",
"smart-contracts",
"mcp"
],
"category": "automation"
Expand Down
89 changes: 89 additions & 0 deletions .github/workflows/validate-plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Validate Plugin Structure

on:
pull_request:
branches: [main]
push:
branches: [main]

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Validate JSON syntax
run: |
echo "Validating JSON files..."
errors=0
for f in $(find . -name "*.json" -not -path "./node_modules/*"); do
if ! jq empty "$f" 2>/dev/null; then
echo "Invalid JSON: $f"
errors=$((errors + 1))
fi
done
if [ "$errors" -gt 0 ]; then
echo "$errors JSON file(s) have syntax errors"
exit 1
fi
echo "All JSON files valid"

- name: Validate plugin structure
run: |
echo "Checking required files..."
errors=0

for plugin_dir in plugins/*/; do
name=$(basename "$plugin_dir")
echo "Validating plugin: $name"

# Check required manifest
if [ ! -f "$plugin_dir/.claude-plugin/plugin.json" ]; then
echo " Missing: .claude-plugin/plugin.json"
errors=$((errors + 1))
else
# Validate name field exists
plugin_name=$(jq -r '.name // empty' "$plugin_dir/.claude-plugin/plugin.json")
if [ -z "$plugin_name" ]; then
echo " Missing 'name' field in plugin.json"
errors=$((errors + 1))
fi
fi

# Check recommended files
[ ! -f "$plugin_dir/README.md" ] && echo " Warning: Missing README.md"
done

# Check marketplace manifest
if [ ! -f ".claude-plugin/marketplace.json" ]; then
echo "Missing: .claude-plugin/marketplace.json"
errors=$((errors + 1))
fi

# Check repo-level files
[ ! -f "LICENSE" ] && echo "Warning: Missing LICENSE"
[ ! -f "README.md" ] && echo "Warning: Missing README.md"
[ ! -f "SECURITY.md" ] && echo "Warning: Missing SECURITY.md"

if [ "$errors" -gt 0 ]; then
echo "$errors validation error(s) found"
exit 1
fi
echo "All validations passed"

- name: Check MCP endpoint reachability
run: |
for plugin_dir in plugins/*/; do
if [ -f "$plugin_dir/.mcp.json" ]; then
urls=$(jq -r '.. | .url? // empty' "$plugin_dir/.mcp.json" 2>/dev/null)
for url in $urls; do
echo "Checking: $url"
status=$(curl -sf -o /dev/null -w "%{http_code}" --max-time 10 "$url" 2>/dev/null || echo "000")
if [ "$status" = "000" ]; then
echo " Warning: $url is unreachable (may require auth)"
else
echo " Reachable (HTTP $status)"
fi
done
fi
done
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules/
.DS_Store
*.log
.env
.env.local
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.0.0] - 2026-03-25

### Added
- Remote HTTP MCP server connection (app.keeperhub.com/mcp)
- OAuth 2.0 browser-based authentication
- API key fallback for headless/CI environments
- 4 auto-invoked skills: workflow-builder, template-browser, execution-monitor, plugin-explorer
- 2 slash commands: /keeperhub:login, /keeperhub:status
- Marketplace configuration for self-hosted distribution
- CI workflow for automated marketplace registry sync

### Changed
- Migrated from local CLI (`kh serve --mcp`) to remote HTTP MCP endpoint
- Simplified installation to single marketplace add + plugin install

## [2.0.0] - 2026-03-01

### Changed
- Restructured as Claude Code plugin (from standalone MCP config)
- Added skill-based architecture with trigger routing

## [1.0.0] - 2026-02-15

### Added
- Initial release as Claude Code plugin
- Basic workflow management commands
46 changes: 46 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Contributing to KeeperHub Claude Plugins

Thank you for your interest in contributing. This guide covers the basics.

## Reporting Bugs

Open a GitHub Issue with:

- A clear, descriptive title
- Steps to reproduce the problem
- Expected vs. actual behavior
- Your environment (OS, Claude Code version)

## Suggesting Features

Open a GitHub Issue with the `enhancement` label. Describe the use case and why it would be valuable.

## Submitting Pull Requests

1. Fork the repository
2. Create a feature branch from `main` (`git checkout -b feature/your-change`)
3. Make your changes
4. Test thoroughly
5. Commit with a clear message describing the change
6. Push to your fork and open a PR against `main`

### PR Guidelines

- Keep changes focused and minimal
- Update documentation if your change affects usage
- Ensure any new files follow existing conventions
- One logical change per PR

## Code Style

- No emojis in code, comments, or documentation
- Follow existing file structure and naming conventions
- Keep plugin definitions as JSON/Markdown only (no executable code)

## Code of Conduct

All participants are expected to treat others with respect and professionalism. Harassment, discrimination, and disruptive behavior will not be tolerated. See the project maintainers if you have concerns.

## Questions

If you have questions about contributing, open a GitHub Issue or reach out at support@keeperhub.com.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 KeeperHub
Copyright (c) 2025-2026 KeeperHub

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Claude Code plugin marketplace by KeeperHub.

### keeperhub

Build and manage Web3 automation workflows from Claude Code. Create workflows that monitor smart contracts, execute DeFi operations, transfer tokens, and send notifications across Discord, Telegram, email, and webhooks. Connects to KeeperHub's remote MCP server with OAuth browser authentication. Includes 4 skills and 2 slash commands.
Build and manage automation workflows from Claude Code. Create workflows that monitor smart contracts, track on-chain events, run scheduled tasks, and send notifications across Discord, Telegram, email, and webhooks. Connects to KeeperHub's remote MCP server with OAuth browser authentication. Includes 4 skills and 2 slash commands.

```
/plugin install keeperhub@keeperhub-plugins
Expand All @@ -31,8 +31,8 @@ After install, run `/mcp` in Claude Code and authorize the keeperhub server via
- **plugin-explorer** -- discover available plugins and integrations

**Example use cases:**
- "Create a workflow that monitors my Aave health factor every 15 minutes and sends a Telegram alert if it drops below 1.5"
- "Show me available workflow templates for wallet monitoring"
- "Create a workflow that monitors a smart contract event every 15 minutes and sends a Telegram alert when a specific condition is met"
- "Show me available workflow templates for on-chain event monitoring"
- "Why did my last workflow execution fail? Show me the logs"
- "What KeeperHub plugins and integrations are available?"
- "Set up an automation that checks ETH price hourly and sends a Discord notification when it crosses $3000"
- "Set up an automation that runs a scheduled check hourly and sends a Discord notification when a threshold is crossed"
40 changes: 40 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Security Policy

## Reporting Vulnerabilities

If you discover a security vulnerability in this project, please report it responsibly.

- **Email**: security@keeperhub.com
- **Expected response time**: 48 hours
- **Do not** open public GitHub issues for security vulnerabilities.

Please include a description of the vulnerability, steps to reproduce, and any relevant context.

## Supported Versions

| Version | Supported |
| ------- | ------------------ |
| 3.0.x | Yes |
| < 3.0 | No |

## Security Practices

- **HTTPS only**: All communication with the remote MCP server uses HTTPS with TLS 1.2 or higher.
- **OAuth 2.0 authentication**: The plugin uses browser-based OAuth 2.0 flows. No credentials are stored in the plugin configuration files.
- **No hardcoded secrets**: API keys and tokens are provided exclusively via environment variables. They are never committed to the repository.
- **No executable code**: This plugin consists entirely of markdown and JSON configuration files. There is no executable code to audit or exploit.
- **Server-side reviews**: The remote MCP server at `app.keeperhub.com` undergoes regular security reviews and penetration testing.

## Scope

### In scope

- Plugin configuration files in this repository (markdown and JSON)
- Behavior of the MCP endpoint at `app.keeperhub.com/mcp`
- OAuth flow and token handling between Claude and the MCP server

### Out of scope

- The KeeperHub web application itself (report separately at security@keeperhub.com)
- Third-party dependencies or services not maintained by KeeperHub
- Claude Desktop or Claude Code client vulnerabilities (report to Anthropic)
6 changes: 3 additions & 3 deletions plugins/keeperhub/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "keeperhub",
"description": "Manage KeeperHub workflows, execute automations, and browse templates from Claude Code. Connects to KeeperHub's remote MCP server with OAuth browser authentication.",
"description": "Build and manage automation workflows from Claude Code. Monitor smart contracts, track on-chain events, configure scheduled tasks, and connect notifications across Discord, Telegram, email, and webhooks. Connects to KeeperHub's remote MCP server with OAuth browser authentication.",
"version": "3.0.0",
"author": { "name": "KeeperHub" },
"author": { "name": "KeeperHub", "email": "support@keeperhub.com", "url": "https://keeperhub.com" },
"homepage": "https://app.keeperhub.com",
"repository": "https://github.com/KeeperHub/claude-plugins",
"license": "MIT",
"keywords": ["keeperhub", "workflow", "automation", "web3", "blockchain", "mcp"]
"keywords": ["keeperhub", "workflow", "automation", "web3", "smart-contracts", "mcp"]
}
21 changes: 21 additions & 0 deletions plugins/keeperhub/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# KeeperHub Plugin

This is a Claude Code plugin that connects to KeeperHub's remote MCP server for workflow automation.

## Architecture

- Pure markdown and JSON plugin (no executable code)
- Connects to remote MCP server at `app.keeperhub.com/mcp` via HTTP
- Authentication via OAuth 2.0 (browser) or API key (environment variable)

## Components

- **Skills**: 4 auto-invoked skills for workflow building, template browsing, execution monitoring, and plugin exploration
- **Commands**: 2 slash commands for login setup and status checking
- **MCP Server**: Remote HTTP connection configured in `.mcp.json`

## Key Patterns

- All skills check authentication before making API calls
- Skills route to each other for out-of-scope requests
- Progressive disclosure: start simple, add complexity only when needed
4 changes: 2 additions & 2 deletions plugins/keeperhub/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# KeeperHub Plugin for Claude Code

Manage KeeperHub workflows, execute automations, and browse templates directly from Claude Code.
Build and manage automation workflows from Claude Code. Monitor smart contracts, track on-chain events, configure scheduled tasks, and connect notifications across Discord, Telegram, email, and webhooks.

## Quick Start

Expand All @@ -17,7 +17,7 @@ Run `/mcp` in Claude Code, find "keeperhub" in the server list, and authorize vi

For headless/CI environments, set `KH_API_KEY` with an organization API key (`kh_` prefix) instead.

**3.** Try asking Claude to "create a workflow that monitors a wallet" or run `/keeperhub:status` to verify.
**3.** Try asking Claude to "create a workflow that monitors a smart contract event" or run `/keeperhub:status` to verify.

## Commands

Expand Down
2 changes: 1 addition & 1 deletion plugins/keeperhub/commands/login.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ KH_API_KEY env var set: !`[ -n "${KH_API_KEY:-}" ] && echo "YES" || echo "NO"`
MCP Server: app.keeperhub.com/mcp (remote)
Auth: [OAuth / API key]
```
- Suggest trying: "Create a workflow that monitors a wallet"
- Suggest trying: "Create a workflow that monitors a smart contract event"
</process>

<success_criteria>
Expand Down
6 changes: 2 additions & 4 deletions plugins/keeperhub/skills/plugin-explorer/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ integrations the user already has connected.
Activate when ANY of these are true:
- User says "what plugins are available", "show plugins", or "list plugins"
- User says "show integrations", "what integrations do I have", or "list integrations"
- User says "how do I use" followed by a plugin name (web3, discord, sendgrid, webhook)
- User says "how do I use" followed by a plugin name (notifications, discord, sendgrid, webhook)
- User says "what can KeeperHub do", "what actions are available", or "what are my options"
- User asks about a specific action type or capability
- User wants to validate a plugin configuration before using it in a workflow
Expand All @@ -38,7 +38,7 @@ Do NOT activate when:
2. **For general exploration** ("what can KeeperHub do", "what plugins"):
- Use `search_plugins` to list available plugins
- Present a summary: plugin name, description, number of actions
- Group by category if helpful (web3, notifications, utilities)
- Group by category if helpful (monitoring, notifications, utilities)

3. **For specific plugin details** ("how do I use web3"):
- Use `get_plugin` to get full documentation
Expand All @@ -48,7 +48,6 @@ Do NOT activate when:

4. **For integration status** ("what integrations do I have"):
- Use `list_integrations` to show configured integrations
- For web3 users, use `get_wallet_integration` to show wallet details
- Highlight which integrations are active vs. need setup
- Suggest plugins that would work with existing integrations

Expand All @@ -67,7 +66,6 @@ Do NOT activate when:
- `get_plugin` -- get full plugin documentation
- `list_action_schemas` -- list available actions and their schemas
- `list_integrations` -- show configured integrations
- `get_wallet_integration` -- get wallet integration details
- `validate_plugin_config` -- validate action configuration
- `tools_documentation` -- get MCP tool documentation
</process>
Expand Down
2 changes: 1 addition & 1 deletion plugins/keeperhub/skills/template-browser/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Do NOT activate when:
3. **Show template details** when the user picks one:
- Use `get_template` to fetch full metadata
- Present: name, description, what it does, required integrations, trigger type, actions involved
- Highlight any prerequisites (e.g., "requires Discord integration" or "needs a wallet configured")
- Highlight any prerequisites (e.g., "requires Discord integration" or "needs an API key configured")

4. **Deploy the template** when the user confirms:
- Use `deploy_template` to create the workflow from the template
Expand Down
6 changes: 3 additions & 3 deletions plugins/keeperhub/skills/workflow-builder/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ complexity only when needed.
<trigger_conditions>
Activate when ANY of these are true:
- User says "create a workflow", "build a workflow", "make a workflow", or "new workflow"
- User wants to "monitor" a contract, wallet, token, or address
- User wants to "monitor" a contract, API endpoint, or data source
- User says "set up automation", "automate", or "when X happens do Y"
- User says "alert me when", "notify me when", or "watch for"
- User describes a pipeline like "transfer then notify" or "check balance and send alert"
- User mentions specific KeeperHub actions like "call contract", "send webhook", "discord notification"
- User describes a pipeline like "check status then notify" or "check condition and send alert"
- User mentions specific KeeperHub actions like "read contract", "send webhook", "discord notification"
</trigger_conditions>

<do_not_trigger>
Expand Down
Loading