Metadata-Version: 2.4
Name: struct-mcp
Version: 0.1.0
Summary: Transform data structure definitions into queryable MCP servers
Project-URL: Homepage, https://github.com/LaurEars/struct-mcp
Project-URL: Repository, https://github.com/LaurEars/struct-mcp
Project-URL: Issues, https://github.com/LaurEars/struct-mcp/issues
Project-URL: Documentation, https://github.com/LaurEars/struct-mcp#readme
Author: Laura Rupprecht
License: MIT License
        
        Copyright (c) 2025 Laura Rupprecht
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: ai,data-structures,mcp,query,schema,yaml
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Communications
Classifier: Topic :: Database
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: mcp>=1.0.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pyyaml>=6.0.0
Provides-Extra: converters
Requires-Dist: avro>=1.11.0; extra == 'converters'
Requires-Dist: elasticsearch>=8.0.0; extra == 'converters'
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Description-Content-Type: text/markdown

# 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

```bash
# 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

```bash
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

```python
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 inventory
- `user_profiles.yaml` - User data with preferences
- `financial_transactions.yaml` - Payment processing metadata

## Documentation

For detailed setup, development, and API documentation, see [setup.md](setup.md).

## License

MIT
