Deep Query for AI agents. Faster, cheaper answers from your business data.
Deep Query lets AI agents filter, search and aggregate records kept by StackOne Data Sync, in under a second. The agent gets only the counts and fields it needs, without a call to the source API.
Querying synced records
list_s1query_queryable_fields SAP SuccessFactors user fields sapsuccessfactors_list_users_s1query 6,150 records → 6 averages Average base salary across 6,150 New York employees:
1 query · 6 averages · no provider API call · 4,708 tokens per run
Querying synced records
greenhouse_list_notes_s1query match_phrase "open to relocating to London" → 12 notes 12 candidates are open to relocating to London:
1 query · 12 of 200,000 notes · no provider API call · 4,949 tokens per run
Reading the synced employee record
sapsuccessfactors_list_users_s1query userId: mchen · 2 fields Omar Haddad, your manager, approves it. It's charged to cost center 4400.
Synced SAP SuccessFactors data · no provider API call
Companies already connected through StackOne
Deep Query use cases. Get the records and totals
your task needs.
Deep Query filters and counts synced records inside StackOne and sends your agent only the result, cutting the tokens a task uses by up to 99.9%.
What's the average base salary by department in New York?
SAP SuccessFactors users 30,000 synced employees6,150 match location: New York6 department averages
{
"filter": {"term": {"location": "New York"}},
"aggs": {
"by_department": {
"terms": {"field": "department"},
"aggs": {"average": {"avg": {"field": "salary"}}}
}
}
} Then the agent groups the 6,150 records by department and averages salary for each group itself.
Engineering has the highest average base salary in New York at $168,000, and Support the lowest at $70,500.
One of 200 synced records
{
"userId": "ocole0",
"firstName": "Omar",
"lastName": "Cole",
"department": "Product",
"location": "Berlin",
"managerName": "Sam Nair",
"costCenter": "4430 · Product",
"jobTitle": "Product Manager",
"salary": 73000
}sapsuccessfactors_list_users_s1queryFilter New York employees, average salary by department
{
"filter": {
"term": {
"location": "New York"
}
},
"aggs": {
"by_department": {
"terms": {
"field": "department"
},
"aggs": {
"average": {
"avg": {
"field": "salary"
}
}
}
}
}
}Returned by sapsuccessfactors_list_users_s1query
[
{
"key": "Engineering",
"doc_count": 1200,
"average": {
"value": 168000
}
},
{
"key": "Support",
"doc_count": 1200,
"average": {
"value": 70500
}
},
{
"key": "People",
"doc_count": 1050,
"average": {
"value": 111857
}
},
{
"key": "Product",
"doc_count": 1050,
"average": {
"value": 165714
}
},
{
"key": "Finance",
"doc_count": 900,
"average": {
"value": 119500
}
},
{
"key": "Sales",
"doc_count": 750,
"average": {
"value": 129400
}
}
]Which 10 companies have the most open pipeline value?
Pipedrive deals 2,400 synced deals1,500 open10 organization totals
Pipedrive organizations 400 synced organizations10 match the top totals10 names
{
"filter": {"term": {"status": "open"}},
"aggs": {
"by_organization": {
"terms": {"field": "org_id", "size": 10, "order": {"total": "desc"}},
"aggs": {"total": {"sum": {"field": "value"}}}
}
}
} {
"filter": {
"terms": {"id": [7002, 7001, 7004, 7020, 7003, 7033, 7019, 7009, 7005, 7015]}
},
"source": ["name", "id"]
} Then the agent sums value by org_id across the open deals itself, keeps the top 10 and asks for their names.
Kestrel Energy has the most open pipeline at $635,000, then Meridian Bank at $560,000.
One of 240 synced records
{
"id": 51000,
"title": "Cedar Logistics renewal",
"value": 2500,
"currency": "USD",
"status": "open",
"org_id": 7022,
"owner_id": 31,
"stage_id": 3,
"pipeline_id": 1,
"probability": 35,
"add_time": "2026-01-31T09:00:00Z",
"expected_close_date": "2027-01-02"
}One of 40 synced records
{
"id": 7001,
"name": "Meridian Bank",
"owner_id": 31,
"address": "100 Main Street, New York, NY",
"add_time": "2024-01-15T10:00:00Z"
}pipedrive_list_deals_s1queryFilter open deals, sum value for the top 10 organizations
{
"filter": {
"term": {
"status": "open"
}
},
"aggs": {
"by_organization": {
"terms": {
"field": "org_id",
"size": 10,
"order": {
"total": "desc"
}
},
"aggs": {
"total": {
"sum": {
"field": "value"
}
}
}
}
}
}pipedrive_list_organizations_s1queryLook up the 10 organizations by id
{
"filter": {
"terms": {
"id": [
7002,
7001,
7004,
7020,
7003,
7033,
7019,
7009,
7005,
7015
]
}
},
"source": [
"name",
"id"
]
}Returned by pipedrive_list_deals_s1query
[
{
"key": "7002",
"doc_count": 30,
"total": {
"value": 635000
}
},
{
"key": "7001",
"doc_count": 20,
"total": {
"value": 560000
}
},
{
"key": "7004",
"doc_count": 60,
"total": {
"value": 465000
}
},
{
"key": "7020",
"doc_count": 30,
"total": {
"value": 440000
}
},
{
"key": "7003",
"doc_count": 90,
"total": {
"value": 360000
}
},
{
"key": "7033",
"doc_count": 50,
"total": {
"value": 345000
}
},
{
"key": "7019",
"doc_count": 40,
"total": {
"value": 320000
}
},
{
"key": "7009",
"doc_count": 20,
"total": {
"value": 315000
}
},
{
"key": "7005",
"doc_count": 40,
"total": {
"value": 290000
}
},
{
"key": "7015",
"doc_count": 80,
"total": {
"value": 277500
}
}
]Returned by pipedrive_list_organizations_s1query
[
{
"name": "Meridian Bank",
"id": 7001
},
{
"name": "Kestrel Energy",
"id": 7002
},
{
"name": "Harbor Analytics",
"id": 7003
},
{
"name": "Tidewater Shipping",
"id": 7004
},
{
"name": "Pinnacle Insurance",
"id": 7005
},
{
"name": "Redwood Capital",
"id": 7009
},
{
"name": "Upland Software",
"id": 7015
},
{
"name": "Zephyr Airlines",
"id": 7019
},
{
"name": "Alder Pharma",
"id": 7020
},
{
"name": "Nimbus Cloud",
"id": 7033
}
]Which 10 suppliers did we spend the most with this quarter?
Xero bills 1,150 synced invoices and bills600 bills this quarter27 supplier totals
Xero bank transactions 2,200 synced bank transactions1,700 payments out this quarter22 supplier totals
{
"filter": {
"bool": {
"must": [
{"term": {"Type": "ACCPAY"}},
{"range": {"Date": {"gte": "2026-07-01"}}}
]
}
},
"aggs": {
"by_supplier": {
"terms": {"field": "Contact.Name", "size": 50, "order": {"total": "desc"}},
"aggs": {"total": {"sum": {"field": "Total"}}}
}
}
} {
"filter": {
"bool": {
"must": [
{"term": {"Type": "SPEND"}},
{"range": {"Date": {"gte": "2026-07-01"}}}
]
}
},
"aggs": {
"by_supplier": {
"terms": {"field": "Contact.Name", "size": 50, "order": {"total": "desc"}},
"aggs": {"total": {"sum": {"field": "Total"}}}
}
}
} Then the agent adds up bills and payments by supplier itself and keeps the top 10.
Westgate Property was paid the most this quarter at $555,000, then Tandem Consulting at $470,000.
One of 115 synced records
{
"InvoiceID": "972d5c56-0310-4310-8170-000000000310",
"InvoiceNumber": "INV-02200",
"Type": "ACCREC",
"Status": "PAID",
"Contact.Name": "Kestrel Energy",
"Date": "2026-07-03",
"DueDate": "2026-07-28",
"Total": 3500,
"CurrencyCode": "USD"
}One of 220 synced records
{
"BankTransactionID": "3b07d244-0900-4900-8300-000000000900",
"Type": "SPEND",
"Status": "AUTHORISED",
"Contact.Name": "Ridge Telecom",
"Date": "2026-07-04",
"Total": 55,
"BankAccount.Name": "Operating account",
"Reference": "Monthly plan",
"CurrencyCode": "USD"
}xero_list_invoices_s1queryFilter this quarter's bills, sum by supplier
{
"filter": {
"bool": {
"must": [
{
"term": {
"Type": "ACCPAY"
}
},
{
"range": {
"Date": {
"gte": "2026-07-01"
}
}
}
]
}
},
"aggs": {
"by_supplier": {
"terms": {
"field": "Contact.Name",
"size": 50,
"order": {
"total": "desc"
}
},
"aggs": {
"total": {
"sum": {
"field": "Total"
}
}
}
}
}
}xero_list_bank_transactions_s1queryFilter this quarter's spend, sum by supplier
{
"filter": {
"bool": {
"must": [
{
"term": {
"Type": "SPEND"
}
},
{
"range": {
"Date": {
"gte": "2026-07-01"
}
}
}
]
}
},
"aggs": {
"by_supplier": {
"terms": {
"field": "Contact.Name",
"size": 50,
"order": {
"total": "desc"
}
},
"aggs": {
"total": {
"sum": {
"field": "Total"
}
}
}
}
}
}Returned by xero_list_invoices_s1query
[
{
"key": "Westgate Property",
"doc_count": 30,
"total": {
"value": 555000
}
},
{
"key": "Tandem Consulting",
"doc_count": 40,
"total": {
"value": 470000
}
},
{
"key": "Brightpath Recruiting",
"doc_count": 20,
"total": {
"value": 145000
}
},
{
"key": "Harbor Legal LLP",
"doc_count": 30,
"total": {
"value": 134000
}
},
{
"key": "Quantum Payroll Services",
"doc_count": 30,
"total": {
"value": 126000
}
},
{
"key": "Vertex Software",
"doc_count": 20,
"total": {
"value": 108000
}
},
{
"key": "Upstream Marketing",
"doc_count": 30,
"total": {
"value": 95000
}
},
{
"key": "Ironwood Facilities",
"doc_count": 30,
"total": {
"value": 63000
}
},
{
"key": "Keystone Insurance",
"doc_count": 10,
"total": {
"value": 59000
}
},
{
"key": "Canal Print",
"doc_count": 50,
"total": {
"value": 21000
}
},
{
"key": "Zinc Hardware",
"doc_count": 40,
"total": {
"value": 19000
}
},
{
"key": "Iris Translation",
"doc_count": 30,
"total": {
"value": 17500
}
},
{
"key": "Loom Furniture",
"doc_count": 30,
"total": {
"value": 14000
}
},
{
"key": "Fern Florists",
"doc_count": 20,
"total": {
"value": 13500
}
},
{
"key": "Sage Accounting",
"doc_count": 20,
"total": {
"value": 11500
}
},
{
"key": "Maple Waste",
"doc_count": 20,
"total": {
"value": 11000
}
},
{
"key": "Vale Maintenance",
"doc_count": 30,
"total": {
"value": 10500
}
},
{
"key": "Unity Legal",
"doc_count": 20,
"total": {
"value": 7500
}
},
{
"key": "Wren Design",
"doc_count": 10,
"total": {
"value": 7000
}
},
{
"key": "Oak Plumbing",
"doc_count": 10,
"total": {
"value": 6000
}
},
{
"key": "Anchor Signs",
"doc_count": 10,
"total": {
"value": 5500
}
},
{
"key": "Tide Water Co",
"doc_count": 10,
"total": {
"value": 5000
}
},
{
"key": "Grove IT Support",
"doc_count": 20,
"total": {
"value": 4500
}
},
{
"key": "Ridge Telecom",
"doc_count": 10,
"total": {
"value": 4000
}
},
{
"key": "Quartz Labs",
"doc_count": 10,
"total": {
"value": 3500
}
},
{
"key": "Pier Parking",
"doc_count": 10,
"total": {
"value": 3000
}
},
{
"key": "Nova Training",
"doc_count": 10,
"total": {
"value": 2500
}
}
]Returned by xero_list_bank_transactions_s1query
[
{
"key": "Cloudline Hosting",
"doc_count": 300,
"total": {
"value": 233770
}
},
{
"key": "Metro Travel",
"doc_count": 400,
"total": {
"value": 151080
}
},
{
"key": "Vertex Software",
"doc_count": 120,
"total": {
"value": 46700
}
},
{
"key": "Pixel Studio",
"doc_count": 60,
"total": {
"value": 42290
}
},
{
"key": "Upstream Marketing",
"doc_count": 40,
"total": {
"value": 36350
}
},
{
"key": "Summit Office Supplies",
"doc_count": 250,
"total": {
"value": 29100
}
},
{
"key": "Silverleaf Catering",
"doc_count": 180,
"total": {
"value": 27630
}
},
{
"key": "Redline Couriers",
"doc_count": 150,
"total": {
"value": 11660
}
},
{
"key": "Yarrow Health",
"doc_count": 20,
"total": {
"value": 5600
}
},
{
"key": "Ember Electric",
"doc_count": 20,
"total": {
"value": 4100
}
},
{
"key": "Nova Training",
"doc_count": 20,
"total": {
"value": 4100
}
},
{
"key": "Vale Maintenance",
"doc_count": 20,
"total": {
"value": 4100
}
},
{
"key": "Ridge Telecom",
"doc_count": 20,
"total": {
"value": 3350
}
},
{
"key": "Kite Events",
"doc_count": 10,
"total": {
"value": 3250
}
},
{
"key": "Unity Legal",
"doc_count": 20,
"total": {
"value": 3050
}
},
{
"key": "Grove IT Support",
"doc_count": 10,
"total": {
"value": 2500
}
},
{
"key": "Loom Furniture",
"doc_count": 10,
"total": {
"value": 2500
}
},
{
"key": "Quartz Labs",
"doc_count": 10,
"total": {
"value": 2050
}
},
{
"key": "Canal Print",
"doc_count": 10,
"total": {
"value": 1300
}
},
{
"key": "Sage Accounting",
"doc_count": 10,
"total": {
"value": 1300
}
},
{
"key": "Haven Security",
"doc_count": 10,
"total": {
"value": 550
}
},
{
"key": "Oak Plumbing",
"doc_count": 10,
"total": {
"value": 550
}
}
]Which 10 customers opened the most refund tickets this quarter?
Zendesk tickets 9,600 synced tickets1,740 refund tickets this quarter10 organization counts
{
"filter": {
"bool": {
"must": [
{"match": {"description": "refund"}},
{"range": {"createdAt": {"gte": "2026-07-01"}}}
]
}
},
"aggs": {"by_organization": {"terms": {"field": "organization", "size": 10}}}
} Then the agent compares the 300 counts and keeps the top 10.
Northwind Traders opened the most refund tickets this quarter (390), then Contoso (150).
One of 320 synced records
{
"id": 480000,
"subject": "The customer is asking for a",
"description": "The customer is asking for a refund on their last order. Export to CSV fails with a timeout.",
"status": "open",
"group": "Shipping",
"priority": "high",
"requester": "Jordan Novak",
"createdAt": "2026-09-01",
"organization": "Consolidated Messenger"
}zendesk_list_tickets_s1querySearch descriptions for refund this quarter, count the top 10 organizations
{
"filter": {
"bool": {
"must": [
{
"match": {
"description": "refund"
}
},
{
"range": {
"createdAt": {
"gte": "2026-07-01"
}
}
}
]
}
},
"aggs": {
"by_organization": {
"terms": {
"field": "organization",
"size": 10
}
}
}
}Returned by zendesk_list_tickets_s1query
[
{
"key": "Northwind Traders",
"doc_count": 390
},
{
"key": "Contoso",
"doc_count": 150
},
{
"key": "Tailspin Toys",
"doc_count": 150
},
{
"key": "Fourth Coffee",
"doc_count": 120
},
{
"key": "Proseware",
"doc_count": 120
},
{
"key": "Adventure Works",
"doc_count": 90
},
{
"key": "Alpine Ski House",
"doc_count": 60
},
{
"key": "Bellows College",
"doc_count": 60
},
{
"key": "Blue Yonder Airlines",
"doc_count": 60
},
{
"key": "Consolidated Messenger",
"doc_count": 60
}
]Which candidates told us they're open to relocating to London?
Greenhouse candidate notes 200,000 synced notes12 notes with the phrase12 candidates · 4 fields
| Candidate | Job title | Author | Date |
|---|---|---|---|
| Priya Mensah | Data Engineer | Ana Walsh | Sep 20 |
| Mei Cole | Product Designer | Ben Cole | Sep 15 |
| Omar Shah | Staff Engineer | Lena Nair | Aug 14 |
| Avery Shah | Staff Engineer | Priya Walsh | Jul 8 |
| Oscar Morgan | Data Engineer | Zara Walsh | May 16 |
| Nadia Martin | Product Designer | Jordan Iqbal | May 10 |
| Eli Martin | Senior Backend Engineer | Alex Ferreira | Mar 31 |
| Zara Costa | Account Executive | Sam Lund | Feb 28 |
| Omar Brun | Account Executive | Lena Carter | Jan 10 |
| Eli Brun | Staff Engineer | Theo Ferreira | Dec 4 |
{
"filter": {
"bool": {
"must": [
{"match_phrase": {"body": "open to relocating to London"}},
{"range": {"createdAt": {"gte": "2025-09-24"}}}
]
}
},
"sort": [{"createdAt": "desc"}],
"source": ["candidateName", "jobTitle", "author", "createdAt"]
} Then the agent reads all 200,000 notes for "open to relocating to London" and filters the rest itself.
12 candidates said they're open to relocating to London, most recently Priya Mensah for Data Engineer.
One of 250 synced records
{
"id": "nt_088001",
"candidateId": "cand_040011",
"candidateName": "Nadia Okafor",
"jobTitle": "Product Designer",
"author": "Alex Costa",
"body": "Catch-up after the take-home review. Panel feedback was positive overall, with a few open questions about testing strategy that the hiring manager wants to cover in the final round. Wants to understand the team's roadmap before the next round. Flagged to the hiring manager as a strong match. Will chase references this week and share availability for the final round by Friday.",
"createdAt": "2026-08-16"
}greenhouse_list_notes_s1queryMatch the phrase in a year of notes, newest first
{
"filter": {
"bool": {
"must": [
{
"match_phrase": {
"body": "open to relocating to London"
}
},
{
"range": {
"createdAt": {
"gte": "2025-09-24"
}
}
}
]
}
},
"sort": [
{
"createdAt": "desc"
}
],
"source": [
"candidateName",
"jobTitle",
"author",
"createdAt"
]
}Returned by greenhouse_list_notes_s1query
[
{
"candidateName": "Priya Mensah",
"jobTitle": "Data Engineer",
"author": "Ana Walsh",
"createdAt": "2026-09-20"
},
{
"candidateName": "Mei Cole",
"jobTitle": "Product Designer",
"author": "Ben Cole",
"createdAt": "2026-09-15"
},
{
"candidateName": "Omar Shah",
"jobTitle": "Staff Engineer",
"author": "Lena Nair",
"createdAt": "2026-08-14"
},
{
"candidateName": "Avery Shah",
"jobTitle": "Staff Engineer",
"author": "Priya Walsh",
"createdAt": "2026-07-08"
},
{
"candidateName": "Oscar Morgan",
"jobTitle": "Data Engineer",
"author": "Zara Walsh",
"createdAt": "2026-05-16"
},
{
"candidateName": "Nadia Martin",
"jobTitle": "Product Designer",
"author": "Jordan Iqbal",
"createdAt": "2026-05-10"
},
{
"candidateName": "Eli Martin",
"jobTitle": "Senior Backend Engineer",
"author": "Alex Ferreira",
"createdAt": "2026-03-31"
},
{
"candidateName": "Zara Costa",
"jobTitle": "Account Executive",
"author": "Sam Lund",
"createdAt": "2026-02-28"
},
{
"candidateName": "Omar Brun",
"jobTitle": "Account Executive",
"author": "Lena Carter",
"createdAt": "2026-01-10"
},
{
"candidateName": "Eli Brun",
"jobTitle": "Staff Engineer",
"author": "Theo Ferreira",
"createdAt": "2025-12-04"
},
{
"candidateName": "Ines Mensah",
"jobTitle": "Account Executive",
"author": "Alex Haddad",
"createdAt": "2025-11-26"
},
{
"candidateName": "Avery Morgan",
"jobTitle": "Product Designer",
"author": "Theo Lund",
"createdAt": "2025-10-11"
}
]Find that are , then count the top 10 by
Zendesk tickets 9,600 synced tickets2,220 tickets mentioning a refund10 counts by organization
{
"filter": {"match": {"description": "refund"}},
"aggs": {"by_organization": {"terms": {"field": "organization"}}}
} Then the agent compares the 300 counts and keeps the top 10.
2,220 tickets, the most for Northwind Traders (480).
One of 9,600 synced records
{
"id": 480000,
"subject": "The customer is asking for a",
"description": "The customer is asking for a refund on their last order. Export to CSV fails with a timeout.",
"status": "open",
"group": "Shipping",
"priority": "high",
"requester": "Jordan Novak",
"createdAt": "2026-09-01",
"organization": "Consolidated Messenger"
}zendesk_list_tickets_s1queryBuilt from your choices
{
"filter": {
"match": {
"description": "refund"
}
},
"aggs": {
"by_organization": {
"terms": {
"field": "organization"
}
}
}
}Returned by zendesk_list_tickets_s1query
[
{
"key": "Northwind Traders",
"doc_count": 480
},
{
"key": "Contoso",
"doc_count": 210
},
{
"key": "Litware",
"doc_count": 180
},
{
"key": "Tailspin Toys",
"doc_count": 180
},
{
"key": "Fourth Coffee",
"doc_count": 150
},
{
"key": "Proseware",
"doc_count": 120
},
{
"key": "Adventure Works",
"doc_count": 90
},
{
"key": "Bellows College",
"doc_count": 90
},
{
"key": "Consolidated Messenger",
"doc_count": 90
},
{
"key": "Humongous Insurance",
"doc_count": 90
}
] Faster tool responses. Read synced data
without waiting on the source API.
Deep Query reads records already stored in StackOne, so your agent gets an answer even while a provider's API is slow or rate-limited.
A live lookup waits 0.2 to 12.7 seconds for the provider API to answer. Deep Query reads the synced records in about 0.2 seconds.
Configure Data Sync. Set how often Data Sync
refreshes your records.
Choose which actions to sync and set a schedule for each one. Deep Query reads those stored records, so the schedule sets how fresh its results are.
Follow the Data Sync setup guide01Pick an actionOpen a Connector Profile and find a list action that supports sync.
WorkdayProfile · HR agent
ActionType
List WorkersRead
Get WorkerRead
List OrganizationsRead
Update WorkerWrite
02Enable Data SyncSelect the sync icon and switch Data Sync on for that action.
Data Sync· List WorkersOptimize
Setup
Enable Data Sync
Preferences
03Set the scheduleChoose how often new and changed records sync, and how often a full re-sync runs.
Data Sync· List WorkersOptimize
Setup
Enable Data Sync
Preferences
04SaveSave the profile to start syncing.
Data Sync· List WorkersOptimize
Setup
Enable Data Sync
Preferences
05StackOne syncsStackOne pages through the provider API on your schedule and keeps the records current.
- Full sync7,200 records
- Incremental38 changed
- Incremental12 changed
06Your agent queriesThe action's query tool is ready over MCP to filter, search and aggregate.
How many active employees are in each US department?
workday_list_workers_s1query1 query
filter: status active, country US aggs: terms department
2,400 active employees in the US, 510 of them in Product.
Sync any list action, including your own.
An action declares Data Sync in its connector's YAML before anyone can turn it on. StackOne's connectors declare it for common records. In your own connector, you choose. Edit the block to see how it changes each sync run and the tool your agent gets.
Valid. The action offers Data Sync.
In the Connector Profile1
Data Sync can't be turned on while allowed is false.
Sync run2
- GET/workers?updated_after=2026-09-24T09:00:00Z100 · next=c_8f2a
- GET/workers?next=c_8f2a&updated_after=2026-09-24T09:00:00Z100 · next=c_90bd
- GET/workers?next=c_90bd&updated_after=2026-09-24T09:00:00Z37 · no next
- Done in 3 requests. Unchanged workers stay as they were.
What your agent gets3
workday_list_workers_s1query Filter, search, sort and count synced Workday workers, in about 0.2 seconds.
departmentstatuscountryjobTitlestartDateprobationEndDate
filtermatchsortaggssource
No query tool. The agent can only page through the live Workday API.
Deep Query syntax. Filter, search and count
on any synced field.
Query tools take OpenSearch-style queries. Your agent looks up each synced field and its type first, then filters, searches and aggregates on it.
Filter
Search text
Aggregate
Shape the result
Deep Query FAQ. How Deep Query works
with your AI agent.
Get started with Deep Query.
Turn on Data Sync for a supported action and your agent gets its query tools over MCP.