Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.
Tools give an agent access to external data or actions. They are configured per AI Agent stage. The available fields come from the tool type’s configuration schema; fields marked with an asterisk are required. The model decides whether to call a tool, so verify behavior with a real test rather than assuming it will always call one.
Open Workflows, select a workflow and an AI Agent stage, and open the stage’s Tools tab.
Select Add Tool, expand the new tool card, and choose a Tool type. Give it a distinct Name (label) and fill in the displayed configuration fields. Array fields accept comma-separated entries; object fields require valid JSON.
Configure the endpoint and any required credentials using values approved for your deployment. Addresses must be reachable from the service executing the agent, not merely from your browser. Review the network, data access, and effect of every tool.
Select Save on the stage. Ask a non-sensitive test question that requires the tool. Inspect the response and tool-call activity; diagnose connectivity, credentials, permissions, and model tool-calling support if it fails.
Start the optional search Compose profile, if approved for your deployment. Add Web Search, set base_url to http://searxng:8080, num_results to 5, and search_type to web. Save the stage and ask a question requiring current public information. Search queries are sent to the configured search service and its upstream providers. Use Web Scraper separately when page-content retrieval is needed.
Start and configure Qdrant and a compatible embedding provider. Add Vector Database, set url to http://qdrant:6333, enter an existing collection_name, set top_k to 5, and choose the same compatible embedding model used to populate the collection. Populate the collection before testing. An empty collection, incompatible vector dimensions, or a provider/model mismatch will prevent useful results.
Choose MCP Server (Streamable HTTP), MCP Server (SSE), MCP Server (HTTP), or MCP Server (stdio) according to the server’s transport. Enter the endpoint or command and relevant arguments, authentication and timeout, then select Discover Tools.For Streamable HTTP, select the discovered tools the agent may use and save the stage; discovery alone does not select them. For the other transports, select a discovered tool to fill its name and schema, or configure the tool name and discovery options as appropriate. Re-discover and save when server tools change. The stdio command runs in the Weles execution environment; only use trusted servers and commands. Protect credentials and restrict access to approved services.
This catalogue reflects the application build; the tool picker is authoritative for the deployed version. Defaults below are application defaults, not a guarantee that a service is running.
Tool type
Purpose and key settings
web_search
Search using SearXNG-compatible service. base_url, num_results, search_type (web, images, or web+images).
web_scraper
Retrieve readable page content using the scraper service. service_url, timeout.
Run SELECT queries. Required connection_string; optional table, columns, max_rows. Use a database account with read-only permissions.
http_request
Make HTTP requests. Optional fixed url and method, plus headers, param_schema, query_mapping, static_query, static_body, and timeout. Without a fixed URL, the agent can choose one.
redis_cache
Read or write Redis values. Configure host, port, and ttl.
file_reader
Read text files using a configured base_path in the executing environment. Do not rely on this setting alone as a filesystem security boundary.
python_eval
Execute Python with a restricted set of built-ins and allowed_modules. Do not treat this as a secure isolation boundary.
email_sender
Send SMTP messages. Required smtp_host and from_addr; configure smtp_port, username, and password as needed.
mcp_server
Legacy HTTP JSON-RPC MCP integration. Required endpoint; configure tool_name, auto_discover, timeout, headers, auth_type, and auth_value as appropriate.
mcp_sse
MCP over SSE. Required endpoint; similar selection, timeout and authentication settings.
mcp_stdio
MCP subprocess over standard input/output. Required command; configure args, env, tool_name, auto_discover, timeout, and startup_timeout.
Tools can disclose data, access internal services, execute code, or perform external actions such as sending email or HTTP requests. Use least-privilege credentials, restrict network egress and filesystem access, and review tool configurations. SQL table restrictions and Python’s restricted execution are not substitutes for database permissions and OS/container isolation. Avoid enabling dangerous tools for untrusted workloads.
For an AI-oriented package schema and complete HTTP, MCP, and agent workflow examples, see Create Tool Manager packages.In Tool Manager, select Install Tool. Browse the available packages or import a trusted package from JSON, a file, or a URL; review its type, endpoint, permissions, required secrets, and schema before installing. The JSON import requires name, slug, and type; supported types include http, mcp_server, mcp_sse, mcp_stdio, and mcp_streamable_http. The slug uses lowercase letters, digits, and underscores. Enable the installed package, then select it from the agent stage’s tool picker, where it is marked Custom. Installing a package does not automatically add it to an agent.For installed packages that declare secrets, configure the named entries under Secrets. Names must start with an uppercase letter and contain only uppercase letters, digits, and underscores. The package can refer to a vault secret with a double-braced name, for example {{SERVICE_TOKEN}}; verify that the package’s required secrets are configured before testing. Secrets Vault values are encrypted using SECRET_ENCRYPTION_KEY; preserve this key securely. This substitution applies to installed tool package configuration; do not assume it applies to provider keys or every built-in tool field. Test with non-sensitive data, and do not expose credentials in examples or logs.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Weles Documentation","description":"Weles documentation: deploy and operate an on-premises AI assistant platform for company knowledge, AI agent workflows, intelligent document processing, and OCR.","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807","dark":"https://mintcdn.com/weles-ai/XixGqBqwYLWYtsXP/images/logo-white.svg?fit=max\u0026auto=format\u0026n=XixGqBqwYLWYtsXP\u0026q=85\u0026s=507bcc794d6e5ec0cd503590b4227e97","href":"https://welesai.com"},"favicon":{"light":"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807","dark":"https://mintcdn.com/weles-ai/XixGqBqwYLWYtsXP/images/logo-white.svg?fit=max\u0026auto=format\u0026n=XixGqBqwYLWYtsXP\u0026q=85\u0026s=507bcc794d6e5ec0cd503590b4227e97"},"navbar":{"links":[{"href":"mailto:support@welesai.com","label":"Support"}],"primary":{"type":"button","label":"Weles","href":"https://welesai.com"}},"seo":{"metatags":{"keywords":"Weles, WelesAI, on-premises AI, AI assistant, AI agents, agent workflows, intelligent document processing, IDP, OCR, LLM, self-hosted AI","author":"WelesAI","robots":"index, follow","og:locale":"en_US","theme-color":"#16A34A"}},"icons":{"library":"fontawesome"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"weles-ai","hasAudioNarration":false,"actualSubdomain":"weles-ai","customDomains":["docs.welesai.com"],"gitSource":{"type":"artifacts","owner":"prod","repo":"6af1e377576b5817482d859e","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6af1e407332b36706b716649"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af24f2eddd7e7bcd0c78922","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Administration","count":6},{"language":"default","tag":"Workflows","count":5},{"language":"default","tag":"For AI Agents","count":3},{"language":"default","tag":"Getting Started","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"support-platform-pylon-zendesk","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":"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":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"fork-pr-previews","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":"workos-sso-scim","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},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img.nav-logo{height:4rem!important;width:auto!important}#navbar{padding-top:0.5rem;padding-bottom:0.5rem}a:has(>img.nav-logo){display:flex!important;align-items:center;gap:0.5rem}a:has(>img.nav-logo)::after{content:\"Weles\";font-size:1.5rem;font-weight:700;line-height:1;color:#111827}html.dark a:has(>img.nav-logo)::after{color:#ffffff}"}],"page":{"pagePath":"workflows/agent-tools","slug":"/workflows/agent-tools","pageMetadata":{"title":"Add and configure agent tools","description":"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.","keywords":["AI agent tools","tool calling","custom tools","Weles agents"],"href":"/workflows/agent-tools"},"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: \"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\"\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`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Tools give an agent access to external data or actions. They are configured per `,_jsx(_components.strong,{children:`AI Agent`}),` stage. The available fields come from the tool type’s configuration schema; fields marked with an asterisk are required. The model decides whether to call a tool, so verify behavior with a real test rather than assuming it will always call one.`]}),`\n`,_jsx(Heading,{level:`2`,id:`add-a-built-in-tool-to-a-stage`,children:`Add a built-in tool to a stage`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.strong,{children:`Workflows`}),`, select a workflow and an `,_jsx(_components.strong,{children:`AI Agent`}),` stage, and open the stage’s `,_jsx(_components.strong,{children:`Tools`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Add Tool`}),`, expand the new tool card, and choose a `,_jsx(_components.strong,{children:`Tool type`}),`. Give it a distinct `,_jsx(_components.strong,{children:`Name (label)`}),` and fill in the displayed configuration fields. Array fields accept comma-separated entries; object fields require valid JSON.`]}),`\n`,_jsx(_components.li,{children:`Configure the endpoint and any required credentials using values approved for your deployment. Addresses must be reachable from the service executing the agent, not merely from your browser. Review the network, data access, and effect of every tool.`}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Save`}),` on the stage. Ask a non-sensitive test question that requires the tool. Inspect the response and tool-call activity; diagnose connectivity, credentials, permissions, and model tool-calling support if it fails.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`example-web-search`,children:`Example: web search`}),`\n`,_jsxs(_components.p,{children:[`Start the optional `,_jsx(_components.code,{children:`search`}),` Compose profile, if approved for your deployment. Add `,_jsx(_components.strong,{children:`Web Search`}),`, set `,_jsx(_components.code,{children:`base_url`}),` to `,_jsx(_components.code,{children:`http://searxng:8080`}),`, `,_jsx(_components.code,{children:`num_results`}),` to `,_jsx(_components.code,{children:`5`}),`, and `,_jsx(_components.code,{children:`search_type`}),` to `,_jsx(_components.code,{children:`web`}),`. Save the stage and ask a question requiring current public information. Search queries are sent to the configured search service and its upstream providers. Use `,_jsx(_components.strong,{children:`Web Scraper`}),` separately when page-content retrieval is needed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`example-vector-search`,children:`Example: vector search`}),`\n`,_jsxs(_components.p,{children:[`Start and configure Qdrant and a compatible embedding provider. Add `,_jsx(_components.strong,{children:`Vector Database`}),`, set `,_jsx(_components.code,{children:`url`}),` to `,_jsx(_components.code,{children:`http://qdrant:6333`}),`, enter an existing `,_jsx(_components.code,{children:`collection_name`}),`, set `,_jsx(_components.code,{children:`top_k`}),` to `,_jsx(_components.code,{children:`5`}),`, and choose the same compatible embedding model used to populate the collection. Populate the collection before testing. An empty collection, incompatible vector dimensions, or a provider/model mismatch will prevent useful results.`]}),`\n`,_jsx(Heading,{level:`2`,id:`mcp-tools`,children:`MCP tools`}),`\n`,_jsxs(_components.p,{children:[`Choose `,_jsx(_components.strong,{children:`MCP Server (Streamable HTTP)`}),`, `,_jsx(_components.strong,{children:`MCP Server (SSE)`}),`, `,_jsx(_components.strong,{children:`MCP Server (HTTP)`}),`, or `,_jsx(_components.strong,{children:`MCP Server (stdio)`}),` according to the server’s transport. Enter the endpoint or command and relevant arguments, authentication and timeout, then select `,_jsx(_components.strong,{children:`Discover Tools`}),`.`]}),`\n`,_jsx(_components.p,{children:`For Streamable HTTP, select the discovered tools the agent may use and save the stage; discovery alone does not select them. For the other transports, select a discovered tool to fill its name and schema, or configure the tool name and discovery options as appropriate. Re-discover and save when server tools change. The stdio command runs in the Weles execution environment; only use trusted servers and commands. Protect credentials and restrict access to approved services.`}),`\n`,_jsx(Heading,{level:`2`,id:`available-built-in-tool-types`,children:`Available built-in tool types`}),`\n`,_jsx(_components.p,{children:`This catalogue reflects the application build; the tool picker is authoritative for the deployed version. Defaults below are application defaults, not a guarantee that a service is running.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool type`}),_jsx(_components.th,{children:`Purpose and key settings`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`web_search`})}),_jsxs(_components.td,{children:[`Search using SearXNG-compatible service. `,_jsx(_components.code,{children:`base_url`}),`, `,_jsx(_components.code,{children:`num_results`}),`, `,_jsx(_components.code,{children:`search_type`}),` (`,_jsx(_components.code,{children:`web`}),`, `,_jsx(_components.code,{children:`images`}),`, or `,_jsx(_components.code,{children:`web+images`}),`).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`web_scraper`})}),_jsxs(_components.td,{children:[`Retrieve readable page content using the scraper service. `,_jsx(_components.code,{children:`service_url`}),`, `,_jsx(_components.code,{children:`timeout`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`vector_db`})}),_jsxs(_components.td,{children:[`Search Qdrant. Required `,_jsx(_components.code,{children:`collection_name`}),`; configure `,_jsx(_components.code,{children:`url`}),`, `,_jsx(_components.code,{children:`top_k`}),`, `,_jsx(_components.code,{children:`embedding_model`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`knowledge_graph`})}),_jsxs(_components.td,{children:[`Query Neo4j. Required `,_jsx(_components.code,{children:`bolt_uri`}),`, `,_jsx(_components.code,{children:`password`}),`; optional `,_jsx(_components.code,{children:`user`}),`, `,_jsx(_components.code,{children:`database`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sql_table`})}),_jsxs(_components.td,{children:[`Run SELECT queries. Required `,_jsx(_components.code,{children:`connection_string`}),`; optional `,_jsx(_components.code,{children:`table`}),`, `,_jsx(_components.code,{children:`columns`}),`, `,_jsx(_components.code,{children:`max_rows`}),`. Use a database account with read-only permissions.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`http_request`})}),_jsxs(_components.td,{children:[`Make HTTP requests. Optional fixed `,_jsx(_components.code,{children:`url`}),` and `,_jsx(_components.code,{children:`method`}),`, plus `,_jsx(_components.code,{children:`headers`}),`, `,_jsx(_components.code,{children:`param_schema`}),`, `,_jsx(_components.code,{children:`query_mapping`}),`, `,_jsx(_components.code,{children:`static_query`}),`, `,_jsx(_components.code,{children:`static_body`}),`, and `,_jsx(_components.code,{children:`timeout`}),`. Without a fixed URL, the agent can choose one.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`redis_cache`})}),_jsxs(_components.td,{children:[`Read or write Redis values. Configure `,_jsx(_components.code,{children:`host`}),`, `,_jsx(_components.code,{children:`port`}),`, and `,_jsx(_components.code,{children:`ttl`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`file_reader`})}),_jsxs(_components.td,{children:[`Read text files using a configured `,_jsx(_components.code,{children:`base_path`}),` in the executing environment. Do not rely on this setting alone as a filesystem security boundary.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`python_eval`})}),_jsxs(_components.td,{children:[`Execute Python with a restricted set of built-ins and `,_jsx(_components.code,{children:`allowed_modules`}),`. Do not treat this as a secure isolation boundary.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`email_sender`})}),_jsxs(_components.td,{children:[`Send SMTP messages. Required `,_jsx(_components.code,{children:`smtp_host`}),` and `,_jsx(_components.code,{children:`from_addr`}),`; configure `,_jsx(_components.code,{children:`smtp_port`}),`, `,_jsx(_components.code,{children:`username`}),`, and `,_jsx(_components.code,{children:`password`}),` as needed.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mcp_server`})}),_jsxs(_components.td,{children:[`Legacy HTTP JSON-RPC MCP integration. Required `,_jsx(_components.code,{children:`endpoint`}),`; configure `,_jsx(_components.code,{children:`tool_name`}),`, `,_jsx(_components.code,{children:`auto_discover`}),`, `,_jsx(_components.code,{children:`timeout`}),`, `,_jsx(_components.code,{children:`headers`}),`, `,_jsx(_components.code,{children:`auth_type`}),`, and `,_jsx(_components.code,{children:`auth_value`}),` as appropriate.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mcp_sse`})}),_jsxs(_components.td,{children:[`MCP over SSE. Required `,_jsx(_components.code,{children:`endpoint`}),`; similar selection, timeout and authentication settings.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mcp_stdio`})}),_jsxs(_components.td,{children:[`MCP subprocess over standard input/output. Required `,_jsx(_components.code,{children:`command`}),`; configure `,_jsx(_components.code,{children:`args`}),`, `,_jsx(_components.code,{children:`env`}),`, `,_jsx(_components.code,{children:`tool_name`}),`, `,_jsx(_components.code,{children:`auto_discover`}),`, `,_jsx(_components.code,{children:`timeout`}),`, and `,_jsx(_components.code,{children:`startup_timeout`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mcp_streamable_http`})}),_jsxs(_components.td,{children:[`MCP Streamable HTTP. Required `,_jsx(_components.code,{children:`endpoint`}),`; configure `,_jsx(_components.code,{children:`timeout`}),`, `,_jsx(_components.code,{children:`headers`}),`, authentication, discover and select allowed tools.`]})]})]})]}),`\n`,_jsx(Warning,{children:`Tools can disclose data, access internal services, execute code, or perform external actions such as sending email or HTTP requests. Use least-privilege credentials, restrict network egress and filesystem access, and review tool configurations. SQL table restrictions and Python’s restricted execution are not substitutes for database permissions and OS/container isolation. Avoid enabling dangerous tools for untrusted workloads.`}),`\n`,_jsx(Heading,{level:`2`,id:`install-a-custom-tool-package`,children:`Install a custom tool package`}),`\n`,_jsxs(_components.p,{children:[`For an AI-oriented package schema and complete HTTP, MCP, and agent workflow examples, see `,_jsx(_components.a,{href:`/ai-agents/tool-packages`,children:`Create Tool Manager packages`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Tool Manager`}),`, select `,_jsx(_components.strong,{children:`Install Tool`}),`. Browse the available packages or import a trusted package from JSON, a file, or a URL; review its type, endpoint, permissions, required secrets, and schema before installing. The JSON import requires `,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`slug`}),`, and `,_jsx(_components.code,{children:`type`}),`; supported types include `,_jsx(_components.code,{children:`http`}),`, `,_jsx(_components.code,{children:`mcp_server`}),`, `,_jsx(_components.code,{children:`mcp_sse`}),`, `,_jsx(_components.code,{children:`mcp_stdio`}),`, and `,_jsx(_components.code,{children:`mcp_streamable_http`}),`. The slug uses lowercase letters, digits, and underscores. Enable the installed package, then select it from the agent stage’s tool picker, where it is marked `,_jsx(_components.strong,{children:`Custom`}),`. Installing a package does not automatically add it to an agent.`]}),`\n`,_jsxs(_components.p,{children:[`For installed packages that declare secrets, configure the named entries under `,_jsx(_components.strong,{children:`Secrets`}),`. Names must start with an uppercase letter and contain only uppercase letters, digits, and underscores. The package can refer to a vault secret with a double-braced name, for example `,_jsx(_components.code,{children:`{{SERVICE_TOKEN}}`}),`; verify that the package’s required secrets are configured before testing. Secrets Vault values are encrypted using `,_jsx(_components.code,{children:`SECRET_ENCRYPTION_KEY`}),`; preserve this key securely. This substitution applies to installed tool package configuration; do not assume it applies to provider keys or every built-in tool field. Test with non-sensitive data, and do not expose credentials in examples or logs.`]})]})}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":"Add and configure agent tools","description":"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.","keywords":["AI agent tools","tool calling","custom tools","Weles agents"],"href":"/workflows/agent-tools"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Add a built-in tool to a stage","slug":"add-a-built-in-tool-to-a-stage","depth":2,"children":[{"title":"Example: web search","slug":"example-web-search","depth":3,"children":[]},{"title":"Example: vector search","slug":"example-vector-search","depth":3,"children":[]}]},{"title":"MCP tools","slug":"mcp-tools","depth":2,"children":[]},{"title":"Available built-in tool types","slug":"available-built-in-tool-types","depth":2,"children":[]},{"title":"Install a custom tool package","slug":"install-a-custom-tool-package","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"weles-ai","siteName":"Weles Documentation","title":"Add and configure agent tools - Weles Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T22:54:40.279Z","originalFileLocation":"workflows/agent-tools.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\">\u003cmeta data-mint-head name=\"keywords\" content=\"Weles, WelesAI, on-premises AI, AI assistant, AI agents, agent workflows, intelligent document processing, IDP, OCR, LLM, self-hosted AI\">\u003cmeta data-mint-head name=\"application-name\" content=\"Weles Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Add and configure agent tools - Weles Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Weles Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.welesai.com/workflows/agent-tools\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://weles-ai.mintlify.site/_mintlify/api/og/v2?division=Workflows\u0026amp;title=Add+and+configure+agent+tools\u0026amp;description=Add+and+configure+built-in+and+custom+tools+for+a+Weles+AI+agent+stage+so+agents+can+access+external+data+and+perform+actions.\u0026amp;theme=6e7c9dd4f0cf6ebab663dfed\u0026amp;signature=20d00714b5254e48c67c21627a3dce200d1da9f46611085cce7d4113c259b7ec\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Add and configure agent tools - Weles Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://weles-ai.mintlify.site/_mintlify/api/og/v2?division=Workflows\u0026amp;title=Add+and+configure+agent+tools\u0026amp;description=Add+and+configure+built-in+and+custom+tools+for+a+Weles+AI+agent+stage+so+agents+can+access+external+data+and+perform+actions.\u0026amp;theme=6e7c9dd4f0cf6ebab663dfed\u0026amp;signature=20d00714b5254e48c67c21627a3dce200d1da9f46611085cce7d4113c259b7ec\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Weles Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"author\" content=\"WelesAI\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.welesai.com/workflows/agent-tools\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/workflows/agent-tools.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.welesai.com/#organization\",\"name\":\"Weles Documentation\",\"url\":\"https://docs.welesai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.welesai.com#website\",\"name\":\"Weles Documentation\",\"url\":\"https://docs.welesai.com\",\"publisher\":{\"@id\":\"https://docs.welesai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.welesai.com/workflows/agent-tools#webpage\",\"url\":\"https://docs.welesai.com/workflows/agent-tools\",\"name\":\"Add and configure agent tools\",\"description\":\"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\",\"dateModified\":\"2026-11-09T22:54:40.279Z\",\"isPartOf\":{\"@id\":\"https://docs.welesai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.welesai.com/workflows/agent-tools#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.welesai.com/workflows/agent-tools#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Workflows\",\"item\":\"https://docs.welesai.com/workflows/document-types\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add and configure agent tools\",\"item\":\"https://docs.welesai.com/workflows/agent-tools\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.welesai.com/workflows/agent-tools#article\",\"headline\":\"Add and configure agent tools\",\"name\":\"Add and configure agent tools\",\"description\":\"Add and configure built-in and custom tools for a Weles AI agent stage so agents can access external data and perform actions.\",\"url\":\"https://docs.welesai.com/workflows/agent-tools\",\"mainEntityOfPage\":{\"@id\":\"https://docs.welesai.com/workflows/agent-tools#webpage\"},\"dateModified\":\"2026-11-09T22:54:40.279Z\",\"keywords\":\"AI agent tools, tool calling, custom tools, Weles agents\",\"publisher\":{\"@id\":\"https://docs.welesai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.welesai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Weles Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Weles Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/workflows/agent-tools.md","siteName":"Weles Documentation","nav":{"global":null,"pages":[{"group":"Getting Started","pages":[{"title":"Welcome to Weles","sidebarTitle":"Introduction","href":"/index"},{"title":"Install from production images","sidebarTitle":"Production installation","href":"/quickstart"},{"title":"Using Weles","href":"/guides/using-weles"}]},{"group":"Administration","pages":[{"title":"Configuration and first setup","href":"/administration/configuration"},{"title":"Licensing","href":"/administration/licensing"},{"title":"Troubleshooting","href":"/administration/troubleshooting"},{"title":"Configure AI providers","href":"/administration/llm-providers"},{"title":"Dashboard","href":"/administration/dashboard"},{"title":"Administration areas","href":"/administration/application-areas"}]},{"group":"Workflows","pages":[{"title":"Create document types","href":"/workflows/document-types"},{"title":"Create your first workflow","href":"/workflows/first-workflow"},{"title":"Build an agent workflow","description":"Build an agent-only (API) workflow in Weles: choose a model, add tools and variables, run it from Chat, and invoke it through the API.","href":"/workflows/agent-workflow"},{"title":"Add and configure agent tools","href":"/workflows/agent-tools"},{"title":"Workflow stages reference","description":"Understand each stage and the settings available in the Workflow Builder.","href":"/workflows/stages"}]},{"group":"For AI Agents","pages":[{"title":"Start here: building Weles with AI","href":"/ai-agents/start-here"},{"title":"Generate workflow imports with AI","sidebarTitle":"Generate workflow imports","href":"/workflows/ai-generated-imports"},{"title":"Create Tool Manager packages","href":"/ai-agents/tool-packages"}]}]},"basePath":"","title":"Add and configure agent tools - Weles Documentation","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":[],"chunks":[]}