MCP Hub
Back to servers

sql2odata-mcp

An MCP server that translates SQL statements into OData v4 query syntax, supporting SELECT, INSERT, UPDATE, and DELETE operations. It enables users to convert complex SQL queries into OData-compliant requests through single or batch translation tools.

Updated
Feb 25, 2026

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

npm install -g sql2odata-mcp

Configuration

Claude Desktop

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

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

Claude Code

claude mcp add sql2odata -- npx -y sql2odata-mcp

Cursor

Add to Cursor MCP settings:

{
  "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

SQLOData 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 10col ge 1 and col le 10
IS NULL / IS NOT NULLeq 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 ... VALUESPOST + JSON body
UPDATE ... SET ... WHEREPATCH + JSON body
DELETE FROM ... WHEREDELETE

Related

License

MIT

Author

Ulrich Waldmannmoonraker@magenta.de

Reviews

No reviews yet

Sign in to write a review