curl --request GET \
--url https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}', 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.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}"
req, _ := http.NewRequest("GET", 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.get("https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"source": "<string>",
"transport": "http",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"auth_type": "none",
"oauth_connected": true,
"oauth_expired": true,
"connection_state": "<string>",
"connection_checked_at": "<string>",
"connection_last_success_at": "<string>",
"connection_error_code": "<string>",
"owner_user_id": "<string>",
"can_manage": true,
"tool_names": [
"<string>"
],
"secret_names": [
"<string>"
],
"access": "<string>",
"enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "missing_bearer",
"message": "Authorization required"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": "session_not_found"
}{
"error": {
"type": "rate_limited",
"message": "This API key exceeded its request-rate limit"
}
}Retrieve an MCP server
Returns a single org-level MCP server. secret_names lists the names of the credentials stored on the server itself (for example MCP_API_KEY). They are set with the server’s secrets field and belong to that server only: they are not workspace or personal secrets, so listSecrets does not list them and deleteSecret cannot remove them. Secret values are never returned.
mcp:readcurl --request GET \
--url https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}', 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.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}"
req, _ := http.NewRequest("GET", 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.get("https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.com/v3/organizations/{orgId}/mcp-servers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"icon": "<string>",
"description": "<string>",
"source": "<string>",
"transport": "http",
"url": "<string>",
"command": "<string>",
"args": [
"<string>"
],
"env": {},
"headers": {},
"auth_type": "none",
"oauth_connected": true,
"oauth_expired": true,
"connection_state": "<string>",
"connection_checked_at": "<string>",
"connection_last_success_at": "<string>",
"connection_error_code": "<string>",
"owner_user_id": "<string>",
"can_manage": true,
"tool_names": [
"<string>"
],
"secret_names": [
"<string>"
],
"access": "<string>",
"enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "missing_bearer",
"message": "Authorization required"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": "session_not_found"
}{
"error": {
"type": "rate_limited",
"message": "This API key exceeded its request-rate limit"
}
}Authorizations
Your Reason API key from Settings › API keys. New keys use reason_; legacy ara_ keys remain accepted. Keys are capability-scoped: run, mcp:read, mcp:write, secrets:read, secrets:write, sessions:read, sessions:debug, knowledge:read, memory:read, memory:write, skills:read, skills:write, repos:read, repos:write, reviews:read, reviews:write, deployment:read, analytics:read, org:read, org:write, attachments:read, attachments:write, guardrails:read, guardrails:write, network:read, network:write, automations:read, automations:write, agent_auth:read. network:read and network:write are opt-in, excluded from default keys. network:read reads the saved workspace network policy; network:write replaces custom allowed hosts and requires a current organization owner/admin. Legacy project PATCH requests containing network_allowed_hosts also require network:write plus their existing run scope and project management permission; saved project hosts do not affect current session egress. Only owners/admins can mint or manage keys with network:write; keys cannot grant themselves more authority. See /docs/network-policies for replacement semantics and runtime applicability. mcp:write manages MCP server configuration only; it does not authorize remote MCP-tool execution. sessions:read reads sessions, including the assistant, reasoning and tool activity in their events. sessions:debug is privileged: only for organization owners/admins, it expands session events to the full diagnostic projection (diagnostic event kinds, status text and raw event metadata).
Path Parameters
Organization id or slug. Resolve it with GET /v3/self.
The MCP server id, returned as id by listMcpServers.
Response
The MCP server.
An org-level MCP server. Secret values are write-only and are never returned; only secret_names lists which of the server's own credentials are set.
MCP server id; pass it as id to getMcpServer.
URL-safe identifier of the server, unique in the workspace.
Display name.
Icon reference, or null when none is set.
What the server provides.
How the server was added: curated (from Reason's catalog), custom, or registry.
How the agent reaches the server: http or sse at url, or stdio by launching command.
http, stdio, sse Endpoint for http and sse servers; null for stdio.
Executable launched for a stdio server; null otherwise.
Arguments passed to command.
Environment variables for a stdio server. Values can reference the server's stored credentials as $NAME; the values themselves are never returned.
Show child attributes
Show child attributes
HTTP headers sent to the server. Values can reference the server's stored credentials as $NAME, such as Bearer $MCP_API_KEY.
Show child attributes
Show child attributes
How the server authenticates: none, an OAuth connection, or a bearer credential stored on the server.
none, oauth, bearer OAuth servers: whether the workspace has completed the OAuth connection.
OAuth servers: whether the grant expired with no refresh token, so it needs reconnecting.
Latest known connection state: unverified, ready, needs_auth, offline, protocol_error or disabled.
Timestamp of the latest recorded connection check.
Timestamp of the last successful check, retained independently when later checks fail. Historical evidence does not imply current readiness.
Public-safe code for the current connection failure.
Personal installation owner, or null for a shared workspace installation. Other users' personal installations are not listed.
Whether the caller can manage this installation through the connection lifecycle API.
Tool names from the server's current verified configuration.
The names of the credentials stored on this server itself, set through secrets on create or update. They belong to this server only and are not workspace or personal secrets: the secrets endpoints do not list or delete them. Secret values are write-only and are never returned.
Who can use the server; organization (the whole workspace).
Whether sessions connect to the server.
When the server was added.
When the server was last changed.

