Discover external MCP connection requirements
curl --request POST \
--url https://api.openworklabs.com/v1/mcp-connections/discover \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/mcp-connections/discover"
payload = { "url": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>'})
};
fetch('https://api.openworklabs.com/v1/mcp-connections/discover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/mcp-connections/discover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/mcp-connections/discover"
payload := strings.NewReader("{\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/mcp-connections/discover")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/mcp-connections/discover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "ready",
"server": {
"url": "<string>",
"initialize": "succeeded",
"protocolVersion": "<string>"
},
"authentication": {
"kind": "none",
"authorizationServers": [
{
"issuer": "<string>",
"clientIdMetadataDocumentSupported": true,
"authorizationEndpoint": "<string>",
"tokenEndpoint": "<string>",
"registrationEndpoint": "<string>",
"scopesSupported": [
"<string>"
],
"grantTypesSupported": [
"<string>"
],
"codeChallengeMethodsSupported": [
"<string>"
],
"tokenEndpointAuthMethodsSupported": [
"<string>"
]
}
],
"requiredScopes": [
"<string>"
],
"recommendedScopes": [
"<string>"
],
"refreshSupport": "supported",
"availableRegistrationMethods": [
"pre_registered"
],
"recommendedRegistrationMethod": "client_metadata",
"resource": "<string>",
"protectedResourceMetadataUrl": "<string>"
},
"tools": {
"visibility": "available_without_auth",
"count": 4503599627370495,
"items": [
{
"name": "<string>",
"readOnlyHint": true,
"destructiveHint": true,
"openWorldHint": true
}
]
},
"manualRequirements": [
{
"code": "<string>",
"label": "<string>",
"reason": "<string>",
"required": true
}
],
"warnings": [
{
"code": "<string>",
"message": "<string>"
}
],
"publishedSignInAddresses": [
{
"authorizationEndpoint": "<string>",
"tokenEndpoint": "<string>",
"advertisedIssuer": "<string>",
"metadataIssuer": "<string>"
}
]
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "requirements_discovery_failed",
"message": "<string>"
}Authentication
Discover external MCP connection requirements
Side-effect-free requirements discovery for any organization member, through the same guarded fetch as connection setup. It performs no client registration, credential write, or connection creation.
POST
/
v1
/
mcp-connections
/
discover
Discover external MCP connection requirements
curl --request POST \
--url https://api.openworklabs.com/v1/mcp-connections/discover \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/mcp-connections/discover"
payload = { "url": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>'})
};
fetch('https://api.openworklabs.com/v1/mcp-connections/discover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/mcp-connections/discover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/mcp-connections/discover"
payload := strings.NewReader("{\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/mcp-connections/discover")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/mcp-connections/discover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "ready",
"server": {
"url": "<string>",
"initialize": "succeeded",
"protocolVersion": "<string>"
},
"authentication": {
"kind": "none",
"authorizationServers": [
{
"issuer": "<string>",
"clientIdMetadataDocumentSupported": true,
"authorizationEndpoint": "<string>",
"tokenEndpoint": "<string>",
"registrationEndpoint": "<string>",
"scopesSupported": [
"<string>"
],
"grantTypesSupported": [
"<string>"
],
"codeChallengeMethodsSupported": [
"<string>"
],
"tokenEndpointAuthMethodsSupported": [
"<string>"
]
}
],
"requiredScopes": [
"<string>"
],
"recommendedScopes": [
"<string>"
],
"refreshSupport": "supported",
"availableRegistrationMethods": [
"pre_registered"
],
"recommendedRegistrationMethod": "client_metadata",
"resource": "<string>",
"protectedResourceMetadataUrl": "<string>"
},
"tools": {
"visibility": "available_without_auth",
"count": 4503599627370495,
"items": [
{
"name": "<string>",
"readOnlyHint": true,
"destructiveHint": true,
"openWorldHint": true
}
]
},
"manualRequirements": [
{
"code": "<string>",
"label": "<string>",
"reason": "<string>",
"required": true
}
],
"warnings": [
{
"code": "<string>",
"message": "<string>"
}
],
"publishedSignInAddresses": [
{
"authorizationEndpoint": "<string>",
"tokenEndpoint": "<string>",
"advertisedIssuer": "<string>",
"metadataIssuer": "<string>"
}
]
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "requirements_discovery_failed",
"message": "<string>"
}Authorizations
denApiKeybearerAuth
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
application/json
Maximum string length:
2048Response
Requirements discovery result.
Available options:
ready, manual_action_required, unsupported, unreachable Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Settings-view-only unverified suggestions; never applied until an administrator saves manual sign-in settings.
Show child attributes
Show child attributes
Was this page helpful?