curl --request POST \
--url https://api.runaether.dev/v1/integration-directory/{key}/install \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.runaether.dev/v1/integration-directory/{key}/install"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.runaether.dev/v1/integration-directory/{key}/install', 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.runaether.dev/v1/integration-directory/{key}/install",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.runaether.dev/v1/integration-directory/{key}/install"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.runaether.dev/v1/integration-directory/{key}/install")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.runaether.dev/v1/integration-directory/{key}/install")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"connect": [
{
"kind": "oauth",
"mcp_server_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner": "viewer",
"url": "<string>"
}
],
"kind": "mcp_server",
"mcp_server": {
"auth": "none",
"connection_kind": "static_secret",
"created_at": "2023-11-07T05:31:56Z",
"default_credential_policy": "creator",
"display_name": "<string>",
"headers": {},
"homepage": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"kind": "http",
"plugin_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required": true,
"secret_names": [
"<string>"
],
"source": "manual",
"updated_at": "2023-11-07T05:31:56Z",
"url": "<string>"
}
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"code": "org_membership_required",
"error": "<string>"
}{
"code": "plugin_request_invalid",
"conflicts": [
{
"key": "<string>",
"plugin": "<string>",
"source": "manual"
}
],
"error": "<string>"
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}Install an integration of Aether's integration directory
Installs the integration keyed key. One without skills is added to the catalog as its MCP server (source directory), its auth probed as a server added by hand is probed; any other is installed as a plugin, a marketplace’s or one Aether synthesizes from the integration’s skills, bundling its servers. Either is enabled on every current project of the organization, and every project created later, with the default credential policy the directory names for it. connect lists the installed servers that take a connection, in key order: how each connects and whose connection the default calls for. Refused, naming the conflict, when another server of the organization holds one of its server keys (plugin_server_key_taken), with integration_not_in_directory for a key the directory does not list, and with integration_auth_unexpected when the server asks for a credential exactly when the directory names no one to connect it.
curl --request POST \
--url https://api.runaether.dev/v1/integration-directory/{key}/install \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.runaether.dev/v1/integration-directory/{key}/install"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.runaether.dev/v1/integration-directory/{key}/install', 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.runaether.dev/v1/integration-directory/{key}/install",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.runaether.dev/v1/integration-directory/{key}/install"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.runaether.dev/v1/integration-directory/{key}/install")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.runaether.dev/v1/integration-directory/{key}/install")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"connect": [
{
"kind": "oauth",
"mcp_server_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner": "viewer",
"url": "<string>"
}
],
"kind": "mcp_server",
"mcp_server": {
"auth": "none",
"connection_kind": "static_secret",
"created_at": "2023-11-07T05:31:56Z",
"default_credential_policy": "creator",
"display_name": "<string>",
"headers": {},
"homepage": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"kind": "http",
"plugin_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required": true,
"secret_names": [
"<string>"
],
"source": "manual",
"updated_at": "2023-11-07T05:31:56Z",
"url": "<string>"
}
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"code": "org_membership_required",
"error": "<string>"
}{
"code": "plugin_request_invalid",
"conflicts": [
{
"key": "<string>",
"plugin": "<string>",
"source": "manual"
}
],
"error": "<string>"
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
^[a-z][a-z0-9_-]{0,31}$