chore(release): publish preparation — fix docs, update badges, clean configs
- Rewrite docs/getting-started.md (correct URLs, entry points, tool counts) - Update README: badges (289 tests, 589 tools, CI), FastMCP note, fix links - Add PyPI classifiers: License, OS Independent, Console - Fix community sync false positives in test allowlist - Clean docker-compose.yaml (remove internal phase references) - Update tool counts: WordPress 65→67, total 587→589 - Update GitHub URLs to airano-ir/mcphub Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -86,8 +86,8 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
mcphub/mcphub:latest
|
airano/mcphub:latest
|
||||||
mcphub/mcphub:${{ steps.version.outputs.VERSION }}
|
airano/mcphub:${{ steps.version.outputs.VERSION }}
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
|
|
||||||
github-release:
|
github-release:
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ After 2-month hiatus (Dec 2025 - Feb 2026), updated all dependencies and verifie
|
|||||||
- All 54 tests now pass (previously 5 were failing)
|
- All 54 tests now pass (previously 5 were failing)
|
||||||
|
|
||||||
#### Verified
|
#### Verified
|
||||||
- All 587 tools generate correctly
|
- All 589 tools generate correctly
|
||||||
- Middleware API stable (Middleware, MiddlewareContext, get_http_headers)
|
- Middleware API stable (Middleware, MiddlewareContext, get_http_headers)
|
||||||
- 30+ custom routes operational (dashboard + OAuth)
|
- 30+ custom routes operational (dashboard + OAuth)
|
||||||
- Multi-endpoint architecture functional
|
- Multi-endpoint architecture functional
|
||||||
@@ -604,5 +604,5 @@ Initial implementation of WordPress management tools.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
[1.0.0]: https://github.com/mcphub/mcphub/releases/tag/v1.0.0
|
[1.0.0]: https://github.com/airano-ir/mcphub/releases/tag/v1.0.0
|
||||||
[Unreleased]: https://github.com/mcphub/mcphub/compare/v1.0.0...HEAD
|
[Unreleased]: https://github.com/airano-ir/mcphub/compare/v1.0.0...HEAD
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
**MCP Hub** — a Python MCP (Model Context Protocol) server that manages multiple self-hosted projects through a unified plugin architecture. Supports 9 plugin types (WordPress, WooCommerce, WordPress Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools total. The tool count stays constant regardless of how many sites are configured.
|
**MCP Hub** — a Python MCP (Model Context Protocol) server that manages multiple self-hosted projects through a unified plugin architecture. Supports 9 plugin types (WordPress, WooCommerce, WordPress Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~589 tools total. The tool count stays constant regardless of how many sites are configured.
|
||||||
|
|
||||||
## Quick Setup
|
## Quick Setup
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Thank you for your interest in contributing to MCP Hub!
|
|||||||
**Prerequisites**: Python 3.11+, Docker (optional), Git
|
**Prerequisites**: Python 3.11+, Docker (optional), Git
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
cd mcphub
|
cd mcphub
|
||||||
cp env.example .env
|
cp env.example .env
|
||||||
pip install -e ".[dev]"
|
pip install -e ".[dev]"
|
||||||
|
|||||||
29
README.md
29
README.md
@@ -8,8 +8,9 @@ Connect your sites, stores, repos, and databases — manage them all through Cla
|
|||||||
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](https://www.python.org/)
|
[](https://www.python.org/)
|
||||||
[]()
|
[]()
|
||||||
[]()
|
[]()
|
||||||
|
[](https://github.com/airano-ir/mcphub/actions/workflows/ci.yml)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ Connect your sites, stores, repos, and databases — manage them all through Cla
|
|||||||
|
|
||||||
WordPress powers 43% of the web. WooCommerce runs 36% of online stores. Yet **no MCP server existed** for managing them through AI — until now.
|
WordPress powers 43% of the web. WooCommerce runs 36% of online stores. Yet **no MCP server existed** for managing them through AI — until now.
|
||||||
|
|
||||||
MCP Hub is the first and only MCP server that lets you manage WordPress, WooCommerce, and 7 other self-hosted services through any AI assistant. Instead of clicking through dashboards, just tell your AI what to do:
|
MCP Hub is the first MCP server that lets you manage WordPress, WooCommerce, and 7 other self-hosted services through any AI assistant. Instead of clicking through dashboards, just tell your AI what to do:
|
||||||
|
|
||||||
> *"Update the SEO meta description for all WooCommerce products that don't have one"*
|
> *"Update the SEO meta description for all WooCommerce products that don't have one"*
|
||||||
>
|
>
|
||||||
@@ -33,7 +34,7 @@ MCP Hub is the first and only MCP server that lets you manage WordPress, WooComm
|
|||||||
|---------|----------|--------|---------------------|-------------|
|
|---------|----------|--------|---------------------|-------------|
|
||||||
| Multi-site management | Yes | Yes | No | **Yes** |
|
| Multi-site management | Yes | Yes | No | **Yes** |
|
||||||
| AI agent integration | No | No | No | **Native (MCP)** |
|
| AI agent integration | No | No | No | **Native (MCP)** |
|
||||||
| Full WordPress API | Dashboard | Dashboard | Content only | **65 tools** |
|
| Full WordPress API | Dashboard | Dashboard | Content only | **67 tools** |
|
||||||
| WooCommerce management | No | Limited | No | **28 tools** |
|
| WooCommerce management | No | Limited | No | **28 tools** |
|
||||||
| Git/CI management | No | No | No | **56 tools (Gitea)** |
|
| Git/CI management | No | No | No | **56 tools (Gitea)** |
|
||||||
| Automation workflows | No | No | No | **56 tools (n8n)** |
|
| Automation workflows | No | No | No | **56 tools (n8n)** |
|
||||||
@@ -43,11 +44,11 @@ MCP Hub is the first and only MCP server that lets you manage WordPress, WooComm
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 587 Tools Across 9 Plugins
|
## 589 Tools Across 9 Plugins
|
||||||
|
|
||||||
| Plugin | Tools | What You Can Do |
|
| Plugin | Tools | What You Can Do |
|
||||||
|--------|-------|-----------------|
|
|--------|-------|-----------------|
|
||||||
| **WordPress** | 65 | Posts, pages, media, users, menus, taxonomies, SEO (Rank Math/Yoast) |
|
| **WordPress** | 67 | Posts, pages, media, users, menus, taxonomies, SEO (Rank Math/Yoast) |
|
||||||
| **WooCommerce** | 28 | Products, orders, customers, coupons, reports, shipping |
|
| **WooCommerce** | 28 | Products, orders, customers, coupons, reports, shipping |
|
||||||
| **WordPress Advanced** | 22 | Database ops, bulk operations, WP-CLI, system management |
|
| **WordPress Advanced** | 22 | Database ops, bulk operations, WP-CLI, system management |
|
||||||
| **Gitea** | 56 | Repos, issues, pull requests, releases, webhooks, organizations |
|
| **Gitea** | 56 | Repos, issues, pull requests, releases, webhooks, organizations |
|
||||||
@@ -57,7 +58,7 @@ MCP Hub is the first and only MCP server that lets you manage WordPress, WooComm
|
|||||||
| **Appwrite** | 100 | Databases, auth, storage, functions, teams, messaging |
|
| **Appwrite** | 100 | Databases, auth, storage, functions, teams, messaging |
|
||||||
| **Directus** | 100 | Collections, items, users, files, flows, permissions |
|
| **Directus** | 100 | Collections, items, users, files, flows, permissions |
|
||||||
| **System** | 17 | Health monitoring, API keys, project discovery |
|
| **System** | 17 | Health monitoring, API keys, project discovery |
|
||||||
| **Total** | **587** | Constant count — scales to unlimited sites |
|
| **Total** | **589** | Constant count — scales to unlimited sites |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ MCP Hub is the first and only MCP server that lets you manage WordPress, WooComm
|
|||||||
### Option 1: Docker (Recommended)
|
### Option 1: Docker (Recommended)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
cd mcphub
|
cd mcphub
|
||||||
cp env.example .env
|
cp env.example .env
|
||||||
# Edit .env with your site credentials
|
# Edit .env with your site credentials
|
||||||
@@ -76,7 +77,7 @@ docker compose up -d
|
|||||||
### Option 2: Python
|
### Option 2: Python
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
cd mcphub
|
cd mcphub
|
||||||
pip install -e .
|
pip install -e .
|
||||||
cp env.example .env
|
cp env.example .env
|
||||||
@@ -201,9 +202,9 @@ MCP Hub supports **Open Dynamic Client Registration** (RFC 7591). ChatGPT can au
|
|||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
```
|
```
|
||||||
/mcp → Admin endpoint (all 587 tools)
|
/mcp → Admin endpoint (all 589 tools)
|
||||||
/system/mcp → System tools only (17 tools)
|
/system/mcp → System tools only (17 tools)
|
||||||
/wordpress/mcp → WordPress tools (65 tools)
|
/wordpress/mcp → WordPress tools (67 tools)
|
||||||
/woocommerce/mcp → WooCommerce tools (28 tools)
|
/woocommerce/mcp → WooCommerce tools (28 tools)
|
||||||
/gitea/mcp → Gitea tools (56 tools)
|
/gitea/mcp → Gitea tools (56 tools)
|
||||||
/n8n/mcp → n8n tools (56 tools)
|
/n8n/mcp → n8n tools (56 tools)
|
||||||
@@ -224,6 +225,8 @@ MCP Hub supports **Open Dynamic Client Registration** (RFC 7591). ChatGPT can au
|
|||||||
- **GDPR-compliant audit logging** with automatic sensitive data filtering
|
- **GDPR-compliant audit logging** with automatic sensitive data filtering
|
||||||
- **Web dashboard** with real-time health monitoring (8 pages, EN/FA i18n)
|
- **Web dashboard** with real-time health monitoring (8 pages, EN/FA i18n)
|
||||||
|
|
||||||
|
> **Compatibility Note**: MCP Hub requires FastMCP 2.x (`>=2.14.0,<3.0.0`). FastMCP 3.0 introduced breaking changes and is not yet supported. If you install dependencies manually, ensure you don't upgrade to FastMCP 3.x.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
@@ -235,7 +238,7 @@ MCP Hub supports **Open Dynamic Client Registration** (RFC 7591). ChatGPT can au
|
|||||||
| [API Keys Guide](docs/API_KEYS_GUIDE.md) | Per-project API key management |
|
| [API Keys Guide](docs/API_KEYS_GUIDE.md) | Per-project API key management |
|
||||||
| [OAuth Guide](docs/OAUTH_GUIDE.md) | OAuth 2.1 setup for Claude/ChatGPT |
|
| [OAuth Guide](docs/OAUTH_GUIDE.md) | OAuth 2.1 setup for Claude/ChatGPT |
|
||||||
| [Gitea Guide](docs/GITEA_GUIDE.md) | Gitea plugin configuration |
|
| [Gitea Guide](docs/GITEA_GUIDE.md) | Gitea plugin configuration |
|
||||||
| [Deployment Guide](DEPLOYMENT_GUIDE.md) | Docker and Coolify deployment |
|
| [Deployment Guide](docs/DEPLOYMENT_GUIDE.md) | Docker and Coolify deployment |
|
||||||
| [Troubleshooting](docs/troubleshooting.md) | Common issues and solutions |
|
| [Troubleshooting](docs/troubleshooting.md) | Common issues and solutions |
|
||||||
| [Plugin Development](docs/PLUGIN_DEVELOPMENT.md) | Build your own plugin |
|
| [Plugin Development](docs/PLUGIN_DEVELOPMENT.md) | Build your own plugin |
|
||||||
|
|
||||||
@@ -247,7 +250,7 @@ MCP Hub supports **Open Dynamic Client Registration** (RFC 7591). ChatGPT can au
|
|||||||
# Install with dev dependencies
|
# Install with dev dependencies
|
||||||
pip install -e ".[dev]"
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
# Run tests (164 tests)
|
# Run tests (289 tests)
|
||||||
pytest
|
pytest
|
||||||
|
|
||||||
# Format and lint
|
# Format and lint
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
# ===================================
|
# ===================================
|
||||||
# Coolify Projects MCP Server
|
# MCP Hub — Docker Compose Configuration
|
||||||
# Docker Compose Configuration
|
|
||||||
# ===================================
|
# ===================================
|
||||||
#
|
#
|
||||||
# Build Pack: Docker Compose
|
# Build Pack: Docker Compose
|
||||||
@@ -35,7 +34,7 @@ services:
|
|||||||
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||||
- PYTHONUNBUFFERED=1
|
- PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
# === OAuth 2.1 Configuration (Phase B) ===
|
# === OAuth 2.1 Configuration ===
|
||||||
# Required for OAuth authentication
|
# Required for OAuth authentication
|
||||||
- OAUTH_JWT_SECRET_KEY=${OAUTH_JWT_SECRET_KEY}
|
- OAUTH_JWT_SECRET_KEY=${OAUTH_JWT_SECRET_KEY}
|
||||||
- OAUTH_JWT_ALGORITHM=${OAUTH_JWT_ALGORITHM:-HS256}
|
- OAUTH_JWT_ALGORITHM=${OAUTH_JWT_ALGORITHM:-HS256}
|
||||||
@@ -67,9 +66,10 @@ services:
|
|||||||
# ⚠️ DO NOT add example values here - configure in Coolify!
|
# ⚠️ DO NOT add example values here - configure in Coolify!
|
||||||
# The server will auto-discover all WORDPRESS_* variables at startup.
|
# The server will auto-discover all WORDPRESS_* variables at startup.
|
||||||
|
|
||||||
# === Future Plugins ===
|
# === Other Plugins ===
|
||||||
# Gitea, Supabase, and other plugins will auto-discover
|
# Gitea, n8n, Supabase, OpenPanel, Appwrite, and Directus plugins
|
||||||
# their environment variables when implemented.
|
# auto-discover their environment variables at startup.
|
||||||
|
# Format: {PLUGIN_TYPE}_{SITE_ID}_{CONFIG_KEY}
|
||||||
# No need to pre-define them here.
|
# No need to pre-define them here.
|
||||||
|
|
||||||
# Health check
|
# Health check
|
||||||
@@ -80,7 +80,7 @@ services:
|
|||||||
retries: 3
|
retries: 3
|
||||||
start_period: 40s
|
start_period: 40s
|
||||||
|
|
||||||
# Docker socket access for WP-CLI tools (Phase 5+)
|
# Docker socket access for WP-CLI tools
|
||||||
# Required for: wp_cache_flush, wp_cache_type, wp_transient_*, etc.
|
# Required for: wp_cache_flush, wp_cache_type, wp_transient_*, etc.
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 🚀 Getting Started with MCP Hub
|
# Getting Started with MCP Hub
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
2. [Installation](#installation)
|
2. [Installation](#installation)
|
||||||
3. [Configuration](#configuration)
|
3. [Configuration](#configuration)
|
||||||
4. [Running the Server](#running-the-server)
|
4. [Running the Server](#running-the-server)
|
||||||
5. [Testing Your Setup](#testing-your-setup)
|
5. [Connect Your AI Client](#connect-your-ai-client)
|
||||||
6. [Using MCP Tools](#using-mcp-tools)
|
6. [Using MCP Tools](#using-mcp-tools)
|
||||||
7. [Docker Deployment](#docker-deployment)
|
7. [Docker Deployment](#docker-deployment)
|
||||||
8. [Coolify Deployment](#coolify-deployment)
|
8. [Coolify Deployment](#coolify-deployment)
|
||||||
@@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Before you begin, ensure you have the following installed:
|
|
||||||
|
|
||||||
### Required
|
### Required
|
||||||
|
|
||||||
- **Python 3.11+**: [Download Python](https://www.python.org/downloads/)
|
- **Python 3.11+**: [Download Python](https://www.python.org/downloads/)
|
||||||
@@ -44,16 +42,34 @@ For each WordPress site you want to manage:
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Option 1: Automated Setup (Recommended)
|
### Option 1: Docker (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
|
cd mcphub
|
||||||
|
cp env.example .env
|
||||||
|
# Edit .env with your site credentials
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Python (pip)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
|
cd mcphub
|
||||||
|
pip install -e .
|
||||||
|
cp env.example .env
|
||||||
|
# Edit .env with your site credentials
|
||||||
|
python server.py --transport sse --port 8000
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 3: Automated Setup Scripts
|
||||||
|
|
||||||
#### Linux/Mac
|
#### Linux/Mac
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone the repository
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
|
||||||
cd mcphub
|
cd mcphub
|
||||||
|
|
||||||
# Run setup script
|
|
||||||
chmod +x scripts/setup.sh
|
chmod +x scripts/setup.sh
|
||||||
./scripts/setup.sh
|
./scripts/setup.sh
|
||||||
```
|
```
|
||||||
@@ -61,39 +77,12 @@ chmod +x scripts/setup.sh
|
|||||||
#### Windows (PowerShell)
|
#### Windows (PowerShell)
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# Clone the repository
|
git clone https://github.com/airano-ir/mcphub.git
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
|
||||||
cd mcphub
|
cd mcphub
|
||||||
|
|
||||||
# Run setup script
|
|
||||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
|
||||||
.\scripts\setup.ps1
|
.\scripts\setup.ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
### Option 2: Manual Setup
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Clone repository
|
|
||||||
git clone https://github.com/mcphub/mcphub.git
|
|
||||||
cd mcphub
|
|
||||||
|
|
||||||
# 2. Create virtual environment
|
|
||||||
python3 -m venv venv
|
|
||||||
|
|
||||||
# 3. Activate virtual environment
|
|
||||||
# Linux/Mac:
|
|
||||||
source venv/bin/activate
|
|
||||||
# Windows:
|
|
||||||
.\venv\Scripts\Activate.ps1
|
|
||||||
|
|
||||||
# 4. Install dependencies
|
|
||||||
pip install --upgrade pip
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
# 5. Copy environment template
|
|
||||||
cp .env.example .env
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@@ -103,9 +92,9 @@ cp .env.example .env
|
|||||||
For each WordPress site:
|
For each WordPress site:
|
||||||
|
|
||||||
1. Log in to WordPress admin
|
1. Log in to WordPress admin
|
||||||
2. Navigate to: **Users → Your Profile**
|
2. Navigate to: **Users > Your Profile**
|
||||||
3. Scroll to **Application Passwords** section
|
3. Scroll to **Application Passwords** section
|
||||||
4. Enter name: `MCP Server`
|
4. Enter name: `MCP Hub`
|
||||||
5. Click **Add New Application Password**
|
5. Click **Add New Application Password**
|
||||||
6. Copy the generated password (format: `xxxx xxxx xxxx xxxx xxxx xxxx`)
|
6. Copy the generated password (format: `xxxx xxxx xxxx xxxx xxxx xxxx`)
|
||||||
|
|
||||||
@@ -115,10 +104,10 @@ For each WordPress site:
|
|||||||
|
|
||||||
If using WooCommerce tools:
|
If using WooCommerce tools:
|
||||||
|
|
||||||
1. Go to: **WooCommerce → Settings → Advanced → REST API**
|
1. Go to: **WooCommerce > Settings > Advanced > REST API**
|
||||||
2. Click **Add Key**
|
2. Click **Add Key**
|
||||||
3. Fill in:
|
3. Fill in:
|
||||||
- **Description**: `MCP Server`
|
- **Description**: `MCP Hub`
|
||||||
- **User**: Select admin user
|
- **User**: Select admin user
|
||||||
- **Permissions**: `Read/Write`
|
- **Permissions**: `Read/Write`
|
||||||
4. Click **Generate API Key**
|
4. Click **Generate API Key**
|
||||||
@@ -126,48 +115,56 @@ If using WooCommerce tools:
|
|||||||
|
|
||||||
### Step 3: Configure Environment Variables
|
### Step 3: Configure Environment Variables
|
||||||
|
|
||||||
Edit `.env` file:
|
Edit the `.env` file with your credentials:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Basic Configuration
|
# ============================================
|
||||||
MCP_SERVER_NAME=mcphub
|
# Required
|
||||||
MCP_SERVER_VERSION=1.0.0
|
# ============================================
|
||||||
|
MASTER_API_KEY=your-secure-key-here
|
||||||
|
|
||||||
# Site 1 - Main WordPress Site
|
# ============================================
|
||||||
WORDPRESS_SITE1_URL=https://example.com
|
# WordPress Site
|
||||||
|
# ============================================
|
||||||
|
WORDPRESS_SITE1_URL=https://myblog.com
|
||||||
WORDPRESS_SITE1_USERNAME=admin
|
WORDPRESS_SITE1_USERNAME=admin
|
||||||
WORDPRESS_SITE1_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
|
WORDPRESS_SITE1_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
|
||||||
WORDPRESS_SITE1_WC_CONSUMER_KEY=ck_xxxxxxxxxxxxx
|
WORDPRESS_SITE1_ALIAS=myblog
|
||||||
WORDPRESS_SITE1_WC_CONSUMER_SECRET=cs_xxxxxxxxxxxxx
|
|
||||||
WORDPRESS_SITE1_ALIAS=mainsite
|
|
||||||
|
|
||||||
# Site 2 - E-commerce Site (Optional)
|
# ============================================
|
||||||
WORDPRESS_SITE2_URL=https://shop.example.com
|
# WooCommerce Store (separate plugin)
|
||||||
WORDPRESS_SITE2_USERNAME=admin
|
# ============================================
|
||||||
WORDPRESS_SITE2_APP_PASSWORD=yyyy yyyy yyyy yyyy yyyy yyyy
|
WOOCOMMERCE_STORE1_URL=https://mystore.com
|
||||||
WORDPRESS_SITE2_WC_CONSUMER_KEY=ck_yyyyyyyyyyyyy
|
WOOCOMMERCE_STORE1_CONSUMER_KEY=ck_xxxxx
|
||||||
WORDPRESS_SITE2_WC_CONSUMER_SECRET=cs_yyyyyyyyyyyyy
|
WOOCOMMERCE_STORE1_CONSUMER_SECRET=cs_xxxxx
|
||||||
WORDPRESS_SITE2_ALIAS=shop
|
WOOCOMMERCE_STORE1_ALIAS=mystore
|
||||||
|
|
||||||
# Site 3 - Blog Site (Optional)
|
# ============================================
|
||||||
WORDPRESS_SITE3_URL=https://blog.example.com
|
# Gitea Instance (optional)
|
||||||
WORDPRESS_SITE3_USERNAME=admin
|
# ============================================
|
||||||
WORDPRESS_SITE3_APP_PASSWORD=zzzz zzzz zzzz zzzz zzzz zzzz
|
GITEA_REPO1_URL=https://git.example.com
|
||||||
WORDPRESS_SITE3_ALIAS=blog
|
GITEA_REPO1_TOKEN=your_gitea_token
|
||||||
|
GITEA_REPO1_ALIAS=mygitea
|
||||||
|
|
||||||
# Rate Limiting (Optional)
|
# ============================================
|
||||||
|
# OAuth (required for Claude/ChatGPT auto-registration)
|
||||||
|
# ============================================
|
||||||
|
OAUTH_JWT_SECRET_KEY=your-jwt-secret
|
||||||
|
OAUTH_BASE_URL=https://your-server:8000
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Optional
|
||||||
|
# ============================================
|
||||||
|
LOG_LEVEL=INFO
|
||||||
RATE_LIMIT_PER_MINUTE=60
|
RATE_LIMIT_PER_MINUTE=60
|
||||||
RATE_LIMIT_PER_HOUR=1000
|
RATE_LIMIT_PER_HOUR=1000
|
||||||
RATE_LIMIT_PER_DAY=10000
|
RATE_LIMIT_PER_DAY=10000
|
||||||
|
|
||||||
# Logging (Optional)
|
|
||||||
LOG_LEVEL=INFO
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configuration Tips
|
### Configuration Tips
|
||||||
|
|
||||||
- **Site Aliases**: Use friendly names like `mainsite`, `shop`, or `blog`
|
- **Site Aliases**: Use friendly names like `myblog`, `mystore`, or `mygitea`
|
||||||
- **Minimal WooCommerce**: Only configure WooCommerce keys if you need e-commerce tools
|
- **Separate plugins**: WordPress and WooCommerce are separate plugins with separate env var prefixes
|
||||||
- **Testing**: Start with one site, verify it works, then add more
|
- **Testing**: Start with one site, verify it works, then add more
|
||||||
- **Security**: Never commit `.env` file to git
|
- **Security**: Never commit `.env` file to git
|
||||||
|
|
||||||
@@ -175,18 +172,16 @@ LOG_LEVEL=INFO
|
|||||||
|
|
||||||
## Running the Server
|
## Running the Server
|
||||||
|
|
||||||
### Development Mode
|
### SSE Transport (for remote AI clients)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Activate virtual environment (if not already active)
|
python server.py --transport sse --port 8000
|
||||||
source venv/bin/activate # Linux/Mac
|
```
|
||||||
.\venv\Scripts\Activate.ps1 # Windows
|
|
||||||
|
|
||||||
# Run server
|
### Stdio Transport (for Claude Desktop local)
|
||||||
python src/main.py
|
|
||||||
|
|
||||||
# Or use the dev script
|
```bash
|
||||||
./scripts/dev.sh # Linux/Mac
|
python server.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### Verify Server is Running
|
### Verify Server is Running
|
||||||
@@ -194,119 +189,133 @@ python src/main.py
|
|||||||
Check logs for:
|
Check logs for:
|
||||||
|
|
||||||
```
|
```
|
||||||
INFO: MCP Server initialized
|
INFO: MCP Hub initialized
|
||||||
INFO: Registered 390 tools
|
INFO: Registered 589 tools
|
||||||
INFO: Server ready
|
INFO: Server ready
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Or test the health endpoint:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8000/health
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Testing Your Setup
|
## Connect Your AI Client
|
||||||
|
|
||||||
### Quick Health Check
|
### Claude Desktop
|
||||||
|
|
||||||
Run the test script:
|
Add to `claude_desktop_config.json`:
|
||||||
|
|
||||||
```bash
|
```json
|
||||||
./scripts/test.sh quick
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"mcphub": {
|
||||||
|
"url": "https://your-server:8000/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer YOUR_MASTER_API_KEY"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Manual Testing
|
### Claude Code
|
||||||
|
|
||||||
```bash
|
Add to `.mcp.json` in your project:
|
||||||
# Run all tests
|
|
||||||
pytest
|
|
||||||
|
|
||||||
# Run with coverage
|
```json
|
||||||
pytest --cov
|
{
|
||||||
|
"mcpServers": {
|
||||||
# Run specific test
|
"mcphub": {
|
||||||
pytest tests/test_wordpress_plugin.py
|
"type": "sse",
|
||||||
|
"url": "https://your-server:8000/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer YOUR_MASTER_API_KEY"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Verify Tool Registration
|
### Cursor
|
||||||
|
|
||||||
Check that tools are registered:
|
Go to **Settings > MCP Servers > Add Server**:
|
||||||
|
|
||||||
```bash
|
- **Name**: MCP Hub
|
||||||
python -c "
|
- **URL**: `https://your-server:8000/mcp`
|
||||||
from src.main import app
|
- **Headers**: `Authorization: Bearer YOUR_MASTER_API_KEY`
|
||||||
tools = app.list_tools()
|
|
||||||
print(f'Total tools: {len(tools)}')
|
### VS Code + Copilot
|
||||||
"
|
|
||||||
|
Add to `.vscode/mcp.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"servers": {
|
||||||
|
"mcphub": {
|
||||||
|
"type": "sse",
|
||||||
|
"url": "https://your-server:8000/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer YOUR_MASTER_API_KEY"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Expected output: `Total tools: 390` (for 3 configured sites)
|
### ChatGPT (Remote MCP)
|
||||||
|
|
||||||
|
MCP Hub supports **Open Dynamic Client Registration** (RFC 7591). ChatGPT can auto-register as an OAuth client:
|
||||||
|
|
||||||
|
1. Deploy MCP Hub with `OAUTH_BASE_URL` set
|
||||||
|
2. In ChatGPT, add MCP server: `https://your-server:8000/mcp`
|
||||||
|
3. ChatGPT auto-discovers OAuth metadata and registers
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using MCP Tools
|
## Using MCP Tools
|
||||||
|
|
||||||
### Tool Naming Convention
|
### 589 Tools Across 9 Plugins
|
||||||
|
|
||||||
#### Per-Site Tools (Legacy)
|
| Plugin | Tools | Env Prefix |
|
||||||
```
|
|--------|-------|------------|
|
||||||
wordpress_{site}_action
|
| WordPress | 67 | `WORDPRESS_` |
|
||||||
```
|
| WooCommerce | 28 | `WOOCOMMERCE_` |
|
||||||
Examples:
|
| WordPress Advanced | 22 | `WORDPRESS_` (same sites, advanced ops) |
|
||||||
- `wordpress_site1_list_posts`
|
| Gitea | 56 | `GITEA_` |
|
||||||
- `wordpress_site2_get_product`
|
| n8n | 56 | `N8N_` |
|
||||||
- `wordpress_site3_create_page`
|
| Supabase | 70 | `SUPABASE_` |
|
||||||
|
| OpenPanel | 73 | `OPENPANEL_` |
|
||||||
|
| Appwrite | 100 | `APPWRITE_` |
|
||||||
|
| Directus | 100 | `DIRECTUS_` |
|
||||||
|
| System | 17 | (no config needed) |
|
||||||
|
|
||||||
#### Unified Tools (Recommended)
|
### Unified Tool Pattern
|
||||||
```
|
|
||||||
wordpress_action(site="site_id", ...)
|
|
||||||
```
|
|
||||||
Examples:
|
|
||||||
- `wordpress_list_posts(site="site1")`
|
|
||||||
- `wordpress_get_product(site="shop", product_id=123)`
|
|
||||||
- `wordpress_create_page(site="blog", title="Hello", content="...")`
|
|
||||||
|
|
||||||
### Using Site Aliases
|
All tools use a `site` parameter to select which site to operate on:
|
||||||
|
|
||||||
If you configured `WORDPRESS_SITE2_ALIAS=shop`:
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Both work the same
|
wordpress_list_posts(site="myblog", per_page=10, status="publish")
|
||||||
wordpress_list_products(site="site2")
|
wordpress_create_post(site="myblog", title="Hello", content="World")
|
||||||
wordpress_list_products(site="shop")
|
woocommerce_list_products(site="mystore")
|
||||||
|
gitea_list_repos(site="mygitea")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Example: List Posts
|
The `site` parameter accepts either a **site_id** (e.g., `site1`) or an **alias** (e.g., `myblog`).
|
||||||
|
|
||||||
|
### Multi-Endpoint Architecture
|
||||||
|
|
||||||
|
Use specific endpoints to limit tool access:
|
||||||
|
|
||||||
**Using Per-Site Tools**:
|
|
||||||
```python
|
|
||||||
result = wordpress_site1_list_posts(per_page=10, status="publish")
|
|
||||||
```
|
```
|
||||||
|
/mcp → All 589 tools (Master API Key)
|
||||||
**Using Unified Tools**:
|
/system/mcp → System tools only (17 tools)
|
||||||
```python
|
/wordpress/mcp → WordPress tools (67 tools)
|
||||||
result = wordpress_list_posts(site="mainsite", per_page=10, status="publish")
|
/woocommerce/mcp → WooCommerce tools (28 tools)
|
||||||
```
|
/gitea/mcp → Gitea tools (56 tools)
|
||||||
|
/project/{alias}/mcp → Per-project (auto-injects site)
|
||||||
### Example: Create Product
|
|
||||||
|
|
||||||
```python
|
|
||||||
result = wordpress_create_product(
|
|
||||||
site="shop",
|
|
||||||
name="New Product",
|
|
||||||
type="simple",
|
|
||||||
regular_price="29.99",
|
|
||||||
description="Product description",
|
|
||||||
status="publish"
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Update Page
|
|
||||||
|
|
||||||
```python
|
|
||||||
result = wordpress_update_page(
|
|
||||||
site="blog",
|
|
||||||
page_id=42,
|
|
||||||
title="Updated Title",
|
|
||||||
content="<p>Updated content</p>",
|
|
||||||
status="publish"
|
|
||||||
)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -316,10 +325,6 @@ result = wordpress_update_page(
|
|||||||
### Quick Start
|
### Quick Start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Deploy with Docker
|
|
||||||
./scripts/deploy.sh
|
|
||||||
|
|
||||||
# Or manually
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -356,11 +361,6 @@ curl http://localhost:8000/health
|
|||||||
|
|
||||||
## Coolify Deployment
|
## Coolify Deployment
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
- Coolify instance running
|
|
||||||
- Docker registry access (optional)
|
|
||||||
|
|
||||||
### Step 1: Create New Resource
|
### Step 1: Create New Resource
|
||||||
|
|
||||||
1. Log in to Coolify dashboard
|
1. Log in to Coolify dashboard
|
||||||
@@ -369,21 +369,25 @@ curl http://localhost:8000/health
|
|||||||
|
|
||||||
### Step 2: Configure Repository
|
### Step 2: Configure Repository
|
||||||
|
|
||||||
1. **Git Repository**: `https://github.com/mcphub/mcphub.git`
|
1. **Git Repository**: `https://github.com/airano-ir/mcphub.git`
|
||||||
2. **Branch**: `main`
|
2. **Branch**: `main`
|
||||||
3. **Build Pack**: `Docker Compose`
|
3. **Build Pack**: `Docker Compose`
|
||||||
|
|
||||||
### Step 3: Configure Environment Variables
|
### Step 3: Configure Environment Variables
|
||||||
|
|
||||||
Add all required environment variables from `.env.example`:
|
Add all required environment variables in Coolify's environment variable UI:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
MASTER_API_KEY=your-secure-key-here
|
||||||
|
OAUTH_JWT_SECRET_KEY=your-jwt-secret
|
||||||
|
OAUTH_BASE_URL=https://your-domain.com
|
||||||
WORDPRESS_SITE1_URL=https://example.com
|
WORDPRESS_SITE1_URL=https://example.com
|
||||||
WORDPRESS_SITE1_USERNAME=admin
|
WORDPRESS_SITE1_USERNAME=admin
|
||||||
WORDPRESS_SITE1_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
|
WORDPRESS_SITE1_APP_PASSWORD=xxxx xxxx xxxx xxxx
|
||||||
...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The server auto-discovers all `WORDPRESS_*`, `WOOCOMMERCE_*`, `GITEA_*`, and other plugin environment variables at startup.
|
||||||
|
|
||||||
### Step 4: Configure Health Check
|
### Step 4: Configure Health Check
|
||||||
|
|
||||||
- **Path**: `/health`
|
- **Path**: `/health`
|
||||||
@@ -398,51 +402,14 @@ WORDPRESS_SITE1_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
|
|||||||
2. Wait for build to complete
|
2. Wait for build to complete
|
||||||
3. Check logs for successful startup
|
3. Check logs for successful startup
|
||||||
|
|
||||||
### Coolify-Specific Configuration
|
|
||||||
|
|
||||||
Add to `docker-compose.yml` if needed:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
services:
|
|
||||||
mcp-server:
|
|
||||||
labels:
|
|
||||||
- "coolify.managed=true"
|
|
||||||
- "coolify.port=8000"
|
|
||||||
- "coolify.health_check=/health"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
### 1. Explore Available Tools
|
1. **Explore the full tool list**: See the [README](../README.md) for all 589 tools
|
||||||
|
2. **Set up API keys**: [API Keys Guide](API_KEYS_GUIDE.md) for per-project access control
|
||||||
Check the [README](../README.md) for complete tool listing.
|
3. **Configure OAuth**: [OAuth Guide](OAUTH_GUIDE.md) for Claude/ChatGPT auto-registration
|
||||||
|
4. **Monitor health**: Use `check_all_projects_health` tool or visit the web dashboard
|
||||||
### 2. Configure Monitoring
|
5. **Troubleshoot issues**: [Troubleshooting Guide](troubleshooting.md)
|
||||||
|
|
||||||
- View health metrics: Use `check_all_projects_health` tool
|
|
||||||
- Check rate limits: Use `get_rate_limit_stats` tool
|
|
||||||
- Review audit logs: `tail -f logs/audit.log`
|
|
||||||
|
|
||||||
### 3. Customize Configuration
|
|
||||||
|
|
||||||
- Adjust rate limits in `.env`
|
|
||||||
- Configure log levels
|
|
||||||
- Add more WordPress sites
|
|
||||||
|
|
||||||
### 4. Read Documentation
|
|
||||||
|
|
||||||
- [Troubleshooting Guide](troubleshooting.md)
|
|
||||||
- [Security Policy](../SECURITY.md)
|
|
||||||
- [Contributing Guide](../CONTRIBUTING.md)
|
|
||||||
|
|
||||||
### 5. Join Community
|
|
||||||
|
|
||||||
- **Repository**: [github.com/mcphub/mcphub](https://github.com/mcphub/mcphub)
|
|
||||||
- **Contact**: hello@mcphub.dev
|
|
||||||
- **Website**: [mcphub.dev](https://mcphub.dev)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class WordPressPlugin(BasePlugin):
|
|||||||
- Internal link analysis
|
- Internal link analysis
|
||||||
|
|
||||||
Note: WooCommerce functionality moved to separate woocommerce plugin (Phase D.1)
|
Note: WooCommerce functionality moved to separate woocommerce plugin (Phase D.1)
|
||||||
Total: 65 tools
|
Total: 67 tools
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -96,7 +96,7 @@ class WordPressPlugin(BasePlugin):
|
|||||||
with site parameter routing.
|
with site parameter routing.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List of tool specification dictionaries (65 tools)
|
List of tool specification dictionaries (67 tools)
|
||||||
"""
|
"""
|
||||||
specs = []
|
specs = []
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ keywords = [
|
|||||||
]
|
]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
|
"License :: OSI Approved :: MIT License",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
"Environment :: Console",
|
||||||
"Intended Audience :: Developers",
|
"Intended Audience :: Developers",
|
||||||
"Intended Audience :: System Administrators",
|
"Intended Audience :: System Administrators",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
@@ -54,11 +57,11 @@ dev = [
|
|||||||
mcphub = "server:main"
|
mcphub = "server:main"
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/mcphub/mcphub"
|
Homepage = "https://github.com/airano-ir/mcphub"
|
||||||
Repository = "https://github.com/mcphub/mcphub"
|
Repository = "https://github.com/airano-ir/mcphub"
|
||||||
Documentation = "https://github.com/mcphub/mcphub#readme"
|
Documentation = "https://github.com/airano-ir/mcphub#readme"
|
||||||
Issues = "https://github.com/mcphub/mcphub/issues"
|
Issues = "https://github.com/airano-ir/mcphub/issues"
|
||||||
Changelog = "https://github.com/mcphub/mcphub/releases"
|
Changelog = "https://github.com/airano-ir/mcphub/releases"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools>=68.0", "wheel"]
|
requires = ["setuptools>=68.0", "wheel"]
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ function Main {
|
|||||||
Write-Host " pytest --cov" -ForegroundColor Blue
|
Write-Host " pytest --cov" -ForegroundColor Blue
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "For more information, visit:"
|
Write-Host "For more information, visit:"
|
||||||
Write-Host "https://github.com/mcphub/mcphub" -ForegroundColor Blue
|
Write-Host "https://github.com/airano-ir/mcphub" -ForegroundColor Blue
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ main() {
|
|||||||
echo -e " ${BLUE}pytest --cov${NC}"
|
echo -e " ${BLUE}pytest --cov${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "For more information, visit:"
|
echo "For more information, visit:"
|
||||||
echo -e "${BLUE}https://github.com/mcphub/mcphub${NC}"
|
echo -e "${BLUE}https://github.com/airano-ir/mcphub${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4173,9 +4173,9 @@ def create_multi_endpoint_app(transport: str = "streamable-http"):
|
|||||||
logger.info("=" * 60)
|
logger.info("=" * 60)
|
||||||
logger.info("Dashboard: /dashboard") # Phase K
|
logger.info("Dashboard: /dashboard") # Phase K
|
||||||
logger.info("Endpoints:")
|
logger.info("Endpoints:")
|
||||||
logger.info(" /mcp - Admin (all 587 tools)")
|
logger.info(" /mcp - Admin (all 589 tools)")
|
||||||
logger.info(" /system/mcp - System (17 tools)") # Phase X.3
|
logger.info(" /system/mcp - System (17 tools)")
|
||||||
logger.info(" /wordpress/mcp - WordPress Core (65 tools)")
|
logger.info(" /wordpress/mcp - WordPress Core (67 tools)")
|
||||||
logger.info(" /woocommerce/mcp - WooCommerce (28 tools)") # Phase D.1
|
logger.info(" /woocommerce/mcp - WooCommerce (28 tools)") # Phase D.1
|
||||||
logger.info(" /wordpress-advanced/mcp - WordPress Advanced (22 tools)")
|
logger.info(" /wordpress-advanced/mcp - WordPress Advanced (22 tools)")
|
||||||
logger.info(" /gitea/mcp - Gitea (56 tools)")
|
logger.info(" /gitea/mcp - Gitea (56 tools)")
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ class TestBrandingTransform:
|
|||||||
def test_replaces_repo_urls(self):
|
def test_replaces_repo_urls(self):
|
||||||
content = "https://gitea.airano.ir/dev/coolify-mcp-hub"
|
content = "https://gitea.airano.ir/dev/coolify-mcp-hub"
|
||||||
transformed, changed = apply_branding_transform(content)
|
transformed, changed = apply_branding_transform(content)
|
||||||
assert "github.com/mcphub/mcphub" in transformed
|
assert "github.com/airano-ir/mcphub" in transformed
|
||||||
|
|
||||||
def test_replaces_email(self):
|
def test_replaces_email(self):
|
||||||
content = "Contact: gitea@airano.ir"
|
content = "Contact: gitea@airano.ir"
|
||||||
@@ -224,7 +224,7 @@ class TestBrandingTransform:
|
|||||||
assert "line3" in transformed
|
assert "line3" in transformed
|
||||||
|
|
||||||
def test_no_changes_returns_false(self):
|
def test_no_changes_returns_false(self):
|
||||||
content = "clean content with no markers"
|
content = "clean content with no markers\n"
|
||||||
transformed, changed = apply_branding_transform(content)
|
transformed, changed = apply_branding_transform(content)
|
||||||
assert changed is False
|
assert changed is False
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user