{
  "name": "Videolink",
  "description": "Video management for AI agents: record, upload, transcribe, summarize, search, and share walkthrough videos. Transports are Videolink REST (urn:govideolink:rest:v1) and MCP (urn:govideolink:mcp:v1); the A2A task/message protocol is not implemented.",
  "supportedInterfaces": [
    {
      "url": "https://api.govideolink.com/v1",
      "protocolBinding": "urn:govideolink:rest:v1",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://api.govideolink.com/v1/mcp",
      "protocolBinding": "urn:govideolink:mcp:v1",
      "protocolVersion": "2026-01-21"
    }
  ],
  "provider": {
    "url": "https://www.govideolink.com",
    "organization": "GoVideolink"
  },
  "version": "3.2.0",
  "documentationUrl": "https://api.govideolink.com/v1/skills/videolink/SKILL.md",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://govideolink.com/a2a-extensions/videolink-discovery/v1",
        "description": "Videolink-specific discovery metadata: authorization-server URL, API reference, recipe anchors in SKILL.md.",
        "required": false,
        "params": {
          "authorizationServerUrl": "https://api.govideolink.com/.well-known/oauth-authorization-server",
          "skillMd": "https://api.govideolink.com/v1/skills/videolink/SKILL.md",
          "apiReferenceMd": "https://api.govideolink.com/v1/skills/videolink/references/API.md",
          "recipes": [
            {
              "id": "record-pr-demo",
              "name": "Record a PR demo",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-1-record-a-pr-demo"
            },
            {
              "id": "share-or-analyze-existing-file",
              "name": "You already have a video file — share it and/or analyze it",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-2-you-already-have-a-video-file--share-it-andor-analyze-it"
            },
            {
              "id": "consume-videolink-url",
              "name": "Consume a Videolink URL from a PR / issue / message",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-3-consume-a-videolink-url-from-a-pr--issue--message"
            },
            {
              "id": "screenshots-to-demo",
              "name": "Turn screenshots into a demo video",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-4-turn-screenshots-into-a-demo-video-no-live-browser"
            },
            {
              "id": "search-library",
              "name": "Search the Videolink library for engineering context",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-5-search-the-videolink-library-for-engineering-context"
            },
            {
              "id": "voice-narration",
              "name": "Optional voice narration (ElevenLabs)",
              "skillAnchor": "https://api.govideolink.com/v1/skills/videolink/SKILL.md#recipe-6-optional-voice-narration-elevenlabs"
            }
          ]
        }
      }
    ]
  },
  "securitySchemes": {
    "videolinkOAuth2": {
      "oauth2SecurityScheme": {
        "description": "OAuth 2.1 with Dynamic Client Registration (RFC 7591). Authorization Code + PKCE for human-in-the-loop clients, Client Credentials for autonomous agents. OAuth endpoints live under the API-versioned path; authorization-server metadata lives at the root well-known path.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.govideolink.com/v1/mcp/oauth/authorize",
            "tokenUrl": "https://api.govideolink.com/v1/mcp/oauth/token",
            "refreshUrl": "https://api.govideolink.com/v1/mcp/oauth/token",
            "scopes": {
              "mcp:read": "Read videos and analysis data",
              "mcp:write": "Create, update, and delete videos"
            },
            "pkceRequired": true
          },
          "clientCredentials": {
            "tokenUrl": "https://api.govideolink.com/v1/mcp/oauth/token",
            "scopes": {
              "mcp:read": "Read videos and analysis data",
              "mcp:write": "Create, update, and delete videos"
            }
          }
        },
        "oauth2MetadataUrl": "https://api.govideolink.com/.well-known/oauth-authorization-server"
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "videolinkOAuth2": {
          "list": ["mcp:read", "mcp:write"]
        }
      }
    }
  ],
  "defaultInputModes": ["application/json"],
  "defaultOutputModes": ["application/json", "text/plain", "text/markdown"],
  "skills": [
    {
      "id": "list_videos",
      "name": "List Videos",
      "description": "List videos owned by or shared with the caller.",
      "tags": ["video", "library"],
      "examples": ["Show my recent Videolink videos", "What videos do I have?"]
    },
    {
      "id": "get_video",
      "name": "Get Video",
      "description": "Get details of a specific video including metadata and analysis status.",
      "tags": ["video", "metadata"],
      "examples": ["Get the metadata for video abc123"]
    },
    {
      "id": "get_video_analysis",
      "name": "Get Video Analysis",
      "description": "Get transcript, summary, and full video data. Triggers analysis if not yet run.",
      "tags": ["video", "analysis", "transcript", "summary"],
      "examples": [
        "Summarize the video I just shared",
        "What was said in video abc123 around 2:15?"
      ]
    },
    {
      "id": "create_video",
      "name": "Create Video",
      "description": "Get a presigned upload URL for a new video.",
      "tags": ["video", "upload"],
      "examples": ["Upload this screen recording to Videolink"]
    },
    {
      "id": "finalize_video",
      "name": "Finalize Video",
      "description": "Confirm upload completion and start processing.",
      "tags": ["video", "upload"],
      "examples": ["Finalize upload for video abc123"]
    },
    {
      "id": "share_video",
      "name": "Share Video",
      "description": "Share a video with specific users or an organization.",
      "tags": ["video", "sharing"],
      "examples": [
        "Share this Videolink with alice@example.com",
        "Share with my team"
      ]
    },
    {
      "id": "search_videos",
      "name": "Search Videos",
      "description": "Search videos by natural language. Returns summaries, transcripts, and timestamped deep links to matching moments.",
      "tags": ["video", "search", "semantic"],
      "examples": [
        "Find videos about the new auth flow",
        "Where did we discuss the migration plan?"
      ]
    },
    {
      "id": "get_video_ai_context",
      "name": "Get Video AI Context",
      "description": "Get a plain-text AI-consumable context document for a single video: metadata, summary, transcript, key highlights with frame images, sensitive content.",
      "tags": ["video", "ai-context"],
      "examples": ["Give me the full context for video abc123"]
    },
    {
      "id": "get_videos_ai_context_query",
      "name": "Get Videos AI Context (Query)",
      "description": "Get AI context for multiple videos, by query or by recency. Returns a combined plain-text document with each video wrapped in <video-context> tags.",
      "tags": ["video", "ai-context", "search"],
      "examples": [
        "Get context for the 5 most recent videos",
        "Get context for videos about onboarding"
      ]
    },
    {
      "id": "delete_video",
      "name": "Delete Video",
      "description": "Delete a video permanently.",
      "tags": ["video", "admin"],
      "examples": ["Delete Videolink abc123"]
    }
  ]
}
