mcp-semclone
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OSPAC_PATH | No | Custom path to ospac tool | |
| UPMEX_PATH | No | Custom path to upmex tool | |
| VULNQ_PATH | No | Custom path to vulnq tool | |
| NVD_API_KEY | No | NVD API key for higher rate limits | |
| GITHUB_TOKEN | No | GitHub token for higher rate limits | |
| OSSLILI_PATH | No | Custom path to osslili tool | |
| PURL2NOTICES_PATH | No | Custom path to purl2notices tool | |
| BINARYSNIFFER_PATH | No | Custom path to binarysniffer tool |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scan_directoryA | FIRST STEP: Scan a directory for compliance issues using purl2notices. This is typically the FIRST tool you should use when analyzing a project. Use this to discover what's in your project before validation or documentation generation. PURPOSE:
WHAT purl2notices DETECTS:
IMPORTANT: This tool scans the ENTIRE dependency tree:
WHEN TO USE:
WHEN NOT TO USE:
WORKFLOW POSITION: FIRST STEP in most compliance workflows. Use this to discover what's in your project before validation/generation. TYPICAL NEXT STEPS:
IMPORTANT NOTES:
Args: path: Directory or file path to scan recursive: Enable recursive scanning (default: True, max depth 3) check_vulnerabilities: Check for vulnerabilities in detected packages check_licenses: (Deprecated - always True) Scan for licenses identify_packages: (Deprecated - always True) Detect packages policy_file: Optional policy file for license compliance validation Returns: Dictionary containing: - licenses: List of detected licenses from project and dependencies - packages: List of ALL detected packages with PURLs (includes transitive deps) - vulnerabilities: List of vulnerabilities (if check_vulnerabilities=True) - policy_violations: Policy violations (if policy_file provided) - metadata: Summary information including copyright holders and counts |
| check_packageA | Check a specific package using intelligent tool selection. This tool intelligently analyzes package files by:
Args: identifier: Package identifier (PURL like pkg:maven/com.google.gson/gson@2.10.1, file path to archive, or package file) check_vulnerabilities: Whether to check for vulnerabilities (default: False for speed) check_licenses: Whether to extract license information (default: True) Returns: Dictionary containing package metadata, licenses, and optionally vulnerabilities |
| validate_policyA | Validate if licenses are approved or rejected for a specific project/distribution type. This tool evaluates licenses against organizational policies and returns clear APPROVE or DENY decisions based on the distribution type. This is the primary tool for answering: "Can I use these licenses for my [mobile/commercial/saas/etc] project?" Key Use Cases:
Returns clear approve/deny decisions:
Args: licenses: List of SPDX license IDs to validate (e.g., ["MIT", "Apache-2.0", "GPL-3.0"]) policy_file: Optional custom policy directory (uses enterprise defaults if not provided) distribution: Distribution type - determines policy rules: - "mobile": iOS/Android apps (blocks GPL, allows permissive) - "commercial": Commercial products (blocks strong copyleft) - "saas": Software as a Service (blocks AGPL, allows GPL) - "embedded": Embedded systems (blocks copyleft) - "desktop": Desktop applications - "web": Web applications - "open_source": Open source projects (allows most licenses) - "internal": Internal use only (allows all) context: Optional usage context (e.g., "static_linking", "dynamic_linking") Returns: Dictionary with: - licenses: List of licenses evaluated - distribution: Distribution type used - context: Context evaluated - result.action: "approve", "deny", or "review" - result.severity: "info" (approved), "warning" (review), or "error" (denied) - result.message: Human-readable decision explanation - result.requirements: List of compliance requirements (if approved) - result.remediation: Suggested fix (if denied, e.g., "Replace with MIT alternative") - using_default_policy: Whether default enterprise policy was used Examples: # Check if licenses are approved for mobile app validate_policy(["MIT", "Apache-2.0"], distribution="mobile") → action: "approve" ✓ Workflow Integration: 1. After scanning: scan_directory() → extract licenses → validate_policy() 2. Quick check: validate_policy(["GPL-3.0"], distribution="mobile") → see if approved 3. Policy enforcement: validate_policy() → if action=="deny" → block deployment |
| get_license_obligationsA | Get detailed obligations for specified licenses. This tool answers the critical question: "What must I do to comply with these licenses?" Args: licenses: List of SPDX license IDs (e.g., ["MIT", "Apache-2.0", "GPL-3.0"]) output_format: Output format (json, text, checklist, markdown) Returns: Comprehensive obligations including: - Required actions (attribution, notices, disclosure, etc.) - Permissions (commercial use, modification, distribution, etc.) - Limitations (liability, warranty, trademark use, etc.) - Conditions (source disclosure, license preservation, state changes, etc.) - Key requirements for compliance Example: For MIT license, returns obligations like: - Include original license text in distributions - Preserve copyright notices - No trademark rights granted |
| check_license_compatibilityA | Check if two licenses are compatible for use together. This tool answers: "Can I combine code under these two licenses?" Args: license1: First SPDX license ID (e.g., "MIT") license2: Second SPDX license ID (e.g., "GPL-3.0") context: Usage context (general, static_linking, dynamic_linking) Returns: Compatibility assessment including: - compatible: True/False indicating if licenses can be combined - reason: Explanation of why they are/aren't compatible - restrictions: Any special conditions or restrictions - recommendations: Suggested actions if incompatible Example: Checking MIT vs GPL-3.0 returns: - compatible: False - reason: GPL-3.0 is strongly copyleft and requires derivative works to be GPL-3.0 - recommendations: Use dynamic linking, keep code separate, or relicense |
| get_license_detailsA | Get comprehensive details about a specific license. This tool provides complete license information including the full license text for generating NOTICE files and understanding license requirements. Args: license_id: SPDX license ID (e.g., "Apache-2.0", "MIT", "GPL-3.0") include_full_text: Include full license text (can be long, ~5-20KB) Returns: License information including: - name: Full license name - type: License category (permissive, copyleft_weak, copyleft_strong, etc.) - properties: Characteristics (OSI approved, FSF free, etc.) - permissions: What you CAN do (commercial use, modify, distribute, etc.) - requirements: What you MUST do (include license, preserve copyright, etc.) - limitations: What is NOT provided (liability, warranty, etc.) - obligations: Specific compliance requirements - full_text: Complete license text (if include_full_text=True, fetched from SPDX API) Example: For Apache-2.0, returns complete license data including: - Full license text for NOTICE files - Patent grant information - Attribution requirements |
| analyze_commercial_riskC | Analyze commercial licensing risk for a project. |
| validate_license_listA | QUICK answer to: "Can I ship this with these licenses?" This tool analyzes a list of licenses without requiring a filesystem path, making it ideal for quick validation checks. WHEN TO USE:
WHEN NOT TO USE:
WORKFLOW POSITION: Use AFTER scan_directory/check_package to validate licenses, BEFORE generate_legal_notices to confirm compliance. COMMON WORKFLOW: scan_directory(identify_packages=True) → validate_license_list(distribution="mobile") [VALIDATION STEP] → generate_legal_notices(purls=[...]) [IF APPROVED] RETURNS CLEAR DECISION:
Args: licenses: List of SPDX license identifiers (e.g., ["MIT", "Apache-2.0"]) distribution: Target distribution type - "mobile", "desktop", "saas", "embedded", "general" check_app_store_compatibility: Check specific App Store (iOS/Android) compatibility Returns: Dictionary with: - safe_for_distribution: bool - Overall safety assessment - copyleft_risk: str - "none", "weak", or "strong" - risk_level: str - "LOW", "MEDIUM", or "HIGH" - violations: List of identified issues - recommendations: List of actionable recommendations - app_store_compatible: bool - iOS/Android app store compatibility - license_details: Summary of each license |
| generate_legal_noticesA | PRIMARY TOOL: Generate legal notices by scanning source code directly (DEFAULT - FAST). This is the RECOMMENDED tool for creating legal compliance documentation. Scans your project's source code directly to detect ALL packages (including transitive dependencies) and generates comprehensive attribution notices. ⚠️ THIS IS THE DEFAULT TOOL - Use this for most cases!
WHEN TO USE THIS TOOL:
WHEN NOT TO USE:
PURPOSE: Creates production-ready legal compliance documentation including:
WHEN TO USE (MOST COMMON SCENARIOS):
WHEN NOT TO USE:
WORKFLOW POSITION: Typically used AFTER scan_directory/check_package and validation (validate_license_list), as the FINAL step to generate legal documentation. COMMON WORKFLOWS:
BACKEND: Uses purl2notices in scan mode to read source code directly. Automatically extracts copyright holders, fetches license texts from SPDX, and formats complete attribution. Args: path: Path to source directory to scan (project root with dependencies installed) output_format: Output format - "text" (default), "html", "markdown" output_file: Optional path to save the output file include_license_text: If True, include full license texts (default: True) Returns: Dictionary containing: - notices: The generated legal notices text - packages_processed: Number/description of packages processed - packages_failed: Number of packages that failed processing - output_file: Path to saved file (if output_file was specified) - format: The output format used - mode: "scan_directory" (indicates source code scanning was used) Examples: # Generate text NOTICE file for npm project generate_legal_notices( path="/path/to/npm-project", output_file="NOTICE.txt" ) |
| generate_legal_notices_from_purlsA | ALTERNATIVE TOOL: Generate legal notices from PURL list (downloads from registries - SLOWER). Use this tool ONLY when:
⚠️ PERFORMANCE WARNING: This downloads packages from registries (slow)
⚠️ CRITICAL: DO NOT manually extract PURLs from package.json or requirements.txt!
WHEN TO USE THIS TOOL:
WHEN NOT TO USE (use generate_legal_notices instead):
Args: purls: List of Package URLs (e.g., ["pkg:npm/express@4.0.0", "pkg:pypi/django@4.2.0"]) output_format: Output format - "text" (default), "html", "markdown" output_file: Optional path to save the output file include_license_text: If True, include full license texts (default: True) Returns: Dictionary containing: - notices: The generated legal notices text - packages_processed: Number of packages successfully processed - packages_failed: Number of packages that failed processing - output_file: Path to saved file (if output_file was specified) - format: The output format used - mode: "download_purls" (indicates registry downloads were used) Examples: # Generate notices from PURL list (after scan_directory) scan_result = scan_directory("/path/to/project") purls = [pkg["purl"] for pkg in scan_result["packages"]] generate_legal_notices_from_purls( purls=purls, output_file="NOTICE.txt" ) |
| download_and_scan_packageA | Download package source from registry and perform comprehensive analysis. ⚠️ IMPORTANT: This tool CAN and WILL download source code from package registries! Workflow (tries methods in order until sufficient data is collected):
What this tool does:
When to use this tool:
Real-world example: User asks: "Can you check if duckdb@0.2.3 has license info in the source code?"
Performance:
Security note:
Args: purl: Package URL (e.g., "pkg:pypi/duckdb@0.2.3", "pkg:npm/express@4.21.2") keep_download: If True, keeps downloaded files for manual inspection (default: False) Returns: Dictionary containing: - purl: The package URL analyzed - method_used: Which method succeeded ("purl2notices", "deep_scan", "online_fallback") - download_path: Where package was downloaded (if keep_download=True) - metadata: Package metadata (name, version, homepage, etc.) - declared_license: License from package metadata - detected_licenses: List of licenses found by scanning source files - copyright_statements: Copyright statements extracted from source - files_scanned: Number of files analyzed - scan_summary: Summary of what was found Examples: # Check if package has license info in source code download_and_scan_package(purl="pkg:pypi/duckdb@0.2.3") |
| generate_sbomA | Generate a Software Bill of Materials (SBOM) in CycloneDX format using purl2notices. This tool creates comprehensive SBOMs in CycloneDX 1.4 JSON format for software inventory, vulnerability tracking, and compliance documentation. SBOM includes: name, version, PURL, licenses, homepage (external references). Data is sourced from purl2notices scan mode which provides accurate package metadata. Use this tool when:
Input modes:
Args: purls: Optional list of Package URLs (PURLs) to include in SBOM path: Optional directory path to scan for packages output_file: Optional path to save the SBOM file (CycloneDX JSON format) include_licenses: If True, include license information (default: True) Returns: Dictionary containing: - sbom: The generated SBOM structure (CycloneDX 1.4 JSON) - packages_count: Number of packages included - output_file: Path to saved file (if output_file was specified) Examples: # Generate SBOM from PURLs (after batch analysis) generate_sbom( purls=["pkg:npm/express@4.0.0", "pkg:pypi/django@4.2.0"], output_file="/tmp/sbom.json" ) |
| scan_binaryA | Scan binary files for OSS components and licenses using BinarySniffer. This tool analyzes compiled binaries, executables, libraries, and archives (APK, EXE, DLL, SO, JAR, etc.) to detect open source components, extract license information, and identify security issues. Use this tool when:
Args: path: Path to binary file or directory to analyze analysis_mode: Analysis depth - "fast" (quick scan), "standard" (balanced), or "deep" (thorough analysis, slower) generate_sbom: If True, generate SBOM in CycloneDX format check_licenses: If True, perform detailed license analysis check_compatibility: If True, check license compatibility and show warnings confidence_threshold: Minimum confidence level (0.0-1.0) for component detection output_format: Output format - "json", "table", "csv" (default: json) Returns: Dictionary containing: - components: List of detected OSS components with licenses - licenses: Summary of all licenses found - compatibility_warnings: License compatibility issues (if check_compatibility=True) - sbom: CycloneDX SBOM (if generate_sbom=True) - metadata: Scan statistics and file information Examples: # Scan an Android APK scan_binary("app.apk") |
| run_compliance_checkA | UNIVERSAL COMPLIANCE WORKFLOW: One-shot compliance check for ANY project type. This is a convenience tool that runs the complete standard compliance workflow:
This tool works for ANY distribution type (mobile, desktop, embedded, SaaS, etc.) - no specialized tools needed. Distribution type is used for policy validation context. WHEN TO USE:
WHEN NOT TO USE:
WORKFLOW EXECUTED:
Args: path: Directory or project to analyze distribution_type: Optional - mobile, desktop, saas, embedded, etc. (for policy context) policy_file: Optional - Path to custom ospac policy. Uses default if not specified. check_vulnerabilities: Check for security vulnerabilities (default: True) output_dir: Optional - Directory to save outputs (NOTICE.txt, sbom.json). Uses path if not specified. Returns: Dictionary containing: - decision: "APPROVED" or "REJECTED" - risk_level: "LOW", "MEDIUM", or "HIGH" - summary: Human-readable summary of findings - licenses: List of detected licenses - packages: List of identified packages (PURLs) - vulnerabilities: List of vulnerabilities (if checked) - policy_violations: List of policy violations (if any) - artifacts_created: List of files generated (NOTICE.txt, sbom.json) - recommendations: Actionable next steps Example: # Complete compliance check with default settings result = run_compliance_check("/path/to/project") |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| compliance_check | Return a guided compliance check prompt. |
| vulnerability_assessment | Return a guided vulnerability assessment prompt. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_license_database | Get license compatibility database from ospac data directory. |
| get_policy_templates | Get available policy templates. |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SemClone/mcp-semclone'
If you have feedback or need assistance with the MCP directory API, please join our Discord server