Heraldic Blazonry Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Heraldic Blazonry Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol server that translates heraldic blazon descriptions into visual generation parameters using 900 years of compositional refinement from the heraldic tradition.
This MCP server enables AI systems to work with formal heraldic descriptions (blazons) and translate them into structured visual parameters for image generation. Rather than forcing users to learn visual design vocabulary, they can use the time-tested language of heraldry that has precisely specified coat of arms designs since the 12th century.
Heraldic blazon syntax already is a categorical olog:
When a herald says "Azure, a lion rampant Or," they're invoking a formal compositional system that automatically generates:
# Clone the repository
git clone https://github.com/dmarsters/heraldic-blazonry.git
cd heraldic-blazonry
# Install dependencies
pip install -e .
# For development with tests
pip install -e ".[dev]"Configure in your MCP client (e.g., Claude Desktop):
{
"mcpServers": {
"heraldic-blazonry": {
"command": "python",
"args": ["-m", "heraldic_blazonry.server"]
}
}
}#### 1. blazon_to_parameters
Translate heraldic blazon into visual generation parameters.
# Example: Classic English lion
blazon_to_parameters(
blazon="Azure, a lion rampant Or",
style="medieval"
)
# Returns:
{
"field": {
"tincture": "azure",
"color": "#0047AB",
"color_name": "blue"
},
"charges": [{
"type": "lion",
"attitude": "rampant",
"tincture": "#FFD700",
"description": "lion rearing up on hind legs"
}],
"composition_grid": {...},
"style_modifiers": {
"texture": "hand_painted_vellum",
"line_quality": "confident_brush_strokes",
"gold_treatment": "leaf_gilding_with_burnish"
},
"prompt_components": {...}
}Supported Styles:
medieval: Hand-painted vellum, gilded gold, flat heraldicvictorian: Engraved crosshatch, technical precision, subtle depthmodern_minimal: Clean vector, geometric, pure flat design#### 2. validate_blazon
Check if blazon follows heraldic composition rules.
validate_blazon("Or, a lion rampant Argent")
# Returns:
{
"valid": False,
"tincture_rule_compliant": False,
"violations": [{
"rule": "tincture_rule",
"description": "Metal on metal detected. Violates fundamental heraldic rule.",
"severity": "error",
"remedy": "Place metal charges on color fields"
}]
}Rules Checked:
#### 3. compose_blazons
Compose two coats of arms using traditional marshalling methods.
compose_blazons(
primary_blazon="Gules, a castle Or",
secondary_blazon="Argent, a lion rampant Purpure",
method="quarterly"
)
# Returns:
{
"method": "quarterly",
"quarters": {
"1": {"position": "upper_dexter", "blazon": "Gules, a castle Or", ...},
"2": {"position": "upper_sinister", "blazon": "Argent, a lion...", ...},
"3": {"position": "lower_dexter", "blazon": "Argent, a lion...", ...},
"4": {"position": "lower_sinister", "blazon": "Gules, a castle Or", ...}
},
"layout_grid": "2x2"
}Marshalling Methods:
quarterly: Divide shield into 4 quarters, alternating arms (used for grand quarters of inheritance)impalement: Split shield vertically (traditionally for marriage)escutcheon: Small shield overlaid on main shield (for inheritance or office)#### 4. get_tincture_palette
Get complete heraldic color palette with hex codes.
get_tincture_palette()
# Returns:
{
"metals": {
"or": {"color": "#FFD700", "name": "gold"},
"argent": {"color": "#F5F5F5", "name": "silver/white"}
},
"colors": {
"gules": {"color": "#DC143C", "name": "red"},
"azure": {"color": "#0047AB", "name": "blue"},
...
},
"furs": {...},
"tincture_rule": {...}
}#### 5. list_charges
List available heraldic charges with properties.
list_charges(category="natural")
# Returns:
{
"natural": {
"lion": {"category": "beast", "default_attitude": "rampant"},
"eagle": {"category": "bird", "default_attitude": "displayed"},
...
}
}#### 6. get_intentionality_principles
Get the "why" behind heraldic design rules.
get_intentionality_principles()
# Returns:
{
"visibility": {
"principle": "Arms must be identifiable at distance on battlefield",
"implementation": "High contrast, clear shapes, tincture rule"
},
"symbolic_hierarchy": {...},
"marshalling_logic": {...},
"temporal_coherence": {...}
}"Azure, a lion rampant Or"
→ Blue field with gold lion rearing up
"Argent, three roses Gules"
→ White field with three red roses
"Gules, a castle Or"
→ Red field with gold castle"Azure, a chevron Or"
→ Blue field with gold chevron
"Argent, a chief Gules"
→ White field with red top section
"Per pale Or and Azure, a cross counterchanged"
→ Vertical split gold/blue with cross swapping colors"Quarterly, 1st and 4th Gules a castle Or, 2nd and 3rd Argent a lion rampant Purpure"
→ Four-part shield alternating castles and lions (arms of Spain)Principle: Metal must not touch metal, color must not touch color.
Metals: Or (gold), Argent (silver) Colors: Gules (red), Azure (blue), Vert (green), Sable (black), Purpure (purple)
Why: Ensures maximum visibility and contrast for battlefield identification. A metal charge on a metal field would blend together at distance.
Exception: Furs (ermine, vair) can touch anything.
Blazon descriptions follow a strict order:
Layer 1: Categorical Structure (blazon_olog.yaml)
Layer 2: Intentionality Reasoning
Layer 3: MCP Implementation
Specify firm heraldry in formal blazon language rather than art-directing designers. Ensure consistent rendering across letterhead, websites, court documents.
Maintain historically accurate representations of institutional arms. Enable automatic generation of college/department variants through quartering and marshalling.
Encode civic arms in formal blazon for consistent reproduction across signage, official documents, promotional materials.
Translate textual blazon descriptions from historical records into visual reconstructions. Validate arms against heraldic rules.
Automate initial validation of proposed arms against tincture rule and composition standards. Generate visualizations for grant documents.
Run the comprehensive test suite:
# Run all tests
pytest
# Run with coverage
pytest --cov=heraldic_blazonry --cov-report=html
# Run specific test category
pytest tests/test_server.py::TestBlazonParsingTest coverage includes:
fastmcp.yaml:name: heraldic-blazonry
runtime: python
entrypoint: heraldic_blazonry.server:mcpfastmcp deployBased on lessons learned from previous deployments:
server.py avoids asyncio conflicts from complex import chainsheraldic_blazonry.module_name style importsheraldic-blazonry/
├── heraldic_blazonry/
│ ├── __init__.py
│ ├── server.py # Flattened MCP server with all logic
│ └── blazon_olog.yaml # Categorical structure specification
├── tests/
│ ├── __init__.py
│ └── test_server.py # Comprehensive test suite
├── pyproject.toml # Python package configuration
└── README.mdContributions welcome! Key areas:
MIT License - See LICENSE file
This work positions as "epistemological infrastructure" for reproducible intention transfer. The formal syntax of heraldry demonstrates how expert domains already contain structured compositional languages that can be systematically mapped to visual parameters.
Key Insight: Rather than treating visual generation as unstructured "prompt engineering," we can identify domains with proven compositional logic (like heraldry) and build compilers that preserve expert intentionality across the semantic-to-sensory boundary.
Dal Marsters GitHub: @dmarsters
Production-ready v0.1.0 - Deployed on FastMCP Cloud
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.