Skip to main content
Glama

Trade Me MCP Server

by giussepe198
README.md17.4 kB
# Trade Me MCP Server A Model Context Protocol (MCP) server that provides AI assistants with access to the Trade Me API, enabling interaction with New Zealand's largest online marketplace. ## Features ### Current Implementation **Phase 1 - Foundation:** - ✅ OAuth 1.0a authentication - ✅ Catalogue tools (no authentication required): - Get category tree - Get category details and attributes - Get localities and districts - Get legal notices **Phase 2 - Search & Discovery:** - ✅ Search tools (no authentication required): - General marketplace search - Property search (residential, rental, commercial) - Motors search (cars, motorcycles, boats) - Jobs search - Services search **Phase 3 - Listing Retrieval:** - ✅ Listing details and information: - Get listing details, photos, and Q&A - View bidding history and shipping options - Find similar listings - ✅ Watchlist management (requires authentication): - View watchlist - Add/remove items from watchlist **Phase 4 - Bidding & Buying:** - ✅ Bidding tools (requires authentication): - Place bids on auctions - Buy Now purchases - View won/lost auctions - View current bids - ✅ Offers (requires authentication): - Make fixed price offers - Withdraw offers - Accept/decline offers (seller) - ✅ Purchase management (requires authentication): - View purchase history ### Planned Features - Selling and listing management - User account management - Saved searches and favourites ## Installation ### Prerequisites - Python 3.11 or higher - Trade Me API credentials ([Get them here](https://www.trademe.co.nz/MyTradeMe/Api/DeveloperOptions.aspx)) ### Setup 1. Clone the repository: ```bash git clone <repository-url> cd trademe-mcp ``` 2. Create a virtual environment: ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. Install dependencies: ```bash pip install -e . ``` 4. Configure environment variables: ```bash cp .env.example .env # Edit .env with your Trade Me API credentials ``` ### Environment Variables ```bash # Required TRADEME_CONSUMER_KEY=your_consumer_key TRADEME_CONSUMER_SECRET=your_consumer_secret # Optional (required for authenticated endpoints) TRADEME_ACCESS_TOKEN=your_access_token TRADEME_ACCESS_TOKEN_SECRET=your_token_secret # Configuration TRADEME_ENVIRONMENT=sandbox # or 'production' LOG_LEVEL=INFO ``` ## Usage ### Running the Server ```bash python -m trademe_mcp.server ``` ### MCP Client Configuration #### Claude Desktop Add to your Claude Desktop configuration file: **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` ```json { "mcpServers": { "trademe": { "command": "python", "args": ["-m", "trademe_mcp.server"], "env": { "TRADEME_CONSUMER_KEY": "your_consumer_key", "TRADEME_CONSUMER_SECRET": "your_consumer_secret", "TRADEME_ENVIRONMENT": "sandbox" } } } } ``` #### Other MCP Clients The server uses standard MCP protocol over stdio. Configure your client to run: ```bash python -m trademe_mcp.server ``` ## Available Tools ### Catalogue Tools (No Authentication Required) #### `get_categories` Retrieve the full Trade Me category tree. **Parameters:** - `depth` (optional): Limit subcategory depth (1-4) - `with_counts` (optional): Include listing counts (boolean) **Example:** ```json { "depth": 2, "with_counts": true } ``` #### `get_category_details` Get detailed information about a specific category. **Parameters:** - `category_number` (required): Trade Me category number (e.g., "0004-0369-6076-") - `depth` (optional): Limit subcategory depth **Example:** ```json { "category_number": "0004-0369-6076-", "depth": 1 } ``` #### `get_localities` Retrieve all Trade Me localities (regions, districts, suburbs). **Example:** ```json {} ``` #### `get_locality_details` Get details about a specific locality. **Parameters:** - `locality_id` (required): The locality ID number **Example:** ```json { "locality_id": 100 } ``` #### `get_districts` Retrieve all Trade Me districts. **Example:** ```json {} ``` #### `get_attributes` Get available attributes for a category. **Parameters:** - `category_number` (required): Trade Me category number **Example:** ```json { "category_number": "0004-0369-6076-" } ``` #### `get_legal_notice` Get legal notice text for a category. **Parameters:** - `category_number` (required): Trade Me category number **Example:** ```json { "category_number": "0004-0369-6076-" } ``` ### Search Tools (No Authentication Required) #### `search_general` Search the Trade Me marketplace across all categories. **Parameters:** - `search_string` (optional): Search keywords - `category` (optional): Category number to filter by - `price_min` (optional): Minimum price - `price_max` (optional): Maximum price - `condition` (optional): Item condition (New, Used, Refurbished) - `buy_now_only` (optional): Only show Buy Now listings - `region` (optional): Region ID - `district` (optional): District ID - `suburb` (optional): Suburb ID - `page` (optional): Page number (default: 1) - `rows` (optional): Results per page (default: 25, max: 500) - `sort_order` (optional): Sort order (Default, ExpiryAsc, ExpiryDesc, PriceAsc, PriceDesc, Featured) **Example:** ```json { "search_string": "laptop", "price_max": 1000, "condition": "New", "rows": 50 } ``` #### `search_property_residential` Search for residential properties for sale. **Parameters:** - `search_string` (optional): Search keywords - `region` (optional): Region ID - `district` (optional): District ID - `suburb` (optional): Suburb ID - `price_min` (optional): Minimum price - `price_max` (optional): Maximum price - `bedrooms_min` (optional): Minimum bedrooms - `bedrooms_max` (optional): Maximum bedrooms - `bathrooms_min` (optional): Minimum bathrooms - `property_type` (optional): Property type (House, Apartment, Townhouse, Unit, Land) - `adjacent_suburbs` (optional): Include adjacent suburbs - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "region": 9, "bedrooms_min": 3, "price_max": 800000, "property_type": "House" } ``` #### `search_property_rental` Search for rental properties. **Parameters:** - `search_string` (optional): Search keywords - `region` (optional): Region ID - `district` (optional): District ID - `suburb` (optional): Suburb ID - `price_min` (optional): Minimum weekly rent - `price_max` (optional): Maximum weekly rent - `bedrooms_min` (optional): Minimum bedrooms - `bedrooms_max` (optional): Maximum bedrooms - `property_type` (optional): Property type - `pets_ok` (optional): Allow pets - `smokers_ok` (optional): Allow smokers - `date_available` (optional): Date available from (YYYY-MM-DD) - `adjacent_suburbs` (optional): Include adjacent suburbs - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "region": 9, "bedrooms_min": 2, "price_max": 500, "pets_ok": true } ``` #### `search_property_commercial` Search for commercial real estate. **Parameters:** - `search_string` (optional): Search keywords - `region` (optional): Region ID - `district` (optional): District ID - `suburb` (optional): Suburb ID - `price_min` (optional): Minimum price - `price_max` (optional): Maximum price - `property_type` (optional): Commercial property type (Office, Retail, Industrial, Land) - `area_min` (optional): Minimum floor area (sqm) - `area_max` (optional): Maximum floor area (sqm) - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "property_type": "Office", "region": 9, "area_min": 100 } ``` #### `search_motors` Search for motor vehicles. **Parameters:** - `search_string` (optional): Search keywords (make/model) - `category` (optional): Motors category - `price_min` (optional): Minimum price - `price_max` (optional): Maximum price - `year_min` (optional): Minimum year - `year_max` (optional): Maximum year - `odometer_min` (optional): Minimum odometer reading (km) - `odometer_max` (optional): Maximum odometer reading (km) - `make` (optional): Vehicle make - `model` (optional): Vehicle model - `body_style` (optional): Body style (Sedan, SUV, Hatchback, etc.) - `transmission` (optional): Transmission type (Automatic, Manual) - `fuel_type` (optional): Fuel type (Petrol, Diesel, Electric, Hybrid) - `engine_size_min` (optional): Minimum engine size (cc) - `engine_size_max` (optional): Maximum engine size (cc) - `region` (optional): Region ID - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "make": "Toyota", "year_min": 2015, "price_max": 25000, "transmission": "Automatic" } ``` #### `search_jobs` Search for job listings. **Parameters:** - `search_string` (optional): Search keywords (job title, company) - `category` (optional): Jobs category number - `region` (optional): Region ID - `district` (optional): District ID - `type` (optional): Job type (FullTime, PartTime, Contract, Casual, Temporary) - `pay_min` (optional): Minimum salary/pay - `pay_max` (optional): Maximum salary/pay - `pay_type` (optional): Pay period (Annual, Hourly, Daily) - `work_type` (optional): Work arrangement (Office, Remote, Hybrid) - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "search_string": "software developer", "region": 9, "type": "FullTime", "pay_min": 80000 } ``` #### `search_services` Search for professional services and tradespeople. **Parameters:** - `search_string` (optional): Search keywords - `category` (optional): Services category number - `region` (optional): Region ID - `district` (optional): District ID - `suburb` (optional): Suburb ID - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "search_string": "plumber", "region": 9 } ``` ### Listing Retrieval Tools #### `get_listing_details` Get comprehensive details about a specific listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID - `return_metadata` (optional): Include additional metadata **Example:** ```json { "listing_id": 4567890123 } ``` #### `get_listing_photos` Get all photos for a listing in various sizes. **Parameters:** - `listing_id` (required): The Trade Me listing ID **Example:** ```json { "listing_id": 4567890123 } ``` #### `get_listing_questions` Get questions and answers (Q&A) for a listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID - `page` (optional): Page number for pagination - `rows` (optional): Number of results per page **Example:** ```json { "listing_id": 4567890123, "page": 1, "rows": 20 } ``` #### `get_bidding_history` Get the bidding history for an auction listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID **Example:** ```json { "listing_id": 4567890123 } ``` #### `get_shipping_options` Get available shipping methods and costs. **Parameters:** - `listing_id` (required): The Trade Me listing ID **Example:** ```json { "listing_id": 4567890123 } ``` #### `get_similar_listings` Find listings similar to a specified listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID - `rows` (optional): Number of results to return **Example:** ```json { "listing_id": 4567890123, "rows": 20 } ``` ### Watchlist Tools (Require Authentication) #### `get_watchlist` Get the authenticated user's watchlist. **Parameters:** - `category` (optional): Filter by category number - `page` (optional): Page number - `rows` (optional): Results per page (max 500) **Example:** ```json { "page": 1, "rows": 50 } ``` #### `add_to_watchlist` Add a listing to the authenticated user's watchlist. **Parameters:** - `listing_id` (required): The Trade Me listing ID to watch - `email_option` (optional): Email notification preference (0=None, 1=Daily, 2=Immediate) **Example:** ```json { "listing_id": 4567890123, "email_option": 1 } ``` #### `remove_from_watchlist` Remove a listing from the authenticated user's watchlist. **Parameters:** - `listing_id` (required): The Trade Me listing ID to unwatch **Example:** ```json { "listing_id": 4567890123 } ``` ### Bidding & Buying Tools (Require Authentication) #### `place_bid` Place a bid on an auction listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID to bid on - `amount` (required): The bid amount in NZD - `shipping_option` (optional): Shipping option ID **Example:** ```json { "listing_id": 4567890123, "amount": 150.00 } ``` #### `buy_now` Purchase a listing using Buy Now. **Parameters:** - `listing_id` (required): The Trade Me listing ID to purchase - `quantity` (optional): Number of items to purchase (default: 1) - `shipping_option` (optional): Shipping option ID - `accept_terms` (optional): Accept seller's terms and conditions **Example:** ```json { "listing_id": 4567890123, "quantity": 1, "accept_terms": true } ``` #### `make_offer` Make a fixed price offer on a listing. **Parameters:** - `listing_id` (required): The Trade Me listing ID - `price` (required): The offer amount in NZD - `message` (optional): Optional message to seller **Example:** ```json { "listing_id": 4567890123, "price": 500.00, "message": "Is this negotiable?" } ``` #### `withdraw_offer` Withdraw a previously made fixed price offer. **Parameters:** - `offer_id` (required): The offer ID to withdraw **Example:** ```json { "offer_id": 123456 } ``` #### `accept_offer` Accept an offer made on your listing (seller action). **Parameters:** - `offer_id` (required): The offer ID to accept **Example:** ```json { "offer_id": 123456 } ``` #### `decline_offer` Decline an offer made on your listing (seller action). **Parameters:** - `offer_id` (required): The offer ID to decline **Example:** ```json { "offer_id": 123456 } ``` #### `get_purchase_history` Get the authenticated user's purchase history. **Parameters:** - `page` (optional): Page number for pagination - `rows` (optional): Results per page (max 500) - `filter` (optional): Filter by status (All, EmailSent, PaymentReceived, GoodsShipped) **Example:** ```json { "page": 1, "rows": 50, "filter": "All" } ``` #### `get_won_items` Get auctions the authenticated user has won. **Parameters:** - `page` (optional): Page number for pagination - `rows` (optional): Results per page (max 500) **Example:** ```json { "page": 1, "rows": 25 } ``` #### `get_lost_items` Get auctions the authenticated user bid on but lost. **Parameters:** - `page` (optional): Page number for pagination - `rows` (optional): Results per page (max 500) **Example:** ```json { "page": 1, "rows": 25 } ``` #### `get_bidding_on` Get items the authenticated user is currently bidding on. **Parameters:** - `page` (optional): Page number for pagination - `rows` (optional): Results per page (max 500) **Example:** ```json { "page": 1, "rows": 25 } ``` ## Development ### Running Tests ```bash # Install dev dependencies pip install -e ".[dev]" # Run tests pytest # Run with coverage pytest --cov=trademe_mcp ``` ### Code Quality ```bash # Format code black src tests # Lint ruff check src tests # Type checking mypy src ``` ## API Documentation - [Trade Me API Reference](https://developer.trademe.co.nz/api-reference/) - [Trade Me Sandbox](https://www.tmsandbox.co.nz/) - [MCP Documentation](https://modelcontextprotocol.io/) ## Getting Trade Me API Credentials 1. Register for a Trade Me account 2. Go to [Developer Options](https://www.trademe.co.nz/MyTradeMe/Api/DeveloperOptions.aspx) 3. Create a new application 4. Note your Consumer Key and Consumer Secret 5. For authenticated endpoints, complete OAuth flow to get Access Token and Token Secret ## Troubleshooting ### Authentication Errors - Verify your API credentials are correct - Check you're using the right environment (sandbox vs production) - Ensure Access Token is set for authenticated endpoints ### Connection Issues - Confirm you have internet connectivity - Check if Trade Me API is accessible - Verify firewall settings ### Tool Errors - Check the tool parameters match the schema - Review server logs for detailed error messages - Ensure category numbers are in correct format (e.g., "0004-0369-6076-") ## Project Structure ``` trademe-mcp/ ├── src/trademe_mcp/ │ ├── __init__.py │ ├── server.py # Main MCP server │ ├── auth.py # OAuth 1.0a implementation │ ├── client.py # Trade Me API client │ └── tools/ │ ├── __init__.py │ └── catalogue.py # Catalogue tools ├── tests/ ├── .env.example ├── .gitignore ├── pyproject.toml └── README.md ``` ## License [Your License Here] ## Contributing Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests 5. Submit a pull request ## Support For issues and questions: - Trade Me API: [Developer Documentation](https://developer.trademe.co.nz/) - MCP Protocol: [MCP Documentation](https://modelcontextprotocol.io/) - This project: [GitHub Issues](your-repo-url/issues)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/giussepe198/trademe-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server