Skip to main content

Foundational library for the DCC Model Context Protocol (MCP) ecosystem

Project description

dcc-mcp-core

PyPI Python License Downloads Coverage Tests PRs Welcome Latest Version

中文 | English

Production-grade foundation for AI-assisted DCC workflows combining the Model Context Protocol (MCP) and a zero-code Skills system. Provides a Rust-powered core with Python bindings (PyO3) delivering enterprise-grade performance, security, and scalability — all with zero runtime Python dependencies. Supports Python 3.7–3.13.

Note: This project is in active development (v0.13+). APIs may evolve; see CHANGELOG.md for version history.


The Problem & Our Solution

Why Not Just Use CLI?

CLI tools are blind to DCC state. They can't see the active scene, selected objects, or viewport context. They execute in isolation, forcing the AI to:

  • Make multiple roundtrips to gather context
  • Rebuild state from CLI outputs (fragile, slow)
  • Lack visual feedback from the viewport
  • Scale poorly with context explosion as requests grow

Why MCP (Model Context Protocol)?

MCP is AI-native, but stock MCP lacks two critical capabilities for DCC automation:

  1. Context Explosion — MCP has no mechanism to scope tools to specific sessions or instances, causing request bloat with multi-DCC setups
  2. No Lifecycle Control — Can't discover instance state (active scene, documents, process health) or control startup/shutdown

Our Approach: MCP + Skills System

We reuse and extend the existing MCP ecosystem, adding:

Capability Benefit
Gateway Election & Version Awareness Multi-instance load balancing; automatic handoff when newer DCC launches
Session Isolation Each AI session talks to its own DCC instance; prevents context bleeding
Skills System (Zero-Code) Define tools as SKILL.md + scripts/; no Python glue code needed
Progressive Discovery Scope tools by DCC type, instance, scene, product; prevents context explosion
Instance Tracking Know active documents, PIDs, display names; enable smart routing
Structured Results Every tool returns (success, message, context, prompt) for AI reasoning

This isn't reinventing MCP — it's solving MCP's blind spots for desktop automation.


Why dcc-mcp-core Over Alternatives?

Aspect dcc-mcp-core Generic MCP CLI Tools Browser Extensions
DCC State Awareness Scenes, docs, instance IDs No No Partial
Multi-Instance Support Gateway election + session isolation Single endpoint No No
Context Scoping By DCC/scene/product Global tools No Limited
Zero-Code Tools SKILL.md + scripts Full Python required Scripts only No
Performance Rust + zero-copy + IPC Python overhead Process overhead Network overhead
Security Sandbox + audit log Manual Manual None
Cross-Platform Windows/macOS/Linux Yes Limited Browser only

AI-friendly docs: AGENTS.md | CLAUDE.md | GEMINI.md | CODEBUDDY.md | .agents/skills/dcc-mcp-core/SKILL.md

Architecture: The Three-Layer Stack

+-----------------------------------------------------------------+
|  AI Agent (Claude, GPT, etc.)                                    |
|  Calls tools via MCP protocol (tools/list, tools/call)           |
+-------------------------------+---------------------------------+
                                |
                        MCP Streamable HTTP
                                |
+-------------------------------v---------------------------------+
|  Gateway Server (Rust/HTTP)                                      |
|  +-- Version-Aware Instance Election                             |
|  +-- Session Isolation & Routing                                 |
|  +-- Tool Discovery (skills-derived)                             |
|  +-- Cancellation & Notifications (SSE)                          |
+-------------------------------+---------------------------------+
                                |
                 IPC (Named Pipe / Unix Socket / TCP)
                                |
          +---------------------+---------------------+
          |                     |                     |
  +-------v-------+   +-------v-------+   +-------v-------+
  |  Maya Bridge   |   | Blender Bridge |   | Houdini Bridge|
  |  Plugin (Rust) |   | Plugin (Rust)  |   | Plugin (Rust)|
  +-------+--------+   +-------+--------+   +-------+-------+
          |                     |                     |
    Python 3.7+           Python 3.7+           Python 3.7+
    (zero deps)           (zero deps)           (zero deps)

