BuildBuilt-in toolsMCP connector

MCP connector

⚠️
Preview — this feature is being built; the design below is the spec.

MCP (Model Context Protocol) is an open standard for tool servers. With the MCP connector you list remote MCP servers in your request; Syntic connects to them, shows their tools to the model, runs the calls the model makes and returns the final answer. You do not write any client code for MCP.

When to use it

  • You (or a vendor) already run an MCP server for a CRM, ticketing system, database or internal API.
  • You want the same tools available in Syntic Code, your own apps and the API without rewriting them as functions.

For tools that run inside your own application, ordinary function tools are simpler.

Endpoint and auth

POST https://app.syntic.ai/v1/chat/completions (and Messages), Authorization: Bearer sk_live_....

Request field

mcp_servers is an array of up to 10 servers:

FieldTypeRequiredDetails
namestringYesYour label, 1 to 32 characters, unique in the request. Tools are shown to the model as name.tool_name.
urlstringYesPublic https address of a server using the streamable HTTP transport.
authorization_tokenstringNoSent as Authorization: Bearer ... to the server. Never stored or logged.
vault_secretstringNoInstead of a raw token, the name of a secret in a credential vault.
allowed_toolsarray of stringsNoOnly these tools are offered. Default: all the server lists.
require_approvalstring or arrayNo"never" (default), "always", or a list of tool names that need approval.
timeout_secondsintegerNoPer call, 1 to 120. Default 30.

How it works

  1. Syntic connects to each server and lists its tools (cached for 5 minutes per server and token).
  2. The model sees those tools next to any function tools you sent.
  3. When the model calls an MCP tool, Syntic runs it and feeds the result back, repeating until the model answers.
  4. Calls that need approval stop the loop and are returned to you (see below).

Response

{
  "message": {
    "role": "assistant",
    "content": "Ticket SUP-4412 is assigned to Priya and due Friday.",
    "server_tool_calls": [
      { "id": "srv_04", "type": "mcp", "server": "helpdesk", "tool": "get_ticket", "status": "ok", "duration_ms": 412 }
    ]
  },
  "usage": { "prompt_tokens": 2980, "completion_tokens": 22, "total_tokens": 3002, "server_tool_use": { "mcp_calls": 1 } }
}

Approval

When a call needs approval, the reply ends with finish_reason: "tool_calls" and the call appears in tool_calls with type: "mcp_approval":

{ "id": "call_k2", "type": "mcp_approval", "mcp_approval": { "server": "helpdesk", "tool": "close_ticket", "arguments": "{\"id\":\"SUP-4412\"}" } }

Send back a tool message with "content": "{\"approve\": true}" (or false with a reason) and the same mcp_servers; Syntic runs the call if approved and continues.

Examples

curl https://app.syntic.ai/v1/chat/completions \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Amara S1.2",
    "stream": false,
    "mcp_servers": [{
      "name": "helpdesk",
      "url": "https://mcp.helpdesk.example.com/mcp",
      "vault_secret": "helpdesk-token",
      "allowed_tools": ["get_ticket", "search_tickets", "close_ticket"],
      "require_approval": ["close_ticket"]
    }],
    "messages": [{ "role": "user", "content": "Who owns SUP-4412 and when is it due?" }]
  }'

Errors

Unified envelope. Errors from a tool call are passed to the model as the tool result; errors reaching the server fail the request.

StatuscodeparamCause
400invalid_mcp_servermcp_servers[i]Missing field, bad name, or non-https URL.
400mcp_url_blockedmcp_servers[i].urlPrivate or internal address.
400too_many_mcp_serversmcp_serversMore than 10.
404vault_secret_not_foundmcp_servers[i].vault_secretNo such secret in your workspace.
424mcp_server_unreachablemcp_servers[i]Could not connect or list tools. message says why (timeout, TLS, HTTP status).
424mcp_auth_failedmcp_servers[i]The server rejected the token.
400streaming_not_allowedstreamNot available in batches.

Limits and pricing

Servers per request10
Tools per server offered to the model100 (use allowed_tools or tool search for more)
Calls per request50
Tool result size100,000 tokens, truncated beyond that
PriceNo connector fee. Tool definitions and results are normal input tokens.

Security

  • Syntic connects from published egress addresses so you can allowlist them.
  • Tokens live only in memory, and only while the request runs. Use vaults to avoid sending them at all.
  • Tool results can contain instructions written by third parties. Use allowed_tools and approval for anything that changes data.

Build notes for the platform team

  • Act as an MCP client over streamable HTTP inside the gateway’s server-tool loop; reuse the shared outbound URL checks.
  • Per-org concurrency cap and per-call timeout; never log authorization_token.
  • Later: private network tunnels for servers behind a firewall.
Was this page helpful?