Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "sap-cloud-sdk"
version = "0.19.3"
version = "0.20.0"
description = "SAP Cloud SDK for Python"
readme = "README.md"
license = "Apache-2.0"
Expand Down
5 changes: 0 additions & 5 deletions src/sap_cloud_sdk/extensibility/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ def _mock_file(name: str) -> str:
Tools,
)
from sap_cloud_sdk.extensibility._noop_transport import NoOpTransport
from sap_cloud_sdk.extensibility._ord_integration import (
add_extension_integration_dependencies,
)
from sap_cloud_sdk.extensibility._ums_transport import UmsTransport
from sap_cloud_sdk.extensibility.client import ExtensibilityClient
from sap_cloud_sdk.extensibility.config import ExtensibilityConfig, HookConfig
Expand Down Expand Up @@ -187,8 +184,6 @@ def create_client(
# A2A card helpers
"build_extension_capabilities",
"EXTENSION_CAPABILITY_SCHEMA_VERSION",
# ORD integration
"add_extension_integration_dependencies",
# Models -- A2A card
"ExtensionCapability",
"ToolAdditions",
Expand Down
229 changes: 0 additions & 229 deletions src/sap_cloud_sdk/extensibility/_ord_integration.py

This file was deleted.

107 changes: 0 additions & 107 deletions src/sap_cloud_sdk/extensibility/user-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -809,113 +809,6 @@ The JSON file uses the same schema as the extensibility backend response:

See `src/sap_cloud_sdk/extensibility/local_extensibility_example.json` for a ready-to-use template.

## ORD Document Integration

> **Note**: This feature should only be used for the system-instance ORD document. It is not intended for use with other ORD documents.

The `add_extension_integration_dependencies()` function injects extension capability MCP servers into the ORD (Open Resource Discovery) document at runtime. This enables the agent to dynamically expose MCP servers from the extensibility service in its ORD document for discovery.

### Import

```python
from sap_cloud_sdk.extensibility import (
add_extension_integration_dependencies,
create_client,
)
```

### Usage

```python
from sap_cloud_sdk.extensibility import (
add_extension_integration_dependencies,
create_client,
)

# Create an extensibility client
ext_client = create_client("sap.ai:agent:myAgent:v1")

# Load your ORD document (system-instance)
document = load_ord_document(ORD_SYSTEM_INSTANCE_PATH)

# Inject extension integration dependencies
add_extension_integration_dependencies(
document=document,
local_tenant_id=local_tenant_id,
ext_client=ext_client,
)
```

### Parameters

- `document`: The ORD document dict. Modified in-place.
- `local_tenant_id`: Optional tenant ID for fetching tenant-specific extensions.
- `ext_client`: The extensibility client. If not provided, no extension dependencies will be added.

### What It Does

1. Fetches the extension capability implementation from the extensibility service via the client
2. Checks each MCP server against existing document-level integration dependencies
3. Filters out MCP servers that are already present in base integration dependencies
4. Creates a new IntegrationDependency with aspects for only the new MCP servers
5. Injects the IntegrationDependency at document level (full object)
6. Injects the IntegrationDependency ordId reference at agent level (string array)

### Duplicate Filtering

The function checks if an MCP server's ordId already exists in any base integration dependency's aspects. If it exists, that MCP server is skipped to avoid duplication.

If ALL extended MCP servers are already present in base integration dependencies, no extension integration dependency is created.

### Example: Full ORD Endpoint Integration

```python
from sap_cloud_sdk.extensibility import (
add_extension_integration_dependencies,
create_client,
)
import json
from pathlib import Path

ORD_SYSTEM_INSTANCE_PATH = Path(__file__).parent / "document-system-instance.json"


def load_ord_document(path: Path) -> dict:
with open(path, "r", encoding="utf-8") as f:
return json.load(f)


async def ord_document_system_instance(request: Request) -> JSONResponse:
local_tenant_id = request.query_params.get("local-tenant-id", "")

document = load_ord_document(ORD_SYSTEM_INSTANCE_PATH)

# Replace tenant placeholder
doc_str = json.dumps(document)
doc_str = doc_str.replace("{{LOCAL_TENANT_ID}}", local_tenant_id)
document = json.loads(doc_str)

# Create extensibility client
ext_client = create_client("sap.ai:agent:myAgent:v1")

# Add extension integration dependencies
add_extension_integration_dependencies(
document=document,
local_tenant_id=local_tenant_id,
ext_client=ext_client,
)

return JSONResponse(content=document)
```

### Important Notes

- This function modifies the `document` dict in-place.
- If an MCP server is already defined in a base integration dependency, it will not be duplicated in the extension integration dependency.
- If all MCP servers from extensibility are duplicates, the function returns without adding anything.
- On failure (e.g., extensibility service unavailable), the function logs a warning and continues without adding extension dependencies. The agent continues with its base ORD document.
- The `lastUpdate` field is set to the current timestamp to trigger re-aggregation.

## Notes

- Create one `ExtensibilityClient` (via `create_client()`) and reuse it for multiple capability lookups where appropriate.
Expand Down
Loading
Loading