Layer 1: AI Agent — Calls tools via standard MCP protocol (tools/list, tools/call, notifications).

Layer 2: Gateway — Orchestrates discovery, session isolation, and request routing. Maintains __gateway__ sentinel for version-aware election.

Layer 3: DCC Adapters — Python bridge plugins (Maya, Blender, Photoshop) with embedded Skills system. Each registers documents, scene state, and active process info. WebView-host adapters (AuroraView, browser panels) use a narrower capability surface.


Quick Start

Installation

# From PyPI (pre-built wheels for Python 3.7+)
pip install dcc-mcp-core

# Or from source (requires Rust 1.85+)
git clone https://github.com/loonghao/dcc-mcp-core.git
cd dcc-mcp-core
pip install -e .

Basic Usage — Load & Execute Skills

import json
from dcc_mcp_core import (
    ToolRegistry, ToolDispatcher, SkillCatalog,
    EventBus, success_result, scan_and_load
)

# 1. Discover skills (scans SKILL.md + scripts/)
skills, skipped = scan_and_load(dcc_name="maya")
print(f"Loaded {len(skills)} skills, skipped {len(skipped)}")

# 2. Register all skill tools in registry
registry = ToolRegistry()
for skill in skills:
    for script_path in skill.scripts:
        skill_name = f"{skill.name.replace('-', '_')}__{Path(script_path).stem}"
        registry.register(
            name=skill_name,
            description=skill.description,
            dcc=skill.dcc
        )

# 3. Set up dispatcher with event lifecycle
dispatcher = ToolDispatcher(registry)
bus = EventBus()
bus.subscribe("action.after_execute", lambda **kw: print(f"Done: {kw['action_name']}"))

# 4. Call a skill (returns structured result)
result = dispatcher.dispatch(
    "maya_geometry__create_sphere",
    json.dumps({"radius": 2.0})
)
print(f"Success: {result['output']['success']}")
print(f"Message: {result['output']['message']}")
print(f"Context: {result['output']['context']}")

Core Concepts

ToolResult — Structured Results for AI

All skill execution results use ToolResult, designed to be AI-friendly with structured context and follow-up guidance:

from dcc_mcp_core import ToolResult, success_result, error_result

# Factory functions (recommended)
ok = success_result(
    "Sphere created",
    prompt="Consider adding materials or adjusting UVs",
    object_name="sphere1", position=[0, 1, 0]
)
# ok.context == {"object_name": "sphere1", "position": [0, 1, 0]}

err = error_result(
    "Failed to create sphere",
    "Radius must be positive"
)

# Direct construction
result = ToolResult(
    success=True,
    message="Operation completed",
    context={"key": "value"}
)

# Access fields
result.success      # bool
result.message     # str
result.prompt       # Optional[str] -- AI next-step suggestion
result.error        # Optional[str] -- error details
result.context      # dict -- arbitrary structured data

ToolRegistry & Dispatcher — The Skill Execution System

import json
from dcc_mcp_core import (
    ToolRegistry, ToolDispatcher, ToolValidator,
    EventBus, SemVer, VersionedRegistry
)

# Registry with search support
registry = ToolRegistry()
registry.register("my_skill", description="My skill", category="tools", version="1.0.0")

# Validated dispatcher (takes only registry; validate separately with ToolValidator)
dispatcher = ToolDispatcher(registry)
dispatcher.register_handler("my_skill", lambda params: {"done": True})
result = dispatcher.dispatch("my_skill", json.dumps({}))
# result == {"action": "my_skill", "output": {"done": True}, "validation_skipped": True}

# Event-driven architecture
bus = EventBus()
sub_id = bus.subscribe("action.before_execute", lambda **kw: print(f"before: {kw}"))
bus.publish("action.before_execute", action_name="test")
bus.unsubscribe("action.before_execute", sub_id)

Skills System — Zero-Code MCP Tool Registration

The Skills system is dcc-mcp-core's core innovation: it lets you register any script (Python, MEL, MaxScript, Batch, Shell, JS) as an MCP tool with zero Python code. Reuses the existing OpenClaw Skills format.

How It Works

