struct-mcp
Transform data structure definitions into queryable MCP servers, enabling natural language queries about field meanings, data lineage, and structure.
README
Struct-MCP
Transform data structure definitions into queryable MCP servers. Define your data structures with business context and get an AI-queryable interface that can answer questions about field meanings, data lineage, and structure.
Quick Start
# Install
pip install struct-mcp
# Create a structure definition
echo "cheese_inventory:
description: 'Artisanal cheese catalog'
fields:
cheese_id:
type: string
description: 'Unique identifier for each cheese'
upstream_table: 'inventory.raw_cheese_data'
name:
type: string
description: 'Display name of the cheese'
stinkiness_level:
type: integer
nullable: true
description: 'Stinkiness rating from 1-10'
" > cheese.yaml
# Start MCP server
struct-mcp serve cheese.yaml
Supported Formats
Load from multiple input formats:
- YAML - Primary format with full business context
- JSON Schema - Standard JSON Schema files
- OpenSearch - Elasticsearch/OpenSearch mappings
- Avro - Apache Avro schemas
- Pydantic - Python BaseModel classes
- Protocol Buffer - .proto message definitions
struct-mcp serve schema.yaml # YAML
struct-mcp serve schema.json # JSON Schema/OpenSearch/Avro
struct-mcp serve model.py # Pydantic
struct-mcp serve messages.proto # Protocol Buffer
What You Can Ask
Once loaded, query your structures with natural language:
- "What does the cheese_id field represent?"
- "Which fields come from the inventory table?"
- "What fields are nullable and why?"
- "How is stinkiness_level calculated?"
- "Show me all array fields"
Python API
from struct_mcp import StructMCP, MCPServer
# Load any format
smc = StructMCP.from_file("cheese.yaml")
# Query programmatically
fields = smc.get_fields("cheese_inventory")
nullable_fields = smc.get_fields("cheese_inventory", nullable=True)
# Convert between formats
opensearch_mapping = smc.to_opensearch()
pydantic_model = smc.to_pydantic()
# Start MCP server
server = MCPServer(smc)
server.start()
Examples
See examples/ for sample files in all supported formats:
cheese_catalog.yaml- Artisanal cheese inventoryuser_profiles.yaml- User data with preferencesfinancial_transactions.yaml- Payment processing metadata
Documentation
For detailed setup, development, and API documentation, see setup.md.
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.