> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # registerSwaigFunction > Register a pre-built SwaigFunction instance or a raw function descriptor. [datamap]: /docs/server-sdks/reference/typescript/agents/data-map [define-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-tool [ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base Register a pre-built `SwaigFunction` instance or a raw function descriptor (e.g., from a [`DataMap`][datamap]). Unlike [`defineTool()`][define-tool], this method accepts pre-built objects rather than taking a handler callback. ## **Parameters** **`fn`** `SwaigFunction | Record` — required A `SwaigFunction` instance or a plain object with a `"function"` key. Typically generated by `DataMap.toSwaigFunction()`. --- ## **Returns** [`AgentBase`][ref-agentbase] -- Returns `this` for method chaining. ## **Example** ```typescript {15} import { AgentBase, DataMap, FunctionResult } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'plant-agent', route: '/plants' }); agent.setPromptText('You are a helpful plant care assistant.'); // Create a DataMap that calls a plant API server-side const plantTool = new DataMap('get_plant_info') .description('Get care information for a plant') .parameter('plantId', 'string', 'Plant ID', { required: true }) .webhook('GET', 'https://api.plants.example.com/plants/${args.plantId}') .output(new FunctionResult( 'The plant ${args.plantId} needs ${response.water_schedule} watering.', )); // Register the DataMap as a SWAIG function agent.registerSwaigFunction(plantTool.toSwaigFunction()); await agent.serve(); ``` > Register a pre-built SwaigFunction instance or a raw function descriptor.