Skip to main content
Glama
README.md
# sql2odata-mcp

**MCP server that translates SQL statements into OData v4 query syntax.**

Use this as a tool in Claude Desktop, Cursor, Windsurf, or any MCP-compatible LLM client.

## Install

```bash
npm install -g sql2odata-mcp
```

## Configuration

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "sql2odata": {
      "command": "npx",
      "args": ["-y", "sql2odata-mcp"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add sql2odata -- npx -y sql2odata-mcp
```

### Cursor

Add to Cursor MCP settings:

```json
{
  "mcpServers": {
    "sql2odata": {
      "command": "npx",
      "args": ["-y", "sql2odata-mcp"]
    }
  }
}
```

## Available Tools

### `translate-sql`

Translate a single SQL statement to OData v4.

**Parameters:**
- `sql` (string, required) — SQL statement (SELECT, INSERT, UPDATE, DELETE)
- `encode` (boolean, optional) — URL-encode the output

**Example:**
```
translate-sql({ sql: "SELECT Name, Age FROM Users WHERE Country = 'Germany' ORDER BY Name LIMIT 10" })
```

**Returns:**
```
GET /Users?$select=Name,Age&$filter=Country eq 'Germany'&$orderby=Name asc&$top=10

Parameters:
  $select = Name,Age
  $filter = Country eq 'Germany'
  $orderby = Name asc
  $top = 10
```

### `translate-batch`

Translate multiple SQL statements at once.

**Parameters:**
- `queries` (string[], required) — Array of SQL statements
- `encode` (boolean, optional) — URL-encode the output

### `sql-syntax-help`

Show all supported SQL syntax and their OData v4 equivalents.

**Parameters:** none

## Available Prompts

### `sql-to-odata`

Pre-built prompt template that translates SQL and explains the result.

**Parameters:**
- `sql` (string) — SQL statement to translate

## Supported SQL

| SQL | OData v4 |
|-----|----------|
| `SELECT col1, col2` | `$select=col1,col2` |
| `SELECT COUNT(*)` | `$count=true` |
| `FROM Table` | `/Table` |
| `WHERE col = 'val'` | `$filter=col eq 'val'` |
| `WHERE LIKE '%text%'` | `contains(col,'text')` |
| `WHERE IN ('a','b')` | `(col eq 'a' or col eq 'b')` |
| `WHERE BETWEEN 1 AND 10` | `col ge 1 and col le 10` |
| `IS NULL / IS NOT NULL` | `eq null / ne null` |
| `ORDER BY col ASC` | `$orderby=col asc` |
| `LIMIT n / OFFSET n` | `$top=n / $skip=n` |
| `JOIN Table ON ...` | `$expand=Table` |
| `GROUP BY + aggregates` | `$apply=groupby(...)` |
| `INSERT INTO ... VALUES` | **POST** + JSON body |
| `UPDATE ... SET ... WHERE` | **PATCH** + JSON body |
| `DELETE FROM ... WHERE` | **DELETE** |

## Related

- [sql2odata](https://marketplace.visualstudio.com/items?itemName=moonraker46.sql2odata) — VS Code Extension
- [sql2odata-cli](https://www.npmjs.com/package/sql2odata-cli) — CLI Tool

## License

MIT

## Author

**Ulrich Waldmann** — [moonraker@magenta.de](mailto:moonraker@magenta.de)