Skip to main content

Static Observability

Static observability allows you to analyze an agent's topology, connected tools, and security posture before deployment by uploading its source code directly to the platform.

Upload Agent Project

Navigate to the Observability tab and select Upload. You can submit your agent code in two ways:

  • Local File — drag and drop or browse to upload an archive (.zip, .tar, .tar.gz, .tar.bz2, .tar.xz)
  • GitHub URL — provide a link to a public or private GitHub repository for direct ingestion

Once submitted, the platform performs structural analysis and security scanning on the agent project. Completed scans appear in the Scan History list below the upload panel, tagged with the agent framework detected, the source type (Local or GitHub), and the scan status.

Upload Agent Project: local file and GitHub URL upload with scan history

Agent Structure

Navigate to the Observability -> Structure Observability tab and you can see the static scan results.

Obs_2

Click the detail of each agent, you can see the detailed agent structure and connected tools of that agent.

Obs_1


API Reference

Observability scan endpoints are served by the standalone Observability service. All endpoints accept JWT (Authorization: Bearer <jwt>) or an API key (X-API-Key: <api_key>).

Upload endpoints return 202 Accepted immediately and run analysis in the background — poll GET /api/v1/observability/scans/{scan_id} for the result.

POST /api/v1/observability/upload

Upload a local archive (.zip, .tar.gz) for VirtueHarbor structure analysis and MCP Guard security scanning. Returns 202 Accepted.

Request: multipart/form-data

FieldTypeRequiredDescription
filefileYesArchive file to scan
frameworkstringYesAgent framework (e.g. langchain, openai, adk)

Response:

{
"scan_id": "scan_20260519_langchain_file_myagent",
"status": "processing",
"mcpguard_scan_id": null
}

POST /api/v1/observability/upload/github

Clone a GitHub repository and scan it. Returns 202 Accepted.

Request:

{
"github_url": "https://github.com/my-org/my-agent",
"revision": "main",
"framework": "langchain"
}
FieldTypeRequiredDescription
github_urlstringYesFull GitHub repository URL
revisionstringNoBranch, tag, or commit SHA (defaults to the repo's default branch)
frameworkstringYesAgent framework

GET /api/v1/observability/scans

List all scans (metadata only, no graph data).

Query parameters:

ParameterDescription
frameworkFilter by agent framework
statusFilter by scan status (processing, completed, failed)

GET /api/v1/observability/scans/{scan_id}

Get a single scan with full graph data. Poll this after submitting an upload to check whether processing has finished.

Response (completed):

{
"scan_id": "scan_20260519_langchain_file_myagent",
"status": "completed",
"framework": "langchain",
"filename": "myagent.zip",
"source": "file",
"created_at": "2026-05-19T10:30:00Z",
"graph": { }
}

DELETE /api/v1/observability/scans/{scan_id}

Delete a scan.

Response:

{ "message": "Scan deleted" }