+-----------------------------------+
|  Directory:  my-automation/       |
|  +-- SKILL.md  (metadata)         |
|  +-- scripts/                     |
|      +-- cleanup.py               |
|      +-- publish.sh               |
|      +-- validate.mel             |
+-----------------------------------+
          |  (discovery)
+-----------------------------------+
|  SkillCatalog (progressive loading)     |
|  +-- Dual-cache: by-paths &       |
|  |   by-config (session-bound)    |
|  +-- Scoped: Repo/User/System     |
|  +-- Policies: implicit invoke,   |
|      product filters, deps        |
+-----------------------------------+
          |  (registration)
+-----------------------------------+
|  ToolRegistry + SkillCatalog    |
|  (callable by AI via MCP tools)   |
+-----------------------------------+

Five Minutes to Your First Skill

1. Create my-tool/SKILL.md:

---
name: maya-cleanup
description: "Scene optimization and cleanup tools"
version: "1.0.0"
dcc: maya
scope: repo  # Trust level: repo < user < system < admin
tags: ["maintenance", "quality"]
policy:
  allow_implicit_invocation: false  # Require explicit load_skill call
  products: ["maya", "houdini"]      # Only show these DCCs
external_deps:
  mcp:
    - name: "usd-tools"
      description: "USD validation"
      transport: "ipc"
---
# Maya Scene Cleanup

Automated tools for optimizing and validating Maya scenes.

2. Create my-tool/scripts/cleanup.py:

#!/usr/bin/env python
"""Clean unused nodes from the scene."""
import sys
result = {"success": True, "message": "Cleaned up 42 unused nodes"}
print(json.dumps(result))
sys.exit(0)

3. Register and call:

import os
os.environ["DCC_MCP_SKILL_PATHS"] = "/path/to/my-tool"

from dcc_mcp_core import scan_and_load, ToolRegistry

skills, skipped = scan_and_load(dcc_name="maya")
registry = ToolRegistry()

# Tools are now: maya_cleanup__cleanup, with structured results
result = dispatcher.dispatch("maya_cleanup__cleanup", json.dumps({}))
print(result["output"])  # {"success": True, "message": "...", "context": {...}}

That's it. No Python glue code. Just metadata + scripts.

Supported Script Types

Extension Type Execution
.py Python subprocess with system Python
.mel MEL (Maya) Via DCC adapter
.ms MaxScript Via DCC adapter
.bat, .cmd Batch cmd /c
.sh, .bash Shell bash
.ps1 PowerShell powershell -File
.js, .jsx JavaScript node
.ts TypeScript node (via ts-node or tsx)

See examples/skills/ for 11 complete examples: hello-world, maya-geometry, maya-pipeline, git-automation, ffmpeg-media, imagemagick-tools, usd-tools, clawhub-compat, multi-script, dcc-diagnostics, workflow.

Bundled Skills — Zero Configuration Required

dcc-mcp-core ships two core skills directly inside the wheel. They are available immediately after pip install dcc-mcp-core — no repository clone or DCC_MCP_SKILL_PATHS configuration needed.

Skill Tools Purpose
dcc-diagnostics screenshot, audit_log, tool_metrics, process_status Observability & debugging for any DCC
workflow run_chain Multi-step action chaining with context propagation
from dcc_mcp_core import get_bundled_skills_dir, get_bundled_skill_paths

# Get the bundled skills directory (inside the installed wheel)
print(get_bundled_skills_dir())
# /path/to/site-packages/dcc_mcp_core/skills

# Returns [bundled_dir] or [] -- ready to extend your search path
paths = get_bundled_skill_paths()                    # default ON
paths = get_bundled_skill_paths(include_bundled=False)  # opt-out

DCC adapters (e.g. dcc-mcp-maya) automatically include bundled skills by default. To opt-out: start_server(include_bundled=False).

Solving MCP Context Explosion

The Problem: Stock MCP returns ALL tools in tools/list, even those irrelevant to the user's current task or DCC instance. With 3 DCC instances x 50 skills x 5 scripts = 750 tools, the context window fills instantly.

