Tools are the actions your app exposes to ChatGPT. Each tool does one job: search orders, show a dashboard, update a record. When a user asks ChatGPT something, ChatGPT picks the right tool, calls it, and returns the result.
Two tools in the builder: a UI tool and a data tool
From the dashboard, open the app you want to add a tool to.
2
Describe the tool you need
In the builder chat, tell the AI what the tool should do. Be specific about the type (UI or data), the name, and what it accomplishes.Example prompt:
Add a UI tool called “order_lookup” that shows a customer’s recent orders in a table. Columns: order number, date, status, and total. Display in side panel mode.
Describing a new tool in the builder chat
3
Review the generated tool
Chippy creates the tool, including its name, description, parameters, and (for UI tools) the widget code. Review each piece in the tool editor panel.
The generated tool in the editor
4
Test it in preview
Click the tool in the preview panel to run it with mock data. Verify the output looks right before connecting to ChatGPT.
The description tells ChatGPT when to use the tool. This is the single most important field for reliable tool selection.
ChatGPT reads the description to decide which tool to call. A vague description leads to wrong tool picks. A specific description leads to accurate ones.
Before and after examples:
Before (vague)
After (specific)
“Gets order info"
"Searches orders by customer email, order number, or date range. Returns order ID, status, items, and total. Use this when the user asks about a specific order or wants to look up recent purchases."
"Shows a dashboard"
"Displays an interactive support ticket dashboard as a fullscreen widget. Shows open tickets in a sortable table with urgency, assignee, and age columns. Use this when the user wants to review or triage support tickets."
"Updates stuff"
"Updates the status of a single support ticket. Accepts a ticket ID and a new status (open, in_progress, resolved, closed). Use this when the user wants to change a ticket’s state.”
Parameters define the inputs ChatGPT passes to your tool. Each parameter has a name, type, and description.Common parameter patterns:
Pattern
Type
When to use
Example
Free text search
string
The user provides a search query
query: "laptop won't charge"
Category filter
enum
The user picks from a fixed set of options
status: ["open", "closed", "pending"]
Identifier
string
The user references a specific record
order_id: "ORD-4821"
Boolean flag
boolean
The user toggles a behavior on or off
include_archived: true
Numeric value
number
The user provides a count or amount
limit: 25
Keep required parameters minimal. If ChatGPT has to guess a value it does not have, the tool call will fail or return bad results. Make parameters optional when possible, and provide defaults.
The description is your primary lever for reliable behavior. Here is a checklist:
State what the tool does in the first sentence.
List the inputs it expects and what they mean.
Describe the output (JSON fields, widget content).
Say when to use it, and when not to use it if there is a similar tool.
Example of a complete description:
Searches the product catalog by keyword, category, or price range. Returns a list of matching products with name, price, rating, and availability. Use this when the user wants to find or browse products. Do NOT use this for order lookups. Use search_orders instead.
Build interactive widgets that render inside ChatGPT.
Data Tools
Return structured data for ChatGPT to use in conversation.
Styling & Theming
Make your widgets look great with built-in design elements.
Mock Data
Generate realistic test data for your tools.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Chippy","colors":{"primary":"#F97316","light":"#f27964","dark":"#EA580C"},"logo":{"light":"https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/logo/chippy.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=b1d23cda383f7768ad3da9a0a1c023c3","dark":"https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/logo/chippy.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=b1d23cda383f7768ad3da9a0a1c023c3"},"favicon":"/logo/chippy.png","navbar":{"links":[{"href":"https://app.chippy.build","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"https://chippy.build"}},"footer":{"socials":{"github":"https://github.com/colinmatthews/chippy"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chippy-79f04fec","hasAudioNarration":false,"actualSubdomain":"chippy-79f04fec","customDomains":["docs.chippy.build"],"gitSource":{"type":"github","owner":"colinmatthews","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21eaab094e7057e315199d","collectionId":"b5f0b235-2a66-428d-824e-4552e1886032","schemaVersion":"v2"},"entitlements":{},"buildId":"6a21eaab094e7057e315199d:success","clientVersion":"0.0.3894","searchFilterCounts":[{"language":"default","tag":"Documentation","count":28},{"language":"default","tag":"Building Apps","count":7},{"language":"default","tag":"Team \u0026 Billing","count":6},{"language":"default","tag":"Analytics API","count":4},{"language":"default","tag":"Analytics API Reference","count":4},{"language":"default","tag":"Connecting Services","count":4},{"language":"default","tag":"Advanced","count":3},{"language":"default","tag":"Testing \u0026 Quality","count":3},{"language":"default","tag":"Getting Started","count":2},{"language":"default","tag":"Connecting to ChatGPT","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"features/tools","slug":"/features/tools","pageMetadata":{"title":"Tools","description":"The actions your app exposes to ChatGPT","href":"/features/tools","hidden":false},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The actions your app exposes to ChatGPT\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`tools`,children:`Tools`}),`\n`,_jsx(_components.p,{children:`Tools are the actions your app exposes to ChatGPT. Each tool does one job: search orders, show a dashboard, update a record. When a user asks ChatGPT something, ChatGPT picks the right tool, calls it, and returns the result.`}),`\n`,_jsx(Frame,{caption:`Two tools in the builder: a UI tool and a data tool`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=1ebfb5a16cdc42c158344ce7729530a0`,alt:`Builder showing a UI tool and a data tool side by side`,\"data-og-width\":`970`,width:`970`,\"data-og-height\":`1656`,height:`1656`,\"data-path\":`images/tools-overview.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=280\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=9fd9df4c9bc2fe0d6677335545e204b2 280w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=560\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=cb5752447fb5a188368d13116239a193 560w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=840\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=c7703a423b04bca45da13d38fbfdd90c 840w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=1100\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=b31ac8f4129901be21fd8ef173643fde 1100w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=1650\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=75370de214ae4d0d90b3ad96fa8f6f60 1650w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-overview.png?w=2500\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=a777c077d1de8fa7a53164cdca52c317 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`two-types-of-tools`,children:`Two Types of Tools`}),`\n`,_jsx(_components.p,{children:`Every tool falls into one of two categories:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`UI tool`})}),_jsx(_components.td,{children:`Renders a widget inside ChatGPT (tables, cards, forms, charts)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`show_order_dashboard`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Data tool`})}),_jsx(_components.td,{children:`Returns JSON that ChatGPT weaves into its reply`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`search_orders`})})]})]})]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`UI Tools`,icon:`window`,href:`/features/ui-tools`,children:_jsx(_components.p,{children:`Deep dive into building widgets that render inside ChatGPT.`})}),_jsx(Card,{title:`Data Tools`,icon:`database`,href:`/features/data-tools`,children:_jsx(_components.p,{children:`Deep dive into tools that return structured data.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-tool`,children:`Create a Tool`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open your app in the builder`,children:_jsxs(_components.p,{children:[`From the `,_jsx(_components.a,{href:`https://app.chippy.build`,children:`dashboard`}),`, open the app you want to add a tool to.`]})}),_jsxs(Step,{title:`Describe the tool you need`,children:[_jsx(_components.p,{children:`In the builder chat, tell the AI what the tool should do. Be specific about the type (UI or data), the name, and what it accomplishes.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example prompt:`})}),_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Add a UI tool called “order_lookup” that shows a customer’s recent orders in a table. Columns: order number, date, status, and total. Display in side panel mode.`}),`\n`]}),_jsx(Frame,{caption:`Describing a new tool in the builder chat`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=d5f5add8b5706fbf796632dd33c4d4c9`,alt:`Builder chat with a prompt to create a new tool`,\"data-og-width\":`2902`,width:`2902`,\"data-og-height\":`1656`,height:`1656`,\"data-path\":`images/tools-create-prompt.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=280\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=986aaa28cff6fa4d539c9e4c2a1f5d70 280w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=560\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=2ca5f8dd2ae415f641ac0c322cd8f91f 560w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=840\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=27b4378179b328ee1f0866399bc48730 840w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=1100\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=955bb29b6e7c9d9a548ccc2da521fa0e 1100w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=1650\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=e4abe072f71741866ee367f21749be27 1650w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-create-prompt.png?w=2500\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=a53fa4a9169c9b2c18ae49c11703aaab 2500w`})})]}),_jsxs(Step,{title:`Review the generated tool`,children:[_jsx(_components.p,{children:`Chippy creates the tool, including its name, description, parameters, and (for UI tools) the widget code. Review each piece in the tool editor panel.`}),_jsx(Frame,{caption:`The generated tool in the editor`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=16e17e1e7409a85ac5f4b793276a8791`,alt:`Tool editor showing the generated tool configuration`,\"data-og-width\":`2902`,width:`2902`,\"data-og-height\":`1656`,height:`1656`,\"data-path\":`images/tools-generated.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=280\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=598db4844a91d3f1fd539d7551c4c5ba 280w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=560\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=005cf001ac051bf0daf20a316c269ee0 560w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=840\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=9c811a52b7e0d335cef9a1813f143e34 840w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=1100\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=6cbbda2d088df7cf083fcb5973669a8a 1100w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=1650\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=2e42534c0ffaa9a879ea9e4c3b6befeb 1650w, https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/images/tools-generated.png?w=2500\u0026fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=85196fc44e3f8208a2bc8152d708b8aa 2500w`})})]}),_jsx(Step,{title:`Test it in preview`,children:_jsx(_components.p,{children:`Click the tool in the preview panel to run it with mock data. Verify the output looks right before connecting to ChatGPT.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`tool-configuration`,children:`Tool Configuration`}),`\n`,_jsx(_components.p,{children:`Every tool has four key settings you can view and edit:`}),`\n`,_jsx(Heading,{level:`3`,id:`name`,children:`Name`}),`\n`,_jsx(_components.p,{children:`The tool name is what ChatGPT sees in its tool list. Use lowercase with underscores, and make it descriptive.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Verdict`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_data`})}),_jsx(_components.td,{children:`Too vague. ChatGPT will not know when to pick it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`search_support_tickets`})}),_jsx(_components.td,{children:`Clear and specific`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`description`,children:`Description`}),`\n`,_jsxs(_components.p,{children:[`The description tells ChatGPT `,_jsx(_components.strong,{children:`when`}),` to use the tool. This is the single most important field for reliable tool selection.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`ChatGPT reads the description to decide which tool to call. A vague description leads to wrong tool picks. A specific description leads to accurate ones.`})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Before and after examples:`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Before (vague)`}),_jsx(_components.th,{children:`After (specific)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`“Gets order info\"`}),_jsx(_components.td,{children:`\"Searches orders by customer email, order number, or date range. Returns order ID, status, items, and total. Use this when the user asks about a specific order or wants to look up recent purchases.\"`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`\"Shows a dashboard\"`}),_jsx(_components.td,{children:`\"Displays an interactive support ticket dashboard as a fullscreen widget. Shows open tickets in a sortable table with urgency, assignee, and age columns. Use this when the user wants to review or triage support tickets.\"`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`\"Updates stuff\"`}),_jsx(_components.td,{children:`\"Updates the status of a single support ticket. Accepts a ticket ID and a new status (open, in_progress, resolved, closed). Use this when the user wants to change a ticket’s state.”`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`parameters`,children:`Parameters`}),`\n`,_jsx(_components.p,{children:`Parameters define the inputs ChatGPT passes to your tool. Each parameter has a name, type, and description.`}),`\n`,_jsx(_components.p,{children:`Common parameter patterns:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Pattern`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`When to use`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Free text search`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string`})}),_jsx(_components.td,{children:`The user provides a search query`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`query: \"laptop won't charge\"`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Category filter`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`enum`})}),_jsx(_components.td,{children:`The user picks from a fixed set of options`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`status: [\"open\", \"closed\", \"pending\"]`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Identifier`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string`})}),_jsx(_components.td,{children:`The user references a specific record`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`order_id: \"ORD-4821\"`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Boolean flag`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`The user toggles a behavior on or off`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`include_archived: true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Numeric value`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`number`})}),_jsx(_components.td,{children:`The user provides a count or amount`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`limit: 25`})})]})]})]}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Keep required parameters minimal. If ChatGPT has to guess a value it does not have, the tool call will fail or return bad results. Make parameters optional when possible, and provide defaults.`})}),`\n`,_jsx(Heading,{level:`3`,id:`display-mode-ui-tools-only`,children:`Display Mode (UI tools only)`}),`\n`,_jsx(_components.p,{children:`Display mode controls how a UI tool’s widget appears inside ChatGPT:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Mode`}),_jsx(_components.th,{children:`Best for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Side panel`})}),_jsx(_components.td,{children:`Quick lookups, detail views, short forms`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Fullscreen`})}),_jsx(_components.td,{children:`Dashboards, large tables, complex layouts`})]})]})]}),`\n`,_jsx(_components.p,{children:`You can set the display mode in the tool editor, or tell the AI in your prompt:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Make this tool display in fullscreen mode.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`writing-good-tool-descriptions`,children:`Writing Good Tool Descriptions`}),`\n`,_jsx(_components.p,{children:`The description is your primary lever for reliable behavior. Here is a checklist:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`State what the tool does`}),` in the first sentence.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`List the inputs`}),` it expects and what they mean.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Describe the output`}),` (JSON fields, widget content).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Say when to use it`}),`, and when `,_jsx(_components.em,{children:`not`}),` to use it if there is a similar tool.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example of a complete description:`})}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Searches the product catalog by keyword, category, or price range. Returns a list of matching products with name, price, rating, and availability. Use this when the user wants to find or browse products. Do NOT use this for order lookups. Use search_orders instead.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Problem`}),_jsx(_components.th,{children:`Likely cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ChatGPT picks the wrong tool`}),_jsx(_components.td,{children:`Tool descriptions overlap or are too vague`}),_jsx(_components.td,{children:`Rewrite descriptions so each tool has a unique, specific purpose. Add “Do NOT use this for…” clauses to disambiguate.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tool returns unexpected results`}),_jsx(_components.td,{children:`Parameters are misconfigured or descriptions do not match behavior`}),_jsx(_components.td,{children:`Check that parameter types match what the tool actually accepts. Verify the description matches what the tool does.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ChatGPT never picks the tool`}),_jsx(_components.td,{children:`Description does not match how users phrase requests`}),_jsx(_components.td,{children:`Add common phrasings to the description: “Use this when the user asks to look up, search, or find orders.”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tool works in preview but fails from ChatGPT`}),_jsx(_components.td,{children:`Missing API integration or secret`}),_jsxs(_components.td,{children:[`Connect the required API and add secrets in the builder. See `,_jsx(_components.a,{href:`/features/api-integrations`,children:`API Integrations`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Too many tools confuse ChatGPT`}),_jsx(_components.td,{children:`App has overlapping or redundant tools`}),_jsx(_components.td,{children:`Consolidate similar tools. Aim for 3-8 focused tools per app.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`UI Tools`,icon:`window`,href:`/features/ui-tools`,children:_jsx(_components.p,{children:`Build interactive widgets that render inside ChatGPT.`})}),_jsx(Card,{title:`Data Tools`,icon:`database`,href:`/features/data-tools`,children:_jsx(_components.p,{children:`Return structured data for ChatGPT to use in conversation.`})}),_jsx(Card,{title:`Styling \u0026 Theming`,icon:`palette`,href:`/features/styling`,children:_jsx(_components.p,{children:`Make your widgets look great with built-in design elements.`})}),_jsx(Card,{title:`Mock Data`,icon:`flask`,href:`/features/mock-data`,children:_jsx(_components.p,{children:`Generate realistic test data for your tools.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Tools","description":"The actions your app exposes to ChatGPT","href":"/features/tools","hidden":false}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Tools","slug":"tools","depth":1,"children":[]},{"title":"Two Types of Tools","slug":"two-types-of-tools","depth":2,"children":[]},{"title":"Create a Tool","slug":"create-a-tool","depth":2,"children":[]},{"title":"Tool Configuration","slug":"tool-configuration","depth":2,"children":[{"title":"Name","slug":"name","depth":3,"children":[]},{"title":"Description","slug":"description","depth":3,"children":[]},{"title":"Parameters","slug":"parameters","depth":3,"children":[]},{"title":"Display Mode (UI tools only)","slug":"display-mode-ui-tools-only","depth":3,"children":[]}]},{"title":"Writing Good Tool Descriptions","slug":"writing-good-tool-descriptions","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"chippy-79f04fec","siteName":"Chippy","title":"Tools - Chippy","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-11T18:10:12.987Z","originalFileLocation":"features/tools.mdx"},"headHtml":"\u003cmeta data-mint-head name=\"description\" content=\"The actions your app exposes to ChatGPT\">\u003cmeta data-mint-head name=\"application-name\" content=\"Chippy\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Tools - Chippy\">\u003cmeta data-mint-head property=\"og:description\" content=\"The actions your app exposes to ChatGPT\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Chippy\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.chippy.build/features/tools\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Tools - Chippy\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The actions your app exposes to ChatGPT\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/chippy-79f04fec/o69b5NaxT0QFmapJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Chippy\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F97316\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.chippy.build/features/tools\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/tools.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.chippy.build/#organization\",\"name\":\"Chippy\",\"url\":\"https://docs.chippy.build\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/chippy-79f04fec/YuhdLdu07o5ePw0i/logo/chippy.png?fit=max\u0026auto=format\u0026n=YuhdLdu07o5ePw0i\u0026q=85\u0026s=b1d23cda383f7768ad3da9a0a1c023c3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.chippy.build#website\",\"name\":\"Chippy\",\"url\":\"https://docs.chippy.build\",\"publisher\":{\"@id\":\"https://docs.chippy.build/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.chippy.build/features/tools#webpage\",\"url\":\"https://docs.chippy.build/features/tools\",\"name\":\"Tools\",\"description\":\"The actions your app exposes to ChatGPT\",\"dateModified\":\"2026-02-11T18:10:12.987Z\",\"isPartOf\":{\"@id\":\"https://docs.chippy.build#website\"},\"breadcrumb\":{\"@id\":\"https://docs.chippy.build/features/tools#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.chippy.build/features/tools#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Building Apps\",\"item\":\"https://docs.chippy.build/features/builder-chat\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tools\",\"item\":\"https://docs.chippy.build/features/tools\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.chippy.build/features/tools#article\",\"headline\":\"Tools\",\"name\":\"Tools\",\"description\":\"The actions your app exposes to ChatGPT\",\"url\":\"https://docs.chippy.build/features/tools\",\"mainEntityOfPage\":{\"@id\":\"https://docs.chippy.build/features/tools#webpage\"},\"dateModified\":\"2026-02-11T18:10:12.987Z\",\"publisher\":{\"@id\":\"https://docs.chippy.build/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.chippy.build#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Chippy\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Chippy","nav":{"global":{},"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/getting-started/quickstart"}]},{"group":"Building Apps","pages":[{"title":"Builder Chat","description":"How to prompt the AI builder effectively","href":"/features/builder-chat"},{"title":"Tools","href":"/features/tools"},{"title":"UI Tools","description":"Display interactive widgets in ChatGPT","href":"/features/ui-tools"},{"title":"Data Tools","href":"/features/data-tools"},{"title":"Mock Data","href":"/features/mock-data"},{"title":"Styling \u0026 Theming","href":"/features/styling"},{"title":"Images \u0026 Assets","sidebarTitle":"Images","href":"/features/images"}]},{"group":"Connecting Services","pages":[{"title":"API Integrations","href":"/features/api-integrations"},{"title":"Secrets","href":"/features/secrets"},{"title":"OAuth Protection","href":"/features/oauth"},{"title":"GitHub Sync","href":"/features/github-sync"}]},{"group":"Connecting to ChatGPT","pages":[{"title":"Connecting to ChatGPT","href":"/mcp/mcp-connection"},{"title":"How Your App Appears in Chat","href":"/mcp/display-in-chat"}]},{"group":"Testing \u0026 Quality","pages":[{"title":"Preview Testing","href":"/testing/preview-testing"},{"title":"Traces","href":"/observability/traces"},{"title":"Evaluations","href":"/observability/evaluations"}]},{"group":"Analytics","pages":[{"title":"Analytics","href":"/features/analytics"}]},{"group":"Team \u0026 Billing","pages":[{"title":"Organizations","href":"/team/organizations"},{"title":"Roles \u0026 Permissions","href":"/team/roles"},{"title":"Plans \u0026 Pricing","href":"/billing/plans"},{"title":"Manage Subscription","href":"/billing/manage-subscription"},{"title":"Feature Access","href":"/features/feature-access"},{"title":"Audit Logs","href":"/observability/audit-logs"}]},{"group":"Advanced","pages":[{"title":"App Export","href":"/advanced/app-export"},{"title":"Versioning","href":"/advanced/versioning"},{"title":"CSP Controls","href":"/advanced/csp-controls"}]}]},{"tab":"Analytics API","pages":[{"title":"Analytics API","href":"/analytics-api/api-overview"}]}]},"title":"Tools - Chippy","buildId":"dpl_8LJVMfxYNq6LJkohTrn2iyWT8umj","deploymentId":"dpl_8LJVMfxYNq6LJkohTrn2iyWT8umj","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DgIorxK1.js","DynamicMarkdown-43fmNsOD.js","zoom-image-lightbox-D9lJgLSo.js","PlusIcon-C1lem43w.js","lightbox-handle-r17bVUz3.js"]}