
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
ToolSDK.ai - A decentralized Tool SDK for AI Agents. Add automation features and 100+ integrations to your AI apps.
🚀 One SDK to integrate all MCP servers and AI tools
toolsdk provides everything you need to integrate AI tools into your applications - from pre-built React components for tool configuration to a powerful API client for programmatic tool execution.
npm install toolsdk
# or
pnpm add toolsdk
# or
yarn add toolsdk
toolsdk requires React 18+ or 19+ for the React components:
npm install react react-dom
Use pre-built React components to let users configure MCP servers and tools in your application.
The main component for rendering a complete tool configuration form:
import { PackageInstanceVORenderer } from 'toolsdk/react';
function ToolConfigForm() {
return (
<PackageInstanceVORenderer
accountToken="your-account-token"
consumerKey="unique-consumer-key"
onChange={(instance) => {
console.log('Selected package:', instance.package?.name);
console.log('Selected tool:', instance.toolKey);
console.log('Input data:', instance.inputData);
}}
/>
);
}
This component provides:
Pre-populate the form with default selections:
<PackageInstanceVORenderer
accountToken="your-account-token"
consumerKey="unique-consumer-key"
defaultValue={{
packageKey: 'github',
toolKey: 'create-issue',
inputData: {
title: 'Bug Report',
body: 'Description of the issue...'
}
}}
onChange={(instance) => console.log(instance)}
/>
Override default field rendering for specific input types:
import { PackageInstanceVORenderer, type CustomField } from 'toolsdk/react';
const customFields: Record<string, CustomField> = {
// Custom renderer for 'repository' field
repository: {
render: ({ field, value, onChange }) => (
<MyCustomRepositoryPicker
label={field.label}
value={value as string}
onChange={onChange}
/>
)
},
// Custom renderer for 'assignees' field
assignees: {
render: ({ field, value, onChange }) => (
<UserMultiSelect
label={field.label}
selected={value as string[]}
onSelect={onChange}
/>
)
}
};
function ToolConfigForm() {
return (
<PackageInstanceVORenderer
accountToken="your-account-token"
consumerKey="unique-consumer-key"
customFields={customFields}
onChange={(instance) => console.log(instance)}
/>
);
}
Use the ref to validate before submission:
import { useRef } from 'react';
import {
PackageInstanceVORenderer,
type PackageInstanceVORendererRef
} from 'toolsdk/react';
function ToolConfigForm() {
const formRef = useRef<PackageInstanceVORendererRef>(null);
const handleSubmit = async () => {
const isValid = await formRef.current?.validate();
if (isValid) {
// Proceed with form submission
}
};
return (
<>
<PackageInstanceVORenderer
ref={formRef}
accountToken="your-account-token"
consumerKey="unique-consumer-key"
onChange={(instance) => console.log(instance)}
/>
<button onClick={handleSubmit}>Submit</button>
</>
);
}
Use the API client to programmatically interact with MCP servers and execute tools.
import { ToolSDKApiClient } from 'toolsdk/api';
const client = new ToolSDKApiClient({
apiKey: 'your-api-key'
});
Run a tool with a single method call:
// Execute a GitHub tool
const result = await client.package('github').run({
toolKey: 'create-issue',
inputData: {
owner: 'myorg',
repo: 'myrepo',
title: 'Bug Report',
body: 'Description of the issue...'
}
});
console.log('Issue created:', result);
For tools that require OAuth or credentials:
const result = await client.package('github').run({
toolKey: 'create-issue',
configurationInstanceId: 'config-instance-id',
inputData: {
owner: 'myorg',
repo: 'myrepo',
title: 'Bug Report'
}
});
// List all available packages
const packages = await client.packages.pages({
pageNo: 1,
pageSize: 20
});
console.log('Available packages:', packages.data);
// Get package details
const github = await client.package('github').info();
console.log('GitHub tools:', github.tools);
toolsdk provides built-in support for AI SDK tool format:
// Get a single tool for AI SDK
const tool = await client.package('github').getAISDKTool('create-issue');
// Get all tools from a package as a ToolSet
const toolSet = await client.package('github').getAISDKToolSet();
// Use with Vercel AI SDK
import { generateText } from 'ai';
const result = await generateText({
model: yourModel,
tools: toolSet,
prompt: 'Create a GitHub issue for the bug we discussed'
});
// Get tools in OpenAI function calling format
const openAITools = await client.package('github').getOpenAISDKTools();
// Use with OpenAI SDK
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Create a GitHub issue' }],
tools: openAITools
});
| Import Path | Description |
|---|---|
toolsdk/api | API client classes (ToolSDKApiClient, ToolSDKAccountApiClient) |
toolsdk/react | React components (PackageInstanceVORenderer, MCPServerForm) |
toolsdk/types | TypeScript type definitions (VO, DTO, BO types) |
toolsdk/developer | Developer utilities |
toolsdk/utils | Helper functions |
Main API client for server-side or authenticated usage.
const client = new ToolSDKApiClient({ apiKey: 'your-api-key' });
// Access packages
client.packages.pages(params) // List packages
client.packages.get(key, version) // Get package info
client.packages.my() // Get your packages
// Work with a specific package
client.package(key, version?, envs?)
.info() // Get package details
.tools() // List available tools
.run(body) // Execute a tool
.getAISDKTool(toolKey) // Get AI SDK tool
.getAISDKToolSet() // Get all tools as ToolSet
.getOpenAISDKTools() // Get OpenAI format tools
Contributions are welcome! Please feel free to submit a Pull Request.
MIT © toolsdk.ai
FAQs
ToolSDK.ai - A decentralized Tool SDK for AI Agents. Add automation features and 100+ integrations to your AI apps.
The npm package toolsdk receives a total of 210 weekly downloads. As such, toolsdk popularity was classified as not popular.
We found that toolsdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.