Consistent Error Response Structure
Tool execution errors now return a standardized response format across all failure types. Previously, the data field was empty on errors—now it always includes status_code and message, matching the structure of successful responses.
What Changed
All error responses from tool execution now include:
data.status_code: HTTP status code (ornullfor non-HTTP errors)data.message: Detailed error messageerror: Same detailed message at the top level
Before vs After
Previous error response:
New error response:
Why This Matters
- Easier parsing: Agents and code can reliably access error details from
data.messagewithout special-casing emptydataobjects - Better debugging: Detailed error messages replace generic HTTP error strings
- Consistent schema: Same response shape whether the tool succeeds or fails
Union Types Preserved in Tool Schemas
Tool schemas now use standard JSON Schema anyOf for union types, providing accurate type information for LLMs and code generators.
What Changed
Two changes affect how types appear in request/response schemas:
Toolkits with multi-type union fields (157 total)
CRM & Sales
active_campaign, apollo, attio, autobound, capsule_crm, firmao, forcemanager, gong, hubspot, instantly, intercom, kommo, leadfeeder, lever, magnetic, pipedrive, pipeline_crm, salesforce, salesforce_service_cloud, zoominfo
Marketing & Email
active_trail, beamer, delighted, dripcel, enginemailer, mailerlite, moosend, mopinion, sendspark, toneden
Communication & Collaboration
chmeetings, discord, helpdesk, helpwise, missive, slack, textit
Productivity & Project Management
basecamp, clicksend, clientary, dart, fibery, monday, notion, onedesk, productboard, rocketlane, todoist
Developer Tools & APIs
algolia, anonyflow, api_ninjas, api_sports, apify, appdrag, backendless, browserless, bubble, cloudconvert, cloudinary, cloudlayer, convertapi, databricks, datadog, datarobot, deepseek, deployhq, digital_ocean, docmosis, docugenerate, encodian, gitea, gitlab, globalping, groqcloud, hookdeck, hyperbrowser, imgbb, imgix, kibana, neutrino, npm, openai, openrouter, parsera, parseur, phantombuster, pinecone, prismic, procfu, replicate, scrape_do, serpapi, shotstack, snowflake, supabase, tavily, v0, vercel, writer, zenrows
E-commerce & Payments
brex, btcpay_server, coupa, flutterwave, gift_up, lemon_squeezy, quaderno, ramp, shopify, stripe, zoho_invoice
HR & Recruiting
ashby, bamboohr, recruitee
Data & Analytics
amplitude, census_bureau, college_football_data, currencyscoop, diffbot, ip2location, mixpanel, nasa, rosette_text_analytics, securitytrails, textrazor, twelve_data
Documents & Files
carbone, doc_certs, documenso, dropbox, excel, files_com, grist, pdf_co, share_point
Design & Media
canva, canvas, claid_ai, deepimage, heygen, metatextai
Customer Support
freshdesk, retently, servicem8, sevdesk, storeganise
Calendar & Scheduling
calendly, deadline_funnel, etermin, googlecalendar
Social Media
facebook, instagram, reddit
Location & Maps
addresszen, geoapify, google_maps, mapbox
Email Verification & Validation
clearout, icypeas, neverbounce, zerobounce
Other Integrations
bitwarden, canny, cardly, castingwords, confluence, formdesk, getform, habitica, headout, highergov, jira, keen_io, landbot, moonclerk, one_drive, outlook, googlesheets, resend, ritekit, sms_alert, tapfiliate, thanks_io, uptimerobot
Before vs After
For example, the GOOGLECALENDAR_GET_CURRENT_DATE_TIME request schema changes:
Previous (only a single type):
Now (Union types preserved):
Similarly, nullable fields like page_token in GOOGLECALENDAR_LIST_CALENDARS:
Previous:
Now:
Why This Matters
- Accurate schemas: LLMs and code generators see the full set of allowed types
- Better validation: Input validation can now correctly accept all valid types, not just the first one