klydo-mcp 0.1.3__tar.gz
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.
- klydo_mcp-0.1.3/.env.example +22 -0
- klydo_mcp-0.1.3/.env.production.example +69 -0
- klydo_mcp-0.1.3/.github/workflows/ci.yml +97 -0
- klydo_mcp-0.1.3/.github/workflows/publish.yaml +95 -0
- klydo_mcp-0.1.3/.gitignore +37 -0
- klydo_mcp-0.1.3/.pre-commit-config.yaml +65 -0
- klydo_mcp-0.1.3/.pypirc.example +29 -0
- klydo_mcp-0.1.3/.python-version +1 -0
- klydo_mcp-0.1.3/CHANGELOG.md +54 -0
- klydo_mcp-0.1.3/CONTRIBUTING.md +204 -0
- klydo_mcp-0.1.3/LICENSE +21 -0
- klydo_mcp-0.1.3/MANIFEST.in +25 -0
- klydo_mcp-0.1.3/Makefile +114 -0
- klydo_mcp-0.1.3/PKG-INFO +262 -0
- klydo_mcp-0.1.3/PUBLISHING.md +492 -0
- klydo_mcp-0.1.3/QUICK_START_GUIDE.md +215 -0
- klydo_mcp-0.1.3/README.md +230 -0
- klydo_mcp-0.1.3/SECURITY.md +137 -0
- klydo_mcp-0.1.3/main.py +6 -0
- klydo_mcp-0.1.3/notebooks/klydo_scraper_debug.ipynb +269 -0
- klydo_mcp-0.1.3/pyproject.toml +67 -0
- klydo_mcp-0.1.3/scripts/publish.sh +113 -0
- klydo_mcp-0.1.3/scripts/test_real_api.py +92 -0
- klydo_mcp-0.1.3/src/klydo/__init__.py +8 -0
- klydo_mcp-0.1.3/src/klydo/config.py +47 -0
- klydo_mcp-0.1.3/src/klydo/logging.py +141 -0
- klydo_mcp-0.1.3/src/klydo/models/__init__.py +19 -0
- klydo_mcp-0.1.3/src/klydo/models/product.py +107 -0
- klydo_mcp-0.1.3/src/klydo/scrapers/__init__.py +73 -0
- klydo_mcp-0.1.3/src/klydo/scrapers/base.py +107 -0
- klydo_mcp-0.1.3/src/klydo/scrapers/cache.py +198 -0
- klydo_mcp-0.1.3/src/klydo/scrapers/klydo_store.py +480 -0
- klydo_mcp-0.1.3/src/klydo/scrapers/myntra.py +759 -0
- klydo_mcp-0.1.3/src/klydo/server.py +219 -0
- klydo_mcp-0.1.3/tests/__init__.py +5 -0
- klydo_mcp-0.1.3/tests/conftest.py +158 -0
- klydo_mcp-0.1.3/tests/test_models.py +235 -0
- klydo_mcp-0.1.3/tests/test_scrapers.py +203 -0
- klydo_mcp-0.1.3/uv.lock +1763 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Klydo MCP Server Configuration
|
|
2
|
+
# Copy this file to .env and customize as needed
|
|
3
|
+
|
|
4
|
+
# Default scraper to use
|
|
5
|
+
KLYDO_DEFAULT_SCRAPER=klydo
|
|
6
|
+
|
|
7
|
+
# Request timeout in seconds
|
|
8
|
+
KLYDO_REQUEST_TIMEOUT=30
|
|
9
|
+
|
|
10
|
+
# Cache TTL in seconds (how long to cache scraped data)
|
|
11
|
+
KLYDO_CACHE_TTL=3600
|
|
12
|
+
|
|
13
|
+
# Rate limiting (requests per minute to be nice to servers)
|
|
14
|
+
KLYDO_REQUESTS_PER_MINUTE=30
|
|
15
|
+
|
|
16
|
+
# Klydo brand API auth (used by the klydo.in scraper)
|
|
17
|
+
# Leave blank to fall back to the baked-in public token, or override with your own.
|
|
18
|
+
# KLYDO_KLYDO_API_TOKEN=
|
|
19
|
+
# KLYDO_KLYDO_SESSION_ID=
|
|
20
|
+
|
|
21
|
+
# Debug mode (set to true for verbose logging)
|
|
22
|
+
KLYDO_DEBUG=false
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Klydo MCP Server - Production Configuration
|
|
2
|
+
# ============================================
|
|
3
|
+
# Copy this file to .env and configure for your production environment.
|
|
4
|
+
#
|
|
5
|
+
# SECURITY WARNING: Never commit .env files with real credentials to version control!
|
|
6
|
+
|
|
7
|
+
# =============================================================================
|
|
8
|
+
# SCRAPER SETTINGS
|
|
9
|
+
# =============================================================================
|
|
10
|
+
|
|
11
|
+
# Default scraper to use: "klydo" (Klydo Store) or "myntra"
|
|
12
|
+
KLYDO_DEFAULT_SCRAPER=klydo
|
|
13
|
+
|
|
14
|
+
# Request timeout in seconds
|
|
15
|
+
KLYDO_REQUEST_TIMEOUT=30
|
|
16
|
+
|
|
17
|
+
# Cache TTL in seconds (how long to cache scraped data)
|
|
18
|
+
# Recommended: 3600 (1 hour) for production to reduce API load
|
|
19
|
+
KLYDO_CACHE_TTL=3600
|
|
20
|
+
|
|
21
|
+
# Rate limiting (requests per minute to be nice to servers)
|
|
22
|
+
KLYDO_REQUESTS_PER_MINUTE=30
|
|
23
|
+
|
|
24
|
+
# =============================================================================
|
|
25
|
+
# KLYDO API AUTHENTICATION
|
|
26
|
+
# =============================================================================
|
|
27
|
+
#
|
|
28
|
+
# IMPORTANT: The Klydo store scraper requires an API token to function.
|
|
29
|
+
# This token must be obtained from the Klydo API team.
|
|
30
|
+
#
|
|
31
|
+
# For production deployments:
|
|
32
|
+
# 1. Request an API token from the Klydo team
|
|
33
|
+
# 2. Set it below (never commit the actual token!)
|
|
34
|
+
# 3. Consider using a secrets manager (AWS Secrets Manager, HashiCorp Vault, etc.)
|
|
35
|
+
|
|
36
|
+
# API token for klydo.in scraper (REQUIRED for Klydo scraper)
|
|
37
|
+
KLYDO_KLYDO_API_TOKEN=
|
|
38
|
+
|
|
39
|
+
# Optional: Custom session ID (auto-generated if not set)
|
|
40
|
+
# KLYDO_KLYDO_SESSION_ID=
|
|
41
|
+
|
|
42
|
+
# =============================================================================
|
|
43
|
+
# DEBUG & LOGGING
|
|
44
|
+
# =============================================================================
|
|
45
|
+
|
|
46
|
+
# Debug mode - set to false in production!
|
|
47
|
+
# When true: Enables verbose logging, full stack traces
|
|
48
|
+
# When false: Only INFO level logs, cleaner output
|
|
49
|
+
KLYDO_DEBUG=false
|
|
50
|
+
|
|
51
|
+
# =============================================================================
|
|
52
|
+
# DEPLOYMENT NOTES
|
|
53
|
+
# =============================================================================
|
|
54
|
+
#
|
|
55
|
+
# For containerized deployments (Docker/Kubernetes):
|
|
56
|
+
# - Pass environment variables directly rather than using .env files
|
|
57
|
+
# - Use secrets management for sensitive values like KLYDO_KLYDO_API_TOKEN
|
|
58
|
+
#
|
|
59
|
+
# Example Docker run:
|
|
60
|
+
# docker run -e KLYDO_KLYDO_API_TOKEN=your-token klydo-mcp-server
|
|
61
|
+
#
|
|
62
|
+
# Example Kubernetes secret:
|
|
63
|
+
# kubectl create secret generic klydo-secrets \
|
|
64
|
+
# --from-literal=KLYDO_KLYDO_API_TOKEN=your-token
|
|
65
|
+
#
|
|
66
|
+
# For Claude Desktop (local usage):
|
|
67
|
+
# - Copy this file to .env in the project root
|
|
68
|
+
# - Fill in your API token
|
|
69
|
+
# - The MCP server will automatically load the .env file
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test Python ${{ matrix.python-version }}
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout code
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v4
|
|
24
|
+
with:
|
|
25
|
+
version: "latest"
|
|
26
|
+
|
|
27
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
28
|
+
run: uv python install ${{ matrix.python-version }}
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: uv sync
|
|
32
|
+
|
|
33
|
+
- name: Install test dependencies
|
|
34
|
+
run: uv pip install pytest pytest-asyncio
|
|
35
|
+
|
|
36
|
+
- name: Run tests
|
|
37
|
+
run: uv run pytest -v --tb=short
|
|
38
|
+
|
|
39
|
+
lint:
|
|
40
|
+
name: Lint
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
|
|
43
|
+
steps:
|
|
44
|
+
- name: Checkout code
|
|
45
|
+
uses: actions/checkout@v4
|
|
46
|
+
|
|
47
|
+
- name: Install uv
|
|
48
|
+
uses: astral-sh/setup-uv@v4
|
|
49
|
+
with:
|
|
50
|
+
version: "latest"
|
|
51
|
+
|
|
52
|
+
- name: Set up Python
|
|
53
|
+
run: uv python install 3.12
|
|
54
|
+
|
|
55
|
+
- name: Install dependencies
|
|
56
|
+
run: uv sync
|
|
57
|
+
|
|
58
|
+
- name: Install Ruff
|
|
59
|
+
run: uv pip install ruff
|
|
60
|
+
|
|
61
|
+
- name: Run Ruff linter
|
|
62
|
+
run: uv run ruff check src/
|
|
63
|
+
|
|
64
|
+
- name: Run Ruff formatter check
|
|
65
|
+
run: uv run ruff format --check src/
|
|
66
|
+
|
|
67
|
+
build:
|
|
68
|
+
name: Build Package
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
needs: [test, lint]
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Checkout code
|
|
74
|
+
uses: actions/checkout@v4
|
|
75
|
+
|
|
76
|
+
- name: Install uv
|
|
77
|
+
uses: astral-sh/setup-uv@v4
|
|
78
|
+
with:
|
|
79
|
+
version: "latest"
|
|
80
|
+
|
|
81
|
+
- name: Set up Python
|
|
82
|
+
run: uv python install 3.12
|
|
83
|
+
|
|
84
|
+
- name: Install dependencies
|
|
85
|
+
run: uv sync
|
|
86
|
+
|
|
87
|
+
- name: Install build
|
|
88
|
+
run: uv pip install build
|
|
89
|
+
|
|
90
|
+
- name: Build package
|
|
91
|
+
run: uv run python -m build
|
|
92
|
+
|
|
93
|
+
- name: Upload build artifacts
|
|
94
|
+
uses: actions/upload-artifact@v4
|
|
95
|
+
with:
|
|
96
|
+
name: dist
|
|
97
|
+
path: dist/
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
target:
|
|
9
|
+
description: "Target PyPI (testpypi or pypi)"
|
|
10
|
+
required: true
|
|
11
|
+
default: "testpypi"
|
|
12
|
+
type: choice
|
|
13
|
+
options:
|
|
14
|
+
- testpypi
|
|
15
|
+
- pypi
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
name: Build Package
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout code
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@v4
|
|
28
|
+
with:
|
|
29
|
+
version: "latest"
|
|
30
|
+
|
|
31
|
+
- name: Set up Python
|
|
32
|
+
run: uv python install 3.12
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: uv sync
|
|
36
|
+
|
|
37
|
+
- name: Install build
|
|
38
|
+
run: uv pip install build
|
|
39
|
+
|
|
40
|
+
- name: Build package
|
|
41
|
+
run: uv run python -m build
|
|
42
|
+
|
|
43
|
+
- name: Upload build artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: dist
|
|
47
|
+
path: dist/
|
|
48
|
+
|
|
49
|
+
publish-testpypi:
|
|
50
|
+
name: Publish to TestPyPI
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
needs: [build]
|
|
53
|
+
if: github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'testpypi'
|
|
54
|
+
|
|
55
|
+
environment:
|
|
56
|
+
name: testpypi
|
|
57
|
+
url: https://test.pypi.org/p/klydo-mcp
|
|
58
|
+
|
|
59
|
+
permissions:
|
|
60
|
+
id-token: write
|
|
61
|
+
|
|
62
|
+
steps:
|
|
63
|
+
- name: Download build artifacts
|
|
64
|
+
uses: actions/download-artifact@v4
|
|
65
|
+
with:
|
|
66
|
+
name: dist
|
|
67
|
+
path: dist/
|
|
68
|
+
|
|
69
|
+
- name: Publish to TestPyPI
|
|
70
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
71
|
+
with:
|
|
72
|
+
repository-url: https://test.pypi.org/legacy/
|
|
73
|
+
|
|
74
|
+
publish-pypi:
|
|
75
|
+
name: Publish to PyPI
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
needs: [build]
|
|
78
|
+
if: github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'pypi')
|
|
79
|
+
|
|
80
|
+
environment:
|
|
81
|
+
name: pypi
|
|
82
|
+
url: https://pypi.org/p/klydo-mcp
|
|
83
|
+
|
|
84
|
+
permissions:
|
|
85
|
+
id-token: write
|
|
86
|
+
|
|
87
|
+
steps:
|
|
88
|
+
- name: Download build artifacts
|
|
89
|
+
uses: actions/download-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
name: dist
|
|
92
|
+
path: dist/
|
|
93
|
+
|
|
94
|
+
- name: Publish to PyPI
|
|
95
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
.venv
|
|
12
|
+
venv/
|
|
13
|
+
env/
|
|
14
|
+
|
|
15
|
+
# Environment variables
|
|
16
|
+
.env
|
|
17
|
+
|
|
18
|
+
# PyPI publishing
|
|
19
|
+
.pypirc
|
|
20
|
+
*.tar.gz
|
|
21
|
+
*.whl
|
|
22
|
+
|
|
23
|
+
# IDE
|
|
24
|
+
.vscode/
|
|
25
|
+
.idea/
|
|
26
|
+
*.swp
|
|
27
|
+
*.swo
|
|
28
|
+
*~
|
|
29
|
+
|
|
30
|
+
# OS
|
|
31
|
+
.DS_Store
|
|
32
|
+
Thumbs.db
|
|
33
|
+
|
|
34
|
+
# Test coverage
|
|
35
|
+
.coverage
|
|
36
|
+
htmlcov/
|
|
37
|
+
.pytest_cache/
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Pre-commit hooks for Klydo MCP Server
|
|
2
|
+
# Install with: pre-commit install
|
|
3
|
+
# Run manually: pre-commit run --all-files
|
|
4
|
+
|
|
5
|
+
repos:
|
|
6
|
+
# Ruff - Fast Python linter and formatter
|
|
7
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
8
|
+
rev: v0.8.0
|
|
9
|
+
hooks:
|
|
10
|
+
# Run the linter
|
|
11
|
+
- id: ruff
|
|
12
|
+
args: [--fix]
|
|
13
|
+
# Run the formatter
|
|
14
|
+
- id: ruff-format
|
|
15
|
+
|
|
16
|
+
# General file checks
|
|
17
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
18
|
+
rev: v5.0.0
|
|
19
|
+
hooks:
|
|
20
|
+
# Trim trailing whitespace
|
|
21
|
+
- id: trailing-whitespace
|
|
22
|
+
# Ensure files end with a newline
|
|
23
|
+
- id: end-of-file-fixer
|
|
24
|
+
# Check YAML syntax
|
|
25
|
+
- id: check-yaml
|
|
26
|
+
# Check TOML syntax
|
|
27
|
+
- id: check-toml
|
|
28
|
+
# Check JSON syntax
|
|
29
|
+
- id: check-json
|
|
30
|
+
# Check for merge conflict markers
|
|
31
|
+
- id: check-merge-conflict
|
|
32
|
+
# Check for debug statements
|
|
33
|
+
- id: debug-statements
|
|
34
|
+
# Prevent large files from being committed
|
|
35
|
+
- id: check-added-large-files
|
|
36
|
+
args: ['--maxkb=500']
|
|
37
|
+
# Check for private keys
|
|
38
|
+
- id: detect-private-key
|
|
39
|
+
|
|
40
|
+
# Security checks
|
|
41
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
42
|
+
rev: v1.5.0
|
|
43
|
+
hooks:
|
|
44
|
+
- id: detect-secrets
|
|
45
|
+
args: ['--baseline', '.secrets.baseline']
|
|
46
|
+
exclude: package.lock.json
|
|
47
|
+
|
|
48
|
+
# Type checking (optional - can be slow)
|
|
49
|
+
# - repo: https://github.com/pre-commit/mirrors-mypy
|
|
50
|
+
# rev: v1.13.0
|
|
51
|
+
# hooks:
|
|
52
|
+
# - id: mypy
|
|
53
|
+
# additional_dependencies: [pydantic, httpx]
|
|
54
|
+
# args: [--ignore-missing-imports]
|
|
55
|
+
|
|
56
|
+
# CI configuration
|
|
57
|
+
ci:
|
|
58
|
+
autofix_commit_msg: |
|
|
59
|
+
[pre-commit.ci] auto fixes from pre-commit hooks
|
|
60
|
+
autofix_prs: true
|
|
61
|
+
autoupdate_branch: 'main'
|
|
62
|
+
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
|
|
63
|
+
autoupdate_schedule: weekly
|
|
64
|
+
skip: [detect-secrets]
|
|
65
|
+
submodules: false
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# PyPI Configuration Template
|
|
2
|
+
# Copy this file to ~/.pypirc and update with your tokens
|
|
3
|
+
#
|
|
4
|
+
# SECURITY WARNING: Never commit your actual ~/.pypirc file to git!
|
|
5
|
+
# This is just a template showing the structure.
|
|
6
|
+
|
|
7
|
+
[distutils]
|
|
8
|
+
index-servers =
|
|
9
|
+
pypi
|
|
10
|
+
testpypi
|
|
11
|
+
|
|
12
|
+
[pypi]
|
|
13
|
+
username = __token__
|
|
14
|
+
password = pypi-YOUR_PYPI_API_TOKEN_HERE
|
|
15
|
+
|
|
16
|
+
[testpypi]
|
|
17
|
+
repository = https://test.pypi.org/legacy/
|
|
18
|
+
username = __token__
|
|
19
|
+
password = pypi-YOUR_TESTPYPI_API_TOKEN_HERE
|
|
20
|
+
|
|
21
|
+
# How to use:
|
|
22
|
+
# 1. Copy this file to ~/.pypirc
|
|
23
|
+
# 2. Replace YOUR_PYPI_API_TOKEN_HERE with your actual PyPI token
|
|
24
|
+
# 3. Replace YOUR_TESTPYPI_API_TOKEN_HERE with your TestPyPI token (optional)
|
|
25
|
+
# 4. Set proper permissions: chmod 600 ~/.pypirc
|
|
26
|
+
#
|
|
27
|
+
# Get tokens from:
|
|
28
|
+
# - PyPI: https://pypi.org/manage/account/token/
|
|
29
|
+
# - TestPyPI: https://test.pypi.org/manage/account/token/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Structured logging with Loguru for better debugging and monitoring
|
|
12
|
+
- Production-ready environment configuration (`.env.production.example`)
|
|
13
|
+
- Comprehensive test suite with pytest
|
|
14
|
+
- GitHub Actions CI/CD pipeline for testing and publishing
|
|
15
|
+
- CHANGELOG.md for tracking changes
|
|
16
|
+
- CONTRIBUTING.md with contribution guidelines
|
|
17
|
+
- SECURITY.md with security policy
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Removed hardcoded DEFAULT_AUTH_TOKEN for better security
|
|
21
|
+
- Updated project URLs to point to official GitHub repository
|
|
22
|
+
- Updated author information in pyproject.toml
|
|
23
|
+
|
|
24
|
+
### Security
|
|
25
|
+
- API tokens must now be provided via environment variables only
|
|
26
|
+
- No hardcoded secrets in codebase
|
|
27
|
+
|
|
28
|
+
## [0.1.0] - 2026-06-02
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- Initial release of Klydo MCP Server
|
|
32
|
+
- MCP server implementation using FastMCP
|
|
33
|
+
- Klydo.in catalog API integration
|
|
34
|
+
- Product search with filters (category, gender, price range)
|
|
35
|
+
- Product details retrieval with images and specifications
|
|
36
|
+
- Trending products discovery
|
|
37
|
+
- In-memory caching for API responses
|
|
38
|
+
- Pydantic models for type-safe data handling
|
|
39
|
+
- Configuration via environment variables
|
|
40
|
+
- Claude Desktop integration support
|
|
41
|
+
|
|
42
|
+
### Features
|
|
43
|
+
- `search_products` - Search for fashion products with various filters
|
|
44
|
+
- `get_product_details` - Get complete product information
|
|
45
|
+
- `get_trending` - Get trending/popular products
|
|
46
|
+
|
|
47
|
+
### Technical
|
|
48
|
+
- Python 3.11+ support
|
|
49
|
+
- Async HTTP client with httpx
|
|
50
|
+
- pydantic-settings for configuration management
|
|
51
|
+
- Installable via pip/uv from PyPI
|
|
52
|
+
|
|
53
|
+
[Unreleased]: https://github.com/myselfshravan/klydo-mcp/compare/v0.1.0...HEAD
|
|
54
|
+
[0.1.0]: https://github.com/myselfshravan/klydo-mcp/releases/tag/v0.1.0
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Contributing to Klydo MCP Server
|
|
2
|
+
|
|
3
|
+
First off, thank you for considering contributing to Klydo MCP Server! 🎉
|
|
4
|
+
|
|
5
|
+
This project is part of [Klydo](https://klydo.in), a Gen-Z quick tech fashion commerce startup based in Bangalore. We welcome contributions from the community to make this project even better.
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Code of Conduct](#code-of-conduct)
|
|
10
|
+
- [Getting Started](#getting-started)
|
|
11
|
+
- [Development Setup](#development-setup)
|
|
12
|
+
- [How to Contribute](#how-to-contribute)
|
|
13
|
+
- [Pull Request Process](#pull-request-process)
|
|
14
|
+
- [Coding Standards](#coding-standards)
|
|
15
|
+
- [Testing](#testing)
|
|
16
|
+
|
|
17
|
+
## Code of Conduct
|
|
18
|
+
|
|
19
|
+
By participating in this project, you agree to maintain a respectful and inclusive environment. We expect all contributors to:
|
|
20
|
+
|
|
21
|
+
- Be respectful and considerate in all interactions
|
|
22
|
+
- Welcome newcomers and help them learn
|
|
23
|
+
- Focus on what is best for the community
|
|
24
|
+
- Show empathy towards other community members
|
|
25
|
+
|
|
26
|
+
## Getting Started
|
|
27
|
+
|
|
28
|
+
1. **Fork the repository** on GitHub
|
|
29
|
+
2. **Clone your fork** locally:
|
|
30
|
+
```bash
|
|
31
|
+
git clone https://github.com/YOUR-USERNAME/klydo-mcp.git
|
|
32
|
+
cd klydo-mcp
|
|
33
|
+
```
|
|
34
|
+
3. **Add the upstream remote**:
|
|
35
|
+
```bash
|
|
36
|
+
git remote add upstream https://github.com/myselfshravan/klydo-mcp.git
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Development Setup
|
|
40
|
+
|
|
41
|
+
### Prerequisites
|
|
42
|
+
|
|
43
|
+
- Python 3.11 or higher
|
|
44
|
+
- [uv](https://docs.astral.sh/uv/) (recommended) or pip
|
|
45
|
+
|
|
46
|
+
### Setup with uv (Recommended)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Install dependencies
|
|
50
|
+
uv sync --dev
|
|
51
|
+
|
|
52
|
+
# Run the server locally
|
|
53
|
+
uv run klydo
|
|
54
|
+
|
|
55
|
+
# Run tests
|
|
56
|
+
uv run pytest
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Setup with pip
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Create virtual environment
|
|
63
|
+
python -m venv .venv
|
|
64
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
65
|
+
|
|
66
|
+
# Install in development mode
|
|
67
|
+
pip install -e ".[dev]"
|
|
68
|
+
|
|
69
|
+
# Run tests
|
|
70
|
+
pytest
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Environment Configuration
|
|
74
|
+
|
|
75
|
+
1. Copy the example environment file:
|
|
76
|
+
```bash
|
|
77
|
+
cp .env.example .env
|
|
78
|
+
```
|
|
79
|
+
2. Edit `.env` and configure as needed (API tokens, etc.)
|
|
80
|
+
|
|
81
|
+
## How to Contribute
|
|
82
|
+
|
|
83
|
+
### Reporting Bugs
|
|
84
|
+
|
|
85
|
+
- Check if the bug has already been reported in [Issues](https://github.com/myselfshravan/klydo-mcp/issues)
|
|
86
|
+
- If not, create a new issue with:
|
|
87
|
+
- Clear, descriptive title
|
|
88
|
+
- Steps to reproduce
|
|
89
|
+
- Expected vs actual behavior
|
|
90
|
+
- Python version and OS
|
|
91
|
+
- Relevant logs/error messages
|
|
92
|
+
|
|
93
|
+
### Suggesting Features
|
|
94
|
+
|
|
95
|
+
- Open an issue with the `enhancement` label
|
|
96
|
+
- Describe the feature and its use case
|
|
97
|
+
- Explain why it would benefit users
|
|
98
|
+
|
|
99
|
+
### Contributing Code
|
|
100
|
+
|
|
101
|
+
1. **Find an issue** to work on or create one first
|
|
102
|
+
2. **Comment on the issue** to let others know you're working on it
|
|
103
|
+
3. **Create a branch** from `main`:
|
|
104
|
+
```bash
|
|
105
|
+
git checkout -b feature/your-feature-name
|
|
106
|
+
```
|
|
107
|
+
4. **Make your changes** following our coding standards
|
|
108
|
+
5. **Write/update tests** for your changes
|
|
109
|
+
6. **Run the test suite** to ensure everything passes
|
|
110
|
+
7. **Commit your changes** with clear messages
|
|
111
|
+
8. **Push to your fork** and create a Pull Request
|
|
112
|
+
|
|
113
|
+
## Pull Request Process
|
|
114
|
+
|
|
115
|
+
1. **Update documentation** if you've changed APIs or added features
|
|
116
|
+
2. **Add tests** for new functionality
|
|
117
|
+
3. **Ensure CI passes** - all tests and linting must pass
|
|
118
|
+
4. **Request review** from maintainers
|
|
119
|
+
5. **Address feedback** promptly and constructively
|
|
120
|
+
|
|
121
|
+
### PR Title Format
|
|
122
|
+
|
|
123
|
+
Use clear, descriptive titles:
|
|
124
|
+
- `feat: Add new search filter for colors`
|
|
125
|
+
- `fix: Handle empty API response gracefully`
|
|
126
|
+
- `docs: Update installation instructions`
|
|
127
|
+
- `test: Add tests for scraper cache`
|
|
128
|
+
- `refactor: Simplify product parsing logic`
|
|
129
|
+
|
|
130
|
+
## Coding Standards
|
|
131
|
+
|
|
132
|
+
### Python Style
|
|
133
|
+
|
|
134
|
+
- Follow [PEP 8](https://pep8.org/) style guide
|
|
135
|
+
- Use type hints for all public functions
|
|
136
|
+
- Maximum line length: 100 characters
|
|
137
|
+
- Use descriptive variable and function names
|
|
138
|
+
|
|
139
|
+
### Code Quality Tools
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Format code with Ruff
|
|
143
|
+
uv run ruff format src/
|
|
144
|
+
|
|
145
|
+
# Lint code with Ruff
|
|
146
|
+
uv run ruff check src/
|
|
147
|
+
|
|
148
|
+
# Type checking (optional)
|
|
149
|
+
uv run mypy src/klydo
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Commit Messages
|
|
153
|
+
|
|
154
|
+
- Use the present tense ("Add feature" not "Added feature")
|
|
155
|
+
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
|
|
156
|
+
- Keep the first line under 72 characters
|
|
157
|
+
- Reference issues when relevant: "Fix #123"
|
|
158
|
+
|
|
159
|
+
### Documentation
|
|
160
|
+
|
|
161
|
+
- Add docstrings to all public modules, classes, and functions
|
|
162
|
+
- Use Google-style docstrings
|
|
163
|
+
- Update README if adding new features
|
|
164
|
+
- Update CHANGELOG for notable changes
|
|
165
|
+
|
|
166
|
+
## Testing
|
|
167
|
+
|
|
168
|
+
### Running Tests
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# Run all tests
|
|
172
|
+
uv run pytest
|
|
173
|
+
|
|
174
|
+
# Run with verbose output
|
|
175
|
+
uv run pytest -v
|
|
176
|
+
|
|
177
|
+
# Run specific test file
|
|
178
|
+
uv run pytest tests/test_models.py
|
|
179
|
+
|
|
180
|
+
# Run with coverage
|
|
181
|
+
uv run pytest --cov=klydo
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Writing Tests
|
|
185
|
+
|
|
186
|
+
- Place tests in the `tests/` directory
|
|
187
|
+
- Name test files `test_*.py`
|
|
188
|
+
- Use descriptive test function names
|
|
189
|
+
- Use fixtures for common test data
|
|
190
|
+
- Mock external API calls
|
|
191
|
+
|
|
192
|
+
### Test Categories
|
|
193
|
+
|
|
194
|
+
- **Unit tests**: Test individual functions/methods
|
|
195
|
+
- **Integration tests**: Test component interactions
|
|
196
|
+
- **Scraper tests**: Test with mocked HTTP responses
|
|
197
|
+
|
|
198
|
+
## Need Help?
|
|
199
|
+
|
|
200
|
+
- Create an issue with your question
|
|
201
|
+
- Check existing issues and discussions
|
|
202
|
+
- Review the documentation
|
|
203
|
+
|
|
204
|
+
Thank you for contributing! 🚀
|
klydo_mcp-0.1.3/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Klydo MCP Server Contributors
|
|
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.
|