Our Solution — Progressive Discovery:

  1. Instance Awareness — Each DCC registers active documents, PID, display name, scope level
  2. Smart Tool Scoping — Tools filtered by:
    • DCC Type — Only Maya tools if working with Maya
    • Scope — Repo skills < User skills < System skills
    • Product — Some tools only for Houdini, not Maya
    • Policy — Implicit-invocation skills grouped separately
  3. Session Isolation — AI session pinned to one DCC instance; sees only its tools
  4. Gateway Election — If a newer DCC version launches, automatically hand off to it

Example:

Without dcc-mcp-core (stock MCP):

tools/list response includes:
- 100 Maya tools
- 100 Houdini tools
- 100 Blender tools
+ 250 shared tools
= 550 tool definitions in context

With dcc-mcp-core:

tools/list filtered by session instance:
AI talking to Maya instance #1 -> sees 100 Maya tools + 50 shared tools
AI talking to Houdini instance #2 -> sees 100 Houdini tools + 50 shared tools
= 150 tools in context (71% reduction)

This is session-bound tool discovery — not a hack, but a fundamental rethinking of how MCP scales.


Architecture Overview — 15 Rust Crates

dcc-mcp-core is organized as a Rust workspace of 15 crates, compiled into a single native Python extension (_core) via PyO3/maturin:

| Crate | Responsibility | Key Types | |----------------------|-----------| | dcc-mcp-naming | SEP-986 naming validators | validate_tool_name, validate_action_id, TOOL_NAME_RE | | dcc-mcp-models | Data models | ToolResult, SkillMetadata | | dcc-mcp-actions | Tool execution lifecycle | ToolRegistry, EventBus, ToolDispatcher, ToolValidator, ToolPipeline | | dcc-mcp-skills | Skills discovery & loading | SkillScanner, SkillCatalog, SkillWatcher, dependency resolver | | dcc-mcp-protocols | MCP protocol types | ToolDefinition, ResourceDefinition, PromptDefinition, DccAdapter, BridgeKind | | dcc-mcp-transport | IPC communication | TransportManager, ConnectionPool, IpcListener, FramedChannel, CircuitBreaker, FileRegistry | | dcc-mcp-process | Process management | PyDccLauncher, ProcessMonitor, ProcessWatcher, CrashRecoveryPolicy | | dcc-mcp-sandbox | Security | SandboxPolicy, InputValidator, AuditLog | | dcc-mcp-shm | Shared memory | SharedBuffer, BufferPool, LZ4 compression | | dcc-mcp-capture | Screen capture | Capturer, cross-platform backends | | dcc-mcp-telemetry | Observability | TelemetryConfig, RecordingGuard, tracing | | dcc-mcp-usd | USD integration | UsdStage, UsdPrim, scene info bridge | | dcc-mcp-http | MCP Streamable HTTP server | McpHttpServer, McpHttpConfig, McpServerHandle, Gateway (first-wins competition) | | dcc-mcp-server | Binary entry point | dcc-mcp-server CLI, gateway runner | | dcc-mcp-utils | Infrastructure | Filesystem helpers, type wrappers, constants, JSON |

Key Features

  • Rust-powered performance: Zero-copy serialization (rmp-serde), LZ4 shared memory, lock-free data structures
  • Zero runtime Python deps: Everything compiled into native extension
  • Skills system: Zero-code MCP tool registration via SKILL.md + scripts/
  • Validated dispatch: Input validation pipeline before execution
  • Resilient IPC: Connection pooling, circuit breaker, automatic retry
  • Process management: Launch, monitor, auto-recover DCC processes
  • Sandbox security: Policy-based access control with audit logging
  • Screen capture: Cross-platform DCC viewport capture for AI visual feedback
  • USD integration: Universal Scene Description read/write bridge
  • Structured telemetry: Tracing & recording for observability
  • ~177 public Python symbols with full type stubs (.pyi)
  • OpenClaw Skills compatible: Reuse existing ecosystem format

Installation

# From PyPI (pre-built wheels)
pip install dcc-mcp-core

# Or from source (requires Rust 1.85+)
git clone https://github.com/loonghao/dcc-mcp-core.git
cd dcc-mcp-core
pip install -e .

Development Setup

# Clone the repository
git clone https://github.com/loonghao/dcc-mcp-core.git
cd dcc-mcp-core

