MCPcopy
hub / github.com/alpic-ai/skybridge / useCallTool

Function useCallTool

packages/core/src/web/hooks/use-call-tool.ts:143–236  ·  view source on GitHub ↗
(
  name: string,
)

Source from the content-addressed store, hash-verified

141 * @see https://docs.skybridge.tech/api-reference/use-call-tool
142 */
143export const useCallTool = <
144 ToolArgs extends CallToolArgs = null,
145 ToolResponse extends Partial<ToolResponseSignature> = Record<string, never>,
146>(
147 name: string,
148) => {
149 type CombinedCallToolResponse = CallToolResponse & ToolResponse;
150
151 const [{ status, data, error }, setCallToolState] = useState<
152 Omit<
153 CallToolState<CombinedCallToolResponse>,
154 "isIdle" | "isPending" | "isSuccess" | "isError"
155 >
156 >({ status: "idle", data: undefined, error: undefined });
157
158 const callIdRef = useRef(0);
159 const adaptor = getAdaptor();
160
161 const execute = async (
162 toolArgs: ToolArgs,
163 ): Promise<CombinedCallToolResponse> => {
164 const callId = ++callIdRef.current;
165 setCallToolState({ status: "pending", data: undefined, error: undefined });
166
167 try {
168 const data = await adaptor.callTool<ToolArgs, CombinedCallToolResponse>(
169 name,
170 toolArgs,
171 );
172 if (callId === callIdRef.current) {
173 setCallToolState({ status: "success", data, error: undefined });
174 }
175
176 return data;
177 } catch (error) {
178 if (callId === callIdRef.current) {
179 setCallToolState({ status: "error", data: undefined, error });
180 }
181 throw error;
182 }
183 };
184
185 const callToolAsync = ((toolArgs?: ToolArgs) => {
186 if (toolArgs === undefined) {
187 return execute(null as ToolArgs);
188 }
189 return execute(toolArgs);
190 }) as CallToolAsyncFn<ToolArgs, CombinedCallToolResponse>;
191
192 const callTool = ((
193 firstArg?: ToolArgs | SideEffects<ToolArgs, CombinedCallToolResponse>,
194 sideEffects?: SideEffects<ToolArgs, CombinedCallToolResponse>,
195 ) => {
196 let toolArgs: ToolArgs;
197 if (
198 firstArg &&
199 typeof firstArg === "object" &&
200 ("onSuccess" in firstArg ||

Callers 5

generateHelpersFunction · 0.50
ToolCallFunction · 0.50

Calls 2

getAdaptorFunction · 0.85
executeFunction · 0.85

Tested by

no test coverage detected