{"_id":"@buremba/1mcp-ai-sdk","name":"@buremba/1mcp-ai-sdk","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@buremba/1mcp-ai-sdk","version":"0.1.0","description":"Convert AI SDK tools to 1mcp gateway tools - reduce context bloat","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist"},"keywords":["ai-sdk","vercel","mcp","1mcp","tool-converter","context-reduction"],"author":"","license":"MIT","dependencies":{"ai":"^4.0.0","fflate":"^0.8.2","zod":"^3.23.8","1mcp":"workspace:*","@buremba/1mcp-shared":"workspace:*"},"peerDependencies":{"react":"^18.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"devDependencies":{"@types/node":"^22.0.0","@types/react":"^18.0.0","typescript":"^5.6.3"},"gitHead":"cf28e4802ee791ec0e87fb318a0a17f3cb654060","_id":"@buremba/1mcp-ai-sdk@0.1.0","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-7mGPrNs4Kgkc5R3rk0BjknxCUEa/gN+bgW0y7LYR/YfBgVGOzs9FXw1uYm9NaIKNZ19w1jCzwHICyEueZHDIFQ==","shasum":"24bba5aa465f2305e2d255c285cc03cf0990a15d","tarball":"https://registry.npmjs.org/@buremba/1mcp-ai-sdk/-/1mcp-ai-sdk-0.1.0.tgz","fileCount":23,"unpackedSize":52262,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGWYLDFvR88LuX0J2LEjqN5kpVjXnm8ZAPt4zcIjGpSQIhALhU66bMvIZO0Tyb3k0q/8v0vnVv7xLKoNbdvrG7QdlW"}]},"_npmUser":{"name":"buremba","email":"emrekabakci@gmail.com"},"directories":{},"maintainers":[{"name":"buremba","email":"emrekabakci@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/1mcp-ai-sdk_0.1.0_1763849056759_0.16020181564718383"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-22T22:04:16.687Z","0.1.0":"2025-11-22T22:04:16.946Z","modified":"2025-11-22T22:04:17.280Z"},"maintainers":[{"name":"buremba","email":"emrekabakci@gmail.com"}],"description":"Convert AI SDK tools to 1mcp gateway tools - reduce context bloat","keywords":["ai-sdk","vercel","mcp","1mcp","tool-converter","context-reduction"],"license":"MIT","readme":"# @1mcp/ai-sdk\n\nConvert AI SDK tools to 1mcp gateway tools - **reduce context bloat by 87%**.\n\n## Why?\n\n**Problem:** 50 tools = 15,000 tokens in every LLM call\n**Solution:** 50 tools → 5 gateway tools = 2,000 tokens\n\nYour tools are loaded on-demand from files, not sent in every request.\n\n## Installation\n\n```bash\nnpm install @1mcp/ai-sdk\n# or\npnpm add @1mcp/ai-sdk\n```\n\n## Quick Start\n\n### Backend (API Route)\n\n```typescript\n// app/api/chat/route.ts\nimport { streamText } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { convertTo1McpTools } from '@1mcp/ai-sdk';\nimport * as myTools from '@/tools'; // Your 50 AI SDK tools\n\n// Convert tools once (can be singleton)\nconst { client, serverUrl } = await convertTo1McpTools(myTools, {\n  policy: {\n    limits: { timeoutMs: 5000 }\n  }\n});\n\nexport async function POST(req: Request) {\n  const { messages } = await req.json();\n  const tools = await client.tools(); // Returns 5 gateway tools!\n\n  const result = streamText({\n    model: openai('gpt-4'),\n    messages,\n    tools, // LLM sees 5 tools, not 50!\n  });\n\n  return result.toDataStreamResponse();\n}\n```\n\n### Frontend (React Component)\n\n```tsx\n// app/page.tsx\n'use client'\nimport { useChat } from 'ai/react';\nimport { RelayProvider } from '@1mcp/ai-sdk/react';\n\nexport default function ChatPage() {\n  const { messages, input, handleSubmit, handleInputChange } = useChat();\n\n  return (\n    <RelayProvider serverUrl=\"http://localhost:7888\">\n      <form onSubmit={handleSubmit}>\n        {messages.map(m => (\n          <div key={m.id}>{m.content}</div>\n        ))}\n        <input value={input} onChange={handleInputChange} />\n      </form>\n    </RelayProvider>\n  );\n}\n```\n\n## How It Works\n\n```\n┌─────────────────────────┐\n│ Your Next.js App        │\n│  - 50 tools defined     │\n│  - 5 tools sent to LLM  │\n└─────────────────────────┘\n         ↓\n┌─────────────────────────┐\n│ Embedded relay-mcp      │\n│  - Builds capsules      │\n│  - Manages execution    │\n└─────────────────────────┘\n         ↓\n┌─────────────────────────┐\n│ Browser (WASM sandbox)  │\n│  - Executes in QuickJS  │\n│  - Isolated & secure    │\n└─────────────────────────┘\n```\n\n## API\n\n### `convertTo1McpTools(tools, options?)`\n\nConvert AI SDK tools to gateway tools using relay-mcp.\n\n**Parameters:**\n- `tools`: Record of your AI SDK tools\n- `options`: Optional configuration\n\n**Options:**\n```typescript\n{\n  // External relay server URL (production)\n  relayUrl?: string;\n\n  // Port for embedded server (dev)\n  port?: number;\n\n  // Security policies\n  policy?: {\n    network?: {\n      allowedDomains?: string[];\n      maxBodyBytes?: number;\n    };\n    filesystem?: {\n      readonly?: string[];\n      writable?: string[];\n    };\n    limits?: {\n      timeoutMs?: number;\n      memMb?: number;\n    };\n  };\n\n  // Upstream MCP servers\n  mcps?: Array<{\n    name: string;\n    endpoint?: string;\n    transport: 'http' | 'stdio';\n  }>;\n}\n```\n\n**Returns:**\n```typescript\n{\n  client: MCPClient;      // Use with AI SDK\n  serverUrl: string;      // For browser connection\n  cleanup: () => Promise<void>;\n}\n```\n\n### `<RelayProvider>`\n\nReact component that connects browser to relay-mcp for WASM execution.\n\n**Props:**\n```typescript\n{\n  serverUrl?: string;     // Default: http://localhost:7888\n  enableLogs?: boolean;   // Default: true\n  children: ReactNode;\n}\n```\n\n## Deployment\n\n### Development (localhost)\n\n```typescript\n// Embedded mode - starts relay-mcp automatically\nconst { client } = await convertTo1McpTools(tools);\n```\n\n✅ Works out of the box\n✅ Browser execution via localhost:7888\n✅ Full WASM sandbox\n\n### Production (Vercel/Cloudflare)\n\n```typescript\n// External relay mode\nconst { client } = await convertTo1McpTools(tools, {\n  relayUrl: process.env.RELAY_MCP_URL\n});\n```\n\n**.env.production:**\n```bash\nRELAY_MCP_URL=https://relay.yourdomain.com/mcp\nNEXT_PUBLIC_RELAY_MCP_URL=https://relay.yourdomain.com\n```\n\n✅ Works on serverless platforms\n✅ Self-host or use hosted relay service\n✅ Scales independently\n\n### Self-Hosting Relay Server\n\n```bash\n# Railway/Fly.io/DigitalOcean\nnpx 1mcp serve --bind 0.0.0.0 --port 7888\n```\n\n## Examples\n\nSee [examples/nextjs-ai-sdk](../../examples/nextjs-ai-sdk) for a complete demo.\n\n## Benefits\n\n| Metric | Before | After | Savings |\n|--------|--------|-------|---------|\n| Tools in context | 50 | 5 | 90% |\n| Tokens per request | 15,000 | 2,000 | 87% |\n| LLM costs | High | Low | 87% |\n\n## How Tools Are Executed\n\n1. LLM calls `run_js` tool with code\n2. relay-mcp builds secure capsule\n3. Sends to browser (if attached) or Node fallback\n4. Executes in WASM sandbox (QuickJS/Pyodide)\n5. Results stream back to LLM\n\n**Your tools run on-demand**, not in every request!\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-f58acc2e33c8ff290bde038b32b68650"}