{
  "name": "TCXC Open Voice Shield",
  "description": "Voice call fraud analysis on a SIP trunk: each call is recorded, transcribed and scored (fraud probability, category, red flags, TCPA note, block/review/allow), the route is checked for false answer supervision and the audio is graded (estimated MOS, jitter, packet loss). Operable by an agent over MCP after the person signs in through OAuth: destinations, routing, webhooks, alert rules, test calls and verdicts. A test call an agent asks for rings only after the person confirms it in the portal, opens with a recorded announcement that it is an automated test call, and presents the platform's own number or one of the account's verified numbers.",
  "url": "https://ovs.telecomsxchange.com/api/mcp",
  "provider": {
    "organization": "TelecomsXChange",
    "url": "https://ovs.telecomsxchange.com"
  },
  "version": "1.2.0",
  "documentationUrl": "https://ovs.telecomsxchange.com/docs/agents",
  "capabilities": {
    "streaming": false,
    "pushNotifications": true,
    "stateTransitionHistory": false
  },
  "authentication": {
    "schemes": [
      "oauth2",
      "bearer"
    ],
    "credentials": "OAuth 2.1 for MCP clients: initialize, tools/list, get_started and report_links are open, and every account tool answers 401 with WWW-Authenticate; the client signs the person in or up on the consent page. Discovery at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server (dynamic registration, S256 PKCE). Or Authorization: Bearer <API key> on the HTTP request, with a key the person created on the portal's Developers page. Credentials are never tool arguments; there is no signup or login tool."
  },
  "securitySchemes": {
    "oauth2": {
      "type": "oauth2",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://ovs.telecomsxchange.com/api/oauth/authorize",
          "tokenUrl": "https://ovs.telecomsxchange.com/api/oauth/token",
          "refreshUrl": "https://ovs.telecomsxchange.com/api/oauth/token",
          "scopes": {
            "account": "Everything the account can do in the portal",
            "offline_access": "A refresh token"
          }
        }
      }
    },
    "bearer": {
      "type": "http",
      "scheme": "bearer"
    }
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "configure",
      "name": "Configure an account",
      "description": "After the OAuth sign-in: add destinations (the SIP host calls go on to), routing rules by prefix, IP whitelist entries, the call.analyzed webhook URL and alert rules to e-mail or to Slack channels. A destination's password or provider key, the webhook signing secret and the Slack connection are entered by the person in the portal; list_channels and list_verified_numbers read what is there.",
      "tags": [
        "destination",
        "routing",
        "webhook",
        "alerts",
        "slack",
        "verified-numbers"
      ],
      "examples": [
        "Add 203.0.113.20:5060 udp as the default destination and alert my Slack channel on block verdicts"
      ]
    },
    {
      "id": "test-call",
      "name": "Request a test call and read the verdict",
      "description": "place_test_call requests a call through a destination and returns status awaiting_confirm with a confirm_url; nothing rings until the person confirms on that portal page (10 minutes, or cancel_test_call). Every call opens with a recorded announcement that it is an automated, recorded test call. The caller ID is the platform's own number or a verified number; route_test (a neutral announcement) may ring any number, the known scam sample and agent calls only verified numbers. Poll get_test_call, then fetch the call, its analysis, transcript, per-leg quality and PDF report.",
      "tags": [
        "test-call",
        "confirmation",
        "verdict",
        "transcript",
        "fas",
        "mos",
        "pdf"
      ],
      "examples": [
        "Request a 30 second route test to my verified number through my default destination and tell me the verdict once I confirm it"
      ]
    },
    {
      "id": "calls",
      "name": "Query analysed calls",
      "description": "List and filter calls by origin, status, analysis state, probability or SIP Call-ID; read the full analysis, route alert and transcript of any call.",
      "tags": [
        "calls",
        "analysis",
        "route-alert",
        "quality"
      ]
    }
  ],
  "install": {
    "claude_code": "claude mcp add --transport http open-voice-shield https://ovs.telecomsxchange.com/api/mcp",
    "cursor": "cursor://anysphere.cursor-deeplink/mcp/install?name=open-voice-shield&config=eyJ1cmwiOiJodHRwczovL292cy50ZWxlY29tc3hjaGFuZ2UuY29tL2FwaS9tY3AifQ==",
    "vscode": "vscode:mcp/install?%7B%22name%22%3A%22open-voice-shield%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fovs.telecomsxchange.com%2Fapi%2Fmcp%22%7D",
    "claude_api": {
      "mcp_servers": [
        {
          "type": "url",
          "url": "https://ovs.telecomsxchange.com/api/mcp",
          "name": "open-voice-shield"
        }
      ]
    },
    "claude_managed_agents": {
      "agent": {
        "mcp_servers": [
          {
            "type": "url",
            "name": "open-voice-shield",
            "url": "https://ovs.telecomsxchange.com/api/mcp"
          }
        ],
        "tools": [
          {
            "type": "mcp_toolset",
            "mcp_server_name": "open-voice-shield",
            "default_config": {
              "permission_policy": "always_allow"
            },
            "configs": [
              {
                "name": "place_test_call",
                "permission_policy": "always_ask"
              }
            ]
          }
        ]
      },
      "vault_credential": {
        "type": "static_bearer",
        "mcp_server_url": "https://ovs.telecomsxchange.com/api/mcp",
        "token": "ovs_... (an API key)"
      },
      "or": "an mcp_oauth credential with tokens from the OAuth endpoints (token_endpoint_auth none)",
      "docs": "https://ovs.telecomsxchange.com/docs/agents#managed-agents"
    },
    "claude_ai_link": "https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Open%20Voice%20Shield&connectorUrl=https%3A%2F%2Fovs.telecomsxchange.com%2Fapi%2Fmcp",
    "claude_ai_admin_link": "https://claude.ai/admin-settings/connectors?modal=add-custom-connector&connectorName=Open%20Voice%20Shield&connectorUrl=https%3A%2F%2Fovs.telecomsxchange.com%2Fapi%2Fmcp",
    "claude_ai": "Open claude_ai_link: the Add custom connector dialog opens prefilled; the person confirms and signs in (or up) on the consent page at first use. Team and Enterprise owners use claude_ai_admin_link once for the organization. The assistant cannot add it by itself.",
    "any_client": "HTTP MCP server at https://ovs.telecomsxchange.com/api/mcp with OAuth (dynamic client registration), or Authorization: Bearer <API key> on the HTTP request. Credentials are never tool arguments."
  },
  "interfaces": {
    "mcp": {
      "url": "https://ovs.telecomsxchange.com/api/mcp",
      "transport": "streamable-http",
      "protocolVersion": "2025-06-18",
      "tools": [
        "get_started",
        "me",
        "account_balance",
        "add_destination",
        "list_destinations",
        "check_destination",
        "add_routing_rule",
        "whitelist_ip",
        "set_webhook",
        "test_webhook",
        "list_channels",
        "add_alert_rule",
        "list_alert_rules",
        "list_verified_numbers",
        "place_test_call",
        "get_test_call",
        "cancel_test_call",
        "cli_coverage",
        "verify_cli",
        "get_cli_check",
        "list_hosted_numbers",
        "host_number",
        "test_hosted_number",
        "list_calls",
        "get_call",
        "get_transcript",
        "report_links"
      ]
    },
    "openapi": "https://ovs.telecomsxchange.com/api/openapi.json",
    "llms": "https://ovs.telecomsxchange.com/llms.txt"
  }
}
