--- title: App tools description: >- Create extensions with the admin.app.tools.data target to expose your app's data to Sidekick. These extensions execute headlessly to provide data that Sidekick uses to answer merchant questions and search your app. api_version: 2025-10 api_name: admin-extensions source_url: html: 'https://shopify.dev/docs/api/admin-extensions/2025-10/targets/app-tools' md: 'https://shopify.dev/docs/api/admin-extensions/2025-10/targets/app-tools.md' --- # App tools Create extensions with the `admin.app.tools.data` target to expose your app's data to [Sidekick](https://shopify.dev/docs/apps/build/sidekick/build-app-data). These extensions execute headlessly to provide data that Sidekick uses to answer merchant questions and search your app. **Developer preview:** We're selecting developer partners to get limited early access and provide feedback on Sidekick app extensions. [Submit your interest](https://docs.google.com/forms/d/e/1FAIpQLScxM8VQao5GGlIF-8TeiYQp-ucQiTFwSai35oDBzDuIpN5O7g/viewform?usp=dialog) and we'll reach out if you're selected. ### Use cases * **Search app data:** Allow Sidekick to search your app's data, such as email campaigns, marketing activities, or custom resources, by exposing search capabilities through your extension. * **Retrieve app statistics:** Provide Sidekick with access to app-specific metrics and statistics that merchants can query in natural language. * **Answer app-specific questions:** Help Sidekick answer merchant questions about your app's data by registering tools that retrieve relevant information from your app's backend. * **Enable app data discovery:** Make your app's data accessible to merchants through Sidekick's conversational interface, keeping them in their flow while working with your app's information. ![App tools targets overview](https://shopify.dev/assets/assets/images/templated-apis-screenshots/admin-extensions/targets-overview-images/admin.app-tools.overview-DDlsZQKq.png) *** ## App tools target Configure an extension with the `admin.app.tools.data` target to register tools that Sidekick can invoke to retrieve data from your app. ### App tools data runnable target `admin.app.tools.data` A runnable target that enables your app to expose data to Sidekick. This target executes headlessly and returns data without presenting any UI. Configure this target in your `shopify.extension.toml` file to register tools that Sidekick can invoke to search your app's data and answer questions. Your extension exports a default function that registers one or more tools using `shopify.tools.register()`. Each tool is an async function that receives parameters and returns data from your app's backend. Sidekick invokes these tools programmatically when answering merchant questions. Unlike [action or block targets](https://shopify.dev/docs/api/admin-extensions/2025-10#building-your-extension) that render UI at specific page locations, this target provides configuration data that enables Sidekick to query your app's backend for information. ### Support Components (0) APIs (1) ### Supported components \- ### Available APIs * [Standard API](https://shopify.dev/docs/api/admin-extensions/2025-10/target-apis/core-apis/standard-api) Examples ### Examples * #### ##### Description Register a tool that allows Sidekick to search email campaigns in your app. After configuring the \`admin.app.tools.data\` target in your \[\`shopify.extension.toml\`]\(/docs/api/admin-extensions/2025-10#configuration) file, create a JavaScript module that exports a default function. This function registers tools using \`shopify.tools.register()\` that fetch data from your app's backend. ##### jsx ```jsx export default () => { shopify.tools.register('get_campaigns', async ({name, date}) => { const response = await fetch('/api/campaigns', { method: 'POST', body: JSON.stringify({name, date}) }); return response.json(); }); }; ``` * #### ##### Description Register multiple tools to expose different data endpoints to Sidekick. This example shows how to provide both search and statistics capabilities for email campaigns. ##### jsx ```jsx export default () => { shopify.tools.register('get_campaigns', async ({name, date}) => { const response = await fetch('/api/campaigns', { method: 'POST', body: JSON.stringify({name, date}) }); return response.json(); }); shopify.tools.register('campaign_stats', async ({campaign_id}) => { const response = await fetch(`/api/campaigns/${campaign_id}/stats`); return response.json(); }); }; ``` * #### ##### Description Return data in Resource Links format to enable Sidekick to invoke your app's actions on the returned data. Use the \`uri\` field to link directly to resources in your app. ##### jsx ```jsx export default () => { shopify.tools.register('search_campaigns', async ({query}) => { const response = await fetch('/api/campaigns/search', { method: 'POST', body: JSON.stringify({query}) }); const campaigns = await response.json(); return { results: campaigns.map(campaign => ({ type: 'resource_link', uri: `gid:application/email/${campaign.id}`, name: campaign.subject, mimeType: 'application/email' })) }; }); }; ``` *** ## Best practices * **Return data quickly:** Your extension should return data to Sidekick as quickly as possible to keep conversations feeling responsive. Aim for responses within a few hundred milliseconds. * **Use Resource Links format:** Return data in [Model Context Protocol's Resource Links](https://modelcontextprotocol.io/specification/2025-06-18/server/tools#resource-links) format to enable Sidekick to invoke your app's actions on the returned data. * **Provide clear tool descriptions:** In your tools JSON schema, include detailed descriptions for each tool and its parameters so Sidekick understands when and how to use your tools. * **Include instructions:** Add an `instructions.md` file to provide context and guidance to Sidekick about how to use your app extension effectively. *** ## Limitations * **Single target per module:** Each `[[extensions.targeting]]` entry in your [TOML configuration](https://shopify.dev/docs/api/admin-extensions/2025-10#configuration) maps one target to one module file. * **Data retrieval only:** This target should only be used for retrieving data from your app. To perform actions in your app, use an [app action extension](https://shopify.dev/docs/apps/build/sidekick/build-app-actions) instead. * **Headless execution:** Extensions with this target execute without presenting any UI. All interaction happens through Sidekick's conversational interface. * **Requires tools schema:** You must define a tools JSON schema file that declares the tools your extension registers, including their input parameters and descriptions. * **Extension deployment required:** Your extension only becomes available to Sidekick after you deploy it using `shopify app deploy`. Sidekick discovers your tools by scanning the deployed extension configuration for the `admin.app.tools.data` target. ***