# Recommended: use vx (universal dev tool manager)
# Install vx: https://github.com/loonghao/vx
vx just install     # Install all project dependencies
vx just dev         # Build + install dev wheel
vx just test       # Run Python tests
vx just lint       # Full lint check (Rust + Python)

Without vx

# Manual setup
python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install maturin pytest pytest-cov ruff mypy
maturin develop --features python-bindings,ext-module
pytest tests/ -v
ruff check python/ tests/ examples/
cargo clippy --workspace -- -D warnings

Running Tests

vx just test           # All Python tests
vx just test-rust       # All Rust unit tests
vx just test-cov        # With coverage report
vx just ci              # Full CI pipeline
vx just preflight       # Pre-commit checks only

Transport Layer — Inter-Process Communication

dcc-mcp-core provides a production-ready IPC transport layer:

from dcc_mcp_core import (
    TransportManager, TransportAddress, TransportScheme,
    RoutingStrategy, IpcListener, connect_ipc,
    FramedChannel
)

# Server side: bind and accept connections (blocking)
listener = IpcListener.bind("/tmp/dcc-mcp-server.sock")
channel = listener.accept(timeout_ms=10000)   # blocks until client connects

# Client side: connect to server
channel = connect_ipc("/tmp/dcc-mcp-server.sock")
# Primary RPC helper (v0.12.7+) — send request and wait for correlated response
result = channel.call("ping", b"", timeout_ms=5000)
# result: {"id": str, "success": bool, "payload": bytes, "error": str | None}

# Advanced: service registry + transport manager
mgr = TransportManager(registry_dir="/tmp/dcc-registry")

Process Management — DCC Lifecycle Control

from dcc_mcp_core import (
    PyDccLauncher, PyProcessMonitor, PyProcessWatcher,
    PyCrashRecoveryPolicy
)

# Launch a DCC application
launcher = PyDccLauncher(dcc_type="maya", version="2025")
process = launcher.launch(
    script_path="/path/to/startup.py",
    working_dir="/project",
    env_vars={"MAYA_RENDER_THREADS": "4"}
)

# Monitor health
monitor = PyProcessMonitor()
monitor.track(process)
stats = monitor.stats(process)  # CPU, memory, uptime

# Auto-restart on crash
watcher = PyProcessWatcher(
    recovery_policy=PyCrashRecoveryPolicy(max_restarts=3, cooldown_sec=10)
)
watcher.watch(process)

Sandbox Security — Policy-Based Access Control

from dcc_mcp_core import SandboxContext, SandboxPolicy, InputValidator, AuditLog

# Define a policy (SandboxPolicy accepts optional config dict)
policy = SandboxPolicy()
ctx = SandboxContext(policy)
validator = InputValidator(ctx)

# Validate before execution
allowed, reason = validator.validate("delete_all_files")
if not allowed:
    print(f"Blocked by policy: {reason}")
else:
    print("Allowed — executing...")

# Review audit trail
audit = ctx.audit_log
for entry in audit.entries():
    print(f"{entry.action} -> {entry.outcome}")

More Examples

See the examples/skills/ directory for 11 complete skill packages, and the VitePress docs site for comprehensive guides per module.

Release Process

This project uses Release Please to automate versioning and releases. The workflow is:

  1. Develop: Create a branch from main, make changes using Conventional Commits
  2. Merge: Open a PR and merge to main
  3. Release PR: Release Please automatically creates/updates a release PR that bumps the version and updates CHANGELOG.md
  4. Publish: When the release PR is merged, a GitHub Release is created and the package is published to PyPI

Commit Message Format

This project follows Conventional Commits:

Prefix Description Version Bump
feat: New feature Minor (0.x.0)
fix: Bug fix Patch (0.0.x)
feat!: or BREAKING CHANGE: Breaking change Major (x.0.0)
docs: Documentation only No release
chore: Maintenance No release
ci: CI/CD changes No release
refactor: Code refactoring No release
test: Adding tests No release

Examples

# Feature (bumps minor version)
git commit -m "feat: add batch skill execution support"

# Bug fix (bumps patch version)
git commit -m "fix: resolve middleware chain ordering issue"

