Unified MCP Server

Updated:

Additional API Endpoints

Get Tools · Call Tool

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:

permissionsA comma-delimited list of permissions from Unified.to
toolsA comma-delimited list of tool IDs to restrict the list to. Supports the wildcards * and ?, eg. list_*,*invoice*.
defer_toolsA 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.
aliasesA 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_toolsInclude an integration's tools from all of its API and not just the default supported unified API
integration_typeWithout 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.
typeUse 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:

typeShape
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_sensitiveHides sensitive (ie. PII) data from results. These fields include name, emails, telephones, ...
permissionsA comma-delimited list of permissions from Unified.to
toolsThe same tool restriction as GET /tools. A tool outside it returns 404
aliasesA 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
}
StatusWhenBody
400A required parameter is missing or empty. The message names itisError result
401No valid credential{ error, message }
403The request's IP address is not on the workspace's allowlist{ error, message }
403The OAuth token's scopes don't cover the toolisError result
404No such tool for this connection{ error }
429The workspace's rate limit was reachedisError result
otherThe status the integration's API returnedisError 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.

Are we missing anything? Let us know
Was this page helpful?