About Query Craft MCP
Query Craft MCP is an MCP server published by arjunhq in the Developer Tools category: turn plain English into OData queries — schema-aware, MCP-powered, no filter syntax required.
The repository has 2 stars and 0 forks, with the last commit 8 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.
Install
git clone https://github.com/arjunhq/query-craft-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (8)
aggregate-dataPerform client-side grouping and aggregation on result sets
Parameters not published.
connect-odata-serviceLoad and cache service metadata
Parameters not published.
execute-odata-queryRun a validated query and return JSON results
Parameters not published.
find-navigation-pathDiscover the shortest `$expand` path between two entities
Parameters not published.
list-configured-servicesEnumerate available OData endpoints from configuration
Parameters not published.
list-entitiesReturn entity sets with key properties
Parameters not published.
list-entity-propertiesReturn properties and navigation links for a given entity
Parameters not published.
validate-queryCheck OData query syntax and semantics against the schema
Parameters not published.
Ask AI
Ask AI about Query Craft MCP
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
- ✓License declaredUsable under a stated license.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
3 checks have not been run yet.
README
QueryCraft
Natural language to OData v4 queries — powered by LLMs and grounded in real service metadata.
Overview
OData v4 is expressive but unforgiving. Property names are case-sensitive, navigation paths must match the metadata graph, and syntax rules vary across filter, expand, and apply clauses. QueryCraft addresses this by sitting between the LLM and the OData service as a schema-aware middleware:
- Metadata ingestion — fetches and parses
$metadataXML usingMicrosoft.OData.Edm, building an in-memory index of entity sets, properties, keys, navigation links, complex types, and enums. - Schema-grounded generation — provides the parsed schema as structured context to the LLM, eliminating hallucinated entity or property names.
- Pre-execution validation — validates every generated query against the schema before it touches the wire, catching type mismatches, missing properties, and broken navigation paths early.
- Client-side aggregation — performs grouping, counting, and statistical operations locally when the target service lacks
$applysupport.
Features
- Schema-aware query generation — LLM responses are validated against live OData metadata, not best guesses
- Query validation — syntax and semantic checks via
ODataUriParsercatch errors before execution - Navigation path discovery — BFS-based traversal finds the shortest
$expandchain between any two related entities - Client-side aggregation — GROUP BY, SUM, AVG, COUNT, MIN, MAX, and COUNT DISTINCT when server-side
$applyis unavailable - Interactive UI — a single-file Vite-built frontend visualises schema context, queries, and result tables in real time
Tech Stack
| Layer | Technology |
|---|---|
| Backend | .NET 9 · C# · ASP.NET Core |
| OData parsing | Microsoft.OData.Edm · Microsoft.OData.Core |
| MCP integration | ModelContextProtocol SDK (preview) |
| Frontend | TypeScript · Vite · single-file HTML build |
MCP Tools
QueryCraft exposes eight tools through the Model Context Protocol:
| Tool | Purpose |
|---|---|
list-configured-services |
Enumerate available OData endpoints from configuration |
connect-odata-service |
Load and cache service metadata |
list-entities |
Return entity sets with key properties |
list-entity-properties |
Return properties and navigation links for a given entity |
validate-query |
Check OData query syntax and semantics against the schema |
find-navigation-path |
Discover the shortest $expand path between two entities |
execute-odata-query |
Run a validated query and return JSON results |
aggregate-data |
Perform client-side grouping and aggregation on result sets |
Getting Started
Prerequisites
- .NET 9 SDK
- Node.js 18+
- An MCP-compatible host (e.g. Claude Desktop)
Build
# Frontend
npm install && npm run build
# Backend
cd QueryCraft && dotnet build
Configure
Add OData services to QueryCraft/appsettings.json:
{
"QueryCraft": {
"MetadataCacheTtlMinutes": 60,
"MaxResponseBytes": 5000000,
"Services": [
{
"Key": "northwind",
"DisplayName": "Northwind Sample",
"ServiceRoot": "https://services.odata.org/V4/Northwind/Northwind.svc/",
"MetadataUrl": "https://services.odata.org/V4/Northwind/Northwind.svc/$metadata",
"Enabled": true
}
]
}
}
Run
Register the server in your MCP host configuration:
{
"mcpServers": {
"querycraft": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/query-craft-mcp/QueryCraft"]
}
}
}
Usage
User → "Connect to the Northwind service"
User → "What entities are available?"
User → "Find all products priced above 20, sorted by name"
LLM → validates query → executes → returns results in an interactive table
Project Structure
QueryCraft/ .NET 9 MCP server
├── ODataTools.cs MCP tool definitions (8 tools)
├── ODataSchemaService.cs Metadata loading & schema parsing
├── QueryValidator.cs OData v4 syntax & semantic validation
├── ClientAggregator.cs Client-side aggregation engine
├── SchemaIndex.cs In-memory schema lookups & BFS traversal
├── SchemaState.cs Schema registry & state management
└── Models/ Navigation & validation DTOs
src/ TypeScript UI source
mcp-app.html UI entry point (single-file Vite build)
Limitations
- No authentication or authorization — intended for local development and demonstration only
- OData feature support varies by provider; some services may not expose full v4 capabilities
- Large result sets should be bounded with
$topto avoid performance issues
References
License
MIT
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.