
Security News
GitHub Actions Pricing Whiplash: Self-Hosted Actions Billing Change Postponed
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.
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
Website • NPM • MCP Registry
toolsdk provides a powerful API client for programmatic tool execution, with optional React components for building tool configuration UIs. It connects to toolsdk-mcp-registry - a curated registry of 100+ MCP servers and AI tools.
npm install toolsdk
# or
pnpm add toolsdk
# or
yarn add toolsdk
import { ToolSDKApiClient } from 'toolsdk/api';
const client = new ToolSDKApiClient({
apiKey: 'your-api-key'
});
Run a tool with a single method call:
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);
// List tools for a package
const tools = await client.package('github').tools();
import { generateText } from 'ai';
// Get a single tool
const tool = await client.package('github').getAISDKTool('create-issue');
// Or get all tools from a package as a ToolSet
const toolSet = await client.package('github').getAISDKToolSet();
const result = await generateText({
model: yourModel,
tools: toolSet,
prompt: 'Create a GitHub issue for the bug we discussed'
});
const toolSet = await client.package('github').getAISDKToolSet({
configurationInstanceId: 'config-instance-id'
});
// Get tools in OpenAI function calling format
const openAITools = await client.package('github').getOpenAISDKTools();
// Or get a single tool
const tool = await client.package('github').getOpenAISDKTool('create-issue');
// Use with OpenAI SDK
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Create a GitHub issue' }],
tools: openAITools
});
Main API client for server-side or authenticated usage.
const client = new ToolSDKApiClient({ apiKey: 'your-api-key' });
// Package operations
client.packages.pages(params) // List packages with pagination
client.packages.get(key, version?) // Get package info
client.packages.my() // Get your packages (developer)
// Work with a specific package
const pkg = client.package(key, version?, envs?);
pkg.info() // Get package details
pkg.tools() // List available tools
pkg.run(body) // Execute a tool
pkg.getAISDKTool(toolKey) // Get AI SDK tool
pkg.getAISDKToolSet() // Get all tools as ToolSet
pkg.getOpenAISDKTool(toolKey) // Get single OpenAI format tool
pkg.getOpenAISDKTools() // Get all OpenAI format tools
pkg.configuration // Access configuration API
pkg.createInstance(body) // Create package instance
// Configuration management
client.configuration(packageKey, version?)
client.configurationInstance(instanceId)
// Package instance management
client.packageInstance(instanceId)
// Account operations
client.account(accountKey)
// Developer operations
client.developer
| Import Path | Description |
|---|---|
toolsdk/api | API client classes (ToolSDKApiClient, ToolSDKAccountApiClient) |
toolsdk/react | React components (optional) |
toolsdk/types | TypeScript type definitions |
toolsdk/developer | Developer utilities |
toolsdk/utils | Helper functions |
Use pre-built React components to let users configure MCP servers and tools in your application.
React components require React 18+ or 19+:
npm install react react-dom
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> = {
repository: {
render: ({ field, value, onChange }) => (
<MyCustomRepositoryPicker
label={field.label}
value={value as string}
onChange={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>
</>
);
}
<PackageInstanceVORenderer
accountToken="your-account-token"
consumerKey="unique-consumer-key"
options={{
baseURL: 'https://custom-api.toolsdk.ai', // Custom API endpoint
scope: 'ALL_PUBLIC' // Package list scope
}}
onChange={(instance) => console.log(instance)}
/>
MCPServerForm is an alias for PackageInstanceVORenderer:
import { MCPServerForm } from 'toolsdk/react';
// Same usage as PackageInstanceVORenderer
<MCPServerForm
accountToken="your-account-token"
consumerKey="unique-consumer-key"
onChange={(instance) => console.log(instance)}
/>
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.
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.

Security News
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.