@dealx/mcp-server
Officialby DealExpress
README.md
# @dealx/mcp-server
This is a Model Context Protocol (MCP) server for the [DealX platform](https://dealx.com.ua). It allows LLMs to interact with the DealX platform, specifically to search for ads.
## Table of Contents
- [Overview](#overview)
- [Installation](#installation)
- [Usage](#usage)
- [Available Tools](#available-tools)
- [Extending the Server](#extending-the-server)
- [Development](#development)
- [Troubleshooting](#troubleshooting)
## Hosted deployment
A hosted deployment is available on [Fronteir AI](https://fronteir.ai/mcp/dealx-mcp-server).
## Overview
The DealX MCP Server implements the [Model Context Protocol](https://github.com/modelcontextprotocol/typescript-sdk) to provide a standardized way for LLMs to interact with the [DealX platform](https://dealx.com.ua). Currently, it supports searching for ads, with plans to add more functionality in the future.
### What is MCP?
The Model Context Protocol (MCP) is a standardized way for LLMs to interact with external systems. It provides a structured interface for LLMs to access data and perform actions in the real world. This server implements the MCP specification to allow LLMs to interact with the DealX platform.
## Installation
### Prerequisites
- Node.js (v20 or later)
- npm (v11 or later)
### MCP Configuration
To use this server with an LLM like Claude, you need to add it to your LLM's MCP configuration:
1. Open your LLM's MCP configuration file:
- **Claude Desktop App**:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`
- **Cline (VS Code Extension)**:
- `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
2. Add the DealX MCP server to the `mcpServers` section:
```json
{
"mcpServers": {
"dealx": {
"command": "npx",
"args": ["-y", "@dealx/mcp-server"],
"env": {
"DEALX_API_URL": "https://dealx.com.ua"
},
"disabled": false,
"autoApprove": []
}
}
}
```
### Installation via npm
The easiest way to install the DealX MCP Server is via npm:
```shell
npm install -g @dealx/mcp-server
```
### Installation for Development
If you want to modify the server or contribute to its development:
1. Clone the repository:
```shell
git clone <repository-url>
cd dealx/mcp
```
2. Install dependencies:
```shell
npm install
```
3. Create a `.env` file based on the `.env.example` file:
```shell
cp .env.example .env
```
4. Edit the `.env` file to set the appropriate values:
```shell
# DealX API URL
DEALX_API_URL=http://localhost:3001
# Optional: Specify the port for the MCP server
MCP_SERVER_PORT=3100
# Optional: Log level (debug, info, warn, error)
LOG_LEVEL=info
```
5. Build the server:
```shell
npm run build
```
## Usage
### Starting the Server
You can run the server in several ways:
1. If installed globally:
```shell
node node_modules/@dealx/mcp-server/build/index.js
```
2. Using npx without installation:
```shell
npx -y @dealx/mcp-server
```
3. With environment variables:
```shell
DEALX_API_URL=https://dealx.com.ua npx -y @dealx/mcp-server
```
4. For development:
```shell
npm start
```
### Using with an LLM
Once configured in your LLM's MCP settings, you can use natural language to interact with the DealX platform.
Example prompts:
- "Search for ads on DealX with the query 'laptop'"
- "Find the newest 5 ads for 'iPhone' on DealX"
- "Search DealX for apartments in Kyiv"
## Available Tools
### search_ads
Search for ads on the DealX platform.
**Parameters:**
- `query` (string, optional): Search query string
- `sort` (string, optional): Sort order (e.g., "-created" for newest first)
- `offset` (number, optional): Pagination offset (starts at 1, default: 1)
- `limit` (number, optional): Number of results per page (max 100, default: 30)
**Example Usage:**
```json
{
"query": "laptop",
"sort": "-created",
"offset": 1,
"limit": 10
}
```
## Extending the Server
The server is designed to be easily extended with additional tools. Here's how to add a new tool:
- Define the tool in the `TOOLS` object in `src/index.ts`:
```typescript
const TOOLS = {
SEARCH_ADS: "search_ads",
NEW_TOOL: "new_tool", // Add your new tool here
};
```
- Create a new file in the `src/tools` directory for your tool implementation:
```typescript
// src/tools/new-tool.ts
import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
interface NewToolParams {
// Define your tool parameters here
}
export async function newTool(params: NewToolParams) {
try {
// Implement your tool logic here
return {
content: [
{
type: "text",
text: JSON.stringify(result, null, 2),
},
],
};
} catch (error) {
// Handle errors
// ...
}
}
```
- Add the tool to the `ListToolsRequestSchema` handler in `src/index.ts`:
```typescript
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
// Existing tools...
{
name: TOOLS.NEW_TOOL,
description: "Description of your new tool",
inputSchema: {
type: "object",
properties: {
// Define your tool parameters here
},
required: [], // List required parameters
},
},
],
}));
```
- Add the tool to the `CallToolRequestSchema` handler in `src/index.ts`:
```typescript
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
switch (name) {
// Existing cases...
case TOOLS.NEW_TOOL:
return await newTool(args);
default:
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
});
```
- Import your new tool in `src/index.ts`:
```typescript
import { newTool } from "./tools/new-tool.js";
```
### Planned Future Tools
The following tools are planned for future implementation:
- `create_ad`: Create a new ad on the [DealX platform](https://dealx.com.ua)
- `edit_ad`: Edit an existing ad
- `delete_ad`: Delete an ad
- `get_threads`: Get discussion threads for an ad
- `create_thread`: Create a new discussion thread
## Development
### Project Structure
```shell
mcp/
├── build/ # Compiled JavaScript files
├── src/ # TypeScript source files
│ ├── tools/ # Tool implementations
│ │ └── search-ads.ts
│ └── index.ts # Main server implementation
├── .env # Environment variables (not in git)
├── .env.example # Example environment variables
├── package.json # Project dependencies and scripts
├── tsconfig.json # TypeScript configuration
└── README.md # This file
```
### npm Scripts
- `npm run build` - Compile TypeScript to JavaScript
- `npm start` - Start the server using the compiled JavaScript
- `npm run dev` - Start the server in development mode with hot reloading
- `npm run lint` - Lint the code using ESLint
- `npm run format` - Format the code using Prettier
- `npm test` - Run tests
## Troubleshooting
### Common Issues
#### Server Not Starting
If the server fails to start, check the following:
- Make sure you have the correct Node.js version installed
- Check that all dependencies are installed
- Verify that the `.env` file exists and has the correct values
- Check the console output for error messages
#### Connection Issues
If the LLM can't connect to the server:
- Make sure the server is running
- Check that the MCP configuration in the LLM's settings is correct
- Verify that the path to the server executable is correct
- Check that the environment variables are set correctly
#### API Connection Issues
If the server can't connect to the DealX API:
- Make sure the DealX API is running
- Check that the `DEALX_API_URL` environment variable is set correctly
- Verify that the API endpoint is accessible from the server
### Getting Help
If you encounter issues not covered here, please open an issue against this GitHub repository.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues