Initial commit: MCP Hub Community Edition v3.0.0
Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
136
CONTRIBUTING.md
Normal file
136
CONTRIBUTING.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# Contributing to MCP Hub
|
||||
|
||||
---
|
||||
|
||||
Thank you for your interest in contributing to MCP Hub!
|
||||
|
||||
### Development Setup
|
||||
|
||||
**Prerequisites**: Python 3.11+, Docker (optional), Git
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mcphub/mcphub.git
|
||||
cd mcphub
|
||||
cp env.example .env
|
||||
pip install -e ".[dev]"
|
||||
pytest # Verify setup
|
||||
```
|
||||
|
||||
### Running the Server
|
||||
|
||||
```bash
|
||||
python server.py # stdio (Claude Desktop)
|
||||
python server.py --transport sse --port 8000 # HTTP (testing)
|
||||
```
|
||||
|
||||
### Code Style
|
||||
|
||||
```bash
|
||||
black . # Format
|
||||
ruff check . # Lint
|
||||
ruff check --fix . # Auto-fix lint issues
|
||||
```
|
||||
|
||||
- **Line length**: 100 characters
|
||||
- **Target**: Python 3.11
|
||||
- **Docstrings**: Google style
|
||||
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
pytest # All tests
|
||||
pytest -v # Verbose
|
||||
pytest tests/test_wordpress_plugin.py # Single file
|
||||
pytest --cov=core --cov=plugins --cov-report=html # Coverage
|
||||
pytest -m "not slow" # Skip slow
|
||||
```
|
||||
|
||||
All contributions must include tests. Target: 70%+ coverage on core modules.
|
||||
|
||||
### Commit Messages
|
||||
|
||||
```
|
||||
<type>(<scope>): <description>
|
||||
```
|
||||
|
||||
Types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`
|
||||
|
||||
Examples:
|
||||
- `feat(wordpress): add bulk post update tool`
|
||||
- `fix(oauth): handle expired refresh tokens`
|
||||
- `test(dashboard): add session management tests`
|
||||
|
||||
### Pull Request Process
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch (`feat/description`, `fix/description`)
|
||||
3. Make changes, add tests
|
||||
4. Verify: `pytest && black --check . && ruff check .`
|
||||
5. Submit PR with clear description
|
||||
6. CI must pass (tests, lint, Docker build)
|
||||
|
||||
### Priority Contribution Areas
|
||||
|
||||
- **Test coverage**: Expand tests for plugins and dashboard routes
|
||||
- **New plugins**: See plugin development guide below
|
||||
- **Client setup guides**: Claude Desktop, Cursor, VS Code, ChatGPT
|
||||
- **Workflow templates**: Pre-built AI workflow examples
|
||||
- **Translations**: Dashboard i18n (currently EN/FA)
|
||||
|
||||
### Adding a New Plugin
|
||||
|
||||
Create `plugins/yourplugin/` with:
|
||||
|
||||
```python
|
||||
# plugins/yourplugin/plugin.py
|
||||
from plugins.base import BasePlugin
|
||||
|
||||
class YourPlugin(BasePlugin):
|
||||
@staticmethod
|
||||
def get_plugin_name() -> str:
|
||||
return "yourplugin"
|
||||
|
||||
@staticmethod
|
||||
def get_required_config_keys() -> list[str]:
|
||||
return ["url", "api_key"]
|
||||
|
||||
@staticmethod
|
||||
def get_tool_specifications() -> list[dict]:
|
||||
return [
|
||||
{
|
||||
"name": "list_items",
|
||||
"method_name": "list_items",
|
||||
"description": "List items from YourPlatform",
|
||||
"schema": {"type": "object", "properties": {
|
||||
"limit": {"type": "integer", "default": 10}
|
||||
}},
|
||||
"scope": "read",
|
||||
}
|
||||
]
|
||||
|
||||
async def list_items(self, **kwargs):
|
||||
return await self.client.get("items", params=kwargs)
|
||||
```
|
||||
|
||||
Then register in `plugins/__init__.py` and add tests.
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
core/ # Core system (auth, site manager, tool registry, dashboard)
|
||||
plugins/ # Plugin system (9 plugins, each with handlers + schemas)
|
||||
templates/ # Jinja2 templates (dashboard + OAuth)
|
||||
tests/ # Test suite (289 tests)
|
||||
scripts/ # Setup & deployment scripts
|
||||
docs/ # Documentation
|
||||
```
|
||||
|
||||
See [CLAUDE.md](CLAUDE.md) for detailed architecture docs.
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
|
||||
Reference in New Issue
Block a user