Unified MCP Server
Additional API Endpoints
These REST endpoints serve the same tools as the MCP server, for LLM APIs that take tool definitions directly instead of connecting to an MCP server. They live on the same hosts as /mcp and are also served under the /mcp prefix (eg. /mcp/tools). Authenticate the same way as the MCP server: see Authentication.
GET /tools
Get a list of the MCP tools associated with the connection.
Add these URL parameters to the MCP GetTools API URL:
permissions | A comma-delimited list of permissions from Unified.to |
tools | A comma-delimited list of tool IDs to restrict the list to. Supports the wildcards * and ?, eg. list_*,*invoice*. |
defer_tools | A comma-delimited list of tool IDs (or partial IDs) to mark with defer_loading: true, or all. The list then starts with Anthropic's tool_search_tool_regex tool, so the model can search for a deferred tool when it needs it. |
aliases | A list of words and their aliases to create additional descriptions for tools. In the format of word1:alias1,alias2;word2:alias1,alias2. eg. ?aliases=employee:user,person;employees:users,people |
include_external_tools | Include an integration's tools from all of its API and not just the default supported unified API |
integration_type | Without a credential, list that integration's tools as an unauthenticated preview. Without a credential or integration_type, the endpoint lists the Core Unified API tools. |
type | Use this parameter to change the structure of the result to be used for: · OpenAI's function calling when type=openai · Google Gemini's function declarations when type=gemini (or google) · Cohere's tools when type=cohere · Grok's functions when type=grok · Groq's functions when type=groq |
Without type, the result is an array of:
{
id: string;
description: string;
parameters: {
name: string;
description: string;
required: boolean;
type?: 'string' | 'number' | 'boolean' | 'object' | 'array';
enum?: string[];
...
}[];
output_schema?: JSON-schema; // the shape of the call's structuredContent
}
With a type, each tool is shaped for that provider:
type | Shape |
|---|---|
openai | { type: 'function', name, description, parameters } |
gemini | { name, description, parameters }: a function declaration |
cohere, grok, groq | { type: 'function', function: { name, description, parameters } } |
parameters is a JSON Schema object in every typed shape. Anthropic's Messages API takes the same JSON Schema under a different key, so use type=openai and rename parameters to input_schema (see Anthropic API).
POST /tools/{id}/call
Call a tool and return its result. {id} is the tool's id (or name in the typed shapes).
The request body is a JSON object of the tool's arguments, keyed by parameter name.
Add these URL parameters to the MCP CallTool API URL:
hide_sensitive | Hides sensitive (ie. PII) data from results. These fields include name, emails, telephones, ... |
permissions | A comma-delimited list of permissions from Unified.to |
tools | The same tool restriction as GET /tools. A tool outside it returns 404 |
aliases | A list of words and their aliases to create additional descriptions for tools. In the format of word1:alias1,alias2;word2:alias1,alias2. eg. ?aliases=employee:user,person;employees:users,people |
include_external_tools is not needed here: a tool whose id starts with external_ is found automatically.
A successful call returns:
{
content: {
type: 'text';
text: string; // the result as JSON text
}[];
structuredContent: JSON-object; // a list result is wrapped as { results: [...] }
}
When the tool runs and fails, the response has isError: true and the error in content:
{
content: [{ type: 'text', text: 'Error: ...' }],
isError: true
}
| Status | When | Body |
|---|---|---|
400 | A required parameter is missing or empty. The message names it | isError result |
401 | No valid credential | { error, message } |
403 | The request's IP address is not on the workspace's allowlist | { error, message } |
403 | The OAuth token's scopes don't cover the tool | isError result |
404 | No such tool for this connection | { error } |
429 | The workspace's rate limit was reached | isError result |
| other | The status the integration's API returned | isError result |
signup_unified_workspace is the one tool that can be called without a credential. See Agent Signup.
Rate limiting
Your workspace's rate limit is checked before the tool runs, so a tool call can return HTTP 429. This applies to tool calls made through the MCP server at /mcp as well as to this endpoint.