File size: 1,267 Bytes
4f4965d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from typing import Dict, Any, List


def validate_metadata(metadata: Dict[str, Any], required_keys: List[str] = None) -> bool:
    """
    Ensures metadata contains all required keys.
    """
    if not metadata:
        return not required_keys  # valid if no required keys

    if required_keys:
        missing = [k for k in required_keys if k not in metadata]
        if missing:
            raise ValueError(f"Missing required metadata keys: {missing}")

    return True


def validate_context(context: Any) -> bool:
    """
    Ensures MCP context is well-formed.
    Expects an object with:
    - taxonomy: dict
    - policies: dict
    - history: dict
    - sources: list
    """
    if not hasattr(context, "taxonomy") or not isinstance(context.taxonomy, dict):
        raise TypeError("Context missing 'taxonomy' dict")
    if not hasattr(context, "policies") or not isinstance(context.policies, dict):
        raise TypeError("Context missing 'policies' dict")
    if not hasattr(context, "history") or not isinstance(context.history, dict):
        raise TypeError("Context missing 'history' dict")
    if not hasattr(context, "sources") or not isinstance(context.sources, list):
        raise TypeError("Context missing 'sources' list")

    return True