# Breaking change (bumps major version)
git commit -m "feat!: redesign skill registry API"

# Scoped commit
git commit -m "feat(skills): add PowerShell script support"

# No release trigger
git commit -m "docs: update API reference"
git commit -m "ci: add Python 3.14 to test matrix"

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development Workflow

  1. Fork the repository and clone your fork
  2. Create a feature branch: git checkout -b feat/my-feature
  3. Make your changes following the coding standards below
  4. Run tests and linting:
    vx just lint       # Check code style
    vx just test       # Run tests
    vx just preflight  # Run all pre-commit checks
    
  5. Commit using Conventional Commits format
  6. Push and open a Pull Request against main

Coding Standards

  • Style: Code is formatted with ruff and isort (line length: 120)
  • Type hints: All public APIs must have type annotations
  • Docstrings: Google-style docstrings for all public modules, classes, and functions
  • Testing: New features must include tests; maintain or improve coverage
  • Imports: Use section headers (Import built-in modules, Import third-party modules, Import local modules)

License

This project is licensed under the MIT License - see the LICENSE file for details.

AI Agent Resources

If you're an AI coding agent, also see:

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dcc_mcp_core-0.14.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dcc_mcp_core-0.14.1-cp38-abi3-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.8+Windows x86-64

dcc_mcp_core-0.14.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

dcc_mcp_core-0.14.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (13.1 MB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

dcc_mcp_core-0.14.1-cp37-cp37m-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.7mWindows x86-64

dcc_mcp_core-0.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

Details for the file dcc_mcp_core-0.14.1.tar.gz.

File metadata

  • Download URL: dcc_mcp_core-0.14.1.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dcc_mcp_core-0.14.1.tar.gz
Algorithm Hash digest
SHA256 53a0d58352243d7c0fa681b35f6b31f158c9b771c4824f99037afe6d8bd58c78
MD5 0cbe578ded1d88ad84fab3a1ae3c9fc4
BLAKE2b-256 b255a0354baabe27f3df53c81cbeb2bc954c48d727a2433752870fd99855b74e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1.tar.gz:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcc_mcp_core-0.14.1-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for dcc_mcp_core-0.14.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 681fb7d7bcc5da1a465e88c2b005b5aeb2a693c6a8d0d9e232d147af9005e8d0
MD5 8ad016386c99ff882456445a0262d18f
BLAKE2b-256 2c1b068990d623ff2a1d1f5446a9c634bb19386f5182be6970af57eae629b51a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1-cp38-abi3-win_amd64.whl:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcc_mcp_core-0.14.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dcc_mcp_core-0.14.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6b1c08452f462ffcd05b203a115d742758e8887b6613b3b87288a2965edac958
MD5 77906a3998cd5a99f24df76256341bbb
BLAKE2b-256 15027dfb6b90dd8becd256a3a95c83eec8af2a205683a9fb1fe0a89ae86018ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcc_mcp_core-0.14.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for dcc_mcp_core-0.14.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 0decb3bca13463cacfb95517e348d6e4cd7a95d2d782b34abc93681315727188
MD5 4dc2d4a5d6759e7aeea1a3a01fd2237b
BLAKE2b-256 9bd18e0a344e4f34d01a32d36ba8dcebb52d849e98541a6782ee7e585ffefc27

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcc_mcp_core-0.14.1-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for dcc_mcp_core-0.14.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9c166531f05855aa8a1fb4f26f3e8ad8d9c54d37288a8b3c340d68576315780c
MD5 8f3de2b6bcd2e1eea0916ce1f6e88f2f
BLAKE2b-256 b5975e574989e496c6dcbadf70530544609304b57e2c8848158bef0c4a144501

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1-cp37-cp37m-win_amd64.whl:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcc_mcp_core-0.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dcc_mcp_core-0.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f390a63dbb8ecba7bb9aead836ab73e181167c6ade422329c091dbf74bca132
MD5 8946c99f68f07ad6424749386edc03e5
BLAKE2b-256 c0ecc59091de4578cdbaed77af673d41efc5523bc4d5ae44c3c313da48f56226

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcc_mcp_core-0.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on loonghao/dcc-mcp-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page