AI Function Call Plugins & Tools for SperaxOS Source: github.com/nirholas/plugin.delivery
The plugin.delivery host is offline while hosting is being migrated. The https://plugin.delivery/... URLs in the manifests below are the canonical plugin identifiers and will resolve again once the migration completes; the plugin catalog itself ships in this repository under public/.
📚 Docs • 🚀 Quick Start • 📦 Templates • 🎨 Plugin Types • 🔧 Development
AI plugin marketplace. SDK, gateway & developer tools for building function-calling plugins. OpenAPI compatible, multi-language support, Vercel edge deployment. Build chat plugins, AI tools & extensions. Primary use in cryptocurrency, DeFI, crypto trading, and blockchain analytics. Compatible with ERC-8004 agents.
| Feature | Description |
|---|---|
| 📋 Plugin Index | JSON registry of AI-discoverable plugins |
| ⚡ Gateway Service | Secure proxy routing function calls to plugin APIs |
| 🛠️ SDK | TypeScript SDK for building custom plugins |
| 🎨 Templates | 6 starter templates for different plugin types |
| 🌍 i18n | 18 languages supported out of the box |
User: "What's the price of ETH?"
│
▼
┌─────────────────────────────────────────────────────────┐
│ SperaxOS discovers plugin from plugin.delivery index │
│ AI generates function call: getPrice(coin: "ethereum") │
│ Gateway routes request to CoinGecko API │
│ Response rendered in chat (JSON, Markdown, or UI) │
└─────────────────────────────────────────────────────────┘
│
▼
AI: "ETH is currently trading at $3,450..."
SperaxOS supports 4 distinct plugin types, each optimized for different use cases:
| Type | Rendering | Best For | Complexity |
|---|---|---|---|
| Default | Server-rendered JSON → AI formats | Data APIs, lookups | ⭐ Simple |
| Markdown | Pre-formatted rich text | Documentation, reports | ⭐ Simple |
| Standalone | Full React/HTML app in iframe | Interactive dashboards | ⭐⭐⭐ Advanced |
| OpenAPI | Auto-generated from spec | Existing APIs | ⭐⭐ Medium |
Returns JSON data that the AI formats into natural language.
{
"ui": {
"mode": "default"
}
}Use when: You have an API that returns structured data and want the AI to explain results conversationally.
Returns pre-formatted Markdown that displays directly in chat.
{
"ui": {
"mode": "markdown"
}
}Use when: You want full control over formatting — tables, code blocks, headers, etc.
Embeds a full React/HTML application in an iframe within the chat.
{
"ui": {
"mode": "standalone",
"url": "https://your-plugin.com/ui",
"height": 400
}
}Use when: You need rich interactivity — charts, forms, dashboards, embedded apps.
💡 Standalone plugins are SperaxOS's superpower — they enable experiences beyond what ChatGPT plugins can do.
Auto-generated from an OpenAPI 3.x specification. No custom code needed.
{
"openapi": "https://your-api.com/openapi.json"
}Use when: You already have an OpenAPI spec for your API.
Artifacts are rich interactive content that plugins can render directly in chat. Unlike plain text responses, artifacts can include:
- 📊 Charts & Visualizations (Chart.js, Recharts, D3)
- 📝 Interactive Forms (Input fields, buttons, selectors)
- 🎮 Mini Applications (Games, calculators, tools)
- 📄 Rich Documents (Formatted reports, tables)
Render raw HTML directly:
// In your plugin API response
return {
type: 'html',
content: `
<div style="padding: 20px;">
<h2>Price Alert</h2>
<p>ETH crossed $3,500!</p>
</div>
`
};Render React components (standalone plugins):
// ui/page.tsx
export default function PriceChart({ data }) {
return (
<div className="p-4">
<LineChart data={data}>
<Line dataKey="price" stroke="#22c55e" />
</LineChart>
</div>
);
}Embed external content:
{
"ui": {
"mode": "standalone",
"url": "https://tradingview.com/chart/?symbol=BTCUSD",
"height": 500
}
}Standalone plugins can trigger additional function calls:
import { speraxOS } from '@sperax/plugin-sdk/client';
// Trigger a new function call from your UI
speraxOS.triggerFunctionCall({
name: 'getTokenDetails',
arguments: { token: 'ETH' }
});Get started fast with our official templates:
| Template | Type | Description | Use Case |
|---|---|---|---|
| basic | Default | Standard plugin with API endpoint | Simple data lookups |
| default | Default | Plugin with settings UI | Configurable plugins |
| markdown | Markdown | Rich text output | Formatted reports |
| openapi | OpenAPI | Auto-generated from spec | Existing APIs |
| settings | Default | Plugin with user preferences | Personalized tools |
| standalone | Standalone | Full React application | Interactive dashboards |
# Clone template to new directory
cp -r templates/standalone my-plugin
cd my-plugin
# Install dependencies
bun install
# Start development
bun devtemplates/standalone/
├── public/
│ └── manifest.json # Plugin manifest
├── src/
│ ├── api/ # API endpoints
│ │ └── index.ts # Main handler
│ └── ui/ # React UI (standalone only)
│ └── page.tsx # UI component
├── package.json
└── README.md
The SDK is not published to the npm registry yet. Install it from a clone of this repository:
git clone https://github.com/nirholas/plugin.delivery.git
cd plugin.delivery
pnpm install@sperax/plugin-sdk and @sperax/chat-plugins-gateway then resolve as workspace packages (see pnpm-workspace.yaml).
{
"$schema": "https://plugin.delivery/schema.json",
"identifier": "my-crypto-plugin",
"api": [
{
"name": "getPrice",
"description": "Get cryptocurrency price",
"url": "https://my-plugin.vercel.app/api/price",
"parameters": {
"type": "object",
"properties": {
"coin": {
"type": "string",
"description": "Coin ID (e.g., bitcoin, ethereum)"
}
},
"required": ["coin"]
}
}
],
"meta": {
"title": "My Crypto Plugin",
"description": "Get real-time crypto prices",
"avatar": "🪙",
"tags": ["crypto", "prices"]
}
}// api/price.ts
export default async function handler(req: Request) {
const { coin } = await req.json();
const res = await fetch(
`https://api.coingecko.com/api/v3/simple/price?ids=${coin}&vs_currencies=usd`
);
const data = await res.json();
return Response.json({
coin,
price: data[coin]?.usd,
timestamp: new Date().toISOString()
});
}# Deploy to Vercel
vercel --prod
# Add to plugin index (submit PR or use Plugin Store)| Guide | Description |
|---|---|
| 📖 Plugin Development Guide | Complete development walkthrough |
| 📋 Plugin Manifest Reference | Full manifest.json specification |
| 🎨 Plugin Types Guide | Default, Markdown, Standalone explained |
| 🔌 SDK API Reference | Client SDK documentation |
| 🌐 OpenAPI Integration | Using OpenAPI specs |
| 💬 Communication Guide | Plugin ↔ Host messaging |
| 🎭 Artifacts Guide | Rich UI components |
| ⚡ Complete Guide | Everything in one doc |
| Plugin | Description | Type | API |
|---|---|---|---|
| 🪙 CoinGecko Crypto | Prices, trends, market data for 1M+ tokens | OpenAPI | Free |
| 🦙 DeFiLlama Analytics | TVL, yields, stablecoins, protocol metrics | Default | Free |
| Plugin | Description | Status |
|---|---|---|
| 📊 DexScreener | DEX pairs, volume, liquidity | Planned |
| 💼 Portfolio Tracker | Multi-chain wallet aggregation | Planned |
| ⛓️ Chain Explorer | Transaction lookup, gas prices | Planned |
- Bun 1.0+ (recommended) or Node.js 18+
- Git
# Clone
git clone https://github.com/nirholas/plugin.delivery.git
cd plugins
# Install
bun install
# Dev server
bun dev| Command | Description |
|---|---|
bun dev |
Start local dev server |
bun run format |
Generate i18n translations (requires OpenAI API key) |
bun run build |
Build plugin index |
bun test |
Run tests |
bun lint |
Lint code |
⚠️ CRITICAL: You MUST create both files or the build will fail:
src/[plugin-name].json- Plugin definitionlocales/[plugin-name].en-US.json- Locale file (REQUIRED)
- Create plugin definition in
src/[plugin-name].json:
{
"author": "Your Name",
"createdAt": "2025-12-29",
"homepage": "https://example.com",
"identifier": "my-plugin",
"manifest": "https://plugin.delivery/my-plugin/manifest.json",
"meta": {
"avatar": "🔌",
"description": "What your plugin does",
"tags": ["tag1", "tag2"],
"title": "My Plugin",
"category": "stocks-finance"
},
"schemaVersion": 1
}- Create locale file in
locales/[plugin-name].en-US.json(REQUIRED):
{
"meta": {
"title": "My Plugin",
"description": "What your plugin does",
"tags": ["tag1", "tag2"]
}
}- Create manifest in
public/[plugin-name]/manifest.json:
{
"$schema": "https://plugin.delivery/schema.json",
"identifier": "my-plugin",
"api": [
{
"url": "https://plugin.delivery/api/my-plugin/endpoint",
"name": "myFunction",
"description": "What this function does",
"parameters": {
"type": "object",
"properties": {
"param": { "type": "string", "description": "Parameter description" }
},
"required": ["param"]
}
}
],
"meta": {
"avatar": "🔌",
"title": "My Plugin",
"description": "What your plugin does"
},
"version": "1"
}-
Create API endpoints in
api/[plugin-name]/[endpoint].ts -
⚠️ REQUIRED: Create locale filelocales/[plugin-name].en-US.json:
{
"meta": {
"title": "Your Plugin Title",
"description": "Your plugin description",
"tags": ["your", "tags"]
}
}BUILD WILL FAIL without this file. Copy
title,description, andtagsfrom your plugin'smetaobject.
- Run format (generates i18n translations for 18 languages):
# Set OpenAI API key (required for i18n generation)
export OPENAI_API_KEY=sk-your-key-here
# Generate translations (creates all locale files from en-US)
bun run format- Build the plugin index:
bun run build- Commit and push:
git add src/[plugin-name].json locales/[plugin-name].*.json
git commit -m "feat: add [plugin-name] plugin"
git push
⚠️ Important: Always runbun run formatbeforebun run buildwhen adding new plugins. The format command uses OpenAI to generate translations for all 18 supported languages.
plugins/
├── packages/
│ ├── sdk/ # @sperax/plugin-sdk
│ └── gateway/ # @sperax/chat-plugins-gateway
├── templates/ # Starter templates
│ ├── basic/
│ ├── default/
│ ├── markdown/
│ ├── openapi/
│ ├── settings/
│ └── standalone/
├── public/ # Static files (auto-generated)
│ ├── index.json # Plugin registry
│ └── openai/ # OpenAPI manifests
├── src/ # Plugin definitions
├── locales/ # i18n translations
├── docs/ # Documentation
└── api/ # Serverless functions
Both packages live in this repository and are not published to the npm registry yet.
| Package | Description | Source |
|---|---|---|
@sperax/plugin-sdk |
Plugin SDK for building SperaxOS plugins | packages/sdk |
@sperax/chat-plugins-gateway |
Gateway service for routing plugin calls | packages/gateway |
import {
pluginManifestSchema,
createPluginResponse,
PluginError
} from '@sperax/plugin-sdk';
// Client-side (in standalone UI)
import { speraxOS } from '@sperax/plugin-sdk/client';The Plugin Gateway securely routes function calls from SperaxOS to plugin APIs:
SperaxOS → Gateway → Plugin API
│
├── Auth injection
├── Rate limiting
├── Request logging
└── Response transform
# Clone gateway
cd packages/gateway
# Deploy
vercel --prod
# Set in SperaxOS
PLUGINS_GATEWAY_URL=https://your-gateway.vercel.appWe welcome contributions! See CONTRIBUTING.md.
- Option A: Open a Plugin Submission issue
- Option B: Submit a PR adding your plugin to
src/
- ✅ Valid manifest with working endpoints
- ✅ Tested in SperaxOS
- ✅ No API key required (or documented)
- ✅ en-US locale at minimum
| Resource | URL |
|---|---|
| 🌐 Plugin Index | public/index.json in this repository (the plugin.delivery host is offline while hosting is migrated) |
| 📦 SDK | packages/sdk (workspace package, not yet published to npm) |
| 🐙 GitHub | github.com/nirholas/plugins |
| 🐦 Twitter/X | @nichxbt |
All rights reserved. See LICENSE.
Plugin Delivery is deployed and accessible over HTTP via MCP Streamable HTTP transport — no local installation required.
Endpoint:
https://modelcontextprotocol.name/mcp/plugin-delivery
Add to your MCP client configuration (Claude Desktop, Cursor, SperaxOS, etc.):
{
"mcpServers": {
"plugin-delivery": {
"type": "http",
"url": "https://modelcontextprotocol.name/mcp/plugin-delivery"
}
}
}| Tool | Description |
|---|---|
search_plugins |
Search AI plugins |
get_plugin_info |
Platform info |
Search AI plugins:
curl -X POST https://modelcontextprotocol.name/mcp/plugin-delivery \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_plugins","arguments":{"query":"weather"}}}'Platform info:
curl -X POST https://modelcontextprotocol.name/mcp/plugin-delivery \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_plugin_info","arguments":{}}}'curl -X POST https://modelcontextprotocol.name/mcp/plugin-delivery \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'- SperaxOS - source for the MCP marketplace. The hosted marketplace is offline while hosting is being migrated.
- All 27 MCP servers — See the full catalog at modelcontextprotocol.name
Powered by modelcontextprotocol.name — the open MCP HTTP gateway
If plugin.delivery saves you time, star it on GitHub. Stars are how other developers and AI agents find the repositories worth trusting, and they cost you one click.
Know someone who would use it? Post on X · Share on Bluesky · Share on LinkedIn · Submit to Hacker News · Share on Reddit
Coding agents and LLM tooling can read this repo directly: AGENTS.md, llms.txt, llms-full.txt. Point an agent at https://github.com/nirholas/plugin.delivery and it has the context it needs.
- All repositories by nirholas: the full catalog, grouped by topic
- three.ws: the platform for 3D AI agents with Solana wallets, a skill marketplace and x402 payments
- Questions or ideas: open an issue or start a discussion