Skip to main content

[!FROZEN] MPLP Protocol v1.0.0 Frozen Specification Freeze Date: 2025-12-03 Status: FROZEN (no breaking changes permitted) Governance: MPLP Protocol Governance Committee (MPGC) License: Apache-2.0 Note: Any normative change requires a new protocol version.

Extension Module

1. Purpose

The Extension Module provides the plugin system for MPLP. It enables capability injection, policy enforcement, and protocol enhancement through a standardized extension mechanism.

Design Principle: "Extensibility without breaking core semantics"

2. Canonical Schema

From: schemas/v2/mplp-extension.schema.json

2.1 Required Fields

FieldTypeDescription
metaObjectProtocol metadata
extension_idUUID v4Global unique identifier
context_idUUID v4Link to parent Context
nameString (min 1 char)Extension name
extension_typeEnumExtension classification
versionString (SemVer)Extension version
statusEnumExtension status

2.2 Optional Fields

FieldTypeDescription
configObjectExtension configuration
traceObjectAudit trace reference
eventsArrayExtension lifecycle events
governanceObjectLifecycle phase and locking

2.3 Extension Types

From schema: ["capability", "policy", "integration", "transformation", "validation", "other"]

TypeDescriptionExamples
capabilityAdds new functionalityCustom tools, LLM adapters
policyEnforces rules/constraintsBudget limits, rate limiting
integrationExternal system integrationJira, GitHub, Slack
transformationData transformationFormat converters, encoders
validationCustom validation rulesSchema validators
otherOther extensionsMisc enhancements

3. Lifecycle State Machine

3.1 Extension Status

From schema: ["registered", "active", "inactive", "deprecated"]

3.2 Status Semantics

StatusExecutesDescription
registeredNoRegistered but not activated
activeYesRunning and available
inactiveNoTemporarily disabled
deprecatedLimitedMarked for removal

4. Extension Patterns

4.1 Capability Extension

Adding custom tool support:

{
"extension_id": "ext-custom-tool-001",
"name": "GitHub Integration Tool",
"extension_type": "capability",
"version": "1.0.0",
"status": "active",
"config": {
"tool_name": "github_pr",
"api_base": "https://api.github.com",
"capabilities": ["pr.create", "pr.review", "issues.create"]
}
}

4.2 Policy Extension

Budget enforcement policy:

{
"extension_id": "ext-budget-policy-001",
"name": "Token Budget Enforcer",
"extension_type": "policy",
"version": "1.0.0",
"status": "active",
"config": {
"max_tokens_per_plan": 100000,
"max_cost_usd_per_day": 50.00,
"on_exceed": "suspend"
}
}

4.3 Integration Extension

Slack notification integration:

{
"extension_id": "ext-slack-001",
"name": "Slack Notifier",
"extension_type": "integration",
"version": "1.0.0",
"status": "active",
"config": {
"webhook_url": "https://hooks.slack.com/...",
"events": ["plan.approved", "plan.completed", "plan.failed"]
}
}

5. Extension Lifecycle

5.1 Registration Flow

async function registerExtension(
context_id: string,
name: string,
type: ExtensionType,
version: string,
config?: Record<string, any>
): Promise<Extension> {
const extension: Extension = {
meta: { protocolVersion: '1.0.0' },
extension_id: uuidv4(),
context_id,
name,
extension_type: type,
version,
status: 'registered',
config
};

// Validate config against type-specific schema
await validateExtensionConfig(type, config);

// Store extension
await db.insert('extensions', extension);

// Emit event
await eventBus.emit({
event_type: 'extension_registered',
payload: { extension_id: extension.extension_id, name }
});

return extension;
}

5.2 Activation with Approval

Extensions may require approval:

async function activateExtension(extension_id: string): Promise<void> {
const extension = await db.get('extensions', extension_id);

// For security-sensitive types, require approval
if (['capability', 'integration'].includes(extension.extension_type)) {
const confirm = await createConfirm(
'extension',
extension_id,
'system',
`Activating extension: ${extension.name}`
);

// Wait for approval
const decision = await waitForDecision(confirm.confirm_id);
if (decision.status !== 'approved') {
throw new Error('Extension activation not approved');
}
}

extension.status = 'active';
await db.update('extensions', extension);
}

6. SDK Examples

6.1 TypeScript

import { v4 as uuidv4 } from 'uuid';

type ExtensionType = 'capability' | 'policy' | 'integration' | 'transformation' | 'validation' | 'other';
type ExtensionStatus = 'registered' | 'active' | 'inactive' | 'deprecated';

interface Extension {
meta: { protocolVersion: string };
extension_id: string;
context_id: string;
name: string;
extension_type: ExtensionType;
version: string;
status: ExtensionStatus;
config?: Record<string, any>;
}

function createExtension(
context_id: string,
name: string,
type: ExtensionType,
version: string,
config?: Record<string, any>
): Extension {
return {
meta: { protocolVersion: '1.0.0' },
extension_id: uuidv4(),
context_id,
name,
extension_type: type,
version,
status: 'registered',
config
};
}

6.2 Python

from pydantic import BaseModel, Field
from uuid import uuid4
from typing import Optional, Dict, Any
from enum import Enum

class ExtensionType(str, Enum):
CAPABILITY = 'capability'
POLICY = 'policy'
INTEGRATION = 'integration'
TRANSFORMATION = 'transformation'
VALIDATION = 'validation'
OTHER = 'other'

class ExtensionStatus(str, Enum):
REGISTERED = 'registered'
ACTIVE = 'active'
INACTIVE = 'inactive'
DEPRECATED = 'deprecated'

class Extension(BaseModel):
extension_id: str = Field(default_factory=lambda: str(uuid4()))
context_id: str
name: str = Field(..., min_length=1)
extension_type: ExtensionType
version: str # SemVer pattern
status: ExtensionStatus = ExtensionStatus.REGISTERED
config: Optional[Dict[str, Any]] = None

# Usage
ext = Extension(
context_id='ctx-123',
name='GitHub Integration',
extension_type=ExtensionType.INTEGRATION,
version='1.0.0',
config={'api_base': 'https://api.github.com'}
)

7. Complete JSON Example

{
"meta": {
"protocolVersion": "1.0.0",
"source": "mplp-runtime"
},
"extension_id": "ext-550e8400-e29b-41d4-a716-446655440007",
"context_id": "ctx-550e8400-e29b-41d4-a716-446655440000",
"name": "GitHub Integration Suite",
"extension_type": "integration",
"version": "1.2.0",
"status": "active",
"config": {
"api_base": "https://api.github.com",
"owner": "your-org",
"token_env_var": "GITHUB_TOKEN",
"enabled_features": ["pull_requests", "issues", "actions"],
"webhook_secret_env_var": "GITHUB_WEBHOOK_SECRET"
}
}

Architecture:

Modules:

Schemas:

  • schemas/v2/mplp-extension.schema.json

Document Status: Normative (L2 Optional Module)
Required Fields: meta, extension_id, context_id, name, extension_type, version, status
Types: capability, policy, integration, transformation, validation, other
Status Enum: registered active inactive deprecated

2025 Bangshi Beijing Network Technology Limited Company Licensed under the Apache License, Version 2.0.